ROS中階筆記(二):機器人系統設計—URDF機器人建模

ROS中階筆記(二):機器人系統設計—URDF機器人建模node

01 URDF理論

1.1 什麼是URDF

  • Unified Robot Description Format,統一機器人描述格式;
  • ROS中一個很是重要的機器人模型描述格式;
  • 能夠解析URDF文件中使用XML格式描述的機器人模型;
  • ROS同時也提供URDF文件的C++解析器(能夠在C++代碼中直接解析URDF機器人模型,好處:在基於模型的計算算法中,能夠在代碼中調用模型的信息,方便模型計算)

1.2 模型< robot >

官網:http://wiki.ros.org/urdf/XML/model算法

一個完整的機器人模型,由一系列< link >和< joint >組成shell

  • 完整機器人模型的最頂層標籤
  • < link > 和 < joint >標籤必須包含在 < robot > 標籤內
<robot name="pr2">
  <link> ... </link>
  <link> ... </link>
  <link> ... </link>

  <joint>  ....  </joint>
  <joint>  ....  </joint>
  <joint>  ....  </joint>
</robot>

官網:http://wiki.ros.org/urdf/XML/link安全

  • 描述機器人某個剛體部分的外觀和物理屬性;
  • 尺寸(size)、顏色(color)、形狀(shape)、慣性矩陣(inertial matrix)、碰撞屬性(collision properties)等。
<link name="my_link">
   <inertial>
     <origin xyz="0 0 0.5" rpy="0 0 0"/>
     <mass value="1"/>
     <inertia ixx="100"  ixy="0"  ixz="0" iyy="100" iyz="0" izz="100" />
   </inertial>

   <visual>
     <origin xyz="0 0 0" rpy="0 0 0" />
     <geometry>
       <box size="1 1 1" />
     </geometry>
     <material name="Cyan">
       <color rgba="0 1.0 1.0 1.0"/>
     </material>
   </visual>

   <collision>
     <origin xyz="0 0 0" rpy="0 0 0"/>
     <geometry>
       <cylinder radius="1" length="0.5"/>
     </geometry>
   </collision>
 </link>

包括3個子標籤微信

  • < inertial >:描述link的慣性參數,主要用到機器人動力學的運算部分;
  • < visual >:描述機器人link部分的外觀參數, 尺寸、顏色、形狀等的外觀信息;
  • < collision >:描述link的碰撞屬性,

link還有一個比較關鍵的部分,就是座標系機器學習

Link origin 是起始座標,整個link建立的時候都是相對 Link origin座標系建立的;學習

1.2.2 < joint > element

官網:http://wiki.ros.org/urdf/XML/joint優化

joint就是用來鏈接兩個具體的link部分的;ui

  • 描述機器人關節的運動學和動力學屬性
  • 包括關節運動的位置和速度限制
  • 根據關節的運動形式,能夠將其分爲六種類型。
關節類型 描述
continuous 旋轉關節,能夠圍繞單軸無限旋轉
revolute 旋轉關節,相似於continuous,可是有旋轉的角度極限
prismatic 滑動關節,沿某一軸線移動的關節,帶有位置極限
planar 平面關節,容許在平面正交方向上平移或者旋轉
floating 浮動關節,容許進行平移、旋轉運動
fixed 固定關節,不容許運動的特殊關節
<joint name="my_joint" type="floating">
    <origin xyz="0 0 1" rpy="0 0 3.1416"/>
    <parent link="link1"/>
    <child link="link2"/>

    <calibration rising="0.0"/>
    <dynamics damping="0.0" friction="0.0"/>
    <limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" />
    <safety_controller k_velocity="10" k_position="15" soft_lower_limit="-2.0" soft_upper_limit="0.5" />
 </joint>

下面圖中,藍色關節表示出一個運動的軸,藍色關節是能夠圍繞藍色的軸旋轉的,也就是child這個link是能夠圍繞joint上下旋轉。插件

joint是鏈接兩個link,須要分一個主次關係,主關節是parent link,子關節是child link, 在xml形式的描述中這個兩個 link是必須存在的

子標籤:

  • < calibration >:關節的參考位置,用來校準關節的絕對位置;
  • < dynamics >:描述關節的物理屬性,例如阻尼值、物理靜摩擦力等,常常在動力學仿真中用到;
  • < limit >:描述運動的一些極限值,包括關節運動的上下限位置、速度限制、力矩限制等;
  • < mimic >:描述該關節與已有關節的關係;
  • <safety_controller>:描述安全控制器參數。保護機器人關節的運動

