Unified/Universal Robot Description Format(URDF),中譯統一機器人描述格式,直接看名字就能知道其意義-是一種大家約定好用來描述機器人的格式,需要用XML語法編寫,在ROS是採用此格式來模擬一台機器人,ROS中已存在用來解析URDF的package,其系統的關係圖如下圖。
其他描述格式還有等一下提到的SDF與我沒用過得collada格式,如果想從URDF轉換成SDF或collada已經有存在了的package,有興趣可以去看看~
先看一個什麼都沒有的URDF~以<robot>
為最外層,裡頭包裹著子元素<link>
或<joint>
。<link>
:機器人的節點或零件,拿人類舉例為小腿、大腿。 <joint>
:機器人的連接處,拿人類舉例為膝蓋關節處。
<robot>
<link>
...
</link>
<link>
...
</link>
<joint>
...
</joint>
</robot>
<link>
、 <joint>
也有各自的子元素~
<link>
的子元素有慣性<inertial>
和視覺<visual>
<robot>
<link>
<inertial>
...
</inertial>
<visual>
...
</visual>
</link>
...
</robot>
<joint>
的子元素有父節點<parent>
和子節點<child>
<robot>
<joint>
<parent link = "link parent" />
<child link = "link child" />
</joint>
</robot>
更多詳細介紹明天在寫URDF會解釋~
要注意的是Gazebo也能讀取URDF,但不是主要的語法,SDF才是!
Simulation Description Format(SDFormat、SDF),中譯模擬描述格式,用於描述機器人、環境、物件、照明的一種XML格式文件,是為了Gazebo而開法。與URDF最大的不同是後者僅針對『單一個』機器人去做描述,而SDF可以是模擬環境中的任何亦個物件,多個SDF可以組成一個模擬世界(.world)
SDF也有個官方網站,因為SDF可以描述的東西很多,很多xml標籤可以用,太複雜容易錯亂,可以透過官網先抓一個架構。
針對一個機器人描述的部份是使用<model>
(相對URDF是<robot>
)
<?xml version="1.0" ?>
<sdf version="1.5">
<model>
<link>
...
</link>
<joint>
...
</joint>
</model>
</sdf>
針對一個世界(.world),可以有好多個<model>、<light>、<scene>
<?xml version="1.0" ?>
<sdf version="1.5">
<world name="default">
<physics type="ode">
...
</physics>
<scene>
...
</scene>
<model name="box">
...
</model>
<model name="sphere">
...
</model>
<light name="spotlight">
...
</light>
</world>
</sdf>
SDF和URDF看起來相似,但其實有很多細節的不同,目前先專注在做URDF的介紹,有時間再來補充SDF。URDF可以直接被Gazebo使用,Gazebo會幫你專換成SDF後再載入。
現在放在一起比較是因為剛學的時候一直稿不懂兩個的差別,以為兩者轉換起來很簡單,但卻花了遠遠超過預期的時間在改寫上,最後來失敗了?總之挫折感滿滿,除此之外還有與之相關的Gazebo與ROS plugin的串接也是個問題。
目前的解方是完全放棄自己刻模型這件事,直接用Gazebo提供的汽車SDF做模擬。
(按照別人的教學可行,換成自己從頭來就不行了...)
再提的更細節一點點,其實有蠻多人分享差速輪車底的模型教學,但我之前很專注在想自己模擬出一台阿克曼底盤小車,踩了很多坑,不管是信心還是時間都大受打擊,暫時放棄了這個選擇,未來有機會想再好好補上,或有先進可以指點一下。
更深入認識URDF!目標載入一台差速輪車車進Gazebo!
也給自己一個機會好好複習一下...說不定寫鐵人的過程中就開竅了?