Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемЗинаида Пегова
1 Программирование в среде RobotC Сергей Александрович Филиппов Президентский Физико-математический лицей 239
2 План занятий Введение в RobotC Вывод данных Графика Датчики Моторы Применение регуляторов Воспроизведение по памяти
3 Загрузка операционной системы Меню Robot -> Download Firmware-> - >Standart File -> F/W Download Выполнять при включенном NXT, в процессе загрузки не трогать (до 1 мин)
4 Простейшая программа task main() { nxtDisplayTextLine(0, "Hello, world!"); wait1Msec(10000); } Меню File -> Save as... сохранение F7 проверка F5 загрузка на NXT Save as... сохранение F7 проверка F5 загрузка на NXT">
5 Загрузка и отладка программы F7 компиляция и проверка F5 загрузка программы Start запуск программы на NXT Step пошаговое выполнение
6 Форматированный вывод task main() { float a=5, b=4, c=1; int a=5, b=4; nxtDisplayTextLine(0, "a=%d b=%d",a,b); nxtDisplayTextLine(1, "%d+%d=%d",a,b,a+b); nxtDisplayTextLine(4, "%f/%f=%4.2f",a,b,a/b); for(int i=1;i
7 Управление моторами task main() { motor[motorB]=100; // полный вперед motor[motorC]=100; wait1Msec(2000); // по времени motor[motorB]=-50; // поворот налево motor[motorC]=50; nMotorEncoder[motorB]=0; // по инкодеру while(nMotorEncoder[motorB]>-239); motor[motorB]=0; // остановка motor[motorC]=0; }
8 Управление скоростью task main() { for (int i=0; i
9 Подключение датчика Меню Robot -> Motors and Sensors Setup -> Sensors #pragma config(Sensor, S1, Rasst, sensorSONAR) while(SensorValue[S1]>25); // или while(SensorValue[Rasst]>25);
10 Путешествие по комнате #pragma config(Sensor, S1, Rasst, sensorSONAR) task main() { while(true) { motor[motorB]=100; // полный вперед motor[motorC]=100; while(SensorValue[Rasst]>25) wait1Msec(1); motor[motorB]=-50; // отъезд с разворотом motor[motorC]=-10; nMotorEncoder[motorB]=0; // по инкодеру while(nMotorEncoder[motorB]>-400) wait1Msec(1); }
11 Пропорциональный регулятор: синхронизация моторов Пусть e2 и e3 – показания датчиков оборотов моторов B и C. Их надо будет обнулить перед началом движения. Регулятор определяется следующим образом: int v=50, k=2, u; nMotorEncoder[motorB]=0; nMotorEncoder[motorC]=0; while(true) { int e2=nMotorEncoder[motorB]; int e3=nMotorEncoder[motorC]; u=k*(e3-e2); motor[motorB]=v+u; motor[motorC]=v-u; wait1Msec(1); }
12 Параллельное управление моторами int v=50, k=2, u; task preg() // Объявление задачи { nMotorEncoder[motorB]=0; nMotorEncoder[motorC]=0; while(true){ int e2=nMotorEncoder[motorB]; int e3=nMotorEncoder[motorC]; u=k*(e3-e2); motor[motorB]=v+u; motor[motorC]=v-u; wait1Msec(1); } task main() // Основная задача { StartTask(preg); // Запуск параллельной задачи wait1Msec(10000); // Здесь могут быть полезные действия StopTask(preg); // Остановка параллельной задачи }
13 Параллельное управление моторами int v=50, k=2, u, DELTA=0; task preg() // Объявление задачи {... u=k*(e3-e2 + DELTA);... } task main() // Основная задача { StartTask(preg); wait1Msec(2000); DELTA=DELTA+450; // Изменение разности инкодеров wait1Msec(2000); DELTA=DELTA+450; StopTask(preg); }
14 Параллельное управление моторами int v=50, k=2, u, DELTA=0; task preg() // Объявление задачи {... u=k*(e3-e2 + DELTA);... } task main() // Основная задача { StartTask(preg); while(true) { wait1Msec(2000); DELTA=DELTA+450; // Изменение разности инкодеров }
15 Отображение громкости звука на экране #pragma config(Sensor, S1, Zvuk, sensorSoundDBA) task main() { int d=0, x,y; while(true) { d=SensorValue[Zvuk]; x=50-d/2; y=32+d/2; nxtDrawCircle(x,y,d); wait1Msec(40); nxtEraseRect(x,y,x+d+1,y-d-1); } Составьте аналогичный алгоритм с использованием функций nxtFillEllipse и nxtEraseEllipse
16 Подключение датчика Меню Robot -> Motors and Sensors Setup -> Sensors #pragma config(Sensor, S1,, sensorLightActive)
17 График показаний датчика Составьте алгоритм вывода на экран графика показаний датчика света. Частота 10 замеров в секунду Длительность 10 секунд (100 замеров) Масштабирование 64/100 Используйте цикл Вывод точки Вывод линии nxtDrawLine(x1,y1,x2,y2); for(int x=0; x
18 Релейный регулятор: движение вдоль границы черного и белого с помощью датчика освещенности int grey=45; // Приближенное значение серого task main() { while (true) // Бесконечное повторение { if (SensorValue[S1]>grey) // Проверка { Motor[MotorB]=100; // Направо по дуге Motor[MotorC]=0; } else { Motor[MotorB]=0; // Налево по дуге Motor[MotorC]=100; } wait1Msec(1); }
19 Пропорциональный регулятор В задачах автоматического регулирования управляющее воздействие u(t) обычно является функцией динамической ошибки – отклонения e(t) регулируемой величины x(t) от ее заданного значения x 0 (t): e(t)=x 0 (t)-x(t) Пропорциональный регулятор – это устройство, оказывающее управляющее воздействие на объект пропорционально его отклонению от заданного состояния. u 0 (t)=ke Здесь k – это коэффициент усиления регулятора.
20 Пропорциональный регулятор: движение по линии Также как и в релейном регуляторе, необходимо определить среднее значение grey между черным и белым. Это будет то состояние датчика освещенности s1, к которому должна стремиться система. while(true) { u=k*(SensorValue[s1]-grey); motor[MotorB]=50+u; motor[MotorC]=50-u; wait1Msec(1); }
21 Параллельные задачи task line() // Объявление задачи { while(true) { // Здесь должен быть регулятор для движения по линии } task main() // Основная задача { StartTask(line); // Запуск параллельной задачи wait1Msec(10000); // Здесь могут быть полезные действия StopTask(line); // Остановка параллельной задачи }
22 Параллельные задачи - 2 task line() // Объявление задачи { while(true) { // Здесь должен быть регулятор для движения по линии } task main() // Основная задача { StartTask(line); // Запуск параллельной задачи for(int x=0; x
23 Параллельное управление моторами int v=50, delta=0; // Глобальные переменные task vcontrol() // Параллельная задача { for (int i=0;i
24 task line() { while(flag) { // П-регулятор //движения по линии } task preg() { while(flag2) { // П-регулятор // положения моторов } task main() { // Обнулить инкодеры StartTask(line); for(int i=0;i
25 for(int j=0;j100) mb=100; // Ограничение скорости if (mc>100) mc=100; motor[motorB]=mb; motor[motorC]=mc; wait1Msec(1); } Совмещенный регулятор воспроизведения
26 while(i100) mc=100; motor[motorB]=mb; motor[motorC]=mc; wait1Msec(1); } Воспроизведение на предельной скорости
27 Благодарю за внимание! Сергей Александрович Филиппов Физико-Математический лицей 239 Санкт-Петербург
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.