ros建立urdf或xarco檔案時,模型座標點的理解
使用ros少不了要建立機器人模型檔案,檔案格式是xml,能建立幾何模型,也能引用3d的模型檔案,說白了就是將模型組織在一塊兒,搭積木一樣堆個機器人出來。
所以對幾何模型座標的理解不能含糊。
座標系遵循右手法則食指x中指y拇指z。
連桿模型示例<link name="shoulder_link">
<visual>
<geometry>
<cylinder length="0.05" radius="0.025"/>
</geometry>
<origin xyz="0.0 0.0 0.025"/>
<material name="white"/>
</visual>
</link>
建立了一個圓柱幾何模型高度為0.05,半徑為0.025,單位是m,原點在其質心。
<origin xyz="0.0 0.0 0.025"/>一句進行模型xyz方向的偏移設定
即z方向往上偏移0.025
現在原點在幾何模型的底部。
再一個連桿
<link name="upper_arm_link">
<visual>
<geometry>
<box size="0.1 0,01 0.01"/>
</geometry>
<origin rpy="0.0 1.5705 0.0" xyz="0.0 0.0 -0.05"/>
<material name="white"/>
</visual>
</link>
建立了一個x 10cm y 1cm z 1cm的長方條。橫放10cm長。
<origin rpy="0.0 1.5705 0.0" xyz="0.0 0.0 -0.05"/>
rpy 設定旋轉 沿著y軸轉1.5705弧度{90度},變豎放10cm高,
此時原點沒變,還在質點,
xyz 設定模型z方向向下5cm,
此時原點在豎長條頂部。
兩個連桿之間的關節
<joint name="upper_arm_joint" type="revolute">
<parent link="shoulder_link"/>
<child link="upper_arm_link"/>
<origin xyz="0.0 0.0 0.05"/>
<axis xyz="0 0 1"/>
<limit effort="${arm_effort}"
lower="${-45.0 * deg_to_rad}" upper="${45.0 * deg_to_rad}"
velocity="${arm_velocity}"/>
<dynamics friction="${arm_friction}" damping="${arm_damping}"/>
<safety_controller k_position="20"
k_velocity="20"
soft_lower_limit="${-45.0 * deg_to_rad + arm_eps}"
soft_upper_limit="${ 45.0 * deg_to_rad - arm_eps}"/>
</joint>
關節體現了幾何模型之間的位置和連結關係
<origin xyz="0.0 0.0 0.05"/>
是指關節位置相對於parent座標系進行的偏移量。
shoulder的座標系在模型底部,其高度為0.05,
由於偏移設定為沿著z方向往上0.05的位置,
所以這個關節在模型shoulder_link頂部的位置。
type=revolute設定為旋轉關節。
<axis xyz="0 0 1"/>表示以z軸為旋轉軸。
想象此時圓柱shoulder_link和細長條upper_arm_link應該頂部對齊。
長條可以像鑽頭一樣在一定範圍內+-45度旋轉。