你的日誌顯示了幾個關鍵錯誤:
Gazebo 內部錯誤:
csharp[ERROR] Spawn service failed. Exiting.
這表示 Gazebo 內部無法載入
robot_arm_urdf
,可能是:robot_description
變數未正確載入spawn_model
發生錯誤
Gazebo 崩潰:
less[ WARN] [1741077691.388338484, 979.166000000]: Reason given for shutdown: [[/gazebo_gui] Reason: new node registered with same name]
- 可能有重複的 Gazebo 啟動實例,建議先 清除 Gazebo 進程 再重新啟動。
spawn_urdf
崩潰:swift[spawn_urdf-4] process has died [pid 553046, exit code 1, cmd /opt/ros/noetic/lib/gazebo_ros/spawn_model ...]
- 這表示 Gazebo 內部無法創建
robot_arm_urdf
,可能原因:robot_description
參數未正確載入- URDF 檔案有錯誤
- 這表示 Gazebo 內部無法創建
控制器 (
robot_arm_controller
&hand_ee_controller
) 無法載入:css[ERROR] Failed to load robot_arm_controller [ERROR] Failed to load hand_ee_controller
- 可能原因
gazebo_ros_control
沒有正確啟動joint_trajectory_controller.yaml
參數有誤URDF
缺少transmission
配置
- 可能原因
🚀 解決方案
🔹 1️⃣ 確保沒有重複的 Gazebo 啟動
📌 殺死所有 Gazebo 進程
bashkillall -9 gazebo killall -9 gzserver killall -9 gzclient
📌 清理 ROS 參數伺服器
bashrosclean purge
rosparam set use_sim_time false
📌 重新啟動 Gazebo
bashroslaunch robot_arm_urdf robot_arm_control.launch
🔹 2️⃣ 確保 robot_description
已正確載入
📌 檢查 robot_description
是否存在
bashrosparam list | grep robot_description
📌 如果 robot_description
不存在,手動載入
bashrosparam load ~/data/robotxtest5_ws/src/robot_arm_urdf/urdf/robot_arm_urdf.urdf robot_description
📌 然後手動執行 spawn_model
bashrosrun gazebo_ros spawn_model -param robot_description -urdf -model robot_arm
如果這個指令 報錯,表示 URDF 檔案有問題,請繼續下一步。
🔹 3️⃣ 檢查 URDF (robot_arm_urdf.urdf
) 是否有錯
📌 打開 robot_arm_urdf.urdf
bashnano ~/data/robotxtest5_ws/src/robot_arm_urdf/urdf/robot_arm_urdf.urdf
📌 確保 transmission
配置正確
xml<transmission name="joint_1_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="joint_1">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="joint_1_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
<mechanicalReduction>1.0</mechanicalReduction>
</actuator>
</transmission>
如果 transmission
缺失,則 gazebo_ros_control
會無法正確啟動。
📌 驗證 URDF 檔案格式
bash$check_urdf ~/data/robotxtest5_ws/src/robot_arm_urdf/urdf/robot_arm_urdf.urdf
如果 報錯,表示 URDF 有語法錯誤,請修正後重試。
🔹 4️⃣ 確保 joint_trajectory_controller.yaml
參數正確
📌 打開 joint_trajectory_controller.yaml
bashnano ~/data/robotxtest5_ws/src/robot_arm_urdf/config/joint_trajectory_controller.yaml
📌 應該包含
yamlrobot_arm_controller:
type: position_controllers/JointTrajectoryController
joints:
- joint_1
- joint_2
- joint_3
- joint_4
- joint_5
- joint_6
gains:
joint_1: {p: 100.0, i: 0.01, d: 10.0}
joint_2: {p: 100.0, i: 0.01, d: 10.0}
joint_3: {p: 100.0, i: 0.01, d: 10.0}
joint_4: {p: 100.0, i: 0.01, d: 10.0}
joint_5: {p: 100.0, i: 0.01, d: 10.0}
joint_6: {p: 100.0, i: 0.01, d: 10.0}
📌 重新載入 YAML
bashrosparam load ~/data/robotxtest5_ws/src/robot_arm_urdf/config/joint_trajectory_controller.yaml
📌 手動啟動控制器
bashrosrun controller_manager spawner robot_arm_controller
如果 仍然報錯,請繼續下一步。
🔹 5️⃣ 確保 gazebo_ros_control
插件已載入
📌 打開 robot_arm_control.launch
bashnano ~/data/robotxtest5_ws/src/robot_arm_urdf/launch/robot_arm_control.launch
📌 確保這段 gazebo_ros_control
插件存在
xml<gazebo>
<plugin name="control" filename="libgazebo_ros_control.so">
<robotNamespace>/</robotNamespace>
</plugin>
</gazebo>
📌 然後重新啟動
bashroslaunch robot_arm_urdf robot_arm_control.launch
📌 再次檢查
bashrosservice call /controller_manager/list_controllers
應該會顯示:
arduinorobot_arm_controller (running)
如果還是 Failed to load robot_arm_controller
,可能 ros-controllers
沒有安裝,請執行:
bash$sudo apt install ros-noetic-ros-control ros-noetic-ros-controllers
🚀 總結
步驟 | 指令 | 預期結果 |
---|---|---|
1. 清除 Gazebo 進程 | killall -9 gazebo gzserver gzclient | 確保 Gazebo 不重複啟動 |
2. 確保 robot_description 載入 | `rosparam list | grep robot_description` |
3. 檢查 URDF 是否有錯 | check_urdf robot_arm_urdf.urdf | 應該沒有錯誤 |
4. 確保 joint_trajectory_controller.yaml 正確 | rosparam load joint_trajectory_controller.yaml | 應該沒有錯誤 |
5. 確保 gazebo_ros_control 插件存在 | nano launch/robot_arm_control.launch | 應該有 <plugin> |
6. 確保 ROS 控制器安裝 | sudo apt install ros-noetic-ros-controllers | 確保 JointTrajectoryController 存在 |
📌 請執行這些步驟,然後回報結果或錯誤訊息,我可以幫助你進一步診斷!🚀
沒有留言:
張貼留言