Источник: Nuances of Programming
Хотите изучить робота, но у вас нет возможности его купить? А может, вы просто не знаете с чего начать? Тогда симулятор роботов Webots вам отлично подойдет! Научитесь легко управлять роботами в любых средах и создавать своих собственных роботов. Больше всего вам понравится то, что Webots — это бесплатный симулятор с открытым исходным кодом. Мы познакомимся с Webots и напишем программу для робота E-puck (Е-шайба), приводящую его в движение.
Мой опыт работы с Webots
В рамках научного исследования меня попросили помочь разработать алгоритмы обхода препятствий в нишинговом методе оптимизации роя частиц (PSO) для роботизированной многоцелевой поисковой системы. С этого и началось моё знакомство с Webots. Роботов помещают в зону поиска и они перемещаются, выслеживая цели. Благодаря нишинговому алгоритму PSO роботы делятся друг с другом информацией о том, где лучше встать относительно возможного расположения цели, и таким образом им удаётся находить самые оптимальные допустимые позиции. В симуляции участвовало 40 роботов и 4 цели.
По моему опыту Webots прост в освоении и применении, он полностью оснащён инструментами и реалистичен. Наконец, не нужно тратить деньги на покупку настоящих роботов ?. И совсем скоро вас ждет знакомство с проектом.
Симулятор роботов Webots
Официальный сайт: https://cyberbotics.com
Webots — это симулятор роботов с открытым исходным кодом, который предоставляет полноценную среду разработки для моделирования, программирования и симуляции роботов. Тысячи учреждений по всему миру используют его для научных исследований и обучения. Webots был разработан совместно со Швейцарским федеральным технологическим институтом в Лозанне, тщательно протестирован, сопровожден грамотной документацией и постоянно обслуживается, начиная с 1998 года. Это самый эффективный способ быстро достичь профессиональных результатов. [Источник]
Возможности Webots
- Разработка собственных роботов или работа с готовыми вариантами.
- Разработка трехмерной кастомизированной среды (поверхность, препятствие, цель, небо, физическая модель поведения).
- Разработка логики робота.
- Симуляция и тестирование.
- Видеозапись или скриншот симуляции.
Области исследования Webots
Многие проекты мобильной роботехники на протяжении долгих лет опираются на Webots в следующих областях:
- прототипирование мобильных роботов (научные исследования, автомобильная промышленность, авиация и воздухоплавание, производство пылесосов и игрушек, хобби и т. д.);
- исследование способов передвижения роботов (роботы с механическими конечностями, человекообразные, четвероногие роботы и т. д.);
- многоагентное исследование (роевой интеллект, группы совместно работающих мобильных роботов и т. д.);
- исследование адаптивного поведения (генетический алгоритм, нейронные сети, ИИ и т. д.);
- обучение робототехнике (лекции по робототехнике и программированию на C/C++/Java/Python и т. д.);
- состязания роботов — например, Robotstadium и Rat’s Life.
Симуляция Webots
Симуляция Webots состоит из следующих компонентов:
- world-файл (.wbt) Webots, определяющий одного или нескольких роботов и их среду.
- иногда файл .wbt зависит от внешних proto-файлов (.proto) и текстур.
- одна или несколько программ для контроллеров роботов (на C/C++/Java/Python/MATLAB);
- дополнительный плагин моделирования физики для модификации стандартного физического поведения Webots (C/C++).
Роботы Webots
Webots располагает большим разнообразием готовых роботов, среди которых:
- робот E-puck (двухколесный).
- робот Parallax Boe-Bot (трехколесный).
- четырехколесный робот.
- гексапод (шестиногий робот).
- робот-манипулятор Robotics на шасси.
- человекообразный робот.
- собакообразный робот.
Язык программирования
Вы можете написать программу для контроллера робота в Webots на C++, Java, Python или MATLAB. Выбирайте свой любимый язык программирования.
Пользовательский интерфейс Webots
Графический интерфейс пользователя состоит из 4 основных окон:
- 3D окно отображения, позволяющее взаимодействовать с 3D-симуляцией.
- дерево сцены, то есть иерархическое представление текущего мира.
- текстовой редактор для корректировки исходного кода.
- консоль, отображающая выходные данные как компиляции, так и контроллера.
Руководство
Webots предоставляет превосходное, понятное руководство и обучающую программу.
Робот E-puck
Официальный сайт: https://e-puck.org
Википедия: https://ru.qwe.wiki/wiki/E-puck_mobile_robot
E-puck — это небольшой и простой в эксплуатации мобильный робот, разработанный GCtronic и EPFL, который широко используется в научных и образовательных целях. [Источник]
С 2005 года около 3000 моделей данного робота успешно применяются в образовании и исследованиях. С января 2018 года стала доступна 2 версия E-puck. [Источник]
E-puck относится к неголономным колесным роботам, которые зависят от вектора своего движения и не могут свободно перемещаться в любых направлениях без разворота. В отличие от них голономные способны двигаться в разных направлениях, не разворачиваясь.
Руководство
Предлагаю вашему вниманию простое руководство по созданию среды, добавлению препятствий и робота E-puck, а также программу, направляющую движение робота вперед. Установите Webots на ваш компьютер согласно инструкции. В данном проекте использована версия Webots 2019b.
1. Создание директории проекта
- В меню нажмите сначала Wizards (Мастера), а затем в подменю — New Project Directory (Директория нового проекта).
- Нажмите Next.
- Выберите директорию для нового проекта, затем — Next.
- Выберите имя для нового мира. В данном проекте он называется main.wbt) и отметьте необходимые компоненты (я выбрал Center view point (Центральная точка обзора), Add a textured background (Добавить текстурированный фон), Add a directional light (Добавить направленный свет) и Add a rectangle arena (Добавить прямоугольную арену). После этого нажмите Next и Finish.
2. Добавление робота E-puck
Выберите последний узел RectangleArena из отображаемого дерева сцены и нажмите кнопку Add, то есть знак плюс в его верхней части. В диалоговом окне выберите PROTO nodes (Webots) / robots / gctronic / e-puck / E-puck (Robot), затем снова — Add. Робот должен появиться в центре арены. Сохраните симуляцию.
3. Центрирование арены
Для четкого обзора нам нужен вид арены сверху. Вы можете вращать ее по осям X, Y и Z, удерживая левую/правую кнопку мыши и перемещая курсор. Есть возможность увеличивать и уменьшать масштаб, прокручивая колесико мыши вверх или вниз.
Ниже следует описание настроек, позволяющих обозревать арену сверху. Дважды нажмите на узел дерева сцены Viewpoint — то еть на точку обзора, открыв тем самым данный узел и отобразив его поля. Выберите поле orientation — ориентация и установите значение angle, то есть угол, в 1,58. После чего перейдите к полю position — позиция и укажите значения: x (-0.034), y (2.2365), z (-0.023).
В результате среда будет выглядеть следующим образом:
4. Добавление препятствий
Добавление препятствий в данном сценарии не обязательно. Я же воспользовался этой возможностью для придания симуляции более реалистичного вида и просто ради интереса ?.
- Добавление прямоугольных препятствий. Выберите последний узел E-puck из отображаемого дерева сцены. Нажмите кнопку Add (знак плюс) в его верхней части. В диалоговом окне выберите PROTO nodes (Webots) / objects / factory / containers / WoodenBox (solid), затем нажмите Add и после этого два раза на узел дерева сцены WoodenBox (деревянный ящик). Так вы откроете узел и отобразите его поля. Выберите поле size (размер), установив его значения: x (-0.2), y (0.1) и z (-0.1), и поле translation (сдвиг) со значениями: x (0), y (0.05) и z (-0.2).
- Добавление препятствий цилиндрической формы. Выберите последний узел E-puck из отображаемого дерева сцены. Нажмите кнопку Add (знак плюс) в его верхней части. В диалоговом окне выберите PROTO nodes (Webots) / objects / obstacles / OilBarrel (Solid) и нажмите Add, а затем два раза на узел дерева сцены OilBarrel (бочка нефти). Вслед за этим открывается узел и отображаются его поля. Выберите поле radius (радиус), установив его значение -0.05, затем поле height (высота) со значением 0.1 и, наконец, поле translation (сдвиг) со значениями: x (0.2), y (0.05), z (-0.2).
Вид среды с препятствиями:
5. Создание контроллера робота E-puck
- В меню сначала нажмите Wizards, затем в подменю — New Robot Controller (новый контроллер робота).
- Нажмите Next.
- Выберите язык для программы контроллера. Данный проект написан на С. После этого — Next.
- Укажите имя контроллера. В нашем примере он назван e-puck-move_forward. Затем — Next.
- В завершении нажмите Finish.
Исходный код контроллера:
6. Редактирование программы для контроллера
Контроллер вы можете редактировать из встроенного в Webots текстового редактора или в другой предпочитаемой IDE. Директория контроллера, содержащая программу, находится в [your project directory]/controllers ([директория вашего проекта]/контроллеры).
Ниже представлен исходный код e-puck-move_forward, с которым вы также можете ознакомиться в моем репозитории на GitHub. Скопируйте этот код в свою программу для контроллера:
После этого нажмите Build (сборка) сначала в меню, а затем в подменю. Перед сборкой убедитесь, что программа контроллера открыта в текстовом редакторе Webots.
Обратим внимание на важные особенности программы:
- wb_robot_get_basic_time_step() Webots использует шаг времени симулятора. Базовый шаг — это единица инкрементно увеличиваемого времени, используемая симулятором для отсчёта виртуального времени и выполнения симуляции физики.
- wb_robot_step(time_step) — команда выполняет шаги симуляции и нужна для осуществления шага времени контроллером. Шаг времени контроллера — это инкрементно увеличиваемая единица времени в процессе выполнения контроллером каждой итерации контрольного цикла. Вызов этой команды требуется для синхронизации программы и состояния симулятора. Если симуляция остановится, она вернёт -1. Если же мы не вызовем эту команду, то робот будет бездействовать. Например, wb_motor_set_velocity(left_motor, MAX_SPEED) только устанавливает значение скорости мотора. Поэтому нам нужно вызвать и начать циклически выполнять команду wb_robot_step(time_step), чтобы привести робота в движение. Последовательность выполнения программы:
- Сначала мы инициализируем робота и необходимые сопутствующие компоненты вроде обработчика действий моторов.
- Затем мы побуждаем робота двигаться вперед с помощью цикла while.
- После выхода из цикла мы очищаем ресурсы Webots.
Примечание: в этой программе мы выполняем цикл while бесконечно, поэтому никогда не достигнем этапа wb_robot_cleanup.
7. Установка контроллера робота E-puck
Дважды нажмите узел E-puck из отображаемого дерева сцены. Открывается узел и отображаются его поля. Выберите поле Controller (контроллер), нажмите Select (Выбрать) и укажите имя контроллера (имя моего контроллера —e-puck-move_forward).
8. Запуск симуляции
Для запуска или выключения симуляции в реальном времени нажмите кнопку Play над 3D окном. Итоговая симуляция:
9. Заключительный этап
Не забудьте сохранить ваш мир: нажмите кнопку сохранения или File -> Save World в меню.
Когда вы вносите изменения в мир Webots с намерением его сохранить, то сначала необходимо приостановить симуляцию и вернуть ее в исходное состояние, т.е. счетчик виртуального времени на главной панели инструментов должен показывать 0:00:00:000. В противном случае при каждом сохранении положение каждого 3D объекта может накапливать ошибки. Вследствие этого, модификация мира должна осуществляться в следующем порядке: пауза, возврат в исходное состояние, модификация и сохранение симуляции.
Репозиторий
Вы можете просто загрузить данный проект из моего репозитория на GitHub и запустить его в своих Webots. Благодарю за внимание!
Читайте также:
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Albert Alfrianta: How to Create and Play a Simple Robot Program via Webots Robot Simulator