📌 解析 left_wheel (左輪) 定義
這段 <link name="left_wheel"> 定義了機器人的 左輪,包含:
- 碰撞體 (collision):物理模擬中的碰撞區域。
- 可視化模型 (visual):Gazebo / RViz 中的渲染外觀。
- 慣性 (inertial):影響物理模擬的質量與轉動慣量。
🔍 詳細解析
1️⃣ collision (碰撞模型)
📌 作用
- 定義一個 半徑
0.1m、長度0.05m的圓柱形 碰撞區域。 rpy="0 1.5707 1.5707"(旋轉 90°):- 1.5707 = π/2(90°),這將圓柱側放成輪子的形狀。
📌 為什麼這樣設置?
- 在 Gazebo 物理模擬 中,輪子實際是圓柱體。
- 預設情況下,圓柱的軸朝
z,但車輪需要沿y軸旋轉,所以我們讓它繞x旋轉 90°,再繞y旋轉 90°,這樣就能讓圓柱變成「車輪」方向。
2️⃣ visual (外觀模型)
📌 作用
- 與
collision相同,這段程式碼定義了左輪在 Gazebo / RViz 的 外觀模型。 - 這裡的
<geometry>也使用 圓柱 (cylinder) 來代表輪子,尺寸與碰撞模型一致:radius="0.1"→ 半徑10cm。length="0.05"→ 厚度5cm。
🚀 這裡的
visual只影響 Gazebo/RViz 顯示,不影響物理模擬。
3️⃣ inertial (質量與慣性)
📌 作用
mass value="5"→ 左輪的質量為 5kg。cylinder_inertia m="5" r="0.1" h="0.05":- 這是 Xacro 巨集 (macro)
- 它會計算並填入適當的慣性張量 (
ixx, iyy, izz)。
4️⃣ cylinder_inertia 巨集計算
在 macros.xacro 文件中,我們定義了 cylinder_inertia:
根據 m=5kg、r=0.1m、h=0.05m 代入:
所以 真正的慣性數值應該是:
但是目前的代碼是:
這代表:
- 可能 沒有使用
cylinder_inertia計算,而是手動設定(不合理)。 - 建議修改成
cylinder_inertia的計算結果,以符合物理模擬。
✅ 這段代碼的總結
| 部分 | 作用 | 細節 |
|---|---|---|
collision (碰撞體) | 物理碰撞 | 圓柱 (radius=0.1, length=0.05),旋轉 90° 變成輪子方向 |
visual (外觀) | Gazebo / RViz 顯示 | 與 collision 相同,影響機器人外觀 |
inertial (慣性張量) | 物理模擬 | 質量 5kg,應該使用 cylinder_inertia 計算慣性 |
🚀 建議修改
1️⃣ 修正 inertia
目前的 inertia 手動設定為 1.0,但應該用 cylinder_inertia 自動計算:
修改前
修改後
這樣會自動計算並填入正確的 ixx、iyy、izz 值。
2️⃣ 確保 rpy 旋轉方向正確
目前的 rpy="0 1.5707 1.5707":
- 如果輪子方向不對,可能只需要 旋轉 90° (
1.5707) 或 -90° (-1.5707)。
可以測試:
這樣可能會讓輪子與底盤對齊更自然。
🎯 總結
這段 <link name="left_wheel"> 代碼為機器人的左輪,主要:
- 使用
cylinder作為碰撞體與可視化模型。 - 旋轉
90°讓圓柱變成輪子。 - 質量為
5kg,但慣性數據可能需要修正。 - 應該用
cylinder_inertia計算正確的inertia,而不是手動設定1.0。
=================================================
<link name="left_wheel">
<!--origin xyz="0.1 0.13 0.1" rpy="0 1.5707 1.5707"/-->
<collision name="collision">
<origin xyz="0 0 0" rpy="0 1.5707 1.5707"/>
<geometry>
<cylinder radius="0.1" length="0.05"/>
</geometry>
</collision>
<visual name="left_wheel_visual">
<origin xyz="0 0 0" rpy="0 1.5707 1.5707"/>
<geometry>
<cylinder radius="0.1" length="0.05"/>
</geometry>
</visual>
<inertial>
<origin xyz="0 0 0" rpy="0 1.5707 1.5707"/>
<mass value="5"/>
<cylinder_inertia m="5" r="0.1" h="0.05"/>
<inertia
ixx="1.0" ixy="0.0" ixz="0.0"
iyy="1.0" iyz="0.0"
izz="1.0"/>
</inertial>
</link>
沒有留言:
張貼留言