[輪子關節 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
關節不需要(也不接受)角度上下限,但仍要提供effort
與velocity
:-
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)映射而略有差異。
-
實務建議(避免常見坑)
-
幾何軸向對齊:確保
left_wheel_link
的輪子圓柱軸向就是 Y(例:在輪子的<visual>/<collision>
上用rpy="1.5708 0 0"
),否則看起來會「歪轉」。 -
位置只用關節擺:輪子 link 內的幾何
origin
盡量設在(0,0,0)
,由關節的<origin>
來決定輪心在車體的位置(更好管控)。 -
高度對齊地面:
origin.z
通常 ≈wheel_radius
(若底盤底面到地面的距離 = 輪半徑),避免初始就穿插地面。 -
阻尼別為 0:
damping
小幅 > 0,能顯著減少 Gazebo 震盪與漂移。 -
左右輪對稱:右輪的 y 應為負(
-0.15
),名稱與關節軸一致;確保慣性、質量合理(太小易炸模擬)。
==========================================
1. joint
標籤
name="left_wheel_joint"
: 這是關節的唯一識別名稱。每個關節都必須有一個獨特的名稱,以便在後續的控制和視覺化中被引用。type="continuous"
: 這是關節的類型。continuous
類型表示這個關節可以無限地旋轉,沒有任何角度限制。這對於像車輪這樣需要連續滾動的零件來說是完美的。其他常見關節類型:
revolute
: 旋轉關節,但有角度限制(例如,手臂的肘部)。fixed
: 固定關節,將兩個連結鎖定在一起,它們之間沒有相對運動。感測器通常使用這種關節。prismatic
: 滑動關節,允許兩個連結沿著一個軸線平移。
2. parent
與 child
<parent link="base_link"/>
: 關節的父連結。所有子連結都相對於其父連結進行定位。在這裡,base_link
是機器人主體,它是這個關節的父節點。<child link="left_wheel_link"/>
: 關節的子連結。left_wheel_link
是這個關節所連接的物件,即左輪子。
這種父子關係是建立機器人運動學樹的關鍵。從**根連結(base_footprint 或 base_link)**開始,每個關節將一個新連結(子連結)連接到現有的樹上(父連結),從而形成一個完整的機器人結構。
3. origin
與 axis
<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. limit
與 dynamics
<limit effort="5" velocity="50"/>
: 這些參數通常用於物理模擬,特別是在 Gazebo 中。它們設定了關節的最大能力。effort
: 關節能產生的最大力矩(或扭矩),單位是牛頓-米(N·m)。velocity
: 關節的最大角速度,單位是弧度/秒(rad/s)。
<dynamics damping="0.0" friction="0.0"/>
: 這些參數也用於物理模擬,用於微調關節的行為。damping
: 阻尼係數。這可以模擬空氣阻力或關節內部的摩擦。friction
: 靜摩擦係數。
總結
總之,您提供的關節定義是 URDF 中連接兩個零件的標準方式,它不僅定義了輪子的位置和旋轉軸,還提供了在物理模擬中至關重要的動態屬性。這段程式碼的結構非常清晰,遵循了 URDF 的最佳實踐。
沒有留言:
張貼留言