Робот-тележка на ROS.Часть 4. Создаем симуляцию робота в rviz и gazebo

от автора

Продолжение цикла статей о создании небольшого робота. В этот раз речь пойдет о создании копии робота в симуляции, которую предлагают визуальные ROS-среды rviz и gazebo (далее «редакторы»). Работа в редакторах будет вестись на виртуальной машине, образ которой был ранее предоставлен для скачивания (образ). Так как речь идет о симуляции, построении модели, сам робот-тележка не понадобится.

Предыдущие посты серии:
1.Часть 3.
2.Часть 2.
3.Часть 1.
Создание базовых urdf-файлов

Вообще, процесс создания робота упрощенно состоит как правило из следующих стадий:
1. Создание модели робота.
2. Тестирование модели в симуляции.
3. Создание реальной модели робота.
4. Тестирование реальной модели.

Работая с редакторами ROS, которые предоставляют шикарные возможности как по построению моделей и их тестам в виртуальном мире, надо признать, что реальные модели роботов ведут себя не всегда аналогично своим бестелесным братьям. И здесь время на работу с моделями в виртуальном мире складывается со временем, необходимым на доработку реальной модели.
Такое дарение времени, как говорил один известный человек, могут себе позволить не только лишь все.

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

Создаем urdf

.
Для того, чтобы в полной мере насладиться симуляцией в Gazebo и протестировать робота, сперва необходимо создать URDF файл для робота.
URDF файл является своеобразным каркасом-скелетом в области визуализации.
Проще говоря, URDF файл — это файл, описывающий робота.

Как ранее было заявлено, работа будет вестись с использованием образа VMWARE Workstation, на котором уже установлена ROS(Ubuntu 16.04, ROS-Kinetic) и визуальные редакторы. Поэтому все действия воспроизводимы в данной системе.

Создадим пакет ROS с названием rosbots_description.
Для того, чтобы это сделать надо войти в папку с catkin_ws/src и выполнить команду создания пакета в ROS:
roscd; cd ..; cd src;
catkin_create_pkg rosbots_description rospy

*Если при выполнении команды roscd; cd ..; cd src; вы не попали в catkin_ws, то возможно у вас несколько сред подобного типа. Для того, чтобы активировать нужную, необходимо зайти в папку catkin_ws и выполнить команду: source devel/setup.bash. Чтобы не заблудиться, если вы работаете с образом, в эту папку можно попасть из корня: cd ~; cd catkin_ws.

Если все прошло успешно, то создастся папка rosbots_description.

Почему так сложно и не проще ли просто создать папку в catkin_ws/src вручную? И что там за rospy?
Вручную создать папку можно, но придется также вручную писать еще два файла, с которыми работает ROS: CMakeLists.txt и package.xml.
Именно они присутствуют в папке после создания:

Их ROS создает самостоятельно. Пока на их содержимом останавливаться не будем.
rospy в конце команды означает создание зависимости, поддержку python.

Движемся дальше.
Внутри вновь созданного пакета rosbots_description создадим папку urdf, а в ней — файл rosbots.xacro.
roscd rosbots_description

mkdir urdf; cd urdf;

touch rosbots.xacro

chmod +x rosbots.xacro

Прелесть системы ROS в том, что в какой папке системы вы бы не находились, можно сразу попасть в целевую, просто набрав ее название с командой roscd в начале строки.

Теперь поместим во вновь созданный файл следующий код:

rosbots.xacro

<?xml version="1.0" encoding="utf-8"?>
<robot name="rosbots" xmlns:xacro="http://www.ros.org/wiki/xacro">
/>
/>
/>
/>

/>

/>

/>

/>

/>
/>
<inertia ixx="0.01" ixy="0.0" ixz="0.0"
iyy="0.01" iyz="0.0"
izz="0.03" />

/>
/>
/>

/>

/>

/>

/>

/>
/>
/>

/>

/>

/>

/>

/>
/>
/>

/>

/>

/>

/>

/>
/>
/>

/>

/>

/>

/>

/>
/>
/>

/>

/>

