Управления роботом Moveo в ROS ч.1 - импорт робота с помощью URDF, пакет moveo_ps3

Приступаю к созданию пакета moveo_ps3, с помощью которого буду управлять роботом Moveo посредством джойстика от PlayStation 3. Опираться буду на urdf_test, который я делал в предыдущих постах для управления тестовым роботом.

Сначала в рабочем пространстве (у меня это ~/ws_moveit/src) нужно создать пакет с помощью catkin, где сразу можно указать необходимые зависимости:

$ catkin_create_pkg moveo_ps3 rospy roslaunch std_msgs message_generation message_runtime

Далее нужно скопировать файлы 3D геометрии в папку ~/ws_moveit/src/moveo_ps3/meshes/. Для их создания я сохранил звенья робота из общей сборки в SolidWorks сначала в детали, которые ориентировал во вспомогательных сборках так, чтобы начала их координат оказались на осях вращения. А затем уже эти сборки сохранил в STL в папку /meshes. Настройки сохранения:


Когда геометрия есть, можно переходить к составлению URDF-файла moveo_ps3.urdf в папке /urdf. Звенья moveo я назвал, как и для тестового робота base_link, link_1, link_2 ... Так что смело воспользуюсь URDF из пакета urdf_test, немного его модифицировав:

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

<material name="white">
<color rgba="1 1 1 1"/>
</material>

<!--Links-->

<link name="base_link">
<visual>
<origin rpy="1.571 0 3.142" xyz="0 0 0"/>
<geometry>
<mesh filename="package://moveo_ps3/meshes/base_link.STL"/>
</geometry>
<material name="white"/>
</visual>
</link>

<link name="link_1">
<visual>
<origin rpy="1.571 0 3.142" xyz="0 0 0"/>
<geometry>
<mesh filename="package://moveo_ps3/meshes/link_1.STL"/>
</geometry>
<material name="white"/>
</visual>
</link>

<link name="link_2">
<visual>
<origin rpy="1.571 0 3.142" xyz="0 0 0"/>
<geometry>
<mesh filename="package://moveo_ps3/meshes/link_2.STL"/>
</geometry>
<material name="white"/>
</visual>
</link>

<link name="link_3">
<visual>
<origin rpy="1.571 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://moveo_ps3/meshes/link_3.STL"/>
</geometry>
<material name="white"/>
</visual>
</link>

<link name="link_4">
<visual>
<origin rpy="1.571 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://moveo_ps3/meshes/link_4.STL"/>
</geometry>
<material name="white"/>
</visual>
</link>

<link name="link_5">
<visual>
<origin rpy="1.571 0 3.142" xyz="0 0 0"/>
<geometry>
<mesh filename="package://moveo_ps3/meshes/link_5.STL"/>
</geometry>
<material name="white"/>
</visual>
</link>

<!--Joints-->

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

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

<joint name="joint_3" 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.2211"/>
</joint>

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

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

</robot>

Для визуализации робота нужен еще launch-файл в папке /launch и файл настроек Rviz /rviz. Их также взял из пакета urdf_test. Файл запуска display.launch будет использоваться только для отображения робота и в нем будет панель управления joint_state_publisher:

<launch>

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

<param name="robot_description" command="cat $(find moveo_ps3)/urdf/moveo_ps3.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>

Чтобы собрать пакет, опять использую catkin:

$ catkin_make

Осталось запустить:

$ roslaunch moveo_ps3 display.launch 

Готово!


Пакет
moveo_ps3 можно скачать в моем Git.

В следующей части буду разбираться с тем, как решать обратную кинематическую задачу с помощью MoveIt. 

Let`s go design!


Комментарии