URDFhtml
爲了製做咱們的模擬器,首先咱們得了解下什麼是URDF編程
什麼是URDF? Unified Robot Description Format——統一機器人描述格式。總以爲這和Sensor支持纔是ROS的精華所在,通訊frameworks的並不見得出彩。框架
可能大部分讀者都像我這樣窮<bi~背景聲>沒錢買ROS支持的機器人,不過ROS仍是很Nice的考慮到了這一羣體,提供了模擬器支持。(明明是爲了更快速的軟件開發,喂!)工具
本想從ROS網站的培訓教程開始http://wiki.ros.org/urdf/Tutorials開始的,不過本着實踐爲本的目的,咱們仍是以《Learning ROS for Robostic Programming》爲基礎吧。網站
參考文獻spa
1. ROS urdf教程:http://wiki.ros.org/urdf/Tutorials.net
2. 《Learning ROS for Robostic Programming》設計
準備工做orm
安裝urdf_tutorial包xml
執行
固然,沒有運行roscore你的rviz也沒法啓動。不過若是錯誤顯示你的rviz找不到執行文件的話,請參照http://wiki.ros.org/rviz
URDF基本語法
統一機器人描述格式URDF,其實就是爲了可以抽象描述一個機器人的硬件。並且URDF是基於XML的,因此閱讀起來應該很是容易。
筆者覺得要理解URDF用自頂向下的方式更快。即從爲了解決一個怎樣的問題開始。在這裏咱們先用一個簡單場景熟悉一下會用到的工具。
不得不說小車是最簡單實用的機器人, 一個車身加四個輪子就組成了最基本的小車結構,並且具有必定載重能力的小車也不會太貴。
見以下圖片。
(圖一)
初版
在URDF語言中,機器人都會由各個部件(Link)經過關節(Joint)鏈接而成。而這裏的關鍵就是描述部件和關節之間的關係。
在這個簡單的小車模型中,一共有5個部件: 車身 + 4個輪子。 4個關節: 每一個輪子一個。
因而,咱們獲得了最初了URDF版本 01_car_skeleton.urdf
很簡單對吧?
用<link> tag描述各個部件,<joint> tag描述各個關節。用<parent>和<child>描述關節鏈接的部件。
只要描述了Link和Joint之間的關係,咱們很容易就能構建機器人的框架。
咱們能夠用以下命令來檢查urdf文件是否有語法問題。
只要獲得以下結果就代表語法沒問題。
但請注意這雖然描述了各個部件之間的關係,但還是一個不完整的URDF,沒法在模擬器中顯示。
第二版
<visual>tag用來描述模塊的視覺效果。
<geometry>tag 用來描述模塊的形狀和大小。
<origin>tag用來描述模塊的位置。
加上模塊大小以後的小車文件以下所示。02_visual.urdf
如今經過以下命令,你就經過rviz查看你的小車模型啦。
第三步: 上色
Mmm,咱們的小車就快完成了,但全是紅色總以爲怪怪的並且很難辨認。
不過上色一樣很簡單。使用<material> tag而且設置<color> tag
咱們獲得第三個版本:03_color.urdf
咱們能夠看到rviz的結果,如圖一所示。
這下咱們差很少完成了。咱們立刻就能夠移動咱們的小車啦。
可是等等,在咱們的URDF文件中,內嵌了關於各個部件的大小參數以及位置。這些固然是咱們根據草圖用計算器算出來的。
可是這樣的擴展性也太差了吧?難道對每一個模型咱們都得這麼計算嗎?對於相同模型的不一樣尺寸咱們還得從新計算一次?
第四步: Xacro
什麼是Xacro? 咱們能夠把它理解成爲針對URDF的擴展性和配置性而設計的宏語言(macro language)。
有了Xacro,咱們就能夠像編程同樣來寫URDF文件了。
首先咱們來看Xacro文件的變量定義:
只要定義了body_width,咱們就能夠經過${body_width}來引用其值了。有了這個,至少咱們能夠把須要配置的變量進行統一管理。
其次,咱們來看一下Xacro如何進行宏定義。
這裏的宏和C語言的宏很像,在轉換成URDF文件時編譯器會將其展開。其基本語法爲:
咱們來看下URDF文件中關於車身和車輪的大小描述。
<box size="0.2 .3 .1"/>
<origin rpy="0 0 0" xyz="0 0 0.05"/>
<cylinder length="0.05" radius="0.05"/>
<origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/>
這裏涉及到的參數有:
車身的大小(body_size),車身中心的位置(body_pos)。
車輪半徑(wheel_radius)和輪胎寬度(wheel_width),車輪圓心的位置(wheel1_pos, wheel2_pos, wheel3_pos, wheel4_pos)。
相應的在Xacro中定義參數的語法爲:
而且每一個輪子和鏈接的代碼也基本相同。
基於上述亮點,咱們能夠獲得如下xacro文件。04_xacro.xacro
驗證該文件的正確性能夠有兩種方法。
1. 轉換成URDF文件,使用check_urdf
2. 使用xacrodisplay.launch
咱們都會獲得和圖1同樣的小車模型。這下咱們就能夠用Xacro來構建機器人模型了。