welcom ! Handel home

2025年3月6日 星期四

(Robot_arm)ROS 控制器 (robot_arm_controller) 沒有成功加載

 你的 ROS 控制器 (robot_arm_controller) 沒有成功加載,可能是 #1 joint_trajectory_controller.yaml 配置有問題,

或者

#2  ros-controllers 沒有安裝或加載

我們需要逐步確認這些問題。


🚀 1️⃣ 檢查 ros-noetic-ros-controllers 是否安裝

📌 執行以下指令檢查是否已安裝

bash
apt list --installed | grep ros-noetic-ros-controllers

如果 沒有安裝,請執行以下指令

bash
sudo apt update sudo apt install ros-noetic-ros-control ros-noetic-ros-controllers

📌 安裝完成後,重新啟動 Launch

bash
roslaunch robot_arm_urdf robot_arm_control.launch

📌 檢查控制器類型是否已經載入

bash
rosservice call /controller_manager/list_controller_types

✅ 如果 輸出包含

position_controllers/JointTrajectoryController

代表 控制器已經安裝,請執行 步驟 2 確認 YAML 設定。

❌ 如果 沒有 JointTrajectoryController,請確保 ros-controllers 已安裝,然後重啟機器:

bash
sudo reboot

🚀 2️⃣ 檢查 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
rosparam list | grep robot_arm_controller

如果 沒有輸出任何內容,表示 joint_trajectory_controller.yaml 沒有正確載入,請執行 步驟 3 確保 robot_arm_control.launch 正確載入 YAML。


🚀 3️⃣ 確保 robot_arm_control.launch 內有載入 YAML

📌 打開 robot_arm_control.launch

bash
nano ~/data/robotxtest5_ws/src/robot_arm_urdf/launch/robot_arm_control.launch

📌 確保這一行存在

xml
<rosparam file="$(find robot_arm_urdf)/config/joint_trajectory_controller.yaml" command="load"/>

📌 重新啟動 Launch

bash
roslaunch robot_arm_urdf robot_arm_control.launch

📌 再次檢查

bash
rosservice call /controller_manager/list_controllers

如果 仍然報錯,請執行 步驟 4


🚀 4️⃣ 手動啟動控制器

📌 嘗試手動加載 robot_arm_controller

bash
rosrun controller_manager spawner robot_arm_controller

📌 如果 robot_arm_controller 能成功啟動,則問題可能是 launch 檔案沒有正確啟動控制器,請確認以下設定

xml
<node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args="joint_state_controller robot_arm_controller hand_ee_controller"/>

📌 然後重新啟動

bash
roslaunch robot_arm_urdf robot_arm_control.launch

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

📌 打開 robot_arm_urdf.urdf

bash
nano ~/data/robotxtest5_ws/src/robot_arm_urdf/urdf/robot_arm_urdf.urdf

📌 確保 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

🚀 6️⃣ 確保機械手臂 URDF 內有 transmission

📌 打開 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>

📌 重新載入 URDF

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

🚀 總結

步驟指令預期結果
1. 安裝 ros-controllerssudo apt install ros-noetic-ros-control ros-noetic-ros-controllers確保 JointTrajectoryController 存在
2. 確保 YAML 設定正確nano config/joint_trajectory_controller.yaml應該包含 robot_arm_controller
3. 確保 robot_arm_control.launch 正確載入 YAMLnano launch/robot_arm_control.launch應該包含 <rosparam>
4. 嘗試手動啟動控制器rosrun controller_manager spawner robot_arm_controller應該能成功加載控制器
5. 確保 gazebo_ros_control 插件已載入nano urdf/robot_arm_urdf.urdf應該包含 <plugin>
6. 確保 URDF transmission 設定正確nano urdf/robot_arm_urdf.urdf應該包含 SimpleTransmission




沒有留言: