Программируем робота E-puck в симуляторе Webots


Хотите изучить робота, но у вас нет возможности его купить? А может, вы просто не знаете с чего начать? Тогда симулятор роботов 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. Благодарю за внимание!


    Перевод статьи Albert Alfrianta: How to Create and Play a Simple Robot Program via Webots Robot Simulator


    Поделиться статьей:


    Вернуться к статьям

    Комментарии

      Ничего не найдено.