在上一篇[[2.製作第一個URDF]]中,我們寫了一個基本圓柱體的URDF: ```XML <?xml version="1.0"?> <robot name="kotori"> <link name="base_link"> <visual> <geometry> <cylinder length="0.6" radius="0.2"/> </geometry> </visual> </link> </robot> ``` 當然,其中很多東西我們並不認識,首當其衝的就是link這個標籤代表什麼意思? link用於描述機器人部件的外觀和物理屬性。比如說標準的輪型機器人可能會有車身、車輪、感測器等,每一個部件就會是一個link。在link標籤中,可以對其設置形狀、尺寸、顏色、慣性、碰撞參數等數值。以上面的例子來說,裡面以geometry標籤定義了形狀跟尺寸,我們後續會慢慢使用到更多標籤。 現在我們只有一個圓柱體,那要新增新的形狀要怎麼做呢? 在檔案中加上一些東西,讓它變成以下這樣: ```XML <?xml version="1.0"?> <robot name="kotori"> <link name="base_link"> <visual> <geometry> <cylinder length="0.6" radius="0.2"/> </geometry> </visual> </link> <link name="right_leg"> <visual> <geometry> <box size="0.6 0.1 0.2"/> </geometry> </visual> </link> <joint name="base_to_right_leg" type="fixed"> <parent link="base_link"/> <child link="right_leg"/> </joint> </robot> ``` 輸入完成之後直接用同一個命令來預覽(記得先把剛剛預覽的東西關掉)。 ```bash ros2 launch urdf_tutorial display.launch.py model:=kotori.urdf ``` 應該會長的像這個樣子: ![](https://hackmd.io/_uploads/rysRDSxp3.png) 上面的URDF我們多接觸了兩個新概念: box和joint標籤。URDF中有三種基本形狀+一種匯入形狀可以創立: * box(長方體):需要長寬高三個數值 * cylinder(圓柱):需要高跟半徑兩個數值 * sphere(球體):需要半徑 * mesh(網格):需要檔案路徑(可以參考[[1.URDF是什麼?]]中,教阿的URDF) 通常,我們在練習時只會使用前三種預設形狀去拼接。購買來的機器人若有附URDF,則可能會使用到第四種網格形狀,此時裡面會有一堆dae檔案,一個部件就需要一個。 而joint是跟link同等重要的標籤。joint 標籤用於描述機器人關節的運動學和動力學屬性,還可以指定關節運動的安全極限。 機器人的兩個部件(分別稱之為 parent link 與 child link)以關節的形式相連接,不同的關節有不同的運動形式: 旋轉、滑動、固定、旋轉速度、旋轉角度限制等等。前面提到輪型機器人,其車體和車輪的關係和旋轉運動就得依靠關節定義。 關節的運動方式由type定義,可以使用的運動方式有這幾種: * continuous: 旋轉關節,可以繞單軸無限旋轉 * revolute: 旋轉關節,類似於 continues,但是有旋轉角度限制 * prismatic: 滑動關節,沿某一軸線移動的關節,有位置極限 * planer: 平面關節,允許在平面正交方向上平移或旋轉 * floating: 浮動關節,允許進行平移、旋轉運動 * fixed: 固定關節,不允許運動的特殊關節 建立一個關節時一定需要定義parent和child--畢竟有兩個實體(link),關節才有存在的意義。