Основы робототехники Сергей Александрович Филиппов Президентский Физико-математический лицей 239
План занятия Программирование и управление Команды высокого и низкого уровня Среда Ceebot Высокоуровневое управление Базовые команды перемещения Операции с объектами Поиск выход из лабиринта Управление роботом на низком уровне Регуляторы Ралли по коридору Полеты
Что такое робот? Устройство Управления (контроллер) Датчики Исполнительное устройство (моторы) Окружающая среда (по отношению к «телу» робота)
Программирование и управление Программирование Алгоритмические структуры Жесткое принятие решений «Таймерные модели» Управление Циклическое воздействие Высокая частота Корректировка по отклонению
Команды низкого уровня Команды действия Выполняются мгновенно Сразу передают управление следующей команде Их последствия ограничиваются только аналогичными командами и концом программы Примеры: включить моторы Команды ожидания Не выполняют никаких физических действий Останавливают следование программы до совершения определенного события Передают управление следующей команде после наступления ожидаемого события Примеры: ждать время, цикл «пока»
Команды высокого уровня Понятны начинающим Имеют встроенный алгоритм работы с использованием датчиков робота Не предполагают циклического управления с высокой частотой Примеры: Проехать вперед 1 метр Повернуться на месте на 90° move(a); // вперед a метров turn(b); // налево b градусов
Среда программирования Ceebot Язык 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); // -1mB1, -1mC1 drive (v, u); // -1v1, -1u1 Ориентация по стене Релейный регулятор П-регулятор ПД-регулятор Ориентация по двум стенам
Ориентация по флагам 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.x10) // Если до стены больше 10 м drive(1, 0.5); else drive(1, -0.5); wait(0.01); }
Движение вдоль стены на П-регуляторе while(this.position.x
Движение вдоль стены на ПД- регуляторе с двумя датчиками float eold=0, k1=0.1, k2=0.5, k3=0.2; while(this.position.x
Защита от потери стены float s1, s2; while(this.position.x
Полеты 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
Благодарю за внимание! Сергей Александрович Филиппов Президентский Физико-математический лицей 239 Санкт-Петербург