2025年9月3日 星期三

[輪子關節 joint 說明]

[輪子關節 joint 說明]  

 <joint name="left_wheel_joint" type="continuous">

    <parent link="base_link"/>

    <child link="left_wheel_link"/>

    <origin rpy="0 0 0" xyz="0.0 0.15 0.010000000000000002"/>

    <!-- 旋轉軸為 y 軸,使輪子可以前後滾動 -->

    <axis xyz="0 1 0"/>

    <limit effort="5" velocity="50"/>

    <dynamics damping="0.0" friction="0.0"/>

  </joint>


以下逐項解釋你這個輪子關節(wheel joint)設定的意義與注意點:

  • <joint name="left_wheel_joint" type="continuous">
    類型continuous(無角度上下限、可無限旋轉)。適合車輪;相對於 revolute(需設定上下限)。

  • <parent link="base_link"/> / <child link="left_wheel_link"/>
    此關節把底盤 base_link 與輪子連結 left_wheel_link 接起來。關節的座標系預設定義在 parent 上。

  • <origin rpy="0 0 0" xyz="0.0 0.15 0.010000000000000002"/>
    定義「關節座標系」在 parent (base_link) 內的位置與姿態。

    • xyz:以 ROS 標準座標(x 前、y 左、z 上)來看,y=+0.15 表示把關節放在底盤左側 0.15 m;z≈0.01 是輪軸中心高度(通常 ≈ 輪半徑)。

    • rpy:這裡為 0,表示關節座標系與 base_link 對齊。若你的輪子幾何軸向不是沿著關節軸,常見會在輪子 link 的幾何上用 rpy="1.5708 0 0" 把圓柱軸轉成 Y 軸,而關節本身保持 rpy=0 會較直觀。

  • <axis xyz="0 1 0"/>
    關節旋轉軸指向 Y 軸(0,1,0)。

    • 對差速車而言,輪軸沿 Y 是正確的:圓盤面貼齊 x-z 面、繞 Y 轉動就能前進/後退。

    • 正負方向遵循右手定則:拇指指向 +Y,手指彎曲方向即為正角速度方向(不同左右輪表觀「前進」的正負感受會不同,交給驅動/插件處理即可)。

  • <limit effort="5" velocity="50"/>
    continuous 關節不需要(也不接受)角度上下限,但仍要提供 effortvelocity

    • effort=5:最大允許關節力矩(約 5 N·m)。Gazebo/控制器會用來限制馬達輸出。

    • velocity=50:最大角速度(rad/s)。控制器與模擬器可用來限速。

    提示:若用 Gazebo diff-drive 插件,這些限制會與插件控制策略一同影響實際加減速。

  • <dynamics damping="0.0" friction="0.0"/>
    關節動力學參數:

    • damping(關節黏滯阻尼,單位約 N·m·s/rad):設 0 容易在模擬中抖動;建議給小量(如 0.05~0.2)。

    • friction(庫倫摩擦近似,N·m):設 0 無靜摩擦;視需要給 0.01~0.05 可讓車更穩。

    註:最終效果會依物理引擎(ODE/DART/Bullet)映射而略有差異。


實務建議(避免常見坑)

  1. 幾何軸向對齊:確保 left_wheel_link 的輪子圓柱軸向就是 Y(例:在輪子的 <visual>/<collision> 上用 rpy="1.5708 0 0"),否則看起來會「歪轉」。

  2. 位置只用關節擺:輪子 link 內的幾何 origin 盡量設在 (0,0,0)由關節的 <origin> 來決定輪心在車體的位置(更好管控)。

  3. 高度對齊地面origin.z 通常 ≈ wheel_radius(若底盤底面到地面的距離 = 輪半徑),避免初始就穿插地面。

  4. 阻尼別為 0damping 小幅 > 0,能顯著減少 Gazebo 震盪與漂移。

  5. 左右輪對稱:右輪的 y 應為負(-0.15),名稱與關節軸一致;確保慣性、質量合理(太小易炸模擬)。



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

1. joint 標籤

  • name="left_wheel_joint": 這是關節的唯一識別名稱。每個關節都必須有一個獨特的名稱,以便在後續的控制和視覺化中被引用。

  • type="continuous": 這是關節的類型。continuous 類型表示這個關節可以無限地旋轉,沒有任何角度限制。這對於像車輪這樣需要連續滾動的零件來說是完美的。

    • 其他常見關節類型:

      • revolute: 旋轉關節,但有角度限制(例如,手臂的肘部)。

      • fixed: 固定關節,將兩個連結鎖定在一起,它們之間沒有相對運動。感測器通常使用這種關節。

      • prismatic: 滑動關節,允許兩個連結沿著一個軸線平移。

2. parentchild

  • <parent link="base_link"/>: 關節的父連結。所有子連結都相對於其父連結進行定位。在這裡,base_link 是機器人主體,它是這個關節的父節點。

  • <child link="left_wheel_link"/>: 關節的子連結。left_wheel_link 是這個關節所連接的物件,即左輪子。

這種父子關係是建立機器人運動學樹的關鍵。從**根連結(base_footprint 或 base_link)**開始,每個關節將一個新連結(子連結)連接到現有的樹上(父連結),從而形成一個完整的機器人結構。

3. originaxis

  • <origin rpy="0 0 0" xyz="0.0 0.15 0.010000000000000002"/>: 定義了關節在父連結(base_link)座標系中的位置和方向。

    • xyz: 關節的原點座標。x=0.0 表示它位於底盤的中間(前後方向),y=0.15 表示它在底盤的左側,z=0.01 表示它在底盤上方。

    • rpy: 滾轉(Roll)、俯仰(Pitch)、偏航(Yaw)角度。這裡的值都是 0,表示關節沒有相對於父連結旋轉。

  • <axis xyz="0 1 0"/>: 定義了關節的旋轉軸。

    • xyz="0 1 0" 表示旋轉軸是Y軸。對於一個通常沿 X 軸前進的機器人,輪子繞 Y 軸旋轉可以使其向前或向後滾動,這是一個正確的設定。

4. limitdynamics

  • <limit effort="5" velocity="50"/>: 這些參數通常用於物理模擬,特別是在 Gazebo 中。它們設定了關節的最大能力。

    • effort: 關節能產生的最大力矩(或扭矩),單位是牛頓-米(N·m)。

    • velocity: 關節的最大角速度,單位是弧度/秒(rad/s)。

  • <dynamics damping="0.0" friction="0.0"/>: 這些參數也用於物理模擬,用於微調關節的行為。

    • damping: 阻尼係數。這可以模擬空氣阻力或關節內部的摩擦。

    • friction: 靜摩擦係數。

總結

總之,您提供的關節定義是 URDF 中連接兩個零件的標準方式,它不僅定義了輪子的位置和旋轉軸,還提供了在物理模擬中至關重要的動態屬性。這段程式碼的結構非常清晰,遵循了 URDF 的最佳實踐。


沒有留言:

張貼留言