Хотите изучить робота, но у вас нет возможности его купить? А может, вы просто не знаете с чего начать? Тогда симулятор роботов Webots вам отлично подойдет! Научитесь легко управлять роботами в любых средах и создавать своих собственных роботов. Больше всего вам понравится то, что Webots — это бесплатный симулятор с открытым исходным кодом. Мы познакомимся с Webots и напишем программу для робота E-puck (Е-шайба), приводящую его в движение.

Мой опыт работы с Webots

В рамках научного исследования меня попросили помочь разработать алгоритмы обхода препятствий в нишинговом методе оптимизации роя частиц (PSO) для роботизированной многоцелевой поисковой системы. С этого и началось моё знакомство с Webots. Роботов помещают в зону поиска и они перемещаются, выслеживая цели. Благодаря нишинговому алгоритму PSO роботы делятся друг с другом информацией о том, где лучше встать относительно возможного расположения цели, и таким образом им удаётся находить самые оптимальные допустимые позиции. В симуляции участвовало 40 роботов и 4 цели.

По моему опыту Webots прост в освоении и применении, он полностью оснащён инструментами и реалистичен. Наконец, не нужно тратить деньги на покупку настоящих роботов ?. И совсем скоро вас ждет знакомство с проектом.

Симулятор роботов Webots

img

Официальный сайт: 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

img

Графический интерфейс пользователя состоит из 4 основных окон:

  • 3D окно отображения, позволяющее взаимодействовать с 3D-симуляцией.
  • дерево сцены, то есть иерархическое представление текущего мира.
  • текстовой редактор для корректировки исходного кода.
  • консоль, отображающая выходные данные как компиляции, так и контроллера.

Руководство

Webots предоставляет превосходное, понятное руководство и обучающую программу.

Робот E-puck

img

Официальный сайт: 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. Создание директории проекта

  1. В меню нажмите сначала Wizards (Мастера), а затем в подменю — New Project Directory (Директория нового проекта).
  2. Нажмите Next.
  3. Выберите директорию для нового проекта, затем — Next.
  4. Выберите имя для нового мира. В данном проекте он называется main.wbt) и отметьте необходимые компоненты (я выбрал Center view point (Центральная точка обзора), Add a textured background (Добавить текстурированный фон), Add a directional light (Добавить направленный свет) и Add a rectangle arena (Добавить прямоугольную арену). После этого нажмите Next и Finish.
img

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).

В результате среда будет выглядеть следующим образом:

img

4. Добавление препятствий

Добавление препятствий в данном сценарии не обязательно. Я же воспользовался этой возможностью для придания симуляции более реалистичного вида и просто ради интереса ?.

  1. Добавление прямоугольных препятствий. Выберите последний узел 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).
  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).

Вид среды с препятствиями:

img

5. Создание контроллера робота E-puck

  1. В меню сначала нажмите Wizards, затем в подменю — New Robot Controller (новый контроллер робота).
  2. Нажмите Next.
  3. Выберите язык для программы контроллера. Данный проект написан на С. После этого — Next.
  4. Укажите имя контроллера. В нашем примере он назван e-puck-move_forward. Затем — Next.
  5. В завершении нажмите Finish.

Исходный код контроллера:

img

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), чтобы привести робота в движение. Последовательность выполнения программы:
  1. Сначала мы инициализируем робота и необходимые сопутствующие компоненты вроде обработчика действий моторов.
  2. Затем мы побуждаем робота двигаться вперед с помощью цикла while.
  3. После выхода из цикла мы очищаем ресурсы Webots.

Примечание: в этой программе мы выполняем цикл while бесконечно, поэтому никогда не достигнем этапа wb_robot_cleanup.

7. Установка контроллера робота E-puck

Дважды нажмите узел E-puck из отображаемого дерева сцены. Открывается узел и отображаются его поля. Выберите поле Controller (контроллер), нажмите Select (Выбрать) и укажите имя контроллера (имя моего контроллера —e-puck-move_forward).

8. Запуск симуляции

Для запуска или выключения симуляции в реальном времени нажмите кнопку Play над 3D окном. Итоговая симуляция:

img

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

Предыдущая статьяTelegram-бот с помощью таблицы Google
Следующая статьяВстроенная база данных Python