定義
URDF全稱為Unified Robot Description Format,中文可以翻譯為“統一機器人描述格式”。與計算機檔案中的.txt文本格式、.jpg圖像格式等類似,URDF是一種基於
XML規範、用於描述機器人結構的格式。根據該格式的設計者所言,設計這一格式的目的在於提供一種儘可能通用的機器人描述規範。
從機構學角度講,機器人通常被建模為由連桿和關節組成的結構。連桿是帶有質量屬性的剛體,而關節是連線、限制兩個剛體相對運動的結構。關節也被成為運動副。通過關節將連桿依次連線起來,就構成了一個個運動鏈(也就是這裡所定義的機器人模型)。一個URDF文檔即描述了這樣的一系列關節與連桿的相對關係、慣性屬性、幾何特點和碰撞模型。具體來說,包括:
典型示例
根據關節與連桿相關元素的定義,列舉如下基於URDF的機器人描述示例:
單連桿機器人
一個僅由一根連桿構成的機器人模型可用URDF描述如下:
<?xml version="1.0"?>
<robot name="mybot">
<link name="base_link">
<visual>
<geometry>
<cylinder length="0.6" radius="0.2"/>
</geometry>
</visual>
</link>
</robot>
以上定義描述了一個名稱為mybot的機器人,該機器人具有一根名為base_link的連桿,該連桿是一個長為0.6、橫截面半徑為0.2的圓柱體。根據機器人作業系統(ROS)的官方文檔,URDF格式採用“米-千克-秒”制,因此上述數值單位為米。
二連桿機器人
<?xml version="1.0"?>
<robot name="two_link_bot">
<link name="link_0">
<visual>
<geometry>
<cylinder length="0.6" radius="0.2"/>
</geometry>
</visual>
</link>
<link name="link_1">
<visual>
<geometry>
<cylinder length="0.6" radius="0.2"/>
</geometry>
</visual>
</link>
<joint name="joint_0" type="revolute">
<axis xyz="0 0 1"/>
<limit effort="100.0" lower="0.0" upper="0.5" velocity="0.5"/>
<origin rpy="0 0 0" xyz="0.0 0.0 0.3"/>
<parent link="link_0"/>
<child link="link_1"/>
</joint>
</robot>
以上定義描述了一個名稱為two_link_bot的機器人,該機器人具有兩根連桿,兩根連桿由一個旋轉關節joint_0連線。
局限性及相應改進
由於XML文檔形成一種樹結構,使得URDF文檔只能表示呈現樹形結構的機器人(即串在線上器人,或開鏈機器人),而一般的並行(閉鏈)機器人並不滿足樹形結構從而無法用URDF表示。
URDF假設所有連桿均為
剛體,由關節連線,其不支持對柔性元素的表示。
URDF模型無法參數化,不便維護。如存在一系列結構相似、但尺寸、質量不同的機器人系列,需要對每個機器人建立一份URDF文檔。一旦該系列機器人結構發生改變,又需逐個對上述檔案進行修改。為解決這一問題,一種基於宏的URDF文檔(稱為XACRO)被提出,使得針對上述情況的URDF文檔可以復用,增加了可讀性,減少了維護成本。
一個URDF文檔僅能描述一個機器人的運動學與動力學屬性,並且URDF不能描述機器人自身相對於世界坐標系的位姿(因為URDF僅描述機器人自身連桿和關節之間的關係,不涉及機器人與外界之間的關係)。
URDF文檔不能描述摩擦力相關的屬性。
從仿真角度講,URDF文檔不能描述不屬於機器人的屬性,即使其可能與機器人仿真十分相關,如環境光線、機器人在世界坐標系下的位姿、多個機器人之間的相對位姿等。為解決4-6所提局限性,仿真描述格式(Simulation Description Format,SDF)被提出,其完整的描述了從機器人仿真仿真中從仿真環境到機器人的各層次的內容。SDF文檔具有高度可擴展性,並且非常易於添加和修改元素,SDF格式本身使用XML進行描述,使得從URDF遷移到SDF相對容易。