2025年12月22日 星期一

Gazebo 單位

 在 ROS 與 Gazebo 環境中,「移動最小長度」或「精度」並非一個寫死的固定值(例如 0.001mm),而是由**物理引擎設置、數值精度(Floating Point)以及模擬步長(Step Size)**共同決定的。

以下是決定精度的幾個關鍵維度:

1. 標準單位(Units)

根據 ROS 的 REP 103 標準,Gazebo 預設使用的單位是:

  • 長度: 公尺 (m)

  • 角度: 弧度 (rad)

  • 時間: 秒 (s)

  • 質量: 公斤 (kg)

2. 物理引擎精度設定

Gazebo 預設使用 ODE (Open Dynamics Engine)。其精度主要受以下參數影響(通常在 .world 檔或物理屬性中設定):

  • max_step_size (最大步長): 預設通常是 0.001s (1ms)。這決定了兩次物理計算之間的時間間隔。步長越小,碰撞檢測和移動的精度越高。

  • contact_surface_layer (接觸表面層):

    這是 ODE 中一個重要的精度參數(預設約為 0.001m)。它定義了物體之間允許「滲透」的最小深度。如果你的機器人需要進行微米級的精細操作,這個值需要調小。

  • cfm (Constraint Force Mixing) 與 erp (Error Reduction Parameter):

    這兩個參數決定了關節約束的「硬度」和誤差修正速度。不當的設定會導致微小移動時產生抖動或漂移。

3. 數值精度 (Double Precision)

Gazebo 官方編譯版本通常採用 雙精度浮點數 (Double Precision)

  • 在數學理論上,雙精度可以達到 $10^{-15}$ 左右的精度。

  • 但在模擬中,由於累積誤差和物理約束求解(Solver),可靠的位移精度通常在 $10^{-6}$ m (1微米) 到 $10^{-4}$ m (0.1公釐) 之間。

4. 機器人控制器的限制

實際上,限制移動精度的往往不是 Gazebo 本身,而是你使用的 Plugin 或 Controller

  • PID 控制器: 如果 PID 參數調校不佳,機器人可能在目標點附近產生微小晃動(Jittering),導致無法達成極小的精準位移。

  • 里程計計時: 模擬器發出的 /odomtf 資料解析度通常受限於發布頻率。


總結與建議

如果你需要實現高精度移動(例如毫米級以下):

  1. 縮小步長:<max_step_size> 設為 0.0001 或更小(注意這會增加 CPU 負擔)。

  2. 調整接觸參數: 在 URDF/SDF 中微調 <mu1>, <mu2>, <kp>, <kd>,確保碰撞模型不會因為微小力矩而彈跳。

  3. 檢查慣性矩 (Inertia): 如果你的物體非常小且輕(例如微型夾爪),務必精確設定 inertia 矩陣。如果慣性矩過小(低於 $10^{-6}$),ODE 可能會產生數值不穩定,導致物體「飛走」。

您目前是否遇到了微小移動時機器人晃動,或是無法移動到特定位置的問題? 如果有具體現象,我可以幫您分析相關的參數設定

沒有留言:

張貼留言