Хотите изучить робота, но у вас нет возможности его купить? А может, вы просто не знаете с чего начать? Тогда симулятор роботов 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. Скопируйте этот код в свою программу для контроллера:
/*
* Авторское право 2019 принадлежит Albert Alfrianta
*
* Лицензировано согласно Лицензии Apache, Версия 2.0 ("Лицензия");
* Этот файл может быть использован только в соответствии с Лицензией.
* Копию Лицензии можно найти по адресу:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* За исключением случаев, регламентированных существующим законодательством или не оговоренных в письменном соглашении, программное обеспечение,
* распространяемое на условиях данной Лицензии, предоставляется "КАК ЕСТЬ",
* и любые явные или неявные ГАРАНТИИ ОТВЕРГАЮТСЯ.
* Информацию об основных правах и ограничениях, применяемых к определенному языку согласно Лицензии, вы можете найти в данной Лицензии.
*
*
* Создана: 2019-09-16, Bogor, Indonesia
*
* Контакты: [email protected] or https://www.linkedin.com/in/albert-alfrianta/
*
* Описание:
* Простая программа робота E-puck, предназначенная для перемещения робота вперед.
* Написана на языке программирования C
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <webots/device.h>
#include <webots/distance_sensor.h>
#include <webots/led.h>
#include <webots/motor.h>
#include <webots/nodes.h>
#include <webots/robot.h>
int time_step;
/* Моторное устройство*/
static WbDeviceTag left_motor, right_motor;
/* Угловая скорость E-puck в рад/с */
#определение MAX_SPEED 6.28
/* функция для получения шага времени симулятора */
static int get_time_step() {
static int time_step = -1;
if (time_step == -1)
time_step = (int)wb_robot_get_basic_time_step();
return time_step;
}
/* функция, устанавливающая скорость мотора для движения вперед */
static void move_forward() {
wb_motor_set_velocity(left_motor, MAX_SPEED);
wb_motor_set_velocity(right_motor, MAX_SPEED);
}
/* функция для ввода данных робота */
static void init_robot() {
// получает шаг времени симулятора
time_step = get_time_step();
// добавляет обработчик действий моторов и устанавливает целевую позицию как бесконечность (контроль скорости)
left_motor = wb_robot_get_device("left wheel motor");
right_motor = wb_robot_get_device("right wheel motor");
wb_motor_set_position(left_motor, INFINITY);
wb_motor_set_position(right_motor, INFINITY);
wb_motor_set_velocity(left_motor, 0.0);
wb_motor_set_velocity(right_motor, 0.0);
}
/* главная функция */
int main(int argc, char **argv) {
/* необходима для ввода данных webots */
wb_robot_init();
init_robot();
/* главный цикл
* выполняет шаги симуляции в миллисекундах TIME_STEP
* и выходит из цикла по завершении симуляции
*/
while (wb_robot_step(time_step) != -1) {
/*
* перемещает робота вперед
* */
move_forward();
};
/* Здесь введите код очистки */
/* Это необходимо для очистки ресурсов Webots */
wb_robot_cleanup();
return EXIT_SUCCESS;
}
После этого нажмите 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. Благодарю за внимание!
Читайте также:
- Расширение Python с помощью C
- Лучшие практики JavaScript: переменные
- Использование методов расширения в C# для элегантного и плавного кода
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Albert Alfrianta: How to Create and Play a Simple Robot Program via Webots Robot Simulator