📌 解析 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>
沒有留言:
張貼留言