Программирование роботов, осень 2014: Вводная лекция
DESCRIPTION
Обзор курса. Базовые команды управления роботом. Виртуальные роботы.TRANSCRIPT
![Page 1: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/1.jpg)
Основы робототехники
Сергей Александрович ФилипповПрезидентский Физико-математический лицей № 239
![Page 2: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/2.jpg)
План занятия
Программирование и управление Команды высокого и низкого уровня Среда Ceebot Высокоуровневое управление
Базовые команды перемещения Операции с объектами Поиск выход из лабиринта
Управление роботом на низком уровне Регуляторы Ралли по коридору Полеты
![Page 3: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/3.jpg)
Что такое робот?
Устройство Управления (контроллер)
ДатчикиИсполнительное
устройство(моторы)
Окружающая среда(по отношению
к «телу» робота)
![Page 4: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/4.jpg)
Программирование и управление Программирование
Алгоритмические структуры Жесткое принятие решений «Таймерные модели»
Управление Циклическое воздействие Высокая частота Корректировка по отклонению
![Page 5: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/5.jpg)
Команды низкого уровня
Команды действия Выполняются мгновенно Сразу передают управление следующей команде Их последствия ограничиваются только аналогичными
командами и концом программы Примеры: включить моторы
Команды ожидания Не выполняют никаких физических действий Останавливают следование программы до совершения
определенного события Передают управление следующей команде после
наступления ожидаемого события Примеры: ждать время, цикл «пока»
![Page 6: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/6.jpg)
Команды высокого уровня
Понятны начинающим Имеют встроенный алгоритм работы с
использованием датчиков робота Не предполагают циклического управления с
высокой частотой Примеры:
Проехать вперед 1 метр Повернуться на месте на 90°
move(a); // вперед a метровturn(b); // налево b градусов
![Page 7: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/7.jpg)
Среда программирования Ceebot http://ceebot.org http://ceebot.com Язык CBot, подобный C++ Трехмерная среда
исполнителей Операции с объектами Гонки, полеты и
воздушные бои Футбол роботов Управление на низком и
высоком уровне
![Page 8: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/8.jpg)
Использование РАДАРА Датчик высокого уровня Тип object Категории объектов: Titanium, Converter, … Объявляем переменную и находим объект
object ruda, home;ruda=radar(TitaniumOre);goto(ruda.position);grab();home=radar(Converter);goto(home.position);drop();
![Page 9: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/9.jpg)
Параметры команды RADAR Radar (
Категория объекта, Направление радара (в градусах), Угол обзора, Минимальное расстояние обзора, Максимальное расстояние обзора
)
![Page 10: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/10.jpg)
Применение РАДАРА
while(radar(TitaniumOre)!=null){ // Переместить руду в конвертер ... while(radar(Titanium,0,30)==null);
// Взять титановый куб из конвертера ...}
![Page 11: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/11.jpg)
Тип Point
Сложный тип из 3 значений типа float: x,y,z Обращение через точку Соответствует свойству объекта “position”point a;a=this.position; // позиция роботаgoto(ruda.position);grab();a.x=a.x+2; // смещение на 2 метраgoto(a);
![Page 12: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/12.jpg)
Обход лабиринта
ПОКА (не база){ ЕСЛИ (справа_свободно) { вправо(90); вперед(1); } ИНАЧЕ ЕСЛИ (спереди_свободно) вперед(1); ИНАЧЕ влево(90); }
while(radar(GoalArea,0,360,0,1)==null){ if(radar(Barrier,-90,1,0,5)==null) { turn(-90); move(5); } else if(radar(Barrier,0,1,0,5)==null) move(5); else turn(90);}
![Page 13: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/13.jpg)
Ралли по коридору
Следование по ориентирам (флаги, мины) Низкоуровневые команды
motor (mB, mC); // -1≤mB≤1, -1≤mC≤1 drive (v, u); // -1≤v≤1, -1≤u≤1
Ориентация по стене Релейный регулятор П-регулятор ПД-регулятор
Ориентация по двум стенам
![Page 14: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/14.jpg)
Ориентация по флагам
while(true){ object item=radar(BlueFlag,...); float d=direction(item.position); turn(d); float dist=distance(this.position, item.position); move(dist);}
![Page 15: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/15.jpg)
Низкоуровневое управление моторамиwhile(true){ object item=radar(BlueFlag,...); float d=direction(item.position); float v=1; //Скорость float u=d/180; //Управляющее воздействие drive(v, u); wait(0.01);}
![Page 16: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/16.jpg)
Движение вдоль стены на релеwhile(this.position.x<160){ object stena=radar(Barrier,60,60); float S1=distance(stena.position, this.position); if (S1>10) // Если до стены больше 10 м drive(1, 0.5); else drive(1, -0.5); wait(0.01);}
![Page 17: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/17.jpg)
Движение вдоль стены на П-регулятореwhile(this.position.x<160){ object stena=radar(Barrier,60,60); float S1=distance(stena.position, this.position); float k=0.1; //Усиливающий коэффициент float u=(S1-10)*k; //Управление float v=1-abs(u)*0.2; //Скорость drive(v, u); wait(0.01);}
![Page 18: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/18.jpg)
Движение вдоль стены на ПД-регуляторе с двумя датчиками
float eold=0, k1=0.1, k2=0.5, k3=0.2;while(this.position.x<175){ object stena=radar(Barrier,60,60); float S1=distance(stena.position, this.position); stena=radar(Barrier,-60,60); float S2=distance(stena.position, this.position); float e=S1-S2; //Отклонение (ошибка) float u=e*k1+(e-eold)*k2; //Управление eold=e; float v=1-abs(u)*k3; //Скорость drive(v, u); wait(0.01);}
![Page 19: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/19.jpg)
Защита от потери стены
float s1, s2;while(this.position.x<175){ object stena=radar(Barrier,60,60); if (stena==null) s1=20; else S1=distance(stena.position, this.position); stena=radar(Barrier,-60,60); if (stena==null) s2=20; else S2=distance(stena.position, this.position);...}
![Page 20: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/20.jpg)
Полеты
while(radar(AlienWasp)!=null){ object item=radar(AlienWasp); float alpha=direction(item.position); float dist=distance(item.position,this.position); float dz=item.position.z-this.position.z; jet(dz/5); drive((dist)/5,alpha/3);
if ((dist<5) and (abs(dz)<1) and (abs(alpha)<20)) fire(0.01); else wait(0.01);}
![Page 21: Программирование роботов, осень 2014: Вводная лекция](https://reader036.vdocuments.site/reader036/viewer/2022062313/557f01b1d8b42af44a8b4e60/html5/thumbnails/21.jpg)
Благодарю за внимание!
Сергей Александрович Филиппов Президентский Физико-математический лицей № 239
Санкт-Петербург[email protected]