Цель работы
- Изучение основ симулятора Gazebo
- Взаимодействие с моделью робота в Gazebo средствами ROS
- Изучение основных ограничений и способов оптимизации моделей для имитационного моделирования
Целью данной работы является закрепление теоретического материала по созданию сцены имитационного моделирования в программе Gazebo с использованием ROS для подготовки к лабораторной работе №4.
В данной работе необходимо пользоваться лекционными материалами. Необходимо настроить модель робота и окружение среды моделирования, затем выполнить запуск имитационного моделирования для управления роботом.
Создание симуляции робота средствами ROS
- Создание пакета
Создайте новый пакет и назовите my_robot_simulation выполнив команду:
catkin_create_pkg my_robot_simulation rospy std_msgs
- Создание файла запуска
Далее необходимо создать файл запуска в папке launch, который будет загружать конфигурационный файл для Rviz, загружать модель робота в сервер парамтеров, включая необходимые пакеты для работы модели в ROS. Файл в результате должен иметь следующее содержание:
[Содержимое файла sim.launch]Если вы отредактировали файл запуска, может потребоваться перезапуск roscore (имейте это в виду, если что-то начнет работать не так, как ожидалось, и ошибок тоже не обнаружено).
- Проверка разметки модели робота и параметров colission и inertial
Для работы симулятора обязательно должны быть теги colission и inertial (не нулевые массы) у всех звеньев, поэтому в соответствующих файлах модели проверьте и исправьте это при необходимости.
Далее приведен пример разметки для звена base_link:
[Содержимое файла base_link_full.urdf] - Настройка парметров тега inertial
Правильная настройка инерционных характеристик материала является важной задачей, от которой будет зависеть качество симуляции. Вам необходимо реализовать способ, который упростит работу. Наиболее часто используемые типы примитивов:
- цилиндр
- кубоид
- сфера
Как известно из физики твердого тела, инерционные характристики зависят только от формы и плотности материала (однородная масса), поэтому вы можете написать макросы, которыми можно пользоваться для автоматического расчета характеристик.
Файл с макросами можно скачать из репозитория курса task5/urdf/inertial.usdf.xacro, либо скопировать из следующего листинга:
[Содержимое файла inertial.urdf.xacro]Далее приведен пример использования макроса (не забудьте подключить макрос перед использованием).
[Содержимое файла inertial_usage.urdf] - Настройка свойств для Gazebo
Теперь необходимо указать важные свойства для работы симулятора, начните с указания цветов для Gazebo. Создайте файл robot_diff.gazebo, содержащий следующий программный код:
[Содержимое файла robot_diff_colors.urdf]Чтобы вы могли управлять роботом в симуляторе, необходимо подключить плагин, сделайте это в том же файле robot_diff.gazebo путем добавления следующего программного кода:
[Содержимое файла robot_diff_plagin.urdf]Убедитесь, что параметры плагина были настроены корректно!
- Создание "world" файла
Теперь необходимо создать ваш базовый файл мира .world. Сделать это можно 2 способами:
- Запустить Gazebo и сохранить пустую сцену через графический интерфейс симулятора.
- Создать файл внутри ROS-пакета (в папке worlds) со следующим содержанием:
[Содержимое файла empty.world]Если все сделано правильно, то после запуска launch файла у вас запустится симулятор Gazebo.
- Запуск симулятора
Теперь вы можете запустить симулятор и проверить корректность работы, для этого воспользуйтесь командой:
roslaunch my_robot_simulation sim.launch
Обратите внимание, что управлять роботом при помощи robot_joint_state_publisher у вас не получится. Интерфейс для управления роботом предоставляет плагин, который вы подключили. Соответственно, после запуска симуляции у вас появится топик /cmd_vel, в который вы и можете отправлять команды для управления.
- Доработка модели робота
У вашего робота всего 2 колеса, таким неустойчивым роботом сложно управлять, поэтому вы можете сделать третье колесо, только в этот раз другого типа (используя широкие возможности симулятора). Третье колесо будет сферическим элементом, которое создает минимальное трение о поверхность пола. Обратите внимание, здесь выполняется упрощенное моделирование пассивного сферического колеса.
Добавьте к описанию base_link следующую разметку:
[Содержимое файла robot_diff_sphere_wheel.urdf] - Дополнительные элементы моделирования
Одним из недостатков моделей является их "идеализация". Моделирование трения в шарнирах (жесткость и демпфирование) часто не учитывается в модели. Также очень важно установить ограничения на момент и скорость в шарнирах, как это показано в следующем примере.
<limit effort="100" velocity="100"/> <joint_properties damping="0.0" friction="0.0"/>
- Добавление объектов окружения из библиотеки объектов Gazebo
Библиотеки объектов Gazebo содержит много полезных моделей, которые могут быть добавлены в симуляцию достаточно легко. Примеры таких добавлений можно найти в файле empty.world
- Управление с учетом кинематической модели робота
Установите пакет для управления платформой в симуляторе teleop_twist_keyboard, и у вас появится возможность управлять роботом посредством нажатия соответствующих клавиш на клавиатуре для задания направления движения.
Альтернативным способом управления является отправка соответствующих сообщений в топик /cmd_vel средствами ROS.
rostipic pub /cmd_vel ***
Задание для самостоятельного выполнения
- Создать сцену с объектами окружения (стандартные из Газебо), сохранить в файл с новым названием и настроить подгрузку новой сцены в файле запуска.
- Написать скрипт, который будет отправлять сообщения в /cmd_vel (любые сообщения)
- При вызове метода "spawn" (добавление робота в симуляцию) необходимо задать координаты x y z как аргументы
- Добавить в симуляцию несколько одинаковых роботов одновременно в разных координатах сцены
Вопросы для самопроверки
- Какой формат разметки используется в файлах с расширением .world
- От чего зависит качество симуляции вашего робота?
- Какие дополнительные требования предьявляет к URDF модели Gazebo?
- Совпадает ли симуляционное время в Gazebo с системным временем?
- Что такое плагины Gazebo?
- Что делает spawn (спавнер)?
Оставить комментарий