這段 <link name='chassis'>
代碼描述了一個機器人的 底盤 (chassis),它包含了:
物理屬性( 質量、慣性)、
碰撞體(collision)、
可視化模型(visual),
以及一個小的萬向輪(caster)。
📌 結構分析
這段代碼主要由以下部分組成:
<pose>
:底盤的初始位置<inertial>
:機器人的質量與慣性張量<collision>
:定義碰撞體(box 和 sphere)<visual>
:定義顯示模型(box 和 sphere)<surface>
:摩擦力與滑動參數(適用於 caster)
🔍 詳細解析
1️⃣ <pose>
(底盤初始位置)
xyz = 0 0 0.1
→ 機器人底盤的初始位置在 z 軸 0.1m 高度。rpy = 0 0 0
→ 沒有旋轉。
這表示底盤離地面 10 公分,可能是為了安裝輪子。
2️⃣ <inertial>
(質量與慣性張量)
📌 作用
mass value="10.0"
→ 底盤質量為 10kg。origin xyz="0.0 0 0.1"
→ 慣性中心位於 (0,0,0.1),即在底盤的中心。<inertia>
→ 慣性張量(影響物理運動):ixx="0.5", iyy="1.0", izz="0.1"
→ 定義了物體在 X、Y、Z 軸上的轉動慣量。
這段定義告訴模擬器,底盤在不同方向上的旋轉阻力不同,可能是因為形狀不均勻或重心不同。
3️⃣ <collision>
(碰撞模型)
這裡定義了兩個碰撞體:
📌 (1) 底盤碰撞體
box size=".4 .2 .1"
→ 定義了一個 長 0.4m、寬 0.2m、高 0.1m 的 碰撞盒。- 這是底盤的主要碰撞範圍,用於偵測與環境的物理交互。
📌 (2) 萬向輪碰撞體
- 這是一個 "caster" (萬向輪) 的物理模擬:
origin xyz="-0.15 0 -0.05"
→ 它被放在底盤的 後方 (-0.15m) 和 稍微低一點 (-0.05m),應該是模擬機器人的輔助小輪。geometry
→ 使用 球形 (sphere) 來模擬一個小輪子 (radius=0.05
,半徑 5 公分)。surface
:mu=0
,mu2=0
→ 無摩擦力,表示萬向輪不會影響前進方向。slip1=1.0
,slip2=1.0
→ 完全滑動,允許自由移動。
這是為了模擬一個無驅動的萬向輪,它可以自由滑動,但不影響機器人的驅動方向。
4️⃣ <visual>
(可視化模型)
這裡也有兩個可視化部分:
📌 (1) 底盤視覺模型
- 這個與
<collision>
相同,用來在 Gazebo 或 RViz 顯示機器人外觀。
📌 (2) 萬向輪視覺模型
- 這與 caster 的碰撞體 一樣,讓 萬向輪在可視化中顯示出來。
📝 總結
部分 | 作用 | 細節 |
---|---|---|
<pose> | 初始位置 | 底盤離地 10cm,無旋轉 |
<inertial> | 慣性與質量 | 質量 10kg,不同軸的慣性張量不同 |
<collision> (底盤) | 碰撞盒 | 0.4m × 0.2m × 0.1m,定義底盤的碰撞範圍 |
<collision> (萬向輪) | 萬向輪 | 球體 (r=0.05m),完全滑動無摩擦 |
<visual> (底盤) | 底盤外觀 | 使用相同尺寸的 box 來顯示 |
<visual> (萬向輪) | 萬向輪外觀 | 球體 (r=0.05m),用來在模擬器中顯示 |
✅ 這段代碼的意義
完整定義底盤 (chassis):
- 具有物理屬性(質量、慣性)。
- 具有碰撞檢測(box 為主體,sphere 為萬向輪)。
- 具有可視化模型(與碰撞體對應)。
支援萬向輪 (caster) 模擬:
- 透過 無摩擦、完全滑動 設定,讓萬向輪不會影響驅動方向。
適用於 Gazebo & ROS 運動控制:
- 在 Gazebo 中,這樣的設定可以確保機器人能夠平穩運行。
- 在 RViz 中,這些
<visual>
部分會用來顯示機器人的 3D 模型。
🔍 你還需要什麼?
- 需要 調整底盤大小、質量?
- 想要 新增其他組件(如感測器、攝影機)?
- 想要在 Gazebo 測試這段代碼?
===============
<link name='chassis'>
<pose>0 0 0.1 0 0 0</pose>
<inertial>
<mass value="10.0"/>
<origin xyz="0.0 0 0.1" rpy=" 0 0 0"/>
<inertia
ixx="0.5" ixy="0" ixz="0"
iyy="1.0" iyz="0"
izz="0.1"
/>
</inertial>
<collision name='collision'>
<geometry>
<box size=".4 .2 .1"/>
</geometry>
</collision>
<visual name='chassis_visual'>
<origin xyz="0 0 0" rpy=" 0 0 0"/>
<geometry>
<box size=".4 .2 .1"/>
</geometry>
</visual>
<collision name='caster_collision'>
<origin xyz="-0.15 0 -0.05" rpy=" 0 0 0"/>
<geometry>
<sphere radius="0.05"/>
</geometry>
<surface>
<friction>
<ode>
<mu>0</mu>
<mu2>0</mu2>
<slip1>1.0</slip1>
<slip2>1.0</slip2>
</ode>
</friction>
</surface>
</collision>
<visual name='caster_visual'>
<origin xyz="-0.15 0 -0.05" rpy=" 0 0 0"/>
<geometry>
<sphere radius="0.05"/>
</geometry>
</visual>
</link>
========================
沒有留言:
張貼留言