/>

/>

/>
/>
/>

/>

/>

/>

/>

/>
/>
/>

/>

/>

/>

/>

/>
/>
/>

/>

/>

/>

/>

/>
/>
/>

/>

/>

/>

/>

/>
/>
/>

/>

/>

/>

/>

/>
/>
/>
/>

/>

/>

/>

/>

/>
/>
<inertia ixx="0.001" ixy="0.0" ixz="0.0"
iyy="0.001" iyz="0.0"
izz="0.001" />

/>
/>
/>
/>

/>

/>

/>

/>

/>
/>
<inertia ixx="0.001" ixy="0.0" ixz="0.0"
iyy="0.001" iyz="0.0"
izz="0.001" />

/>
/>
/>

/>

/>

/>

/>

/>
/>
<inertia ixx="0.001023539" ixy="0.0" ixz="0.0"
iyy="0.001023539" iyz="0.0"
izz="0.001023539" />

/>
/>
/>

/>

/>

/>

/>

/>
/>
/>

/>

/>

/>

/>

Если код не отображается, то все файлы можно скачать в конце поста.

Для кода выше нам также понадобятся ячейки (meches), которые будут подгружаться в процессе запуска пакета.
Meches можно взять здесь
и положить распакованную папку meches в rosbots_description.

Если посмотреть код детально, то можно выяснить, что это стандартный файл xml, состоящий из блоков:
— visual
— collision
— inertial

Каждый блок описывает свою часть: visual — это внешность робота, не более, collision и inertial — это физика робота, как все будет взаимодействовать с внешним миром — столкновения, инерция.
joints — элементы, которые помогают определить движение между частями робота (links). Так например, движение колеса (wheel) влияет на раму в целом (chasis).
origin xyz — это первоначальное расположение объекта по осям x,y,z.
parent link и child link это соответственно родительская и дочерняя связи, что из чего растет.
Также примечательно наличие типов: type=«continuous», type=«fixed». Это определение того, что может вращаться, а что нет. Так колеса имеют тип continuous. А, например, batery_joint — fixed.
Отступы в коде такого же глубоко смысла как в python, где нельзя мешать табы и пробелы, не несут. Но для рая перфекциониста и наглядности лучше их иметь.

Код приведенный выше является по сути моделью робота.

Работа в rviz.

Посмотрим что вышло.
Для этого надо создать файл запуска, который будет запускать пакет ROS.
Для этого в ROS служат так называемые launch файлы. Суть launch файла — позволить запустить ноду, команду или несколько нод одной короткой командой без необходимости указывать в ней все аргументы и прочая.

Создадим в rosbots_description папку launch с файлом rviz.launch:
roscd rosbots_description
mkdir launch; cd launch;
touch rviz.launch

*В этот и последующие разы уже нет необходимости создавать ROS-пакет как это делалось ранее. Теперь система сама будет «видеть» файлы внутри пакета. Поэтому мы просто создаем директорию.

Наполним файл содержимым —

rviz.launch

<?xml version=«1.0»?>
/>

/>

/>

/>

Здесь видно, что при запуске система будет искать описание модели в rosbots.xacro.
Далее запустит 3-и ноды: joint_state_publisher из пакета joint_state_publisher, robot_state_publisher из robot_state_publisher, rviz из rviz. type -это тип ноды, как правило соответствует одноименному Python или С файлу, но указывается без расширения.

Запустим:
В 1-м терминале запустим ROS-мастер:
roscore
Во 2-м:
roslaunch rosbots_description rviz.launch

*Если выдало ошибку

