/
Text
САНКТПЕТЕРБУРГ • МОСКВА • КРАСНОДАР
Д. Э. ДОБРИБОРЩ,
К. А. АРТЕМОВ,
С. А. ЧЕПИНСКИЙ,
А. А. БОБЦОВ
ОСНОВЫ
РОБОТОТЕХНИКИ
НА LEGO®
MINDSTORMS® EV3
УЧЕБНОЕ ПОСОБИЕ
Издание шестое, стереотипное
САНКТПЕТЕРБУРГ • МОСКВА • КРАСНОДАР
2026
УДК 004.896
ББК 32.816я723
О 75
Основы робототехники на Lego® Mindstorms® EV3 :
учебное пособие для СПО / Д. Э. Добриборщ, К. А. Артемов,
С. А. Чепинский, А. А. Бобцов. — 6е изд., стер. — Санкт
Петербург : Лань, 2026. — 108 с. — Текст : непосредствен
ный.
ISBN 9785507551361
В книге рассматриваются вопросы, связанные с обучением робото
технике в школах, на примере использования конструктора Lego®
Mindstorms® EV3 в задачах подготовки школьников к таким соревнованиям,
как механическое сумо, кегельринг, лабиринт и следование по линии.
В первой главе читатель знакомится с конструктором и со средами
программирования роботов. Вторая глава посвящена основам конструи
рования роботов. Третья глава раскрывает вопросы, связанные с управ
лением роботами. В четвертой главе рассматриваются соревнования
кегельринг. Пятая глава знакомит читателя с алгоритмами движения робота
в лабиринте. В шестой главе на примере роботабарабанщика освещаются
основные положения теории автоматического управления. В седьмой главе
строится и программируется робот для движения вдоль черной линии,
используя различные регуляторы. Восьмая глава посвящена роботам,
способным ориентироваться в помещениях. В девятой главе решаются
комплексные задачи, которые требуют всего опыта, полученного после
чтения этой книги.
Соответствует современным требованиям Федерального государствен
ного образовательного стандарта среднего профессионального образования
и профессиональным квалификационным требованиям.
Учебное пособие рекомендуется студентам колледжей, обучающимся
по направлениям «Мехатроника и мобильная робототехника» (по отраслям),
«Техническая эксплуатация и обслуживание роботизированного произ
водства».
УДК 004.896
ББК 32.816я723
Рецензент
М. А. КУРОЧКИН — доцент СанктПетербургского политехнического
университета Петра Великого, научный руководитель региональных
предметных олимпиад по робототехнике среди студентов вузов Санкт
Петербурга.
Издается в авторской редакции
Дизайн обложки
К. А. АРТЕМОВ
Компьютерная верстка
Д. Э. ДОБРИБОРЩ
© Издательство «Лань», 2026
© Коллектив авторов, 2025
© Издательство «Лань»,
художественное оформление, 2026
Оглавление
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1. Конструктор LEGO Mindstorms EV3
1.1. Электроника . . . . . . . . . . .
1.2. Детали для конструирования .
1.3. Программирование . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
14
14
16
17
2. Конструирование . . . . . . . . . . . . . . . .
2.1. Первая игра: Фантастическое животное
2.2. Высокая башня . . . . . . . . . . . . . .
2.3. Механический манипулятор . . . . . . .
2.4. Механическая передача . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
22
22
23
24
26
3. Основы управления роботом . . . . . .
3.1. Механизм, автомат, робот . . . .
3.2. Знакомство с датчиками EV3 . .
3.3. Встроенная оболочка EV3 . . . .
3.4. Управление мобильным роботом
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
35
35
37
44
46
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4. Кегельринг . . . . . . . . . . . . . . . . . . . .
4.1. Спонтанные движения в круге . . . . .
4.2. Движение по звезде. Точные повороты.
Возврат в центр . . . . . . . . . . . . . .
4.3. Поиск кеглей с помощью датчика . . . .
4.4. Движение по спирали . . . . . . . . . . .
5. Движение в помещении. Поиск выхода из
5.1. Базовые действия по энкодерам . . .
5.2. Известный лабиринт . . . . . . . . .
5.3. Правило правой руки . . . . . . . . .
. . . . . . . . . 49
. . . . . . . . . 50
. . . . . . . . . 53
. . . . . . . . . 55
. . . . . . . . . 58
лабиринта
. . . . . . .
. . . . . . .
. . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
62
64
64
67
Введение
Новое поколение робототехнических систем характеризуется повышенной мобильностью, активным взаимодействием с внешней
средой, расширенными способностями приспособления к сложному,
неопределенному и подвижному окружению. Высокие качественные характеристики и подвижность роботов используются для выполнения целого ряда нетривиальных операций, таких как обход
препятствий, проникновение в труднодоступные зоны, выбор удачного подхода к внешним объектам и прецизионное движение по
сложным криволинейным трассам с сохранением требуемой ориентации в пространстве и параметров движения. Мобильная активность роботов, приспосабливаемость к внешней среде и сравнительная автономность делает их использование весьма привлекательным для самых разнообразных сфер человеческой деятельности, включая автоматизированное производство, космос и подводные исследования, оборону, медицину, домашнее хозяйство и т. д.
Робота можно направить выполнять поставленные задачи в место
или среду, где человеку по каким-либо причинам будет опасно находиться.
Билл Гейтс как-то сказал: «Роботы — это Интернет XXI века».
Очевидно, что ситуация с развитием робототехники в наши дни
очень похожа на развитие информатики 20–30 лет назад. В то время информатика настолько стремительно вошла в нашу жизнь, что,
например, учителя в российских школах не знали, как ее правильно
преподавать. А сейчас возрастающий интерес проявляется к робототехнике.
Роботы активно входят в нашу жизнь. Школьники и студенты
хотят заниматься робототехникой: конструировать роботов, управлять ими, участвовать в соревнованиях и творческих проектах [1].
Но как правильно учить робототехнике, сейчас, как и много лет
назад информатике, мало кто знает. И более того, большинство
преподавателей школ не умеют и не знают, как преподавать робо-
8
Введение
тотехнику. Также ситуация осложняется необходимостью наличия
элементной базы — роботов.
В данной книге представляется целесообразным осветить проблемы, связанные с обучением робототехнике в школах, и рассказать авторское видение того, как можно эти проблемы решить.
Прежде всего, о нас. Мы те, кто знает, как обучать робототехнике! Возможно, это заявление покажется вам самоуверенным, но
если вы дочитаете данную книгу до конца, то, вероятно, ваше мнение изменится.
Авторы книги представляют Университет ИТМО и одно из его
структурных подразделений — кафедру систем управления и информатики (СУиИ): http://csi.ifmo.ru/. Коллектив кафедры —
один из ведущих в России по управлению техническими системами.
В рамках выполнения 220-го Постановления Правительства Российской Федерации, на кафедре создана международная научная
лаборатория (МНЛ) «Лаборатория нелинейных и адаптивных систем». Один из соруководителей МНЛ — Ромео Ортега — ведущий
ученый мира в области автоматического управления и ее технических приложений, включая мехатронные и робототехнические системы.
В 2015 году Международная федерация автоматического управления (IFAC) предоставила нам право организации и проведения
международной конференции The 1st IFAC Conference on Modelling,
Identification and Control of Nonlinear Systems (MICNON 2015) в
Санкт-Петербурге: http://micnon2015.org/.
Мы являемся основателями проекта RoboEd. Название RoboEd
получено путем использования сокращенных частей словосочетания Robotics Education — робототехническое образование. Компания RoboEd была создана в июне 2012 года. В 2012 году компания
RoboEd стала одним из победителей Санкт-Петербургской Организации Бизнес Ангелов, вследствие чего компания RoboEd стала резидентом стартап-акселератора iDealMachine и получила первые инвестиции от венчурной компании RSV Venture Partners LP.
RSR присвоил компании RoboEd индекс A. В 2013 году RoboEd
представила прототип продукта на международном форуме Open
Innovations в Москве. В данный момент в составе компании работает один доктор наук, четыре кандидата наук, два аспиранта и
шесть магистрантов кафедры СУиИ Университета ИТМО.
Введение
9
Компания RoboEd (РобоЭд) разрабатывает обучающее интерактивное программное обеспечение в области робототехники и
предоставляет образовательные продукты и услуги с использованием образовательных программ, рекомендаций и методик, уникального учебно-методического комплекса (УМК) для школьников
и студентов, элементной робототехнической базы и курсов повышения квалификации для педагогов и преподавателей.
Рис. 0.1. УМК RoboEd «Основы робототехники»
В настоящий момент удачных образовательных решений в представленной области нам неизвестно. Широко распространено самообучение на основе готовых конструкторов, лекций энтузиастов,
книг по робототехнике [2–4] и пр. Этого явно недостаточно.
УМК «Основы робототехники» от RoboEd предназначен для
обучения школьников по дополнительному курсу «Основы робототехники» в робототехнических кружках и лабораториях и включает в себя следующие разделы:
∙ образовательная программа на 3 года;
∙ поурочные презентационные материалы для ведения занятий
в классе;
∙ конструкторские карты по сборке роботов;
∙ инструкция по установке программного обеспечения;
10
Введение
∙ методическое руководство к УМК;
∙ контрольно-измерительные материалы;
∙ поля для роботов;
∙ рекомендации по закупке оборудования;
∙ образовательные видео-курсы.
УМК разработан для школьников в возрасте от 10 до 17 лет.
Одним из важнейших достижений компании RoboEd является
понятный педагогу образовательный инструмент для преподавания
в классе. УМК выгодно отличается от типичных семинарских занятий повышения квалификации, потому что для каждого урока и
для каждой темы педагог имеет определенный презентационный и
методический материал. Он четко представляет, как он будет в течение года вести образовательный процесс, который уже продуман
профессионалами и успешно двигается по образовательной траектории.
В сопровождение проекта RoboEd разработан и постоянно совершенствуется портал дистанционного обучения: http://roboed.
academy/. На данном портале каждый, у кого отсутствует возможность заниматься с преподавателем, сможет ознакомиться с электронными курсами, пройти тестирование или обучение посредством
вебинара, получить техническую поддержку.
В конечном итоге слушатель учится управлять реальным роботом, собранным из конструктора. На первом этапе мы используем
роботы от Лего, но в будущем планируется разработка образовательного контента под различные робототехнические платформы.
Обучение робототехнике невозможно без элементной базы, без
роботов. У нашей команды есть опыт работы с широким спектром
робототехнического оборудования: от роботов начального уровня
до сложных промышленных систем. Мы также сотрудничаем со
школами и университетами Санкт-Петербурга в области обучения
робототехнике. Опыт сотрудников компании включает в себя: подготовку школьной сборной России для участия в международных
соревнованиях по робототехнике, где учащиеся творческих лабораторий регулярно занимают призовые места; реализацию проектов по оснащению учебных помещений для занятий робототех-
Введение
11
Рис. 0.2. «Фестиваль Мехатроники и Робототехники 2014»
никой; значительное количество успешно реализованных научнотехнических проектов. Сотрудники компании являются соорганизаторами ежеквартальных открытых состязаний Санкт-Петербурга
по робототехнике.
С 2009 по 2014 год в рамках международного форума «Российский промышленник» http://promexpo.lenexpo.ru/ и Петербургского инновационного форума http://forum.spbinno.ru/ мы
проводили крупнейший в стране «Фестиваль Мехатроники и робототехники» (Фестиваль МиР) в выставочном комплексе ЛенЭкспо: http://robofestival.ru. В 2014 году Правительство СанктПетербурга и компания EXPOFORUM выделили нам площадь
3000 м2 под выставку роботов, стартап-аллею, олимпиаду и соревнования роботов.
На Фестивале было представлено множество интересных конструкторских и инженерных решений и разработок студентов, аспирантов и сотрудников Университета ИТМО, ЦНИИ РТК, СПбГУ
«МатМех», НИУ СПбГПУ, ИПМаш РАН, БГТУ «ВоенМех», а также творческие проекты учеников физико-математического лицея
№239 и других школ. Мы уверены, что наряду с соревнованиями,
выставка творческих проектов играет не менее важную роль, ведь
12
Введение
не каждый имеет возможность подготовиться именно к олимпиаде
или состязаниям роботов.
Рис. 0.3. Соревнования «Футбол роботов»
В рамках «Фестиваля мехатроники и робототехники» проходили соревнования по таким дисциплинам, как полеты дронов, гонки
андроидных роботов, гонки сегвеев, движение по линии, футбол
роботов, кегльринг, лабиринт, эстафета, ралли по коридору. В конкурентных и честных состязаниях роботов выявлялись победители,
которые были торжественно награждены в последний день фестиваля. Все представления проходили в интерактивном режиме, посетители Фестиваля МиР могли сами управлять роботами и понять
принцип их работы, а абитуриентам представлялась возможность
определиться в своей будущей специальности.
По результатам изучения предлагаемого нами УМК, школьники, ранее незнакомые с робототехникой, смогут выглядеть достойными соперниками матерых и именитых представителей школьных
команд, а неизвестные ранее в области робототехники школы —
представлять достойные команды для участия в подобных соревнованиях.
Введение
13
Сейчас наш опыт проведения международных робототехнических мероприятий переняли и используют коллеги из Республики
Казахстан на Фестивале РобоЛэнд: http://roboland.kz/.
Представленная в данной книге команда — хорошо слаженный и дружный научный коллектив, который работает вместе уже
много лет. Все ключевые члены Компании RoboEd являются сотрудниками Университета ИТМО, а также известными специалистами в области развития инновационной и предпринимательской
деятельности. Подробнее ознакомиться с различными разработками и выступлениями команды RoboEd можно на сайте: http:
//www.roboed.ru и на нашем канале в Youtube — itmo4robots.
Мы знаем, как преподавать робототехнику и уверены, что книга
«Основы робототехники с Lego Mindstorms EV3» и проект RoboEd
помогут Вам узнать о робототехнике значительно больше!
Глава 1.
Конструктор LEGO Mindstorms EV3
В этой главе мы ознакомимся с составом набора и нововведениями по сравнению с предыдущей версией Lego Mindstorms NXT.
Четвертого января 2013 года датская компания LEGO представила
третью версию конструктора Lego Minstorms, завоевавшего сердца миллионов начинающих робототехников по всему миру — EV3.
Рассмотрим, что же «внутри».
1.1. Электроника
Контроллер претерпел серьезные изменения по сравнению с
предшественником и стал поистине настоящим компьютером с операционной системой Linux на борту.
Технические характеристики:
∙ процессор — ARM9 (тогда как у предшественника — ARM7);
∙ flash память — 16 Мб;
∙ оперативная память — 64 Мб;
∙ операционная система — Linux;
∙ слот расширения SD;
∙ USB 2.0 (поддерживает USB host, значит можно воспользоваться Wi-Fi модулем);
∙ Bluetooth 2.1;
∙ 4 порта входных данных;
∙ 4 порта выходных данных;
1.1. Электроника
15
∙ динамик.
Программное и аппаратное обеспечение позволяет объединить
до четырех таких модулей управления в единую систему. Такое объединение осуществляется при помощи того же USB кабеля, что и
для подключения контроллера к компьютеру.
Рис. 1.1. Контроллер EV3
Помимо контроллера в комплект поставки также входят три
сервомотора (два — большой мощности и один — средней мощности), датчик касания, цветовой сенсор, датчик расстояния (инфракрасный или ультразвуковой, зависит от версии набора), гироскопакселерометр.
Датчик касания по своей сути является кнопкой. Он может пригодиться в случаях, когда нужно обнаруживать препятствия или
каким-либо образом реагировать на прикосновения.
Гироскопический датчик предназначен для измерения угла вращения робота или скорости вращения. Сверху на корпусе датчика
нанесены две стрелки, обозначающие плоскость, в которой работает датчик. Поэтому важно правильно устанавливать датчик на
робота.
Датчик цвета имеет три основных режима работы: определение цвета поверхности, измерение освещенности отраженного света
от поверхности и измерение общей освещенности. С его помощью
можно, например, сортировать цветные детали или двигаться вдоль
контрастной линии.
16
Глава 1. Конструктор LEGO Mindstorms EV3
Ультразвуковой датчик косвенным методом измеряет расстояние. Он замеряет время, за которое звуковая волна распространяется от датчика до объекта и обратно. Используя это время и скорость
звука в воздухе, рассчитывается расстояние. Этот датчик обладает
множеством видов применений от картографирования местности
до выявления движения.
С одной из сторон блока есть порт для подключения USB кабеля, при помощи которого устанавливается соединение с рабочей
станцией (персональным компьютером или ноутбуком) и программным обеспечением, что позволяет загружать на компьютер разработанные программы. Загружать программы на контроллер также
можно по Bluetooth и Wi-Fi (при наличии Wi-Fi модуля) соединению.
На LCD дисплей контроллера можно выводить различные рисунки и тексты, динамик способен проигрывать музыку, а также
записанные ранее звуковые файлы. Таким образом, можно запрограммировать робота говорить разные фразы.
Как уже было отмечено, контроллер обладает четырьмя портами входных данных. Порты пронумерованы от 1 до 4. Почему
же мы называем их «порты входных данных»? Потому что именно
эти порты служат для подключения датчиков, и именно по этим
портам контроллер получает информацию об окружающей среде.
Эта информация влияет на поведение робота. Моторы могут быть
подключены к выходным портам A, B, C и D. Моторы в наборе
EV3 являются сервомоторами, оснащенными встроенными датчиками вращения (энкодерами), которые измеряют угол поворота вала двигателя в градусах или же в полных оборотах. Энкодеры позволяют выполнять движения робота с необходимой точностью.
Общее
руководство
пользователя
платформы
Lego
MINDSTROMS EV3 доступно на официальном сайте по ссылке
https://education.lego.com/ru-ru/support/mindstorms-ev3/
user-guides.
1.2. Детали для конструирования
Для создания робота в наборе имеются блоки конструирования,
включающие балки, шестеренки, кубики, два вида колес, «гусеницы» и многое другое. С полным перечнем деталей можно ознако-
1.3. Программирование
17
миться при непосредственной работе с конструктором. Благодаря
большому разнообразию деталей в конструкторе, вы имеете возможность строить огромное количество непохожих друг на друга роботов. Общее же количество деталей образовательной версии
Lego EV3 45544 составляет 541.
Помимо прочего, стоит отметить, что производитель позаботился об обратной совместимости с NXT 2.0. Благодаря этому, к контроллеру EV3 возможно подключать как сервоприводы, так и датчики от предыдущей версии конструктора.
Рис. 1.2. Общий вид деталей из набора Lego EV3 45544
1.3. Программирование
В последние годы у серии Lego Mindstorms появилось много поклонников как среди школьников, так и среди студентов. По этой
причине программное обеспечение для EV3 ориентировано на различный уровень подготовки пользователей.
В комплект набора входит также оригинальная графическая
среда разработки Lego Mindstorms EV3 Software. Этот графический
язык программирования является достаточно простым в освоении
18
Глава 1. Конструктор LEGO Mindstorms EV3
Рис. 1.3. Порты для подключения моторов (слева) и датчиков
(справа)
программирования роботов на начальных этапах. Однако, по мнению авторов и многих других преподавателей робототехники, стоит обратить особое внимание на среду программирования RobotC,
язык программирования в которой очень похож на язык С++, но
уже требует наличие базовых навыков программирования.
1.3.1. Установка EV3 Software
Скачать последнюю версию EV3 Software вы можете на сайте компании Lego в разделе Downloads (https://www.lego.com/
ru-ru/mindstorms/downloads). Для начала установки нужно запустить скачанный файл, после распаковки которого вам предложат
выбрать путь установки как на рисунке 1.4 (слева).
После выбора каталога назначения для программы, вам будут
предложены два варианта установки: для учащегося и учителя (отличие между этими вариантами заключается в расширенном функционале в версии для учителя). На рисунке 1.4 (справа) выбран
вариант установки для учителя.
На следующем шаге установки необходимо ознакомиться с лицензионными соглашениями и выбрать пункт «Я принимаю вышеуказанное лицензионное соглашение».
После этого начнется установка, которая займет некоторое время.
Установленная программа создает на рабочем столе ярлык. После запуска вы увидите главное меню как на рисунке 1.7 (слева), и
1.3. Программирование
19
Рис. 1.4. Выбор пути для установки программы и варианты установки
Рис. 1.5. Лицензионные соглашения: Lego (слева) и MS Silverlight
(справа)
для начала программирования необходимо нажать на значок плюса
на панели вкладок.
1.3.2. Установка RobotC
После скачивания среды разработки RobotC для Lego
Mindstorms и запуска скачанного файла, необходимо прочесть и
принять лицензионное соглашение и выбрать путь установки.
Во всех последующих окнах следует нажать кнопку «Next»,
«Install» и в конце «Finish».
20
Глава 1. Конструктор LEGO Mindstorms EV3
Рис. 1.6. Промежуточные шаги, не требующие вмешательства пользователя
Рис. 1.7. Главное меню (слева) и поле для программирования (справа)
Запуск RobotC осуществляется двойным нажатием левой кнопки мыши на соответствующий ярлык. Главное меню и созданный
шаблон программы показаны на рисунке 1.10.
1.3. Программирование
21
Рис. 1.8. Лицензионное соглашение и выбор пути установки
Рис. 1.9. Лицензионное соглашение и выбор пути установки
Рис. 1.10. Главное меню программы RobotC (слева) и окно для программирования (справа)
Глава 2.
Конструирование
В случае если читатель обладает навыками конструирования в
системе Lego Technic, то эту главу можно пропустить. Если же начинающий робототехник впервые столкнулся с конструированием
Lego, рекомендуем внимательно ознакомиться.
2.1. Первая игра: Фантастическое животное
Данный параграф соответствует части 1.1 Учебнометодического комплекса. Тема первого урока: «Фантастическое
животное. Названия деталей».
Итак, набор перед вами, детали распакованы и расфасованы
по лотку в соответствии с шаблоном. Чешутся руки, чтобы поскорее что-то собрать? Это чувство, пожалуй, знакомо всем. С целью
ознакомления с деталями конструктора предлагается игра «Фантастическое животное».
Правила игры. Участвуют двое. Для начала разделим детали на
два равных комплекта (к примеру, по 25 деталей). Один из игроков
втайне от другого собирает выдуманное, фантастическое животное.
Второй игрок берет оставшийся комплект деталей. Оба игрока садятся спиной друг к другу, второй игрок под диктовку первого должен построить копию того самого фантастического животного, ни
разу не посмотрев на него, а первый не должен видеть действий
второго. В конце раунда «животные» сравниваются. Во втором раунде участники меняются ролями.
Весьма интересно наблюдать за игрой со стороны. «Возьми
красную кривую палочку, у которой три дырки с каждой стороны. Присоедини к ней синий квадрат при помощи красной ровной
палки...» — и это, поверьте, самые понятные фразы, которые можно услышать в ходе игры! Какой можно сделать из этого вывод?
2.2. Высокая башня
23
Рис. 2.1. Возможная конструкция фантастического животного
Правильно. Чтобы не тратить время на объяснения и понимать
друг друга с полуслова, нужно знать, как называются детали конструктора, и урок «Фантастическое животное» как нельзя лучше
это покажет. Увы, производители не поставляют названия деталей
конструктора, но вы легко можете найти их на официальном сайте
Lego.
2.2. Высокая башня
Не теряя времени, продолжаем изучать основы конструирования. Давайте вспомним, строили ли мы раньше башни? Наверняка
каждый из нас строил башни из песка, палочек и других вещей,
которые можно уложить друг на друга как можно выше. Давайте
вспомним башни, построенные опытными инженерами: Эйфелева
башня (г. Париж, Франция), Останкино (г. Москва, Россия), Байтерек (г. Астана, Казахстан), Башня Бурдж-Халифа (г. Дубай, ОАЭ),
пирамиды Гизы (Египет) и многие другие. Руководствуясь теми же
правилами, решим задачу конструирования высокой башни из деталей набора.
Итак, чтобы башня была устойчивой, необходимо широкое и тяжелое основание и тонкий и легкий шпиль. Это значит, что расположить контроллер на верхушке — не самая удачная идея. Для
создания устойчивой конструкции вы перепробуете множество спо-
24
Глава 2. Конструирование
собов крепления деталей, что послужит хорошим опытом для конструирования прочных роботов в скором времени.
2.3. Механический манипулятор
Данный параграф описывает часть 1.2 УМК. В первую очередь
введем определение манипулятора.
Манипулятор — это устройство, имитирующее движение рук и
пальцев человека при невозможности непосредственного контакта
человека с веществом (из-за его токсичности, радиоактивности и т.
д.)
Проще говоря, манипулятор — «рука робота», или рабочий орган, говоря инженерным языком. Основная задача манипулятора
состоит в перемещении объекта с одного места на другое. Скорее
всего читатель сталкивался с подобной «игрушкой». Иногда на её
конце располагается голова клоуна, которая неожиданно выпрыгивает из ящичка на большое расстояние. Вместо головы также может быть игрушечная боксерская перчатка. Итак, в первую очередь
соберем механический манипулятор. Используя балки и штифты
(к этому времени пора знать названия деталей), соберем механизм,
способный изменять длину и захватывать детали (см. ч. 1.2 УМК).
Опишем требования к конструкции:
∙ хватательный механизм должен обладать минимальной длиной в сложенном состоянии и максимальной в разложенном;
∙ механизм должен иметь ручки, например как у ножниц, и
несколько подвижных крестообразныx соединений из балок
со схватом на конце;
∙ конструкция должна быть способна выдерживать вес
нескольких колес при переносе их из одного места в другое.
Начальный этап достаточно прост и интуитивно понятен: в трех
точках используемых балок располагаются шарнирные соединения — посередине и по краям. Стоит обратить внимание на использование разных типов штифтов. Часть из них гладкие, а часть
обладает фиксаторами (имеет небольшие ребра) для фиксации в
отверстиях. На втором и третьем этапе сформируем хватательную
2.3. Механический манипулятор
Рис. 2.2. Пример конструкции высокой башни
25
26
Глава 2. Конструирование
часть. По итогам сборки предлагается провести соревнование на
самого ловкого «манипулятора».
Рис. 2.3. Механический манипулятор
Соревновательный дух очень важен при обучении робототехнике, преподавателю рекомендуется как можно чаще устраивать
небольшие состязания внутри группы обучающихся. Это повышает не только мотивацию к изучению робототехники, но и улучшает
командный дух учеников. В подавляющем большинстве случаев,
если у кого-либо из обучающихся что-то не получается, кто-то из
коллег обязательно придет на помощь советом или действием.
2.4. Механическая передача
Почти каждый робот включает в себя в том или ином виде механическую передачу. В первую очередь, введем определение.
Механическая передача — механизм, служащий для передачи и
преобразования движения. В разных конструкторах можно найти
несколько видов механической передачи: зубчатая, ременная, цепная и т. д. Предлагаем вам дать ответ на вопрос: в каких устройствах используется механическая передача? Для чего?
2.4. Механическая передача
27
Рис. 2.4. Механическая передача 135:1 из лего
На самом деле механические передачи встречаются нам почти
на каждом шагу: велосипед, автомобиль, передача на генератор и
т. д. Передача может быть полезна в механизмах, когда нужно передать вращение с вала двигателя на колеса или другие движущиеся части робота. Часто может возникнуть необходимость передать
вращение на некоторое расстояние, а возможно и вообще изменить
его направление, например на 90∘ или 180∘ .
Рис. 2.5. Устройства с механическими передачами
2.4.1. Передаточное отношение
Любые передачи характеризуются особой величиной — передаточным отношением (передаточным числом). Для ловкого приме-
28
Глава 2. Конструирование
нения механических передач нужно уметь рассчитывать их передаточные отношения. Для этого нужно знать диаметры или количество зубцов на шестернях, которые участвуют в механической передаче. На крупных шестеренках (больше 16 зубцов) число зубцов
как правило указано, к примеру на самой большой в конструкторе
указано Z40. Эта надпись значит, что количество зубцов на шестеренке равно 40. На мелких же придется считать самостоятельно.
Рассмотрим принцип работы механической передачи. В первую
очередь, отметим направление вращения ведущей оси противоположно направлению вращения ведомой. Во-вторых, отметим, что
диаметр шестеренок влияет на скорость вращения ведомой оси.
Каким образом? Нетрудно заметить следующую закономерность.
Ведущая шестерня больше ведомой — скорость увеличивается. Ведущая шестерня меньше ведомой — скорость уменьшается. Однако
законы природы устроены так, что если мы выигрываем в скорости, значит лишаемся чего-то другого. В данном случае мы теряем
в силе. А в ином случае, т.е. при проигрыше в скорости, мы выигрываем в силе. Именно поэтому автомобиль трогается с пониженной
передачи. Требуется высокая сила, чтобы сдвинуть автомобиль с
места, а дальше, при разгоне, можно переходить на повышенные
передачи для увеличение скорости.
Очень важно уметь рассчитывать и понимать, во сколько раз
увеличилась скорость или уменьшилась сила. Именно поэтому физиками введена величина, именуемая «передаточным отношением».
Определяется она следующим образом:
i=
z2
,
z1
(2..1)
где i — передаточное отношение, z1 — число зубцов на ведущей
шестеренке, z2 — число зубцов на ведомой шестеренке.
Значит в случае, когда i > 1, сила увеличивается, а скорость
уменьшается, а при i < 1 сила уменьшается, а скорость растет. Очевидно, при i = 1 и сила, и скорость остаются постоянными.
В случае, когда необходимо передать вращение на какое-либо
расстояние, используется несколько установленных подряд шестеренок, в других случаях они лишь увеличивают вредные потери
на трение. При этом, в расчете передаточного отношения исполь-
2.4. Механическая передача
29
зуются только первая и последняя шестерни. Остальные называют
«паразитными шестернями».
Тем не менее, зубчатую передачу можно построить таким образом, чтобы каждая шестеренка выполняла полезную функцию и
служила либо для увеличения, либо для уменьшения передаточного отношения.
В этом случае каждая вторая пара соседних шестеренок находится на одной оси, а общее передаточное отношение рассчитывается как произведение всех передаточных отношений соприкасающихся шестеренок:
i = i12 · i34 · i56 · . . . ,
(2..2)
где i12 = zz21 , i34 = zz43 , i56 = zz6 .
5
Нетрудно догадаться, что шестеренки, находящиеся на одной
оси, вращаются абсолютно одинаково и их передаточное отношение
равно единице. Следовательно, эти значения в произведении могут
не участвовать.
Рис. 2.6. Одноступенчатая (слева) и двухступенчатая (справа) механические передачи
Введем понятие «передаточное число». Его используют, когда
необходимо вычислить коэффициент изменения скорости или силы
вне зависимости от направления возрастания. Таким образом, передаточное число можно определить как наибольшее из отношений
u = 1i или u = 1i . Следовательно, передаточное число всегда не меньше единицы. К примеру, при передаточном отношении i = 1 : 15, как
и при i = 15 : 1, передаточное число u = 15.
Червячная передача — это частный случай зубчатой. В нашем
конструкторе она обладает определенными свойствами:
30
Глава 2. Конструирование
∙ один оборот червяка соответствует одному зубцу любой шестерни. Значит, при расчете передаточного отношения, число
зубцов червяка можно считать равным единице;
∙ червячная передача работает только в одном направлении от
червяка к шестерне и блокирует движение в обратном направлении.
Задача. Постройте механическую передачу с максимальным передаточным отношением. По приблизительным подсчетам, из всех
шестеренок конструктора можно построить передачу, увеличивающую силу вращения (и понижающую скорость) примерно в 1,5 млн
раз. Это, конечно, теоретически. Но по сути это означает, что для
одного полного оборота ведомой оси потребуется 1,5 млн оборотов
ведущей. Многовато. Для начала попробуйте построить передачи с
передаточным числом 9, 27, 45, 135.
2.4.2. Волчок
Давайте применим полученные навыки на практике.
Каждый из нас с детства знаком с замечательной игрушкой —
юлой. Несколько движений, и юла около минуты держит вертилькальное положение. С волчком еще проще. Стержень (ось), закрепленный на нем диск (колесо, большая шестеренка), быстрое круговое движение пальцами, и с волчком происходит то же самое, что и
с юлой, только без какого-либо механизма. Но, так или иначе, через
некоторое время волчок падает, исчерпав заложенную в него энергию. Хорошая тренировка для пальцев, однако скорость вращения
запущенного рукой волчка невысока.
Итак, полученных ранее знаний о механической передаче должно быть достаточно для построения запускающего механизма, который многократно увеличит первоначальную скорость волчка.
Сформируем требования к запускающему механизму:
∙ волчок должен иметь ось и тяжелый маховик, закрепленный
на этой оси;
∙ центр тяжести волчка должен быть как можно ниже, при этом
края диска-маховика не должны цеплять стол;
2.4. Механическая передача
31
Рис. 2.7. Волчок
∙ на верхней части оси волчка должна быть шестерня для передачи вращения от запускающего механизма волчку;
∙ механизм должен иметь ручку для удержания его одной рукой
и рукоятку для вращения механизма другой;
∙ сразу после раскручивания волчок должен свободно отделяться от механизма.
На рисунке 2.7 изображена модель возможной конструкции
волчка. Вы наверняка сможете улучшить его конструкцию так,
чтобы он вращался наибольшее время. Колесо можно заменить на
большую шестеренку и изменить длину оси. Обратите внимание,
что шестерня на оси волчка должна быть закреплена на один модуль ниже конца этой оси. Это нужно для подсоединения к запускающему механизму.
На рисунке 2.8 представляем вам запускающий механизм с передаточным отношением 1 к 45. Для его испытания ось волчка с
шестеренкой нужно подсоединить в свободное отверстие на конце длинной балки запускающего механизма так, чтобы шестерня
на оси волчка и на краю запускающего механизма пришли в зацепление. Теперь, установив волчок в вертикальное положение на
плоской поверхности, необходимо раскрутить, вращая рукоятку запускающего механизма, и резко отсоединить его от волчка. Попро-
32
Глава 2. Конструирование
Рис. 2.8. Запускающий механизм для волчка
буйте изменить передаточное отношение. Как это влияет на время
вращения волчка?
При достаточно высоком передаточном отношении при запуске
волчка вы можете услышать характерный треск зубчиков шетеренок. В таком случае нужно прекратить испытания и озадачиться
укреплением механизма. Проскальзывание, как правило, происходит вследствие непрочного крепление осей, т. е. оси могут с легкостью отклоняться друг от друга на несколько миллиметров. Избежать этого можно, добавив промежуточные балки между шестеренками, что сделает весь механизм более жестким.
Основная задача такого механизма — это повышение скорости
вращения волчка и, соответственно, времени его вращения. Устройте соревнования — чей волчок вращается дольше всех?
2.4.3. Основы 3D-моделирования
Трехмерное моделирование позволяет создавать на компьютере модель реального объекта — от шестеренки до автомобилей и
мостов.
Для создания трехмерных моделей из Lego есть специальная
программа Lego Digital Designer (LDD), которую можно свободно
скачать на официальном сайте Lego.
Познакомимся же с ней! После ее установки и запуска вы увидите окно как на рисунке 2.10 (слева).
2.4. Механическая передача
33
Рис. 2.9. Настоящая модель робота и ее 3D-модель
Рис. 2.10. Рабочее окно программы Lego Digital Designer
На экране приветствия вам будет предложено выбрать режим
моделирования. В рамках этой книги нас будет интересовать режим
работы с Lego Mindstorms. После выбора этого режима и создания
нового проекта выберите конструктор EV3 в выпадающем меню в
соответствии с рисунком 2.10 (справа).
Построим простую механическую передачу из двух шестеренок.
Добавим с панели блоков пятимодульную балку, для этого найдите
балку на панели блоков, нажмите на нее левой кнопкой мыши и
перетащите на рабочую область. Для выбора ориентации детали
нужно пользоваться стрелками на клавиатуре.
В соответствии с рисунком 2.11 (слева), прикрепите к балке два
бежевых штифта-полуоси. Зеленый цвет выделения означает, что
деталь можно поставить по одному клику.
34
Глава 2. Конструирование
Далее установите малую (восьмизубую) и большую (сороказубую) шестерни. У вас должна получиться такая же конструкция
как на рисунке 2.11 (справа).
Самостоятельно соберите станину с передаточным отношением 135 к 1.
Рис. 2.11. Рабочий процесс в программе Lego Digital Designer
Глава 3.
Основы управления роботом
В данной главе читатель ознакомится с основными понятиями в
робототехнике, рассмотрит подробно принципы действия сенсоров,
входящих в набор, а также сконструирует своего первого робота и
запрограммирует его!
3.1. Механизм, автомат, робот
Что же означает заголовок? Введем определения.
Механизм — это устройство, с помощью которого человек выполняет работу. К примеру, кран или экскаватор.
Автомат — это механизм, выполняющий работу без участия человека. Автомат работает по программе, записанной в него человеком. Например стиральная машина, мультиварка, сигнализации и
т.д.
Робот — автомат, созданный по принципу живого организма.
Робот функционирует в окружающей среде. Промышленный робот — на заводе, луноход — в космосе, домашний робот — в доме
человека. Как человек взаимодействует со средой с помощью тела и
органов чувств, так и робот взаимодействует со средой с помощью
моторов и датчиков, управляемых контроллером и загруженной в
него программой. Программа, разработанная человеком, определяет поведение робота после запуска. В ней заданы команды, отправляемые объекту управления контроллером. Эти команды могут зависеть от показаний датчиков.
Как известно, в любой сфере есть особая лексика, и пора бы с
ней ознакомиться, чтобы было проще общаться и понимать друг
друга. Введем еще несколько определений. Контроллер — устройство, генерирующее сигналы управления по заданной разработчи-
36
Глава 3. Основы управления роботом
Рис. 3.1. Современные роботы
Рис. 3.2. Диаграмма взаимодействия компонентов робота
3.2. Знакомство с датчиками EV3
37
ком программе. В нашем случае контроллером является контроллер Lego EV3.
Объект управления — устройство, действующее на окружающую среду под действием сигналов управления.
Объекты управления (к примеру, двигатели) позволяют перемещаться роботу в среде и перемещать другие объекты в ней, т. е.
действовать на неё. Датчики позволяют получать информацию об
изменениях окружающей среды во время исполнения программы.
Такое взаимодействие между контроллером, объектом управления
и датчиками называется управлением с обратной связью, т. е. информация об окружающей среде влияет на сигналы, поступающие
от контроллера к объекту управления. Случай, когда управление
происходит без участия датчиков и контроллер оказывает управляющее воздействие для объекта управления в соответствии с заданной программой, называется управлением по прямой связи.
Что ж, после введения основных понятий и определений можно,
наконец, переходить к первым моделям!
3.2. Знакомство с датчиками EV3
Вы уже умеете создавать прочные и устойчивые конструкции
и имеете понятие о механических передачах. Настало время построить наших первых роботов! Но перед тем как начать, установим разницу между такими важными понятиями как механизм,
автомат и робот. Давайте рассмотрим блок-схему, изображенную
на рисунке 3.2. Как видите, система замкнутая и каждый компонент взаимодействует друг с другом. Контроллер, в данном случае
программа, оказывает управляющее воздействие на объект управления, робот, в свою очередь, каким-то образом влияет на окружающую среду. Датчики фиксируют это влияние и отправляют информацию на контроллер. Познакомимся ближе с оборудованием
Lego Mindstorms, которое мы используем для создания роботов.
3.2.1. Контроллер
Контроллер EV3 нам уже знаком:
38
Глава 3. Основы управления роботом
∙ сохраняет и исполняет загруженную программу, также может
хранить звуки и изображения;
∙ содержит графический экран для отображения информации;
∙ содержит 4 порта для подключения моторов (A, B, C, D);
∙ содержит четыре порта подключения датчиков (1, 2, 3 и 4);
∙ содержит кнопочный блок;
∙ содержит слот для карты памяти microSD;
∙ содержит USB-порт для подключения Wi-Fi модуля.
Кнопки и дисплей можно использовать как для навигации в
меню, так и из ваших будущих программ. Например, на дисплей
возможно выводить числовые значения и рисунки, а кнопки использовать как элементы управления роботом или для изменения
состояний в программе.
Внутри контроллера установлен мини-компьютер (на базе процессора ARM9 300 МГц), на котором установлена операционная
система Linux. На контроллере доступно 16 Мб для хранения программ и всего необходимого для их работы, есть 64 Мб оперативной памяти, два USB-порта, поддержка карт памяти microSD до
32 Гб. Для подключения периферии на переднюю и заднюю части
контроллера вынесено 8 портов: 4-е выхода, обозначенные латинскими буквами A, B, C и D, предназначенные для подключения
двигателей, и 4-е входа, подписанные арабскими цифрами 1, 2, 3
и 4, для подключения датчиков. Питается контроллер от 6-и батареек типа AA или от фирменного литий-ионного аккумулятора.
Под блоком кнопок находится индикатор модуля, который сообщает о текущем состоянии контроллера. Цвет индикатора может быть
зеленым, оранжевым или красным, и он может мигать.
Коды состояний, которые используются в контроллере:
∙ красный — запуск, обновление, завершение работы;
∙ красный мигающий — занят;
∙ оранжевый — оповещение, готов;
3.2. Знакомство с датчиками EV3
39
Рис. 3.3. Контроллер EV3
∙ оранжевый мигающий — оповещение, работает;
∙ зеленый — готов;
∙ зеленый мигающий — выполняется программа.
Используя программное обеспечение для программирования
рассматриваемого контроллера, можно задавать собственные коды
индикатора состояния в ваших собственных программах.
Рис. 3.4. Вид контроллера со стороны подключения SD-карт (слева)
и со стороны динамика (справа)
Для начала работы с контроллером EV3 нужно подключить заряженный аккумулятор и нажать на центральную кнопку. Во время загрузки, которая может занять несколько секунд, на дисплее
40
Глава 3. Основы управления роботом
Рис. 3.5. Датчик касания EV3
появится логотип LEGO MINDSTORMS, а индикатор под блоком
управления будет гореть красным. По окончании загрузки цвет светодиодов сменится на зеленый, а на дисплее отобразится меню контроллера.
Подключение контроллера к компьютеру осуществляется кабелем microUSB — USB-A или по Bluetooth. Соответствующие инструкции вы можете найти на сайте lego.com, например, в руководстве пользователя по ссылке: https://www.lego.com/en-us/
mindstorms/downloads/user-guide.
3.2.2. Датчик касания
Подключите датчик к EV3, зайдите в меню «Port View» EV3,
выберите порт, к которому подключен датчик, и внимательно изучите режимы работы сенсора. Используя датчик, можно определить, что робот столкнулся с препятствием или другим роботом.
Датчик содержит кнопку, которая нажимается при касании.
Датчик касания обладает тремя состояниями: 0 — нет нажатия,
1 — кнопка зажата и 2 — щелчок по кнопке.
3.2. Знакомство с датчиками EV3
41
Рис. 3.6. Ультразвуковой датчик EV3
3.2.3. Ультразвуковой датчик расстояния
Принцип действия ультразвукового датчика заключается в следующем: в момент измерения мы отправляем ультразвуковую волну в окружающее пространство, эта волна отражается от препятствия и возвращается, как эхо, в приемник. Измеряя время между
посылкой и приемом ульразвуковой волны, котроллер вычисляет
расстояние до препятствия. Именно такой способ зрения использует летучая мышь. Опишем некоторые особенности датчика:
∙ измеряет расстояние в сантиметрах;
∙ наименьшее измеримое расстояние — 5 см;
∙ наибольшее измеримое расстояние — 250 см;
∙ ультразвук плохо отражается от тканей, шерсти и шершавых
поверхностей.
3.2.4. Инфракрасный датчик
Если в вашем распоряжении домашняя версия набора, то в арсенале вместо ультразвукового датчика у вас будет инфракрасный.
Он определяет приближение или отдаление объектов в его поле видимости, а также умеет работать с инфракрасными маяками. Он
не возвращает конкретное расстояние, а оперирует некой шкалой
42
Глава 3. Основы управления роботом
Рис. 3.7. Инфракрасный датчик
от 0 (очень близко) до 100 (очень далеко). Датчик может обнаруживать препятствия на расстоянии до 70 см в зависимости от размера и формы объектов. Режим маяка дает возможность оценить
общее направление (курс) и расстояние (приближение) маяка. Направление выражается числом от −25 до 25, где 0 — направление
прямо перед инфракрасным датчиком, а расстояние, также как и
в режиме приближения, от 0 до 100.
3.2.5. Датчик цвета
Теперь рассмотрим датчик освещенности, который работает по
схожему принципу, только он отправляет не звуковую волну, а световую. Датчик освещенности позволяет измерять количество отраженного света. В этом режиме датчик направляет поток красного
света на близко расположенную поверхность и измеряет количество
отраженного света. Более темные предметы будут поглощать световой поток, поэтому датчик будет показывать меньшее значение по
сравнению со светлыми предметами. По такому же принципу этот
датчик позволяет измерять освещение окружающей среды. В режиме «Цвет» датчик способен самостоятельно определить цвет то-
3.2. Знакомство с датчиками EV3
43
Рис. 3.8. Датчик цвета. Режимы работы: измерение
отраженного света (слева), измерение освещенности (посередине),
определение цвета (справа)
го или иного объекта. Подключите датчик к EV3, зайдите в меню
«Port View» и выберите порт для проверки работы датчика.
3.2.6. Гироскопический датчик
Еще один интересный датчик — гироскоп. Он предназначен для
измерения угла или скорости вращения робота. Очень важно правильно установить датчик на робота. На корпус датчика нанесены
две стрелки, которые обозначают рабочую плоскость, в которой его
следует устанавливать. Вращение робота против часовой стрелки
формирует отрицательные значения измерений, а по часовой стрелке — положительное. Цифровой гироскопический датчик EV3 позволяет измерять движение вращения робота, а также улавливать
изменения в его движении и положении. С помощью этого датчика легко можно измерить углы, создать балансирующего робота и
исследовать технологии, которые используются в навигационных
системах и игровых контроллерах. Для проверки работы сенсора
подключите его к любому свободному порту и зайдите в меню «Port
View».
3.2.7. Энкодер
Также в двигателе установлен еще один датчик, называемый
энкодером, или датчиком оборотов. Он позволяет измерить угол
44
Глава 3. Основы управления роботом
Рис. 3.9. Цифровой гироскопический датчик
поворота мотора в градусах. Энкодеры позволяют осуществлять
перемещения на заданные расстояния, выполнять повороты на заданный угол относительно текущего положения, поддерживать заданную скорость и многое другое. Отметим некоторым свойства
датчика:
∙ энкодер встроен в двигатель;
∙ при вращении двигателя энкодер изменяет значение от
−32768 до 32767. При совершении одного оборота значение
меняется на 360;
∙ шаг измерения 1∘ .
Посчитайте, сколько оборотов сможет сделать мотор так, чтобы
датчик не сбился со счета (пока не будет достигнуто максимальное
значение количества оборотов).
Используя показания датчиков в ходе исполнения программы,
можно запрограммировать робота на исполнение сложного поведения. Далее, применяя датчики, мы научимся, например, при помощи датчика освещенности обнаруживать темную линию на светлом
поле и двигаться вдоль нее, c помощью ультразвукового дальномера избегать столкновений с препятствиями и многому другому!
3.3. Встроенная оболочка EV3
Операционная система контроллера EV3 содержит «Brick
Program» — встроенную среду программирования контроллера.
3.3. Встроенная оболочка EV3
45
Рис. 3.10. Моторы LEGO Mindstorms со встроенным энкодером:
большой (слева) и средний (справа)
Рис. 3.11. Полный набор электроники набора Lego Mindstorms EV3
(образовательная версия)
Она позволяет применить до двадцати различных видов команд
и решать простые задачи управления роботом.
46
Глава 3. Основы управления роботом
Команды разделяются на два типа: «делай» и «жди». Команды
действия означают какое-либо функционирование исполнительных
устройств (запустить мотор, включить лампочку и т. д.). Команды
ожидания означают ожидание исполнения какого-либо события.
Рис. 3.12. Встроенная среда программирования Brick Program
При построении программы всегда необходимо ставить сначала
блок действия, например движение вперед моторов В и С, а затем
блок ожидания, который сообщит, когда необходимо прекратить
выполняемое действие, например через 2 секунды. При необходимости выполнить несколько действий одновременно — расположите
нужные блоки перед блоком ожидания.
3.4. Управление мобильным роботом
Согласно инструкциям из УМК (ч. 3.4 «Управление мобильным
роботом») постройте двухмоторную тележку. С помощью команд
движения двумя моторами и ожиданием времени постройте программу движения по квадрату. С помощью встроенной оболочки
программирования выполните следующие задания:
∙ выполните движения по разным траекториям (например, по
звезде);
3.4. Управление мобильным роботом
47
Рис. 3.13. Команды управления
∙ подключите датчик освещенности. Создайте программу движения по линии;
∙ напишите программу для избегания препятствий. Воспользуйтесь ультразвуковым/инфракрасным дальномером.
48
Глава 3. Основы управления роботом
Придумайте собственные простые проекты, используя набор команд управления Brick Program. Напоминаем, что максимальное
количество команд во встроенной среде равно 20-и.
Глава 4.
Кегельринг
Цель робота в кегельринге — вытолкнуть все кегли за пределы
круга за наименьшее время, не касаясь своими частями зоны за
пределами окружности.
Соберите стандартную трехколесную тележку: два передних колеса ведущие, заднее — флажковое. Инструкцию по сборке можно
найти в УМК.
В передней части по центру робота нужно закрепить датчик
цвета, направленный строго вниз, на расстоянии около 10 мм от
пола.
Ринг представляет собой круг диаметром 50–100 см, очерченный
черной линией, ширина которой 50 мм. Цвет поверхности круга
должен быть однородным и светлым. Правильность работы робота
зависит от показания датчика освещенности на белом и черном:
чем больше разница, тем стабильнее будет работать робот.
Идея заключается в том, что робот ставится в центр ринга и
после старта должен двигаться внутри круга, не покидая его.
Кегли
Робот
Черная линия
Рис. 4.1. Поле для кегельринга
50
Глава 4. Кегельринг
4.1. Спонтанные движения в круге
Первый и один из простейших алгоритмов в этой номинации —
случайные движения внутри круга.
Рис. 4.2. Случайные движения внутри круга
Начало
Повторять бесконечно {
Моторы вперед
Ждать, пока черное
Отъехать немного назад
Развернуться на 120-150 градусов
}
Конец
В результате работы программы робот должен двигаться внутри
круга, «вычерчивая» ломанную линию.
Для более осмысленного движения внутри круга настройте пороги освещенности для черного и светлого, задержки отъезда назад
и поворота самостоятельно.
Такой же эксперимент можно провести, используя вместо ринга
парту: запустите робота на парте или столе и понаблюдайте за его
поведением, обязательно страхуя его от возможных падений. Робот, подъезжая к краю парты, останавливается и отъезжает назад.
Это можно объяснить тем, что измеренный уровень освещенности
4.1. Спонтанные движения в круге
51
датчиком за пределами парты (когда датчик смотрит вниз, на пол)
будет близким к нулю, так как практически никакой отраженный
свет не возвращается в приемник датчика.
Вернемся к нашему кругу. Диаметр стандартного поля — 1 м.
Роль кеглей могут сыграть пластиковые или бумажные стаканчики,
пустые жестяные банки или специально изготовленные цилиндры
подходящих размеров.
После первых запусков робота обнаружатся некоторые недостатки в его работе:
∙ кегли попадают под колеса, падают и плохо выталкиваются;
∙ вытолкнутые кегли остаются частично внутри круга, так как
робот выталкивает их не до конца;
∙ робот делает много движений впустую.
Рис. 4.3. Решение одной из возникших проблем
Чтобы устранить первый недостаток, следует построить бампер
шириной 20–25 см и закрепить его перед датчиком освещенности.
Подумайте, возможно ли закрепить датчик освещенности за бампером?
Второй и третий недостатки возможно устранить программно.
Допустим, увидев черную линию, тележка еще немного движется
вперед, выталкивая кеглю, и только после этого отъезжает внутрь
52
Глава 4. Кегельринг
круга. Реализующая такое поведение программа приведена на рисунке 4.4.
Рис. 4.4. Программа с задержкой после обнаружения черной линии
Весьма надежный способ однозначно вытолкнуть кеглю — это
дождаться значения белого на датчике освещенности после обнаружения роботом черной линии.
Начало
Повторять бесконечно {
Моторы вперед
Ждать черное
Ждать белое
Отъехать немного назад
Развернуться на 120-150 градусов
}
Конец
Теперь нужно добиться наибольшей точности движения робота,
не теряя при этом скорости.
В зависимости от конструктивных особенностей робота, при резких маневрах (повороты, остановки) он может «пойти юзом» или
встать на дыбы. Чтобы избежать этих нежелательных эффектов,
рекомендуется реализовать плавное торможение, простым примером которого может стать отключение моторов.
На точность поворота влияют тип команд, которые используются для управления моторами, и алгоритм расчета длительности поворота. К сожалению, осуществляемые повороты засчет временных
задержек — не лучшая стратегия. На малых промежутках времени
робот может по инерции поворачиваться на неопределенные углы,
поэтому имеет смысл реализовать синхронное торможение двигателями или воспользоваться готовыми командами (торможение дви-
4.2. Движение по звезде. Точные повороты.
Возврат в центр
53
гателем) в визуальной среде разработки. Торможение можно реализовать как постепенное уменьшение управляющего воздействия,
которое подается на мотор. Это даст роботу возможность не «пойти
юзом» при торможении.
Также отдельное внимание следует уделять оценке поверхности,
на которой проводятся испытания робота. Поверхности могут быть
с разными коэффициентами трения, за счет чего колеса могут пробуксовывать, тем самым внося неточности в измерения расстояния.
Поэтому для надежности возврат назад и повороты нужно производить по энкодерам.
Начало
Повторять бесконечно {
Моторы вперед
Ждать черное
Ждать белое
Отъехать назад на один оборот колес
Включить правое колесо назад на один оборот
}
Конец
4.2. Движение по звезде. Точные повороты.
Возврат в центр
Рис. 4.5. Движение по звезде
54
Глава 4. Кегельринг
Одним из способов контролировать положение робота на ринге
является возвращение в центр после каждого маневра. Т. е. робот
из центра круга едет к черной линии, затем возвращается точно в
центр, поворачивается и т. д. Если бы в моторах не было энкодеров,
пришлось бы замерять время, которое робот едет до черной линии,
а затем давать команду роботу ехать столько же времени назад.
Как говорилось выше, точность такого алгоритма работы заметно ниже, чем движение по энкодерам. Алгоритм движения робота
вперед-назад из центра до черной линии и обратно (без поворотов)
представлен ниже.
Начало
Измерить показания датчика освещенности на белом
Повторять бесконечно {
Сбросить таймер
Моторы вперед
Если Черное, то
Записать прошедшее время
Сбросить таймер
Моторы назад
Жди записанное время
}
Конец
Для достижения лучшей точности необходимо реализовать этот
алгоритм с использованием энкодеров, встроенных в моторы EV3.
Откуда можно узнать, сколько оборотов нужно сделать, чтобы вернуться точно в центр ринга? Как и в случае с таймером, воспользоваться переменной, в которой нужно запоминать количество оборотов колес. При этом после каждого возвращения робота в центр
нужно обнулять эту переменную. По замыслу робот едет некоторое количество оборотов вперед, затем возвращается назад, пока
на энкодере снова не будет ноль.
Начало
Измерить показания датчика освещенности на белом
Повторять бесконечно {
Обнули энкодер мотора C
Моторы B и C вперед
4.3. Поиск кеглей с помощью датчика
55
Жди темное (черную линию)
Тормози плавно
Моторы B и C назад
Жди 0 на энкодере мотора C
Поворот на 1/8 часть оборота мотора C
}
Конец
4.3. Поиск кеглей с помощью датчика
Итак, робот работает уже значительно точнее, но, тем не менее, последние кегли робот или не выталкивает до конца из круга,
или вовсе промахивается мимо них. Это объясняется тем, что робот
работает вслепую. Наделим робота возможностью видеть, для чего оснастим его ультразвуковым датчиком расстояния. Но сначала
разберем принцип работы этого датчика.
Датчик звука сделан в виде двух глаз, которые в конструкторе Lego EV3 подсвечиваются красным. Несмотря на их врешнюю
идентичность, выполняют они разные роли. Один из них является
излучателем, который излучает в пространство перед ним ультразвуковые волны. Второй служит для приема отраженных волн в
виде эха. Из-за особенности конструкции датчика, где глазки разнесены на некоторое расстояние, имеет смысл устанавливать этот
датчик горизонтально и не по середине робота. Т. е. нужно выбрать
такое его расположение на роботе, чтобы при обнаружении кегли
робот стоял ровно напротив банки. Например, при повороте робота по часовой стрелке датчик следует закрепить с левой стороны
робота, как показано на рисунке 4.6.
Алгоритм работы прост: робот вращается до тех пор, пока показания датчика расстояния не станут, например, меньше 45 см,
что будет означать наличие кегли перед роботом. Важно, что это
расстояние нужно выбирать из тех соображений, что робот должен
видеть кегли внутри круга, но не видеть вытолкнутые. Поэтому это
расстояние нельзя задавать большее радиуса круга.
Кроме того, датчик возможно располагать вертикально, что наделит робота способностью вращаться и по часовой стрелке, и против без изменения конструкции. При таком расположении датчика
нужно следить за высотой его расположения над полом. При низ-
56
Глава 4. Кегельринг
Рис. 4.6. Робот с установленным на нем ультразвуковым дальномером
Рис. 4.7. Поиск кегель с использованием датчика ультразвука
ком расположении он может видеть пол. Дополнительным улучшением может стать установка датчика ультразвука за бампером.
Начало
Измерить показания датчика освещенности на белом
Повторять бесконечно {
Медленно вращаться на месте
Ждать появления объекта ближе, чем 45 см
Сбросить показания энкодера на моторе C
4.3. Поиск кеглей с помощью датчика
57
Моторы вперед
Ждать черную линию
Плавно остановиться
Моторы назад
Ждать значение на энкодер мотора С, равное 0
}
Конец
В соответствии с приведенным алгоритмом и в зависмости от
конструкции робота, возможен один недостаток. А именно, когда
робот возвращается в центр круга, бывают случаи повторных попыток выталкивания только что вытолкнутой кегли. Это возникает
из-за неточного возвращения в центр круга и неточности измерения расстояния датчиком. Решить эту проблему можно, выталкивая кеглю дальше из круга и, по возвращению в центр, совершая
небольшой поворот вслепую.
Начало
Измерить показания датчика освещенности на белом
Повторять бесконечно {
Медленно вращаться на месте
Ждать 200 мс
Ждать появления объекта ближе, чем 45 см
Сбросить показания энкодера на моторе C
Моторы вперед
Ждать черную линию
Плавно остановиться
Моторы назад
Ждать значение на энкодер мотора С, равное 0
}
Конец
Когда вы добились стабильного выталкивания кегель из круга,
нужно подумать, как уменьшись время выталкивания. Например,
можно сэкономить время на остановках и поворотах, а также сократить траекторию движения — чем короче путь, тем меньше нужно
времени, чтобы его пройти. Например, после выталкивания кегли,
можно не возвращаться в центр, а сразу искать следующую кеглю.
Подробнее с всевозможными хитростями вы можете ознакомиться
на сайте http://www.myrobot.ru/.
58
Глава 4. Кегельринг
4.4. Движение по спирали
Движение по спирали, как показал опыт, — самый эффективный алгоритм для выталкивания кегель из круга за наименьшее
время. В конце 2012 г. в Санкт-Петербурге был поставлен рекорд —
2,4 с. Стоит заметить, что в этом алгоритме не используется датчик расстояния, а робот просто отрабатывает некоторую заданную
траекторию.
Рис. 4.8. Движение по спирали
Итак, спираль можно представить как окружность или дугу, у
которой с течением времени изменяется радиус. Первым делом научимся двигаться по окружности. Для дифференциальной тележки, которую мы используем в этих соревнованиях, радиус дуги,
которую описывает робот, определяется разностью скоростей моторов. Например, при равных скоростях на обоих моторах робот
едет прямо, а если один мотор включен, а другой выключен, то
робот описывает окружность вокруг своего неподвижного колеса.
Мы знаем, что диаметр круга кегельринга равен 1 м, скорости левого и правого моторов могут быть равны соответственно v1 = 100 и
v2 = 70. Важным параметром является расстояние между колесами,
поэтому окончательные значения следует найти самостоятельно.
Для стандартной тележки алгоритм движения по окружности
радиусом 1 м будет таким:
Начало
Повторять бесконечно {
4.4. Движение по спирали
59
Включить мотор B на 100
Включить мотор C на 70
}
Конец
Минимальный радиус круга будет получен при значении v2 = 0
(робот будет крутиться вокруг своего правого колеса). Таким образом, для постепенного увеличения радиуса достаточно увеличивать
скорость правого мотора от 0 до 70. Это можно выполнить, увеличивая v2 на единицу 70 раз. Достигнув желаемого значения, можно
продолжить движение по кругу в течение некоторого времени.
Начало
for v2 = 0...70 {
Включить мотор B на 100
Включить мотор C на v2
Ждать 0.1 с
}
Ждать 4 с
Выключить моторы B и C
Конец
Задержка 0,1 c обеспечит выполнение цикла за 7 с, чего на первом этапе вполне достаточно. Однако надо признать, что такая спираль «раскручивается» слишком быстро, в результате чего робот
пропускает часть кеглей. Увеличив время задержки или уменьшив
величину приращения скорости, можно повысить плотность витков спирали. Введем величину a, которая будет означать ускорение
второго мотора. Ускорение будет снижаться по мере приближения
к краю круга, что обеспечит плотность движения в той области,
где выше всего вероятность нахождения кеглей.
Начало
v1 = 100
v2 = 0
a = 1.2
Повторять, пока v2 меньше 70 {
Включить мотор B на v1
Включить мотор C на v2
60
Глава 4. Кегельринг
v2 = v2 + a
a = a - 0.01
Ждать 0.01 с
}
Ждать 4 с
Выключить моторы B и C
Конец
Согласно правилам кегельринга робот не может покидать круг
дольше, чем на 5 секунд, даже в случае, если все кегли уже выбиты. Решить эту проблему можно, например после достижения
скоростей для движения по окружности, остановиться и въехать в
круг, по заранее отлаженной траектории. Другим способом не покидать круг, может стать использование датчика освещенности для
движения вдоль линии. Для этого необходимо ввести в алгоритм
дополнительное условие: если поле под роботом белое, то раскручиваем спираль, иначе заходим в бесконечный цикл движения вдоль
черной линии.
Рис. 4.9. Движение по спирали
Алгоритм движения по спирали с последующим переключением
на движение по черной линии на П-регуляторе (Light — показания
с датчика освещенности).
Начало
v1 = 100
4.4. Движение по спирали
61
v2 = 0
a = 1.2
k = 3
grey = 45
Повторять, пока Light > grey {
Включить мотор B на v1
Включить мотор C на v2
v2 = v2 + a
a = a - 0.01
Ждать 0.01 с
}
Повторять бесконечно {
u = k * (Light - grey)
Включить мотор B на (v1 + u)
Включить мотор C на (v2 - u)
}
Конец
В последнем алгоритме, забегая вперед, мы коснулись темы движения по линии, которая будет подробно описана в следующей главе.
Состязания «Кегельринг» на протяжении нескольких последних
лет проводятся в Казахстане и находят все больше поклонников,
поскольку отличаются простотой и доступностью. Быть может, у
того, кто прочел этот материал, найдется достаточно решимости
подготовить своего робота и принять участие в подобных состязаниях.
Чтобы опробовать реализации рассмотренных тут алгоритмов
на визуальном или текстовом языках программирования, вы можете перейти в дополнительные материалы второго полугодия. Не
забывайте, что параметры нужно настраивать самостоятельно, так
как на их значения оказывают влияния многие факторы, такие как:
материал полигона, разные электрические характеристики моторов, разный износ механических передач, уровень заряда батареи
и многие другие.
Глава 5.
Движение в помещении. Поиск выхода
из лабиринта
Классические соревнования «Лабиринт» очень популярны в
странах СНГ.
Рис. 5.1. Пример лабиринта
Полигон. Самый простой пример полигона для лабиринта — это
лабиринт, вычерченный на полу или нарисованный на светлой бумаге, где линии представляют собой воображаемые стены. Очевидный недостаток такого полигона — это отсутствие стен — не всегда
можно понять, зацепил ли робот воображаемую стену. Поэтому для
достижения выдающихся результатов в этом виде соревнований авторы настоятельно рекомендуют построить настоящий лабиринт.
Классическая задача для любых лабиринтов — это найти из
него выход. Задача прохождения лабиринта интересна как робототехникам, так и программистам. Например, на соревнованиях
Micromouse, в которых участвуют студенты, сильные в робототехнике, электронике, математике и программировании. Micromouse —
это соревнования маленьких роботов-мышей по поиску пути в заданную клетку лабиринта размером 16 × 16 ячеек. Широкую популярность эти соревнования приобрели во многих странах, особенно
в Великобритании, Японии и Южной Корее.
63
Полигон-лабиринт для Lego-роботов следует изготовить не таким большим, а ограничиться, например размером 5 × 5 ячеек. Размер ячейки — 30 × 30 см. Стены полигона следует делать съемными, чтобы можно было легко менять конфигурацию лабиринта, что
позволит как следует протестировать робота.
Робот. Каким должен быть робот для успешного маневрирования в лабиринте? Так как лабиринт — это замкнутое пространство,
то робот не должен быть слишком быстрым. В соревновательных
лабиринтах, где все ячейки квадратные, приходится делать только повороты на 90∘ и проезд одной ячейки вперед, причем с максимально достижимой точностью. Если точность будет низкой, то
уже после нескольких поворотов робот зацепит стену и собъется с
пути. Хотя соприкосновение со стенами и не желательны, но в конструкции робота следует предусмотреть механизмы, которые позволят роботу двигаться вдоль стены в нужном направлении. Ультразвуковые датчики на роботе следует закреплять на некотором
расстоянии от края робота, чтобы минимальное расстояние видимости было больше 5 см.
Рис. 5.2. Простейший гусеничный робот
Исходя из перечисленных выше условий, оптимально будет использовать роботов на гусеничном ходу. Их следует закрепить наиболее прочно с предельным натяжением. От качества сборки робота
зависит точность и возможная скорости движений. В случае наличия ресурсных наборов, вместо пластиковых скользких гусениц
следует использовать резиновые.
64
Глава 5. Движение в помещении. Поиск выхода из лабиринта
В этом курсе доступны две инструкции по сборке робота для
лабиринта, которые вы найдете в дополнительных материалах к
этому модулю.
5.1. Базовые действия по энкодерам
Первое, с чего стоит начать — это реализовать точные перемещения робота. Это элементарные действия, которые возможно
совершать в лабиринте: проезд одной ячейки вперед, повороты направо и налево на 90∘ . Имеет смысл реализовать их как отдельные
подпрограммы или функции для последующего удобного использования.
Например, поворот налево на языке C и EV3SW представлены
ниже.
task main() {
nMotorEncoder[motorB] = 0;
motor[motorC] = 20;
motor[motorB] = -20;
while(nMotorEncoder[motorB] > -450) wait1Msec(1);
motor[motorC] = 0;
motor[motorB] = 0;
}
Рис. 5.3. Поворот робота налево в EV3SW
5.2. Известный лабиринт
После экспериментов с роботом, вы определите, что для проезда ячейки длиной 30 см требуется повернуть моторы примерно на
5.2. Известный лабиринт
65
1000∘ . А повороты на 90∘ на месте выполняются путем вращения
моторов в противоположные стороны на примерно 450∘ . Обратите внимание, что указанные здесь значения могут отличаться для
ваших роботов из-за отличий в конструкции и параметрах робота.
Рис. 5.4. Алгоритм движения робота в известном лабиринте
При первых запусках робот, скорее всего, начнет цепляться за
стыки стен и углы в лабиринте. Для предотващения этого закрепите направляющие горизонтальные колеса, например как на рисунке 5.5.
Установка таких колес в передней части робота позволит роботу
выравниваться при движении вдоль стен лабиринта даже в случаях
неточных движений робота.
Программу для прохождения известного лабиринта следует составлять из уже реализованных и отлаженных подпрограмм элементарных перемещений робота. На рисунке 5.6 показан пример
программ для прохождения нескольких ячеек некоторого лабиринта.
Такой подход позволяет внести ясность в управление роботом и
абстрагироваться от программной реализации низкоуровневых команд. Таким образом, прохождение лабиринта будет выглядеть как
простая последовательность команд: «Вперед», «Налево», «Направо». Неточности перемещения, связанные с люфтами и трением,
придется компенсировать конструктивно.
66
Глава 5. Движение в помещении. Поиск выхода из лабиринта
Рис. 5.5. Робот для прохождения лабиринта
Рис. 5.6. Пример программы в EV3SW с подпрограммами
В подпрограммы также можно включить команды, полезные
для настройки и отладки общей программы: вывод текущей информации на экран, воспроизведение звуков, характерных для той
или иной команды, ожидания и остановки робота.
Используя описанные действия, можно построить программу
прохождения лабиринта достаточно быстро. Однако при изменении его структуры придется менять и алгоритм. Существует ли
универсальный алгоритм прохождения лабиринта?
5.3. Правило правой руки
67
5.3. Правило правой руки
Классический алгоритм поиска выхода из лабиринта работает
по правилу «одной руки». Для правой руки, например, его можно
сформулировать следующим образом: робот движется, постоянно
контролируя стену справа. Если справа в стене появляется проход,
следует заехать в него. Если же перед роботом возникает стена,
роботу следует повернуть налево.
Рис. 5.7. Пример траектории движения робота в неизвестном лабиринте
Роботу придется пройти длинный путь, заходя во все тупики,
но в итоге цель будет достигнута.
Для успешности отработки этого алгоритма на роботе должны
быть установлены два ультразвуковых датчика расстояния, один из
которых направлен направо (правило правой руки), другой вперед.
И, как уже говорилось раньше, датчики следует крепить на удалении от краев робота для обеспечения минимального измеряемого
ими расстояния в 5 см.
Составим для робота алгоритм обхода лабиринта по правилу
правой руки.
Начало
Повторять бесконечно {
Если справа свободно
Поворот на месте направо
68
Глава 5. Движение в помещении. Поиск выхода из лабиринта
Вперед на одну клетку
Иначе
Если впереди свободно
Вперед на одну клетку
Иначе
Поворот на месте налево
}
Конец
Основной алгоритм следования по известному лабиринту заменяется на бесконечный цикл с двойной проверкой условия. Поскольку длина ячейки лабиринта составляет 30 см, то разумным
будет проверять аналогичное расстояние при поиске стены.
Далее, для робота можно реализовать защиту от застреваний.
Воспользуйтесь вашими наработками и самостоятельно постройте
алгоритм реакции на застревания робота.
Глава 6.
Роботы барабанщики. Простейшие
регуляторы
Первые роботы–барабанщики, построенные из Lego в 2009 году на кружке робототехники физико–математического лицея №239
г. Санкт–Петербург, были сделаны целиком из Lego. Алгоритмы
управления основаны на П-регуляторе и программировались на
Robolab, RobotC и Java.
Рис. 6.1. Робот–барабанщик учеников из ФМЛ №239
6.1. Создание ритма и импровизация. Простейшие регуляторы
Конструкция для барабанщика с одной палочкой изображена на
рисунке 6.2. Ничего особенного, разве что балку нужно взять самую
длинную. Барабаном в нашем случае выступит обычная парта, по
которой и будем стучать.
Однако, перед тем как ударить по столу, роботу нужно определить, где именно располагается плоскость «барабана». В технике
процедуру, когда нужно привести некоторую часть механизма в
определенной положение, пред началом работы этого механизма,
70
Глава 6. Роботы барабанщики. Простейшие регуляторы
Рис. 6.2. Наш робот–барабанщик
называют калибровкой. В нашем случае ее можно выполнить следующим образом: на низкой скорости в 2-3 % опускаем палочку по
направлению к поверхности стола в течении 2-3 секунд. Поскольку скорость и мощность в моторах взаимосвязаны, то уперевшись
в стол-барабан, палочка никак не повлияет на положение робота.
Запоминаем полученное положение палочки как нулевое. На этом
калибровка завершается.
Алгоритм калибровки:
Начало
Включи мотор A на скорость -5
Жди одну секунду
Обнули энкодер на моторе A
Включи мотор A на скорость 10
Жди значения на энкодере больше 15
Останови мотор A
Воспроизведи звуковой сигнал
Жди 0.5 секунды
Конец
Удар представляет собой поднятие палочки на 10o относительно нулевого положения (замах) и опускание в нулевое положение
6.1. Создание ритма и импровизация. Простейшие регуляторы 71
(удар). Дополнительно, из-за значительного люфта моторов Lego
и их инерции, следует прекращать опускание не в нулевом положении, а несколько раньше, например при достижении угла 5o .
Это может позволить сократить длительность соприкосновения с
поверхностью, а также воспользоваться энергией отскока, что значительно ускорит движение палочек. Робот получит возможность
воспроизводить довольно быстрый ритм.
Алгоритм воспроизведения ритма может выглядеть, например,
так:
Начало
Повторять бесконечно {
Поверни мотор A на 10 градусов
Поверни мотор A на -10 градусов
Жди 0.1 секунду
}
Конец
Если удар реализовать в подпрограмме, входным параметром
которой будет ожидание, то это даст возможность составлять некоторые простые ритмы. Параметры ожидания следует выбирать
кратные, например 0,2 секундам: 0,4, 0,6 и т.д. При слишком малых
длительностях робот может не успеть ударить или удар получится
тихим. Воспользовавшись этой особенностью, можно регулировать
громкость удара.
Удар также обладает некоторой длительностью и ее тоже нужно
учитывать при задании пауз.
После успешных экспериментов, можно заменить временную задержку ожиданием нажатия датчика касания — получаем управляемую игрушку 6.3. Таким образом, человеку нужно будет всеголишь нажимать на кнопку, а робот будет выполнять всю основную
работу.
Алгоритм для воспроизведения такого ритма, можно представить так:
Начало
Повторять бесконечно {
Поверни мотор A на 10 градусов
Поверни мотор A на -10 градусов
72
Глава 6. Роботы барабанщики. Простейшие регуляторы
Жди нажатие на кнопку датчика касания
}
Конец
Рис. 6.3. Управляемый робот–барабанщик с двумя барабанными
палочками
Теперь добавим второй мотор, симметрично повторив конструкцию уже собранной барабанной палочки. Для ее управления потребуется реализовать калибровку и повторить программу выполнения удара по нажатию датчика касания. Так как при выполнении
калибровки теперь две палочки будут опускаться и давить на стол,
для избежания приподнимания робота над столом следует уменьшить скорости опускания палочек при калибровке.
Для управления каждой палочкой независимо друг от друга
программы для правой и левой палочки следует поместить в параллельные задачи. Подробнее об этом вы сможете узнать в презентации 7.1 УМК.
При задании ритма важно учитывать как длительность пауз
между ударами, так и длительности самих ударов. Если, минимальная пауза для одной палочки равна примерно 0,2 секундам,
то двумя палочками возможно наносить удары каждую 0,1 секунда, т.е. 10 ударов в секунду.
6.2. Запоминание ритма
73
6.2. Запоминание ритма
Интересной задачей для робота–барабанщика является запоминание ритма, предложенного человеком. Из набора Lego mindstorms
NXT можно было собрать барабанщика, который на слух запоминал ритм. В новом конструкторе, к сожалению, нет датчика звука
(микрофона), поэтому ритм будем задавать программно.
Рис. 6.4. Управление двумя палочками в среде EV3SW
Рис. 6.5. Управление двумя палочками в среде RobotC
74
Глава 6. Роботы барабанщики. Простейшие регуляторы
Вынесем реализацию удара в отдельную подпрограмму и составим ритм по следующему алгоритму:
Начало
Калибровка
Повторять бесконечно {
Удар
Жди 0.4 секунды
Удар
Жди 0.2 секунды
Удар
Жди 0.4 секунды
}
Конец
Этот алгоритм, реализованный в среде EV3SW, представлен на
рисунке 6.6.
Рис. 6.6. Воспроизведение заданного ритма
Подобное воспроизведение можно реализовать, используя массивы. Запись ритма можно реализовать, используя гироскопические датчики или даже простые датчики касания, о которых мы
говорили выше.
6.3. Управление мотором. Релейный регулятор
Регулятор — это устройство, которое следит за состоянием объекта управления и вырабатывает управляющее воздействие на него
по определенному закону. Простой пример приведен на рисунке 6.7.
6.4. Управление мотором. Пропорциональный регулятор
75
Рис. 6.7. Пример: поплавочный регулятор жидкости
Релейный регулятор — это регулятор, изменяющий скачком
управляющее воздействие на систему при прохождении регулируемой величины через пороговые (фиксированные) значения. Скачкообразное изменение управляющего воздействия осуществляется
релейным элементом, который может иметь несколько устойчивых
состояний (например два: «включено–выключено»).
На рисунке 6.8 изображена релейная характеристика регулятора, приведенного на рисунке 6.9, для стабилизации балки в положении 45o . На оси абсцисс откладываются углы поворота мотора, а
на оси ординат — управляющее воздействие (скорость, мощность),
которое подается на мотор.
6.4. Управление мотором. Пропорциональный регулятор
Пропорциональный регулятор — это устройство, оказывающее
управляющее воздействие на объект управления пропорционально
его отклонению от положения равновесия.
Математически это записывает так
u = k · (x0 − x),
(6..1)
76
Глава 6. Роботы барабанщики. Простейшие регуляторы
U
20
α
45
−20
Рис. 6.8. Релейная характеристика
Рис. 6.9. Релейный регулятор в среде EV3SW
где, k — коэффициент усиления, который служит для согласования
показаний датчиков с необходимыми управляющими воздействиями для моторов, x0 — уставка или желаемое значение положения
балки, x — текущее положение балки.
Использование П–регулятора позволит стабилизировать работу барабанщика на очень больших скоростях. Для регулятора будет два ключевых положения уставки, в которых должна располагаться барабанная палочка: 0 и 10o . Оба положения сдвинем для
компенсации инерции. Запишем алгоритм для одного мотора.
Начало
Калибровка
6.4. Управление мотором. Пропорциональный регулятор
77
U
100
α
45
−100
Рис. 6.10. Пропорциональная характеристика
Рис. 6.11. Важные термины
Обнулить значение энкодера мотора A
Повторять бесконечно {
u = 5 * (45 - Значение_с_энкодера)
Включить мотор A на скорость u
Жди 0.001
}
Конец
Проскакивание объектом управления значения уставки в процессе управления является проявление эффекта перерегулирования, наглядно изображенного на рисунке 6.12. Уменьшив коэффи-
78
Глава 6. Роботы барабанщики. Простейшие регуляторы
циент усиления, можно уменьшить или вообще избавиться от колебаний.
Угол
Процесс с перерегулированием
45
Процесс без перерегулирования
t
0
Рис. 6.12. Переходные процессы стабилизации балки в положении
45o
6.5. Контроль скорости
Рассмотренные регуляторы можно использовать не только для
стабилизации, но и для слежения за некоторым эталонным сигналом. Например, поддерживая постоянную скорость, можно реализовать настоящую секундную, минутную или часовую стрелку.
Для простоты подробнее рассмотрим секундную стрелку. Каждую секунду изменяется уставка, а вместе с ней и положение стрелки. Чтобы мотор вращался с постоянной скоростью нужно ввести
пропорциональную зависимость угла отклонения от времени:
α = k2 · t,
(6..2)
u = k1 · (α − eA ),
(6..3)
где k2 — ускоряющий коэффициент, t — значение времени с таймера,
α — задающее воздействие.
Таким образом, пропорциональный регулятор для контроля
скорости примет вид
6.6. Математический барабанщик
79
где k1 — коэффициент усиления, eA — текущее положение балки
(значение энкодера).
Если k2 установить равным 6, то наша секундная «стрелка» будет проходить один полный оборот ровно за минуту. Коэффициент k1 в этом случае играет роль усиливающего коэффициента для
согласования величин невязки и управляющего воздействия на мотор. Настраивается он для каждого мотора индивидуально, начиная со значения 0,5 и в большую сторону.
При коэффициенте k1 = 12, стрелка сделает оборот за 30 секунд,
а при k1 = 1 — за 360 секунд. Обязательно поэкспериментируйте с
изменением коэффициентов.
Итак, сейчас наша стрелка совершает «тик» каждую секунду.
Как можно сделать так, чтобы стрелка делала большие шаги, сохранив при этом скорость. Например пройти полный оборот за одну
минуту с шагом в 5o ? На помощь к нам приходит целочисленное
деление.
Целочисленное деление — арифметическая операция, результатом которой является целая часть частного, полученная делением
одного целого числа на другое целое число.
На «си–подобных» языках программирования это записывается
как
(6..4)
α = k2 · t / 5.
Заменив выражение (6..2) на (6..4), получим секундную стрелку
меняющую свое положение раз в 5 секунд.
Для понимания смысла целочисленного деления вспоминайте
следующий пример.
Чтобы поделить семь топоров между пятью дровосеками, нужно каждому дровосеку дать по одному топору, а еще два останутся
ничьими.
6.6. Математический барабанщик
Используя деление с остатком, мы можем запрограммировать
не только часы, но и нашего барабанщика!
80
Глава 6. Роботы барабанщики. Простейшие регуляторы
Задав ритм регулятором:
α = k2 · t % 2,
u = k1 · (α − eA ),
получим барабанщика, который бьет по столу один раз в две секунды.
Рис. 6.13. Математический барабанщик
Изменяя делитель, вы можете создавать целые последовательности ударов с различными, математически заданными, паузами
между ними.
Все инструкции и программы к алгоритмам вы найдете в дополнительных материалах.
Глава 7.
Следование по линии
Следование по линии — это классическая соревновательная номинация. Несмотря на то, что в ней заложена простая идея, можно
применить множество подходов для ее реализации. Выбор одного
из них зависит от конкретной конструкции робота, от количества
сенсоров, их расположения относительно колёс и друг друга и многих других причин.
Робот. В качестве робота используется дифференциальная тележка, спереди на оси симметрии которой расположены один, два
или более (зависит от выбранного алгоритма управления) датчиков
освещенности.
Рис. 7.1. Расположение датчика освещенности
Полигон. Как правило, это белое поле с нанесенной на него трассой — черной линией замысловатой или простой формы. На нее
также могут быть нанесены отметки старта и финиша и разная
дополнительная разметка, которая зависит от номинации. Ширина
линии, как правило, 50 мм.
Цель соревнований — пройти круг за наименьшее время.
82
Глава 7. Следование по линии
Рис. 7.2. Пример полигона для следования по линии
Следование по линии является задачей, в которой можно применять на практике теорию управления. Одна из главных задач
теории автоматического управления — это управление с обратной
связью. Тут можно выделить четыре основных компонента:
∙ управляемую систему (или объект управления) — то, чем мы
хотим управлять;
∙ цель управления — то, чего мы хотим достичь при помощи
управления, т. е. желаемое поведение объекта управления;
∙ список измеряемых переменных (или выходов) — то, что мы
можем измерять;
∙ список управляющих переменных (или входов) — то, что мы
можем менять для того, чтобы воздействовать на объект
управления.
Другим важным компонентом является регулятор — устройство, вырабатывающее управляющее воздействие, необходимое для
достижения цели управления. Этот пятый компонент вводится в
систему после того, как найдено теоретическое решение задачи.
Под теоретическим решением будем понимать нахождение закона
(алгоритма) управления, который обеспечивает достижение цели.
Использование найденного закона в системе управления роботом
7.1. Релейный регулятор
83
позволит рассчитывать управляющее воздействие для моторов из
получаемых измерений с датчиков.
В случае следования вдоль черной линии будем рассматривать
простейший случай, когда нужно поддерживать систему в определенном состоянии (датчик освещенности над границей между
черным и белым). Для решения задачи регулирования к объекту
управления (роботу) подключается регулятор. Система, включающая объект управления и регулятор, называется системой управления.
7.1. Релейный регулятор
На первых порах в соревнованиях обычно используют дифференциальную тележку с одним датчиком освещенности, которая
должна двигаться вдоль черной линии (вдоль границы межу черным и белым). Пример возможной конструкции такой тележки
представлен на рисунке 7.3.
Рис. 7.3. Дифференциальная тележка с одним датчиком освещенности
Очевидный алгоритм для движения робота вдоль черной линии
можно представить так:
Начало
Повторять бесконечно {
Едь вперед вправо
Жди черную линию
84
Глава 7. Следование по линии
Едь вперед влево
Жди белое поле
}
Конец
Для запуска нужно поставить робота слева от черной линии по
ходу движения, иначе он будет вращаться на месте. Представленный выше алгоритм уже представляет собой регулятор.
У релейного или релейного двухпозиционного регулятора регулирующий орган под действием сигнала от датчика может принимать одно из двух положений: «открыт» или «закрыт». При этом
управляющее воздействие на регулируемый объект может быть
только максимальным или минимальным.
В нашем случае робот едет вдоль границы между белым и
черным. Для определения этой границы нужно расчитать среднее
арифметическое между показаниями датчика освещенности на белом и черном по формуле
grey =
black + white
.
2
(7..1)
Исполнительным органом объекта в данном случае будут два
колеса, подключенные к сервоприводам (моторам). Регулируемая
величина — положение датчика света на границе черного и белого,
зависящее от уровня освещенности под ним. Возмущающее воздействие — это движение робота вперед, которое приводит к отклонению от границы. Поскольку линия может быть кривой, а также
вследствие других факторов, при отсутствии регулирующего воздействия робот непременно съедет с линии.
Подключим левый мотор в порт В, правый — в порт C. Начальная позиция робота — датчик на белом. Построим регулятор,
который обеспечит движение робота по дуге к черной линии, пока
датчик на белом, и движение к белому — пока датчик над черным. Для этого отключается или понижается мощность одного из
моторов. На рисунке 7.4 реализация на EV3SW.
Значение «серого» (grey) может быть константой для данной
системы или вырабатываться в результате предварительной калибровки как среднее арифметическое черного и белого. Увеличить
скорость движения можно, если во время поворотов не выключать
7.1. Релейный регулятор
85
Рис. 7.4. Релейный регулятор для следования по линии, grey = 30
второй мотор — таким образом можно добиться приличной скорости и плавности, задав для более медленного мотора максимально допустимую скорость, которая позволит роботу не терять даже
самый крутой поворот на трассе. С учетом этого можно модифицировать алгоритм следующим образом (B — левый мотор, C —
правый):
Начало
Повторять бесконечно
Включи мотор
Включи мотор
Жди черное
Включи мотор
Включи мотор
Жди белое
}
Конец
{
B на 100
С на 40
B на 40
С на 100
Под управлением такого регулятора робот движется вдоль линии границы по ломаной кривой, периодически наезжая то на черное, то на белое. Скорость и стабильность его невысоки, а траектория движения оставляет желать лучшего. Все это издержки использования двухпозиционного релейного регулятора.
86
Глава 7. Следование по линии
7.2. Пропорциональный регулятор. Один датчик освещенности
При автоматическом регулировании управляющее воздействие
u(t) обычно является функцией динамической ошибки — отклонения e(t) регулируемой величины x(t) от ее заданного значения x0 (t):
e(t) = x0 (t) − x(t).
(7..2)
u(t) = k · e(t),
(7..3)
Это принцип регулирования по отклонению или принцип обратной связи. Математическое выражение функциональной зависимости желаемого управляющего воздействия u(t) от измеряемых регулятором величин называется законом или алгоритмом регулирования, о котором говорилось выше.
Пропорциональный регулятор — это устройство, оказывающее
управляющее воздействие на объект пропорционально его отклонению от заданного состояния:
где k — коэффициент усиления регулятора.
Заданное состояние x0 принято называть уставкой, а отклонение
от него — невязкой. Далее для определенности будем обозначать
невязку сокращением err (от англ. слова «error» — ошибка).
Рис. 7.5. Что видит человек, а что робот
В связи с тем, что датчик освещенности измеряет освещенность
отраженного цвета в некоторой области, как правило, подсвеченной
7.3. Релейный четырехпозиционный регулятор
87
на lego-датчиках красным светодиодом, измерения больше напоминают не границу белого и черного, как на рисунке 7.5 (сверху), а
на градиент (снизу). Используя эту особенность, можно построить
пропорциональный регулятор.
Также как и в релейном регуляторе, необходимо определить
среднее значение между черным и белым, обозначим его grey. Это
будет то состояние датчика освещенности s1 , к которому должна
стремиться система.
Коэффициент k может быть достаточно мал (от 1 до 3) для
маневренного робота.
Рис. 7.6. П-регулятор на RobotC
Регулятор с рисунка 7.6 эффективно работает только для малых углов отклонения, поэтому робота надо ставить в направлении
движения так, чтобы датчик оказался по левую сторону от черной линии. Если датчик заедет на черную линию, управляющее
воздействие станет отрицательным, и левый мотор будет вращаться медленнее правого, что выровняет робота. Нетрудно заметить,
что движение по линии на П-регуляторе отличается плавностью, и
на некоторых участках робот движется практически прямолинейно
или точно повторяя изгибы линии.
7.3. Релейный четырехпозиционный регулятор
Существует большое количество вариантов соревнований, где
требуется следовать вдоль линии. И часто возникает необходимость
определенным образом реагировать на перекрестки — пересечения
88
Глава 7. Следование по линии
черных линий. Правильно реагировать на перекрестки возможно,
если установить на робота два датичка освещенности, закрепив их
несколько шире линии.
Для начала используем релейный регулятор, с помощью которого можно обработать четыре возможных состояния(рисунок 7.7)
датчиков:
∙ оба на белом — движение прямо;
∙ левый (s1 ) на черном, правый (s2 ) на белом — движение налево;
∙ левый на белом, правый на черном — движение направо;
∙ оба на черном — движение прямо.
Этот регулятор реализуется программно с помощью вложенных
ветвлений.
Рис. 7.7. Возможные события при следовании по линии с двумя
датчиками освещенности
Довольно сложная программа, и это без учета калибровки, дополнительных проверок и обработки особенных случаев поведения
робота в зависимости от соревнований. Также стоит заметить, что
такой алгоритм чувствителен к внешним возмущениям в виде солнца, вспышек от фотоаппаратов и вообще изменению освещения в
комнате, где функционирует робот.
7.4. Пропорциональный регулятор. Два датчика освещенности 89
7.4. Пропорциональный регулятор. Два датчика освещенности
Этот регулятор интересен тем, что на его работу практически
не влияют изменение освещенности в помещении.
Как применить рассмотренные ранее наработки для пропорционального регулятора в случае двух датчиков? Например, релейный
регулятор работает следующим образом:
∙ при двух белых едет прямо;
∙ при одном черном поворачивает в сторону черного;
∙ при двух черных едет прямо.
Заметим, что при равных показаниях датчиков робот должен
ехать прямо. Следовательно, в случае, если датчики откалиброваны абсолютно одинаково, программу можно записать так:
u = k * (SensorValue[s1] - SensorValue[s2]);
motor[motorB] = 50 + u;
motor[motorC] = 50 - u;
Если значение на левом датчике s1 уменьшится (датчик находится над темным), управление станет отрицательным и мотор B
станет вращаться медленнее, чем мотор C. Робот начнет поворачивать влево. И наоборот, в случае если левый датчик над светлым.
Но в реальной жизни редко попадаются одинаково откалиброванные датчики. Поэтому следует производить калибровку их показаний совместно, перед запуском робота. Тогда в регуляторе будут
использоваться не абсолютные значения с датчиков освещенности,
а их отклонения.
Коэффициент k может изменяться в достаточно широком диапазоне (1–20 и более) в зависимости от кривизны линии, маневренности робота и разницы между черным и белым на поле.
В заключение сделаем два важных замечания:
∙ калибровка должна производиться на одноцветной поверхности;
90
Глава 7. Следование по линии
Рис. 7.8. Реализация калибровки перед стартом
∙ встречаются датчики, показания которых отличаются на 10 −
20% друг от друга. Желательно их не ставить в паре на робота c большим коэффициентом регулятора, поскольку при резком изменении общей освещенности, даже на одноцветной поверхности, разница может оказаться достаточной, чтобы робот сбился с линии.
7.5. Подсчет перекрестков
Используя пропорциональный регулятор, робот может пересекать перекрестки, даже не замечая их. Однако для реального
робота-автомобиля постоянно возникают ситуации, когда нужно
проехать некоторое количество перекрестков прямо, а на очередном
повернуть или остановиться. Тогда в алгоритме регулятора потребуются дополнительные условия.
Сформулируем упрощенную задачу. На пути между стартом и
финишем присутствует известное число перекрестков. Старт и финиш также являются перекрестками (могут быть и Т-образными).
Необходимо, проезжая каждый перекресток, издавать звуковой
сигнал, а после финиша остановиться.
Для подсчета перекрестков следует завести переменную, которую перед началом работы основной программы нужно обнулить.
7.5. Подсчет перекрестков
91
Теперь, когда робот видит обоими датчиками черное, следует издать звуковой сигнал и увеличить переменную счетчика на единицу. Как только счетчик превысит количество перекрестков на
полигоне, следует остановиться.
Рис. 7.9. Пример подсчета перекрестков с остановкой на пятом
Если сейчас запустить робота, то он пиликнет несколько раз и
почти сразе же остановится. Такое поведение объясняется высокой
частотой измерения показаний с датчиков. Т.е. за одну секунду с
датчика считываются его показания несколько сотен раз. Отсюда
становится очевидным, что за время, которое робот едет над черной
линией, переменная успевает увеличиться и превысить заданное количество перекрестков, после чего робот останавливается. Решается эта проблема внесением простой задержки после обнаружения
перекрестка, величина которой определяется из тех соображений,
чтобы робот успевал проехать перекресток.
Все рассмотренные алгоритмы и инструкции роботов вы найдете в дополнительных материалах.
Глава 8.
Путешествие по комнате. Защита
от застреваний
8.1. Путешествие с помощью датчика ультразвука
Естественная среда обитания домашнего робота, построенного
из Lego, — это комната с мебелью. И для начала неплохо было
бы научиться путешествовать по ней, по возможности ни с чем не
сталкиваясь и не застревая. Подходящая конструкция для такого
робота — это трехколесная дифференциальная тележка с установленным ультразвуковым датчиком наверху.
Рис. 8.1. Дифференциальная тележка с датчиком ультразвука
Датчик следует закрепить строго горизонтально и на достаточной высоте, чтобы он воспринимал только значимые объекты в комнате.
Похожий алгоритм мы уже реализовывали, когда занимались
кегельрингом — это путешествие в круге. Отличие состоит только
в датчике: в кегельринге мы использовали датчик освещенности, а
8.2. Параллельные задачи
93
тут нужно использовать ультразвуковой датчик расстояния. Отъезд назад можно сделать одним движением — по дуге.
Начало
Повторять бесконечно {
Моторы вперед
Жди расстояния меньше, чем 25
Включить мотор B на -100
Включить мотор С на -40
Жди 2 секунды
}
Конец
Так как робот «слеп» при таком отъезде назад, это может приводить к небольшим авариям, поэтому внимательно анализируйте
возможные «неудачные» условия.
8.2. Параллельные задачи
Так же как и в главе про роботов-барабанщиков, тут можно
применить параллельные задачи. Например одновременно с путешествием по комнате проигрывать мелодию или реализовать сторожевой таймер.
Рис. 8.2. Параллельная задача
94
Глава 8. Путешествие по комнате. Защита от застреваний
В презентационном материале вам предлагается несколько вариантов использования параллельных программ. Испытайте их в
действии!
8.3. Сторожевой таймер
Проведя несколько экспериментов, можо заметить, что робот
объезжает не все предметы, которые попадают в его поле зрения.
Например, если препятствие слишком низкое или узкое, то датчик
просто не заметит его и произойдет солкновение. Также, если объект на пути робота имеет тканевую обивку, которая не отражает
испускаемые ультразвуковым датчиком волны, робот его не увидит.
Не увидев препятствие (тапок или ножку стула), робот наедет
на него и, вероятно, застрянет. В таких случаях можно воспользоваться трюком, заключающимся в следующем: так как размеры
комнаты ограничены и робот не может ехать вперед бесконечно,
можно установить в программе ограничение на время движения
вперед. Например если робот проезжает от одной стены до другой
за 10 с, то если в программе обнаружить, что текущее время движения робота вперед больше 10 с, то можно предположить, что робот
застрял и необходимо изменить направление его движения. Для
решения возникшей проблемы воспользуемся «сторожевым таймером».
Также можно заметить в нашей программе повторяющиеся
группы блоков. Хорошей идеей будет объединить их в подпрограммы. Таким образом, подпрограмма отъезда будет вызываться в
двух случаях:
∙ при наличии препятствия;
∙ при срабатывании сторожевого таймера.
Но в этой программе есть один существенный недостаток. Из
двух параллельных задач происходит обращение к одним и тем же
моторам. Если это произойдет, может возникнуть непредвиденное
поведение робота. Далее рассматривается правильный подход.
8.4. Дополнительный бампер
95
Рис. 8.3. Сторожевой таймер
Рис. 8.4. Сторожевой таймер с подпрограммами
8.4. Дополнительный бампер
Чем больше у робота органов чувств, тем эффективнее и безопаснее он может функционировать в неизвестном для него пространстве. Оснастим робота еще одним датчиком и бампером, который нужно закрепить достаточно низко и широко. Такой бампер
с датчиком касания поможет роботу обнаружить те препятствия,
которые не были замечены датчиком расстояния.
96
Глава 8. Путешествие по комнате. Защита от застреваний
Рис. 8.5. Конструкция бампера
С учетом дополнительного датчика, нужно модифицировать
программу. Теперь отъезд с разворотом должен осуществляться в
нескольких случаях: во-первых, когда поступил соответствующий
сигнал с одного из датчиков и, во-вторых, при застревании.
Так как поразумевается непосредственный контакт робота с препятствиями, имеет смысл понизить скорость робота, чтобы избежать аварий.
Рис. 8.6. Модификация алгоритма робота-путешественника
8.4. Дополнительный бампер
97
В предложенном алгоритме повод для отъезда назад с разворотом — появление числа 1 в переменной, что возможно вследствие
одного из трех событий:
∙ нажатия на датчик касания;
∙ появления препятствия в зоне обзора датчика расстояния;
∙ критического значения сторожевого таймера.
Все три процесса контролируются из параллельных задач, а моторами управляет только главная задача.
Простая и эффективная конструкция для датчика касания, которая обеспечит срабатывание практически в любом положении,
показана на рисунке 8.5. Ширину бампера, который выполнен в
виде оси, закрепленной на изогнутую балку, можно увеличить до
ширины самого робота.
Программы и инструкции по сборке, рассмотренные в этой части, вы можете найти в дополнительных материалах.
Глава 9.
Базовые регуляторы и алгоритмы
Как должен реагировать робот, если он обнаружил препятствие? Рассмотрим три варианта действия на примере движения
робота по линии:
∙ остановка и ожидание исчезновения препятствия;
∙ движение назад (с разворотом или без);
∙ объезд препятствия и продолжение программы движения.
9.1. Двухмоторная тележка. Безаварийное движение
Пусть робот едет вдоль черной линии, и перед ним оказывается препятствие. Как избежать столкновения с ним? Установить
датчик расстояния, направленный вперед. Тогда алгоритм работы
робота будет следующим:
Начало
Повторять бесконечно {
Если расстояние больше 30 см
Скорость v = 100
Иначе
Скорость v = 0
Управление u = k * (s1 - grey)
Мотор B = v + u
Мотор С = v - u
}
Конец
В этом алгоритме робот резко набирает скорость и резко останавливается, что необычно и опасно для дорожного движения.
9.2. Реакция на препятствие
99
А при остановке сильно колеблется на месте, выравниваясь на линии. Как можно избежать этого? Нужно ввести пропорциональное
управление скоростью и переменный усиливающий коэффициент.
Отладьте программу с рисунка 9.1 и запустите всех доступных роботов одновременно. Как можно улучшить программу?
Рис. 9.1. Программа безаварийного движения на RobotC
9.2. Реакция на препятствие
Модифицируем предыдущий алгоритм. Теперь будем не просто
останавливаться и ждать, пока препятствие не исчезнет, а развернемся и поедем в обратном направлении.
Начало
Повторять бесконечно {
Если расстояние меньше 30 см
Обнулить энкодер мотора B
Моторы в разные стороны
Жди на энкодере мотора B 400 градусов
Управление u = k * (s1 - grey)
Мотор B = v + u
Мотор С = v - u
}
Конец
100
Глава 9. Базовые регуляторы и алгоритмы
Настроим точный поворот робота, все должно заработать как
часы — робот, увидев препятствие, отворачивается от него и уезжает в противоположную сторону. Но такое поведение не всегда
полезно, давайте модифицируем наш алгорит так, чтобы робот объезжал возникшее препятствие и продолжал движение вперед.
9.3. Объезд препятствия
Можно придумать множество способов, как объезжать тот или
иной объект, например на рисунке 9.2 изображены два способа.
Рис. 9.2. Варианты объезда препятствий
Составим алгоритм объезда препятствия с возвратом на линию.
Начало
Поворот на 90 градусов
Движение по дуге
Жди 1 секунду
Жди черную линию
Налево на 90 градусов
Конец
Заменив в предыдущем алгоритме часть с разворотом на этот,
получим:
9.4. Слалом. Объезд с чередованием
101
Начало
Повторять бесконечно {
Если расстояние меньше 30 см
Поворот на 90 градусов
Движение по дуге
Жди 1 секунду
Жди черную линию
Налево на 90 градусов
Управление u = k * (s1 - grey)
Мотор B = v + u
Мотор С = v - u
}
Конец
Программа на RobotC будет выглядеть как на рисунке 9.3.
Рис. 9.3. Следование по линии с объездом препятствий
Настройте коэффициенты и в путь!
9.4. Слалом. Объезд с чередованием
Как мы выяснили, движение робота по линии может сопровождаться объездом препятствий. Название состязаний «Слалом по линии» произошло от известного вида спорта, в котором спортсмен
102
Глава 9. Базовые регуляторы и алгоритмы
проезжает через ворота, расположенные то справа, то слева по ходу движения. В нашем случае штангой ворот или препятствием
будет служить жестяная банка объемом 0,33 л, оклеенная белым
ватманом, похожая на кеглю из кегельринга. Для того чтобы робот
ее заметил, спереди у него следует установить датчик расстояния.
Размещая датчик, будьте внимательны и постарайтесь убрать провода из поля его зрения.
Рис. 9.4. Общие правила для слалома роботов
За короткий отрезок времени робот должен пройти трассу, огибая препятствия (как правило, кегли) по принципу традиционного
слалома — поочередно слева и справа. Старт и финиш обозначены
на полигоне квадратами. Типичное поле для слалома изображено
на рисунке 9.5
Рассмотрим алгоритм для движения по линии с вызовом
подпрограммы объезда с чередованием направления: то справа, то
слева. Знак переменной sign после каждого объезда изменяется на
противоположный, чем обеспечивается его чередование. В этом же
алгоритме реализовано плавное торможение перед объектом с помощью регулировки скорости движения v по расстоянию 50.
Настройте программу так, чтобы робот, не путая направления
объезда препятствий, проехал трассу за минимальное время!
Все программы и инструкции по сборке, рассмотренные в этой
главе, вы найдете в дополнительных материалах.
9.4. Слалом. Объезд с чередованием
Рис. 9.5. Поле для проведения соревнований по слалому
Рис. 9.6. Пример программы для слалома на RobotC
103
Заключение
Прочитав эту книгу и выполнив задания из презентационного
материала уроков, вы примкнули к огромному сообществу робототехников. На страницах этого учебного пособия вы затронули
основы конструирования роботов на примере конструкторов Lego,
познакомились с некоторыми приложениями математики и физики
в робототехнике, изучили принципы работы датчиков, познакомились с основными понятиями теории автоматического управления,
без которой немыслима современная техника, разобрали некоторые из соревновательных номинаций школьной робототехники, научились программировать поведение роботов и многое другое. Вы
большие молодцы! Эта книга является всего лишь маленьким шагом в мир роботов, вас ждет еще более увлекательное путешествие
в эту захватывающую прикладную науку — робототехнику.
За оказанную помощь авторский коллектив выражает благодарности Холунину Сергею Анатольевичу, Лосицкому Игорю Александровичу и Капитонову Александру Александровичу.
Особую благодарность авторский коллектив выражает Филиппову Сергею Александровичу за предоставленные материалы и
компании ООО РобоЭд (RoboEd.ru) за поддержку данной книги.
Вопросы и предложения вы можете направить по адресу:
chepinskiy@roboed.ru
Добриборщ Дмитрий Эдуардович
преподаватель курсов по
робототехнике на базе конструкторов
Lego Mindstorms NXT и Lego
Mindstorms EV3 в Университете ИТМО
Артемов Кирилл Александрович
преподаватель курсов по
робототехнике на базе конструкторов
Lego Mindstorms NXT и Lego
Mindstorms EV3 в Университете ИТМО
Чепинский Сергей Алексеевич
кандидат технических наук, доцент,
директор Базовой профориентационной
школы мегафакультета Компьютерных
технологий и управления
Университета ИТМО, основатель
проекта RoboEd.
Бобцов Алексей Алексеевич
доктор технических наук, профессор,
директор мегафакультета
Компьютерных технологий и
управления Университета ИТМО
Список литературы
1. Санкт-Петербургские олимпиады по кибернетике / М. С. Ананьевский, Г. И. Болтунов, Ю. Е. Зайцев [и др.]. — СПб.: Наука,
2006. — 384 c.
2. Филиппов С. А. Робототехника для детей и родителей. — 3-е
изд., доп. и испр. — СПб.: Наука, 2013. — 319 с.
3. Быков В. От маятника к роботу. Введение в компьютерное
моделирование управляемых механических систем. — СПб.:
Наука, 2011. — 86 с.
4. Лучин Р. Программирование встроенных систем: от модели к
роботу. — СПб.: Наука, 2011. — 184 с.
5. Технология Lego Mindstorms NXT в обучении студентов основам адаптивного управления / А. А. Бобцов, Ю. А. Капитанюк, С. А. Чепинский [и др.]. // Научно-технический вестник
СПбГУ ИТМО. — 2011. — С. 103–108.
6. Using of Lego Mindstorms NXT Technology for teaching of
basics of adaptive control theory / A. Bobtsov, S. Chepinskiy, S.
Kolyubin [et al.]. // 18th IFAC World Congress. Milan. Italy. —
2011.
7. Course of lab activities on control theory based on the Lego
NXT / A. Kapitonov, Y. Kapitanyuk, S. Chepinskiy [et al.]. //
IFAC Proceedings Volumes (IFAC-PapersOnline). — 2014.
8. Бобцов А. A. Создание массовых образовательных решений в
области школьной и студенческой робототехники / A.A. Бобцов, В. Н. Васильев, С.А. Чепинский // Сборник докладов по
итогам Форума инноваций по робототехнике «Дни Робототехники в г. Сочи». — 2015. — С. 23–29.
107
9. Бобцов А. Система навигации и управления движением мобильным роботом / А.А. Бобцов, Д. Э. Добриборщ, А. А.
Капитонов // Научно-технический вестник информационных
технологий, механики и оптики. — 2017. — С. 365–367.
10. Dobriborsci D., Kapitonov A., Nikolaev N. The basics of the
identification, localization and navigation for mobile robots //
Proceedings of the International Conference on Information and
Digital Technologies. — 2017. — P. 100–105.
11. Капитонов А. Введение в моделирование и управление для
робототехнических систем. — Институт компьютерных исследований, 2016. — 107 с.
Дмитрий Эдуардович ДОБРИБОРЩ,
Кирилл Александрович АРТЕМОВ,
Сергей Алексеевич ЧЕПИНСКИЙ,
Алексей Алексеевич БОБЦОВ
ОСНОВЫ РОБОТОТЕХНИКИ
НА LEGO® MINDSTORMS® EV3
Учебное пособие
Издание шестое, стереотипное
Зав. редакцией
инженернотехнической литературы И. В. Денисюк
ЛР № 065466 от 21.10.97
Гигиенический сертификат 78.01.10.953.П.1028
от 14.04.2016 г., выдан ЦГСЭН в СПб
Издательство «ЛАНЬ»
lan@lanbook.ru; www.lanbook.com
196105, СанктПетербург, пркт Ю. Гагарина, д. 1, лит. А.
Тел./факс: (812) 3362509, 4129272.
Бесплатный звонок по России: 88007004071
ГДЕ КУПИТЬ
ДЛЯ ОРГАНИЗАЦИЙ:
Для того, чтобы заказать необходимые Вам книги, достаточно обратиться
в любую из торговых компаний Издательского Дома «ЛАНЬ»:
по России и зарубежью
«ЛАНЬТРЕЙД». 196105, СанктПетербург, пркт Ю. Гагарина, д. 1, лит. А.
тел.: (812) 4128578, 4121445, 4128582; тел./факс: (812) 4125493
email: trade@lanbook.ru
www.lanbook.com
пункт меню «Где купить»
раздел «Прайслисты, каталоги»
в Москве и в Московской области
«ЛАНЬПРЕСС». 115432, Москва, пркт Андропова, д. 10
(БЦ Технопарк Плаза), этаж 6, оф. 6.006
тел.: (499) 3506210, (495) 2527920; email: lanpress@lanbook.ru
в Краснодаре и в Краснодарском крае
«ЛАНЬЮГ». 350010, Краснодар, ул. Зиповская, д. 9, литер Д, пом. 31;
тел.: (861) 2741035; email: lankrd98@mail.ru
ДЛЯ РОЗНИЧНЫХ ПОКУПАТЕЛЕЙ:
интернет5магазин
Издательство «Лань»: http://www.lanbook.com
магазин электронных книг
Global F5: http://globalf5.com/
Подписано в печать 29.04.26.
Бумага офсетная. Гарнитура Школьная. Формат 60×90 1/16.
Печать офсетная/цифровая. Усл. п. л. 6,75. Тираж 40 экз.
Отпечатано в полном соответствии
с качеством предоставленного оригиналмакета
в АО «Т8 Издательские Технологии».
109316, г. Москва, Волгоградский пркт, д. 42, к. 5.