2025年6月30日 星期一

Joint by URDF 關節 定義說明

right_front_wheel_joint 的 URDF 定義如下:

xml
<joint name="right_front_wheel_joint" type="continuous"> <!-- 使用continuous --> <parent link="body_car"/> <child link="body_right_front_wheel"/> <origin xyz="0.1 0.1 -0.05" rpy="0 0 1.5708"/> <!-- 近似位置 --> <axis xyz="0 0 1"/> <!-- 定義關節的旋轉軸向 --> </joint>

🔍 分析說明

項目說明
type="continuous"適用於輪子這類可自由旋轉、不設上限角度的關節。常見於差速驅動車。
origin rpy="0 0 1.5708"表示車輪的朝向做了 Z 軸旋轉 90 度(1.5708 rad),這是必要的前處理,但也可能代表幾何方向與旋轉軸需要額外檢查。
<axis xyz="0 0 1"/>表示輪子旋轉軸朝向 Z 軸。但這通常不正確,除非車輪垂直裝在地上旋轉,正常輪子應繞 Y 軸旋轉(左右轉動)

✅ 建議修正方式

若以車輪位於地面、並朝著前方滾動的正常輪子方向為準,則其旋轉軸應為:

xml
<axis xyz="0 1 0"/>

若你已透過 <origin rpy="0 0 1.5708"/> 將輪子模型朝向轉了 90 度,則也需要讓 axis 對應變為 X 軸旋轉

✅ 正確範例(若模型輪子原本是 Y 軸方向)

xml
<joint name="right_front_wheel_joint" type="continuous"> <parent link="body_car"/> <child link="body_right_front_wheel"/> <origin xyz="0.1 0.1 -0.05" rpy="0 0 0"/> <!-- 輪子模型直接朝 X --> <axis xyz="0 1 0"/> <!-- 車輪繞 Y 軸旋轉(常見設定) --> </joint>

✅ 更強健方式:直接觀察 STL 模型方向

若你不確定你的 wheel.stl 是哪個方向:

  1. 載入至 RViz 或 Blender 觀察模型方向。

  2. 假如輪子的圓心是繞 Y 軸轉動,那 axis 設 Y 軸(0 1 0)即可。

  3. 如果你模型旋轉了 90 度(例如使用 <origin rpy="0 0 1.5708"/>),則你可能需修正軸為 (1 0 0)


⚙️ 額外建議

如要做成 Xacro 模板,建議將軸向與位姿參數化:

xml
<xacro:macro name="wheel_joint" params="name parent child xyz rpy axis"> <joint name="${name}" type="continuous"> <parent link="${parent}"/> <child link="${child}"/> <origin xyz="${xyz}" rpy="${rpy}"/> <axis xyz="${axis}"/> </joint> </xacro:macro>

這樣可靈活地定義四顆輪子的 joint。



沒有留言:

張貼留言