Gazebo 啟動錯誤分析與解決方案
從錯誤日誌來看,你的 roslaunch robot_arm_urdf gazebo.launch
出現了幾個問題:
- Gazebo_ros_control 無法找到 PID 參數。
- Gazebo 載入機器人模型成功,但出現
Topic is not valid
。 - TF 靜態變換出錯(Node 重複註冊)。
1️⃣ No p gain specified for pid
錯誤
🔹 錯誤訊息
這表示 Gazebo 的控制插件 gazebo_ros_control
沒有設定 PID 參數,導致無法正確控制關節。
✅ 解決方案:在 gazebo.launch
或 robot_arm_urdf_control.yaml
中添加 PID 設定
在你的 robot_arm_urdf
套件內,應該有一個 控制器 YAML 檔案(通常命名為 robot_arm_urdf_control.yaml
)。如果沒有,請建立:
然後,在 gazebo.launch
添加這個 YAML:
2️⃣ Topic is not valid
🔹 錯誤訊息
這表示 Gazebo 找不到控制 joint 的指令 Topic,通常是 URDF 或 SDF 檔案中缺少 transmission
定義。
✅ 解決方案:在 robot_arm_urdf.urdf
添加 transmission
確保 所有關節都有定義 transmission
,並在 robot_arm_urdf.urdf.xacro
或 gazebo.launch
載入 controller YAML。
3️⃣ [tf_footprint_base] Reason: new node registered with same name
🔹 錯誤訊息
這表示 有兩個相同名稱的 tf_static
變換節點 在運行,導致 Gazebo 關閉舊的節點。
✅ 解決方案:確保 static_transform_publisher
只有一個
檢查 gazebo.launch
或 robot_arm_urdf.launch
,避免重複定義:
若有 重複的 static_transform_publisher
,刪除其中一個。
📌 最終修正步驟
1️⃣ 確認 PID 設定
如果沒有 PID,則在 robot_arm_urdf_control.yaml
添加並在 gazebo.launch
加載。
2️⃣ 確認 URDF transmission
如果 transmission
不存在,請在 robot_arm_urdf.urdf
新增 transmission
。
3️⃣ 避免重複 TF 節點
如果 tf_footprint_base
出現兩次,則檢查 launch
檔案,移除重複定義。
4️⃣ 重新啟動並測試
確保 Gazebo 能成功運行,沒有 PID 錯誤,
也沒有 Topic is not valid
錯誤 🎯🚀
沒有留言:
張貼留言