welcom ! Handel home

2025年3月4日 星期二

(Robot_arm)check launch and urdf 格式內容 檢查

 你的日誌顯示了幾個關鍵錯誤:

  1. Gazebo 內部錯誤

    csharp
    [ERROR] Spawn service failed. Exiting.

    這表示 Gazebo 內部無法載入 robot_arm_urdf,可能是:

    • robot_description 變數未正確載入
    • spawn_model 發生錯誤
  2. Gazebo 崩潰

    less
    [ WARN] [1741077691.388338484, 979.166000000]: Reason given for shutdown: [[/gazebo_gui] Reason: new node registered with same name]
    • 可能有重複的 Gazebo 啟動實例,建議先 清除 Gazebo 進程 再重新啟動。
  3. 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 檔案有錯誤
  4. 控制器 (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 進程

bash
killall -9 gazebo killall -9 gzserver killall -9 gzclient

📌 清理 ROS 參數伺服器

bash
rosclean purge rosparam set use_sim_time false

📌 重新啟動 Gazebo

bash
roslaunch robot_arm_urdf robot_arm_control.launch

🔹 2️⃣ 確保 robot_description 已正確載入

📌 檢查 robot_description 是否存在

bash
rosparam list | grep robot_description

📌 如果 robot_description 不存在,手動載入

bash
rosparam load ~/data/robotxtest5_ws/src/robot_arm_urdf/urdf/robot_arm_urdf.urdf robot_description

📌 然後手動執行 spawn_model

bash
rosrun gazebo_ros spawn_model -param robot_description -urdf -model robot_arm

如果這個指令 報錯,表示 URDF 檔案有問題,請繼續下一步。


🔹 3️⃣ 檢查 URDF (robot_arm_urdf.urdf) 是否有錯

📌 打開 robot_arm_urdf.urdf

bash
nano ~/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

bash
nano ~/data/robotxtest5_ws/src/robot_arm_urdf/config/joint_trajectory_controller.yaml

📌 應該包含

yaml
robot_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

bash
rosparam load ~/data/robotxtest5_ws/src/robot_arm_urdf/config/joint_trajectory_controller.yaml

📌 手動啟動控制器

bash
rosrun controller_manager spawner robot_arm_controller

如果 仍然報錯,請繼續下一步。


🔹 5️⃣ 確保 gazebo_ros_control 插件已載入

📌 打開 robot_arm_control.launch

bash
nano ~/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>

📌 然後重新啟動

bash
roslaunch robot_arm_urdf robot_arm_control.launch

📌 再次檢查

bash
rosservice call /controller_manager/list_controllers

應該會顯示:

arduino
robot_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 listgrep 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 存在

📌 請執行這些步驟,然後回報結果或錯誤訊息,我可以幫助你進一步診斷!🚀

沒有留言: