1. 程式人生 > >使用urdf建立ROS機器人Autolabor2.5機器人模型

使用urdf建立ROS機器人Autolabor2.5機器人模型

本文介紹如何在ROS中使用urdf建立機器人3D模型。

準備工作

  1. 操作環境:AutolaborOS 下載安裝教程
  2. 機器人3D模型:Autolabor 2.5 stl 檔案 下載
    在這裡插入圖片描述

移動機器人小車3D模型的構建

  1. 介紹
  2. 建立硬體描述包
  3. 繪製機器人小車模型
  4. 建立urdf檔案
  5. 建立launch檔案命令
  6. 效果展示

1. 介紹

機器人的3D模型在ROS中是通過URDF檔案實現,URDF(Unified Robot Description Format)就是描述機器人硬體尺寸佈局的模型語言。它是同ROS通訊的渠道,通過機器人的物理尺寸來配置機器人模型,ROS就可以有效的進行自主導航(Navagation)和碰撞檢測(collision detect)了。

2. 建立硬體描述包

在ROS中,所有的ROS軟體(包括我們建立的軟體)都被組織成軟體包的形式。因此,在工作空間catkin_ws/src/目錄下通過catkin_create_pkg來建立硬體描述包:

$ catkin_create_pkg autolabor_description urdf

通過catkin_create_pkg建立了一個autolabor_description的包,該命令的最後一個引數是引入urdf庫。

ROS中建立包詳情請參考:http://wiki.ros.org/ROS/Tutorials/CreatingPackage

在新建的包中建立 urdf 和 launch 資料夾用於儲存 *.urdf 和 *.launch 檔案。可以在catkin_ws/src/目錄下看到:

3. 繪製機器人小車的3D模型

(當然,這一步並不是必要的,你也可以通過配置urdf檔案來得到小車的模型,詳情參考第四步)
通過機器人小車的物理引數,使用3D製圖軟體繪製機器人小車的3D模型
## 1圖片

在autolabor_description包的目錄下,新建meshes資料夾,將繪製的3D模型複製到在路徑下

4. 建立urdf檔案

在urdf資料夾下建立檔案 autolabor_description.urdf檔案,並將下列程式碼放在 autolabor_description.urdf檔案中

如果繪製了3D模型,建立urdf檔案

 <robot name="autolabor_description"> 
    <link name="base_link">
    <inertial>
      <origin
        xyz="0. 0. 0."
        rpy="0. 0. 0." />
      <mass
        value="0.251988675650349" />
      <inertia
        ixx="0.000595579869264794"
        ixy="5.99238175321912E-08"
        ixz="-1.98242615307314E-08"
        iyy="0.00102462329604677"
        iyz="-1.73115625503396E-05"
        izz="0.00060561972360446" />
    </inertial>
    <visual>
      <origin
        xyz="0. 0. 0.05"
        rpy="1.57 0. 1.57" />
      <geometry>
        <mesh
          filename="package://autolabor_description/meshes/base_link.stl" />
      </geometry>
      <material
        name="">
        <color
          rgba="0.792156862745098 0.819607843137255 0.933333333333333 1" />
      </material>
    </visual>
   </link>
   </robot>

如果未繪製3D模型,通過配置urdf來得到模型,這裡僅展示一個簡單的example

<?xml version="1.0"?>
<robot name="smartcar">
  <link name="base_link">
    <visual>
      <geometry>
        <box size="0.25 .16 .05"/>
    </geometry>
    <origin rpy="0 0 1.57075" xyz="0 0 0"/>
    <material name="blue">
        <color rgba="0 0 .8 1"/>
    </material>
    </visual>
 </link>

 <link name="right_front_wheel">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="black">
        <color rgba="0 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="right_front_wheel_joint" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="right_front_wheel"/>
    <origin rpy="0 1.57075 0" xyz="0.08 0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>

  <link name="right_back_wheel">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="black">
        <color rgba="0 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="right_back_wheel_joint" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="right_back_wheel"/>
    <origin rpy="0 1.57075 0" xyz="0.08 -0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
 </joint>

 <link name="left_front_wheel">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="black">
        <color rgba="0 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="left_front_wheel_joint" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="left_front_wheel"/>
    <origin rpy="0 1.57075 0" xyz="-0.08 0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>

  <link name="left_back_wheel">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="black">
        <color rgba="0 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="left_back_wheel_joint" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="left_back_wheel"/>
    <origin rpy="0 1.57075 0" xyz="-0.08 -0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>

  <link name="head">
    <visual>
      <geometry>
        <box size=".02 .03 .03"/>
      </geometry>
      <material name="white">
          <color rgba="1 1 1 1"/>
      </material>
    </visual>
  </link>

  <joint name="tobox" type="fixed">
    <parent link="base_link"/>
    <child link="head"/>
    <origin xyz="0 0.08 0.025"/>
  </joint>
</robot>

其中配置解釋如下:

<link>對應模型的一個模組,可以通過標籤joint讓子模組與base_link進行關聯;

<visual>描述一個link的外觀,大小,顏色,材質紋理等;

<geometry>定義該link的幾何模型,包含該幾何模型的尺寸,單位:米;

<box> 矩形,定義屬性:size(包含長寬高,資料用空格隔開);

<cylinder>  圓柱體,定義屬性:length,radius;

<sphere>  球體,定義屬性:radius;

<material> 定義顏色和透明度(RGBA),取值區間 [0,1] ;

<collision> 描述碰撞檢測屬性;

<origin> 用來描述模組的位置;

<inertial> 定義慣性;

5.建立launch命令檔案

*.launch檔案的作用是:同時啟動多個節點,使用roslaunch命令執行.launch檔案中指定的節點。在launch資料夾中建立檔案display.launch,並編輯,程式碼如下:

<launch>
  <arg name="model" />
  <arg name="gui" default="false" />

  <param name="robot_description" textfile="$(find autolabor_description)/urdf/autolabor_description.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 $(find autolabor_description)/urdf.rviz" />
</launch>

第一個輸入引數 model 就是要啟動的urdf檔案路徑。
第二個輸入引數 gui 指定是否啟用關節轉動控制面板視窗。
兩個引數表示:分別描述要啟動的模型描述檔案(urdf)和關節轉到控制視窗(gui,對應各個joint)。
三個節點:分別用於傳送joint的資訊,robot的控制資訊,和rviz的啟動。至此,模型搭建完畢,啟動模型進行測試。

6.效果展示

進入工作空間目錄下,編譯檔案,使用roslaunch命令來啟動它:

$ cd ~/catkin_ws/
$ source devel/setup.bash
$ catkin_make

$ roslaunch autolabor_description display.launch

在這裡插入圖片描述
在啟動rviz後,需要將上面標記的topic的引數改成上述圖中,否則是無法觀測到的,到此,就建立並啟動了自己的機器人小車了

autolabor_urdf下載
在這裡插入圖片描述