ROS MoveIt - импорт модели робота с помощью URDF - ч.2

В прошлой части можно посмотреть про основные моменты экспорта / импорта моделей с помощью файлов URDF. Следующий шаг - импорт простого робота с четырьмя звеньями.

Для простоты составления URDF начало координат каждого звена этого робота находится в точке сочленения с родительским звеном. Так как их координаты совпадают, то при описании элементов link необходимо только правильно задать углы ориентации. 

Модель я рисовал в SolidWorks, далее через STEP импортировал сборку в FreeCad. Если экспортировать в dae или stl тела прямо из сборки FreeCad, то они будут привязаны к началу координат сборки и для того, чтобы все оказалось на своих местах, приходится рассчитывать положение каждого звена относительно СК сборки. Чтобы этого не делать, можно разбить сборку на детали и расположить в них тела таким образом, чтобы их СК оказались в точках сочленений с родительским звеном после чего можно без проблем экспортировать в dae. Так выглядят модели звеньев робота, готовые к экспорту.

Модели экспортируются в папку meshes пакета urdf_test.

Для импорта робота в ROS папке urdf я создал файл robot_test.urdf:

<?xml version="1.0"?>
<robot name="robot_test">

<link name="base_link">
<visual>
<origin rpy="1.571 0 3.142" xyz="0 0 0"/>
<geometry>
<mesh filename="package://urdf_test/meshes/base_link.dae"/>
</geometry>
</visual>
</link>

<link name="link_2">
<visual>
<origin rpy="1.571 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://urdf_test/meshes/link_2.dae"/>
</geometry>
</visual>
</link>

<link name="link_3">
<visual>
<origin rpy="-1.571 3.142 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://urdf_test/meshes/link_3.dae"/>
</geometry>
</visual>
</link>

<link name="link_4">
<visual>
<origin rpy="-1.571 3.142 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://urdf_test/meshes/link_4.dae"/>
</geometry>
</visual>
</link>

<joint name="joint_1" type="revolute">
<parent link="base_link"/>
<child link="link_2"/>
<limit effort="0" lower="-1.571" upper="1.571" velocity="0"/>
<axis xyz="0 0 1"/>
<origin xyz="0 0 0.05"/>
</joint>

<joint name="joint_2" type="revolute">
<parent link="link_2"/>
<child link="link_3"/>
<limit effort="0" lower="-1.571" upper="1.571" velocity="0"/>
<axis xyz="1 0 0"/>
<origin xyz="0 0 0.29"/>
</joint>

<joint name="joint_3" type="revolute">
<parent link="link_3"/>
<child link="link_4"/>
<limit effort="0" lower="-1.571" upper="1.571" velocity="0"/>
<axis xyz="1 0 0"/>
<origin xyz="0 0 0.22"/>
</joint>

</robot>

Описание звеньев link в нем включает только блок visual, в котором указана ссылка на модель и задано положение модели относительно СК звена, определенного в описании сочленений joint. При этом у всех звеньев начала координат моделей совпадают с началом координат звеньев (origin xyz="0 0 0"), а поворот задан так, чтобы робот принял вертикальную стойку.

Сочленения joint имеют тип revolute - вращение вокруг оси в заданных пределах, они указываются в параметре limit. Не очень удобно то, что углы задаются в радианах, но уже как есть ...

Для запуска этого файла на визуализацию можно использовать несколько модифициронанный по сравнению с прошлым постом display.launch-файл:

<launch>

<arg name="model" default="$(find urdf_test)/urdf/robot_test.urdf"/>
<arg name="gui" default="true" />
<arg name="rvizconfig" default="$(find urdf_test)/rviz/urdf.rviz" />

<param name="robot_description" command="cat $(find urdf_test)/urdf/robot_test.urdf" />
<param name="use_gui" value="$(arg gui)"/>

<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" />

</launch>

Он запускается командой:

# roslaunch urdf_test display.launch

Результат ее выполнения должен выглядеть так:

Одновременно с Rviz запускается GUI пакета joint_state_publisher (спасибо исходному пакету urdf_tutorial). Так что звенья можно подвигать.

Робот импортирован - теперь нужно научиться управлять им с помощью контроллера PS3. Но это уже тема следующих постов.

Спасибо за внимание. Let`s go design!

 

Комментарии