Содержание
- 2. План занятий Введение в RobotC Вывод данных Графика Датчики Моторы Применение регуляторов Воспроизведение по памяти
- 3. Загрузка операционной системы 1. Тип контроллера Меню Robot -> Platform Type->Lego Mindstorms->EV3 2. Ядро Меню Robot
- 4. Простейшая программа task main() { displayTextLine(0, "Hello, world!"); wait1Msec(10000); } Меню File -> Save as... —
- 5. Загрузка и отладка программы F7 — компиляция и проверка F5 — загрузка программы Start — запуск
- 6. Форматированный вывод task main() { float a=5, b=4, c=1; int a=5, b=4; displayTextLine(0, "a=%d b=%d",a,b); displayTextLine(1,
- 7. Команды ожидания wait1Msec(1); sleep(1); wait1Msec(N); sleep(N); wait10Msec(N); while(УСЛОВИЕ); while(УСЛОВИЕ) sleep(1); Жди 1 миллисекунду (синонимы) Жди N
- 8. Управление моторами task main() { motor[motorB]=100; // полный вперед motor[motorC]=100; wait1Msec(2000); // по времени motor[motorB]=-50; //
- 9. Поворот с помощью гироскопического датчика task main() { int angle=SensorValue[Gyro]; // Запомнили текущее while (true) //
- 10. Управление скоростью task main() { for (int i=1; i { motor[motorB]=i; motor[motorC]=i; wait1Msec(10); } wait1Msec(1000); //
- 11. Параллельное управление скоростью int mB=0, mC=0, step=5; //Скорости моторов и шаг task motors() { while(true) {
- 12. Контроль управления скоростью Необходимо ограничение модуля скорости не более 100 На малых отклонениях необходимо повышение точности
- 13. Доступ к энкодерам без обнуления К энкодерам и моторам нельзя обращаться из разных задач Задаем глобальные
- 14. Доступ к энкодерам с обнулением В основной задаче для обнуления задаем enB_null=1 int mB=0, mC=0, step=25,
- 15. Подключение датчика Меню Robot -> Motors and Sensors Setup -> Sensors #pragma config(Sensor, S1, Rasst, sensorSONAR)
- 16. Путешествие по комнате #pragma config(Sensor, S1, Rasst, sensorEV3_Ultrasonic) task main() { while(true) { motor[motorB]=100; // полный
- 17. Вывод показаний датчиков на экран ... while(SensorValue[Rasst]>25) { displayBigTextLine(0, "%d", SensorValue[Rasst]); sleep(10); } ... while(nMotorEncoder[motorB]>-400) {
- 18. Пропорциональный регулятор: синхронизация моторов Пусть e2 и e3 – показания датчиков оборотов моторов B и C.
- 19. Синхронизация при путешествии по комнате Для синхронизации движения вперед необходимо перед циклом ожидания объекта обнулить энкодеры:
- 20. Параллельное управление моторами int v=50, k=2, u; task preg() // Объявление задачи { nMotorEncoder[motorB]=0; nMotorEncoder[motorC]=0; while(true){
- 21. Параллельное управление моторами int v=50, k=2, u, DELTA=0; task preg() // Объявление задачи { ... u=k*(e3-e2
- 22. Параллельное управление моторами int v=50, k=2, u, DELTA=0; task preg() // Объявление задачи { ... u=k*(e3-e2
- 23. Управление шагающим роботом int v=50, k=2, u, DELTA=0, i=1; task preg() // Объявление задачи { ...
- 24. Управление шагающим роботом с датчиком расстояния Робот двигается до препятствия На поворот выделяется время Для синхронизации
- 25. Шагающий робот на линии Калибровка на старте Определение динамической ошибки как коэффициента периода поворота task main()
- 26. Графика на экране NXT: 100х64 пикселя 8 текстовых строк (0..7) EV3: 178х128 пикселей 16 текстовых строк
- 27. Отображение громкости звука на экране NXT #pragma config(Sensor, S1, Zvuk, sensorSoundDBA) task main() { int d=0,
- 28. Подключение датчика Меню Robot -> Motors and Sensors Setup -> Sensors #pragma config(Sensor, S1, , sensorLightActive)
- 29. Подключение датчика EV3 Меню Robot -> Motors and Sensors Setup -> Sensors #pragma config (Sensor, S1,
- 30. График показаний датчика Составьте алгоритм вывода на экран графика показаний датчика света. Частота 10 замеров в
- 31. Отображение показаний датчика в виде изменяющегося эллипса #pragma config(Sensor, S1, Light, sensorEV3_Color) task main() { int
- 32. Релейный регулятор: движение вдоль границы черного и белого с помощью датчика освещенности int grey=15; // Приближенное
- 33. Пропорциональный регулятор В задачах автоматического регулирования управляющее воздействие u(t) обычно является функцией динамической ошибки – отклонения
- 34. Пропорциональный регулятор: движение по линии Также как и в релейном регуляторе, необходимо определить среднее значение grey
- 35. Пропорциональный регулятор: вычисление коэффициента усиления Базовая скорость робота v Максимальная скорость vmax Минимальная vmin Минимальное значение
- 36. Параллельные задачи task line() // Объявление задачи { while(true) { // Здесь должен быть регулятор для
- 37. Параллельные задачи - 2 task line() // Объявление задачи { while(true) { // Здесь должен быть
- 38. Параллельные задачи - 3 int svalue=0; // Глобальная переменная task line() { while(true) { svalue=SensorValue[S1]; //
- 39. Параллельные задачи – 4 – массивы int mas[178]; // Массив в RobotC объявляется глобально task line()
- 40. Параллельные задачи – 5 – массивы int mas[178]; // Массив task line() ... task main() //
- 41. Параллельное управление моторами int v=50, delta=0; // Глобальные переменные task preg() // Параллельная задача { float
- 42. task line() { while(true) { // П-регулятор //движения по линии } } task preg() { while(true)
- 43. int alpha=0, beta=0; float kp=0.5; task preg() { while(true) { e=alpha-nMotorEncoder[motorB]; motor[motorB]=e*kp; e=beta-nMotorEncoder[motorC]; motor[motorC]=e*kp; sleep(1); }
- 44. task line() { while(true) { // П-регулятор //движения по линии } } task preg() { while(true)
- 45. for(int j=0;j { // По энкодерам int eB = alpha - nMotorEncoder[motorB]; int eC = beta
- 46. while(i { int eB=nMotorEncoder[motorB]; int eC=nMotorEncoder[motorC]; if ((e1[i] (e2[i] i++; // Уровень отставания энкодеров erm=((e1[i]-eB)-(e2[i]-eC))*km; if
- 48. Скачать презентацию