2025年3月9日 星期日

(Robot_arm)解析 /robot_arm_controller/command 的動作內容

  解析 /robot_arm_controller/command 的動作內容

你的 /robot_arm_controller/command topic 正在接收 Joint Trajectory,這表示機械手臂應該根據這些指令 進行運動
我們來詳細解析 這些訊息的內容,以及 它對機械手臂運動的影響


🚀 1️⃣ 解析 joint_names

yaml
joint_names: - joint_1 - joint_2 - joint_3 - joint_4 - joint_5

這段訊息表示: ✅ 控制訊息發送給 5 個關節(joint_1 ~ joint_5)。
少了一個關節 (joint_6),可能是控制器設定問題,請檢查 joint_trajectory_controller.yaml 內的 joints 是否包含 joint_6


🚀 2️⃣ 解析 points(運動軌跡)

機械手臂 將按照 points 內的數值來運動

📌 第一組訊息(seq: 644)

yaml
positions: [0.5, -0.3, 0.8, -1.2, 0.3] time_from_start: secs: 20 nsecs: 0

動作內容

  • 機械手臂關節應該移動到
    • joint_1 = 0.5 弧度
    • joint_2 = -0.3 弧度
    • joint_3 = 0.8 弧度
    • joint_4 = -1.2 弧度
    • joint_5 = 0.3 弧度
  • 運動時間:20 秒
    • 這表示 機械手臂將在 20 秒內緩慢達到這個位置

📌 第二組訊息(seq: 645)

yaml
positions: [0.0, 0.0, 0.0, 0.0, 0.0] time_from_start: secs: 20 nsecs: 0

動作內容

  • 機械手臂關節應該回到 0 位置
    • joint_1 = 0.0
    • joint_2 = 0.0
    • joint_3 = 0.0
    • joint_4 = 0.0
    • joint_5 = 0.0
  • 運動時間:20 秒
    • 這表示 機械手臂應該在 20 秒內緩慢回到原點

🚀 3️⃣ 總結動作

1️⃣ 第一組指令(seq: 644)

  • 機械手臂 5 個關節會在 20 秒內移動到
    • joint_1 = 0.5
    • joint_2 = -0.3
    • joint_3 = 0.8
    • joint_4 = -1.2
    • joint_5 = 0.3
  • 這個過程應該是平滑移動,不是瞬間變化

2️⃣ 第二組指令(seq: 645)

  • 機械手臂 5 個關節會在 20 秒內回到 0.0 位置
  • 這表示機械手臂的運動是一個來回循環

🚀 4️⃣ 可能的問題

🔹 1️⃣ Gazebo 內的機械手臂沒有運動

檢查 Gazebo 物理引擎是否暫停

bash
rosservice call /gazebo/unpause_physics

檢查控制器是否運行

bash
rosservice call /controller_manager/list_controllers

應該看到:

vbnet
name: "robot_arm_controller" state: "running"

如果 state: stopped,請手動啟動

bash
rosrun controller_manager spawner robot_arm_controller

🔹 2️⃣ joint_6 遺失

檢查 joint_trajectory_controller.yaml

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

應該有:

yaml
joints: - joint_1 - joint_2 - joint_3 - joint_4 - joint_5 - joint_6 # 確保 joint_6 存在

檢查 /robot_arm_controller/command 是否應該有 joint_6

bash
rostopic echo /robot_arm_controller/command

如果 joint_6 沒有出現在 joint_names 裡,表示你的程式發送的訊息有錯。


🚀 5️⃣ 手動發送 Joint Trajectory 測試

📌 測試機械手臂是否能正常運作

bash
rostopic pub -1 /robot_arm_controller/command trajectory_msgs/JointTrajectory ' joint_names: ["joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "joint_6"] points: - positions: [0.5, -0.3, 0.8, -1.2, 0.3, 0.2] time_from_start: {secs: 5, nsecs: 0}'

如果機械手臂可以動作,表示你的控制器是正常的,可能是你的程式發送訊息時漏掉 joint_6


🚀 6️⃣ 總結

動作結果
第一組指令(seq: 644)機械手臂 5 個關節應該在 20 秒內移動到 [0.5, -0.3, 0.8, -1.2, 0.3]
第二組指令(seq: 645)機械手臂 5 個關節應該在 20 秒內回到 [0.0, 0.0, 0.0, 0.0, 0.0]
可能問題Gazebo 沒有運動,或 joint_6 遺失
解決方法檢查
  joint_trajectory_controller.yaml,確保 joint_6 存在,並重新啟動控制器


沒有留言:

張貼留言