welcom ! Handel home

2025年2月5日 星期三

(兩輪小車範例)name='chassis' 主體解析

 這段 <link name='chassis'> 代碼描述了一個機器人的 底盤 (chassis),它包含了:

   物理屬性( 質量、慣性)、

   碰撞體(collision)、

   可視化模型(visual),

   以及一個小的萬向輪(caster)。


📌 結構分析

這段代碼主要由以下部分組成:

  1. <pose>:底盤的初始位置
  2. <inertial>:機器人的質量與慣性張量
  3. <collision>:定義碰撞體(box 和 sphere)
  4. <visual>:定義顯示模型(box 和 sphere)
  5. <surface>:摩擦力與滑動參數(適用於 caster)

🔍 詳細解析

1️⃣ <pose> (底盤初始位置)

<pose>0 0 0.1 0 0 0</pose>
  • xyz = 0 0 0.1機器人底盤的初始位置在 z 軸 0.1m 高度。
  • rpy = 0 0 0 → 沒有旋轉。

這表示底盤離地面 10 公分,可能是為了安裝輪子


2️⃣ <inertial> (質量與慣性張量)

<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>

📌 作用

  • 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) 底盤碰撞體

<collision name='collision'> <geometry> <box size=".4 .2 .1"/> </geometry> </collision>
  • box size=".4 .2 .1" → 定義了一個 長 0.4m、寬 0.2m、高 0.1m碰撞盒
  • 這是底盤的主要碰撞範圍,用於偵測與環境的物理交互。

📌 (2) 萬向輪碰撞體

<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>
  • 這是一個 "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) 底盤視覺模型

<visual name='chassis_visual'> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size=".4 .2 .1"/> </geometry> </visual>
  • 這個與 <collision> 相同,用來在 Gazebo 或 RViz 顯示機器人外觀。

📌 (2) 萬向輪視覺模型

<visual name='caster_visual'> <origin xyz="-0.15 0 -0.05" rpy="0 0 0"/> <geometry> <sphere radius="0.05"/> </geometry> </visual>
  • 這與 caster 的碰撞體 一樣,讓 萬向輪在可視化中顯示出來

📝 總結

部分作用細節
<pose>初始位置底盤離地 10cm,無旋轉
<inertial>慣性與質量質量 10kg,不同軸的慣性張量不同
<collision> (底盤)碰撞盒0.4m × 0.2m × 0.1m,定義底盤的碰撞範圍
<collision> (萬向輪)萬向輪球體 (r=0.05m),完全滑動無摩擦
<visual> (底盤)底盤外觀使用相同尺寸的 box 來顯示
<visual> (萬向輪)萬向輪外觀球體 (r=0.05m),用來在模擬器中顯示

✅ 這段代碼的意義

  1. 完整定義底盤 (chassis)

    • 具有物理屬性(質量、慣性)。
    • 具有碰撞檢測(box 為主體,sphere 為萬向輪)。
    • 具有可視化模型(與碰撞體對應)。
  2. 支援萬向輪 (caster) 模擬

    • 透過 無摩擦、完全滑動 設定,讓萬向輪不會影響驅動方向。
  3. 適用於 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>

========================

沒有留言: