Программирование роботов, осень 2014: Вводная лекция

21
Основы робототехники Сергей Александрович Филиппов Президентский Физико-математический лицей № 239

Upload: cs-center

Post on 15-Jun-2015

246 views

Category:

Documents


5 download

DESCRIPTION

Обзор курса. Базовые команды управления роботом. Виртуальные роботы.

TRANSCRIPT

Page 1: Программирование роботов, осень 2014: Вводная лекция

Основы робототехники

Сергей Александрович ФилипповПрезидентский Физико-математический лицей № 239

Page 2: Программирование роботов, осень 2014: Вводная лекция

План занятия

Программирование и управление Команды высокого и низкого уровня Среда Ceebot Высокоуровневое управление

Базовые команды перемещения Операции с объектами Поиск выход из лабиринта

Управление роботом на низком уровне Регуляторы Ралли по коридору Полеты

Page 3: Программирование роботов, осень 2014: Вводная лекция

Что такое робот?

Устройство Управления (контроллер)

ДатчикиИсполнительное

устройство(моторы)

Окружающая среда(по отношению

к «телу» робота)

Page 4: Программирование роботов, осень 2014: Вводная лекция

Программирование и управление Программирование

Алгоритмические структуры Жесткое принятие решений «Таймерные модели»

Управление Циклическое воздействие Высокая частота Корректировка по отклонению

Page 5: Программирование роботов, осень 2014: Вводная лекция

Команды низкого уровня

Команды действия Выполняются мгновенно Сразу передают управление следующей команде Их последствия ограничиваются только аналогичными

командами и концом программы Примеры: включить моторы

Команды ожидания Не выполняют никаких физических действий Останавливают следование программы до совершения

определенного события Передают управление следующей команде после

наступления ожидаемого события Примеры: ждать время, цикл «пока»

Page 6: Программирование роботов, осень 2014: Вводная лекция

Команды высокого уровня

Понятны начинающим Имеют встроенный алгоритм работы с

использованием датчиков робота Не предполагают циклического управления с

высокой частотой Примеры:

Проехать вперед 1 метр Повернуться на месте на 90°

move(a); // вперед a метровturn(b); // налево b градусов

Page 7: Программирование роботов, осень 2014: Вводная лекция

Среда программирования Ceebot http://ceebot.org http://ceebot.com Язык CBot, подобный C++ Трехмерная среда

исполнителей Операции с объектами Гонки, полеты и

воздушные бои Футбол роботов Управление на низком и

высоком уровне

Page 8: Программирование роботов, осень 2014: Вводная лекция

Использование РАДАРА Датчик высокого уровня Тип object Категории объектов: Titanium, Converter, … Объявляем переменную и находим объект

object ruda, home;ruda=radar(TitaniumOre);goto(ruda.position);grab();home=radar(Converter);goto(home.position);drop();

Page 9: Программирование роботов, осень 2014: Вводная лекция

Параметры команды RADAR Radar (

Категория объекта, Направление радара (в градусах), Угол обзора, Минимальное расстояние обзора, Максимальное расстояние обзора

)

Page 10: Программирование роботов, осень 2014: Вводная лекция

Применение РАДАРА

while(radar(TitaniumOre)!=null){ // Переместить руду в конвертер ... while(radar(Titanium,0,30)==null);

// Взять титановый куб из конвертера ...}

Page 11: Программирование роботов, осень 2014: Вводная лекция

Тип 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: Вводная лекция

Обход лабиринта

ПОКА (не база){ ЕСЛИ (справа_свободно) { вправо(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: Вводная лекция

Ралли по коридору

Следование по ориентирам (флаги, мины) Низкоуровневые команды

motor (mB, mC); // -1≤mB≤1, -1≤mC≤1 drive (v, u); // -1≤v≤1, -1≤u≤1

Ориентация по стене Релейный регулятор П-регулятор ПД-регулятор

Ориентация по двум стенам

Page 14: Программирование роботов, осень 2014: Вводная лекция

Ориентация по флагам

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: Вводная лекция

Низкоуровневое управление моторами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: Вводная лекция

Движение вдоль стены на реле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: Вводная лекция

Движение вдоль стены на П-регуляторе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: Вводная лекция

Движение вдоль стены на ПД-регуляторе с двумя датчиками

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: Вводная лекция

Защита от потери стены

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: Вводная лекция

Полеты

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: Вводная лекция

Благодарю за внимание!

Сергей Александрович Филиппов Президентский Физико-математический лицей № 239

Санкт-Петербург[email protected]