02 URDF 實踐

2.1 建立機器人描述的功能包

第一步,進入工做空間中的src 功能包目錄下,

$ cd ./catkin_ws/src/

第二步,建立一個機器人建模的功能包

$ catkin_create_pkg mbot_description urdf xacro

# 機器人模型、描述文件在ROS裏,一般的以 機器人名_description
# 而且須要依賴urdf功能包,解析模型 和 xacro(優化urdf用的)依賴

第三步,在mbot_description功能包下建立幾個不一樣做用的文件夾,以下圖所示:

  • urdf:存放機器人模型的URDF或xacro文件
  • meshes:放置URDF中引用的模型渲染文件,機器人外觀紋理,讓外觀和實際更類似,經過三維設計軟件導出,放置此文件夾下
  • launch:保存相關啓動文件
  • config:保存rviz的配置文件、功能包的配置文件

2.2 編輯launch啓動文件

主要是加載urdf 並在rviz中顯示
顯示機器人模型,基本上修改第一行 urdf文件的路徑,便可;

下面display_mbot _base_urdf.launch文件是在rviz中顯示機器人的一種固定形態

<launch>
    <!-- param是要加載ros的一個參數:robot_description (描述機器人的具體模型)-->
	<param name="robot_description" textfile="$(find mbot_description)/urdf/mbot_base.urdf" />

	<!-- 設置GUI參數,顯示關節控制插件 -->
	<param name="use_gui" value="true"/>
	
	<!-- 運行joint_state_publisher節點,發佈機器人的關節狀態  -->
	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
	
	<!-- 運行robot_state_publisher節點,發佈tf  -->
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
	
	<!-- 運行rviz可視化界面 -->
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
</launch>
  • joint_state_publisher:發佈每一個joint(除fixed類型)的狀態,並且能夠經過UI界面對joint進行控制
  • robot_state_publisher:將機器人各個links、joints之間的關係,經過TF的形式,整理成三維姿態信息發佈

2.3 配置config文件

在config文件夾下,建立.rviz 配置文件,保存。

2.4 建立URDF模型

在urdf文件夾下,建立.urdf文件,保存

第一步:使用圓柱體建立一個車體模型

第二步:使用圓柱體建立左側車輪

第三步:使用圓柱體建立右側車輪

第四步:使用球體建立先後支撐輪

第五步:建立傳感器——攝像頭camera、激光雷達laser、Kinect;

關於Kinect,在meshes文件夾下,建立建立紋理描述文件

2.5 檢查URDF模型總體結構

在urdf文件夾下,執行 urdf_to_graphiz+要檢查的urdf文件

$ urdf_to_graphiz mbot_with_kinect.urdf

會在當前路徑下建立一個pdf文件,把機器人全部的link和joint的關係分析出來;

2.6 啓動launch文件

注意:在運行launch文件時,URDF文件中不能有中文註釋,刪除掉中文註釋,否正會報錯誤;

$ roslaunch mbot_description display_mbot_base_urdf.launch

問題一:啓動錯誤

[ERROR] [1589109861.881993]: Could not find the GUI, install the 'joint_state_publisher_gui' package

$ sudo apt-get install ros-kinetic-joint-state-publisher-gui

問題二:警告

這時候可能還會存在一個警告,若是有的話把launch文件中的joint_state_publisher用joint_state_publisher_gui所有替換掉,便可。

2.7 URDF建模存在的問題

  • 模型冗長,重複內容過多
  • 參數修改麻煩,不便於二次開發
  • 沒有參數計算功能

03 參考資料

官方教程:http://wiki.ros.org/cn/urdf

http://wiki.ros.org/urdf/Tutorials

ARM端安裝ROS:http://wiki.ros.org/indigo/Installation/UbuntuARM

微信公衆號:喵哥解說 公衆號介紹:主要研究機器學習、計算機視覺、深度學習、ROS等相關內容,分享學習過程當中的學習筆記和心得!期待您的關注,歡迎一塊兒學習交流進步!同時還有1200G的Python視頻和書籍資料等你領取!!!

相關文章
相關標籤/搜索