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

Post on 15-Jun-2015

246 Views

Category:

Documents

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

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

План занятия

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

)

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

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

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

Тип Point

Сложный тип из 3 значений типа float: x,y,z Обращение через точку Соответствует свойству объекта “position”point a;a=this.position; // позиция роботаgoto(ruda.position);grab();a.x=a.x+2; // смещение на 2 метраgoto(a);

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

ПОКА (не база){ ЕСЛИ (справа_свободно) { вправо(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);}

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

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

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

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

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

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

while(true){ object item=radar(BlueFlag,...); float d=direction(item.position); turn(d); float dist=distance(this.position, item.position); move(dist);}

Низкоуровневое управление моторамиwhile(true){ object item=radar(BlueFlag,...); float d=direction(item.position); float v=1; //Скорость float u=d/180; //Управляющее воздействие drive(v, u); wait(0.01);}

Движение вдоль стены на реле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);}

Движение вдоль стены на П-регуляторе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);}

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

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);}

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

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);...}

Полеты

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);}

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

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

Санкт-Петербургsafilippov@gmail.com

top related