ROS_MASTER_URI [http://192.168.1….:11311] host is not set to this machine

, то надо проверить bashrc — на каком ip запускается ROS:
nano ~/.bashrc
в самом файле bashrc указать ip виртуальной машины(например такой):
export ROS_MASTER_URI=http://192.168.1.114:11311
далее перечитать bashrc:
source ~/.bashrc или перезагрузиться.
**
Если roslaunch все равно не запускается, то можно попробовать зайти в папку catkin_ws и выполнить: source devel/setup.bash

Погружаемся в Rviz

После выполнения команды, запустится Rviz-редактор и откроется графическая оболочка.
Визуальное представление может отличаться, но в целом вид будет примерно следующим:

Слева в колонке Displays можно наблюдать опции отображения тех или иных элементов, взаимодействующих с нодами ROS, по центру — изображение робота, справа — колонка с камерой вида робота. Сразу надо сказать, что с rviz лучше работать с 3-х колесной мышью, так как все кнопки мыши здесь задействованы. Зажав левую можно повращать пространство в окне с отображением робота, зажав правую — приблизить/отдалить, зажав обе клавиши — перемещать пространство относительно робота.
В основном работа в редакторе ведется в первых двух колонках: Displays и Визуальном представлении робота.

Поработаем с видом робота.

Выберем в строке «Fixed Frame» — «base link»:

И добавим Robot Description в Displays:

Нажмем «Add» и в списке выберем «RobotModel»:
»

Теперь в окне симуляции можно наблюдать робота, который был воспроизведен из модели rviz.xacro:
«

Отлично. С визуальным представлением все ясно. Теперь необходимо понять как запустить симуляцию, потому как rviz лишь визуализация симуляции, но не сама симуляция.
То есть физика здесь не работает.
Сама симуляция живет в редакторе под названием Gazebo.

Gazebo.

Чтобы поместить созданную модель в Gazebo, создадим еще один launch файл — spawn.launch в папке launch проекта. Теперь у нас 2 launch файла!

spawn.launch

<?xml version=«1.0» encoding=«UTF-8»?>
/>

/>
/>
/>

<node name=«mybot_spawn» pkg=«gazebo_ros» type=«spawn_model» output=«screen»
args=»-urdf -param robot_description -model rosbots -x $(arg x) -y $(arg y) -z $(arg z)» />

Здесь мы также считываем модель, затем аргументами передаем ее расположение в пространстве по осям x,y,z. Далее запускаем всего лишь одну ноду — mybot_spawn из пакета gazebo_ros.
*Доустанавливать пакеты, упомянутые выше нет необходимости. При желании можно посмотреть на эти пакеты все той же командой: roscd. Например roscd gazebo_ros.

Теперь остановим Ros-мастер в 1-м терминале:
CTRL+C
И запустим редактор Gazebo:
roslaunch gazebo_ros empty_world.launch
Во 2-м терминале запустим вновь созданный файл:
roslaunch rosbots_description spawn.launch

Теперь мы видим нашего робота в симуляции редактора Gazebo:

*Если у вас ошибка: Waiting for service /gazebo/spawn_urdf_model
Это значит, что вы запустили модель без предварительного запуска Gazebo, нарушив очередность запуска.

Поездим в симуляции gazebo.

Теперь добавим в rosbots.xacro следующий код до закрывающего тега :

код

false
true
true
1
true
100.0
wheel_left_joint
wheel_right_joint
1.1
0.52
1.0
20
/part2_cmr/cmd_vel
odom
odom
base_link

Симулятор Gazebo можно не закрывать при правках.

Теперь удалим модель из редактора Gazebo:
rosservice call /gazebo/delete_model "model_name: 'rosbots'" либо просто перезагрузим редактор.

*Gazebo капризный на виртуальной машине, поэтому даже после закрытия иногда простит CTRL+C дополнительно в терминале.

Заново разместим модель в Gazebo после правок:
roslaunch rosbots_description spawn.launch
Если теперь посмотреть список топиков ROS, то можно увидеть, что среди них есть и
/part2_cmr/cmd_vel

Теперь попробуем поуправлять роботом в симуляции, запустив управление в отдельном терминале:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py /cmd_vel:=/part2_cmr/cmd_vel

Находясь в окне с запущенным управлением и нажимая в окне терминала клавиши «i»,«l»,«j»,«k»,»,» можно наблюдать движение робота в симуляции редактора Gazebo:

Код — скачать.

Продолжение следует.


ссылка на оригинал статьи https://habr.com/ru/post/467241/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *