Цель работы

  • Изучение основ симулятора Gazebo
  • Взаимодействие с моделью робота в Gazebo средствами ROS
  • Изучение основных ограничений и способов оптимизации моделей для имитационного моделирования

Целью данной работы является закрепление теоретического материала по созданию сцены имитационного моделирования в программе Gazebo с использованием ROS для подготовки к лабораторной работе №4.

В данной работе необходимо пользоваться лекционными материалами. Необходимо настроить модель робота и окружение среды моделирования, затем выполнить запуск имитационного моделирования для управления роботом.

Создание симуляции робота средствами ROS

  1. Создание пакета

    Создайте новый пакет и назовите my_robot_simulation выполнив команду:

    catkin_create_pkg my_robot_simulation rospy std_msgs
  2. Создание файла запуска

    Далее необходимо создать файл запуска в папке launch, который будет загружать конфигурационный файл для Rviz, загружать модель робота в сервер парамтеров, включая необходимые пакеты для работы модели в ROS. Файл в результате должен иметь следующее содержание:

    [Содержимое файла sim.launch]

    Если вы отредактировали файл запуска, может потребоваться перезапуск roscore (имейте это в виду, если что-то начнет работать не так, как ожидалось, и ошибок тоже не обнаружено).

  3. Проверка разметки модели робота и параметров colission и inertial

    Для работы симулятора обязательно должны быть теги colission и inertial (не нулевые массы) у всех звеньев, поэтому в соответствующих файлах модели проверьте и исправьте это при необходимости.

    Далее приведен пример разметки для звена base_link:

    [Содержимое файла base_link_full.urdf]
  4. Настройка парметров тега inertial

    Правильная настройка инерционных характеристик материала является важной задачей, от которой будет зависеть качество симуляции. Вам необходимо реализовать способ, который упростит работу. Наиболее часто используемые типы примитивов:

    • цилиндр
    • кубоид
    • сфера

    Как известно из физики твердого тела, инерционные характристики зависят только от формы и плотности материала (однородная масса), поэтому вы можете написать макросы, которыми можно пользоваться для автоматического расчета характеристик.

    Файл с макросами можно скачать из репозитория курса task5/urdf/inertial.usdf.xacro, либо скопировать из следующего листинга:

    [Содержимое файла inertial.urdf.xacro]

    Далее приведен пример использования макроса (не забудьте подключить макрос перед использованием).

    [Содержимое файла inertial_usage.urdf]
  5. Настройка свойств для Gazebo

    Теперь необходимо указать важные свойства для работы симулятора, начните с указания цветов для Gazebo. Создайте файл robot_diff.gazebo, содержащий следующий программный код:

    [Содержимое файла robot_diff_colors.urdf]

    Чтобы вы могли управлять роботом в симуляторе, необходимо подключить плагин, сделайте это в том же файле robot_diff.gazebo путем добавления следующего программного кода:

    [Содержимое файла robot_diff_plagin.urdf]

    Убедитесь, что параметры плагина были настроены корректно!

  6. Создание "world" файла

    Теперь необходимо создать ваш базовый файл мира .world. Сделать это можно 2 способами:

    1. Запустить Gazebo и сохранить пустую сцену через графический интерфейс симулятора.
    2. Создать файл внутри ROS-пакета (в папке worlds) со следующим содержанием:
    [Содержимое файла empty.world]

    Если все сделано правильно, то после запуска launch файла у вас запустится симулятор Gazebo.

  7. Запуск симулятора

    Теперь вы можете запустить симулятор и проверить корректность работы, для этого воспользуйтесь командой:

    roslaunch my_robot_simulation sim.launch

    Обратите внимание, что управлять роботом при помощи robot_joint_state_publisher у вас не получится. Интерфейс для управления роботом предоставляет плагин, который вы подключили. Соответственно, после запуска симуляции у вас появится топик /cmd_vel, в который вы и можете отправлять команды для управления.

  8. Доработка модели робота

    У вашего робота всего 2 колеса, таким неустойчивым роботом сложно управлять, поэтому вы можете сделать третье колесо, только в этот раз другого типа (используя широкие возможности симулятора). Третье колесо будет сферическим элементом, которое создает минимальное трение о поверхность пола. Обратите внимание, здесь выполняется упрощенное моделирование пассивного сферического колеса.

    Добавьте к описанию base_link следующую разметку:

    [Содержимое файла robot_diff_sphere_wheel.urdf]
  9. Дополнительные элементы моделирования

    Одним из недостатков моделей является их "идеализация". Моделирование трения в шарнирах (жесткость и демпфирование) часто не учитывается в модели. Также очень важно установить ограничения на момент и скорость в шарнирах, как это показано в следующем примере.

    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  10. Добавление объектов окружения из библиотеки объектов Gazebo

    Библиотеки объектов Gazebo содержит много полезных моделей, которые могут быть добавлены в симуляцию достаточно легко. Примеры таких добавлений можно найти в файле empty.world

  11. Управление с учетом кинематической модели робота

    Установите пакет для управления платформой в симуляторе teleop_twist_keyboard, и у вас появится возможность управлять роботом посредством нажатия соответствующих клавиш на клавиатуре для задания направления движения.

    Альтернативным способом управления является отправка соответствующих сообщений в топик /cmd_vel средствами ROS.

    rostipic pub /cmd_vel ***

Задание для самостоятельного выполнения

  1. Создать сцену с объектами окружения (стандартные из Газебо), сохранить в файл с новым названием и настроить подгрузку новой сцены в файле запуска.
  2. Написать скрипт, который будет отправлять сообщения в /cmd_vel (любые сообщения)
  3. При вызове метода "spawn" (добавление робота в симуляцию) необходимо задать координаты x y z как аргументы
  4. Добавить в симуляцию несколько одинаковых роботов одновременно в разных координатах сцены

Вопросы для самопроверки

  • Какой формат разметки используется в файлах с расширением .world
  • От чего зависит качество симуляции вашего робота?
  • Какие дополнительные требования предьявляет к URDF модели Gazebo?
  • Совпадает ли симуляционное время в Gazebo с системным временем?
  • Что такое плагины Gazebo?
  • Что делает spawn (спавнер)?