跳至主要内容

機械手臂動作

機械手臂動作是將規劃完成的軌跡傳送至機器人,並轉換為實際關節動作的執行階段。

此處的「機械手臂動作」是指機械手臂工作流程中的執行階段,而不是特定的 ROS 2 Action Interface。

機械手臂動作決定機器人應如何移動;Action 階段則負責將指令傳送給控制器、監控執行狀態、協調夾具,並回報每個動作是否成功或失敗。

arm-action-flow

在機械手臂的工作流程中,機械手臂動作主要回答以下問題:

  • 如何將規劃完成的軌跡傳送至機器人?
  • 機器人是否有依照要求的動作執行?
  • 夾具應該在何時開啟或關閉?
  • 動作是否成功完成?
  • 如果執行失敗或被取消,接下來應如何處理?

Action 階段負責串接軟體決策與實際機器人動作。


在機械手臂工作流程中的角色​

常見的執行流程如下:

Planned trajectory → Trajectory action → Robot controller → Hardware interface or driver → Joint motion

Feedback Path 會透過 Control Stack 回傳量測到的狀態:

Joint sensors
|
v
Hardware interface / Robot driver
|
v
ros2_control state interfaces
|
+--> joint_trajectory_controller
| (measured joint state)
|
+--> joint_state_broadcaster
|
v
/joint_states
|
v
MoveIt and state monitors

主要輸入包括:

  • 已驗證的關節軌跡
  • 機器人目前的狀態
  • 控制器與硬體狀態
  • 夾具或其他工具的任務指令

輸出則包括實際機器人動作、執行回饋,以及最終的成功或失敗結果。


ROS 2 Actions​

機器人動作可能持續數秒,並且在執行過程中需要回饋或取消功能。ROS 2 Action 正是為這類長時間執行的操作所設計。

一次 Action Interaction 包含:

項目用途
Goal描述要求執行的動作
Feedback在動作執行期間回報進度
Result回報最終執行結果
Cancel Request要求停止目前執行中的目標

Manipulator Trajectory 常見的介面為:

control_msgs/action/FollowJointTrajectory

其 Goal 會包含一組具名關節的軌跡。執行期間,控制器可以透過回饋回報 Desired 與 Actual Joint Value,並在目標完成後回傳結果。

實際使用的介面會依 Robot 驅動與控制器而有所不同。有些系統會提供標準軌跡動作,也有些系統需要 Vendor-Specific Interface 或額外的 Integration Layer。


Trajectory Controller 與 ros2_control​

ros2_control 提供一套通用框架,用來將 ROS 2 Controller 與 Robot Hardware 串接。

典型的 Manipulator Control Stack 如下:

MoveIt or task application
|
v
FollowJointTrajectory action
|
v
joint_trajectory_controller
|
v
ros2_control hardware interface
|
v
Robot driver and actuators

joint_trajectory_controller 會依照時間追蹤要求的關節姿態。Hardware Interface 則會提供機器人支援的 State Interface 與 Command Interface,並將 Controller Command 傳送給底層 Driver 或硬體,例如 Position、Velocity 或 Effort Command。

要成功完成整合,需要注意:

  • 軌跡、控制器、驅動與 URDF 中的 Joint Name 必須一致。
  • 控制器必須取得所需的 Command Interface。
  • Joint-State Feedback 必須使用預期的 Joint Name 與單位,且每個數值都必須對應到陣列中相同索引位置的 Joint Name。
  • Update Rate 與 Communication Latency 必須符合機器人的需求。
  • 啟用中的控制器必須與 MoveIt 中設定的控制器一致。

並非所有機器人都使用 ros2_control,但 Planning、Trajectory Execution 與 Hardware Communication 之間的分層概念仍然相同。


關節狀態回饋​

執行過程應根據量測到的 Robot State 進行監控,而不能只是假設指令已經完成。

在 ROS 2 中,關節回饋通常會用以下訊息型別發布:

sensor_msgs/msg/JointState

The /joint_states topic may contain:

  • Joint position
  • Joint velocity
  • Joint effort
  • Timestamp

這些回饋可用來更新機器人狀態、透過 robot_state_publisher 產生 TF Tree、在 RViz 中顯示機器人,並比較實際動作與 Commanded Trajectory。

在以下情況下,可將動作視為執行失敗:

  • 控制器拒絕目標。
  • 機器人無法維持要求的 Path Tolerance。
  • 最終 Joint Error 超出 Goal Tolerance。
  • 與機器人的通訊中斷。
  • 執行超過時間。
  • 發生 Protective Stop 或 Hardware Fault。

協調夾具​

Pick-and-Place 任務需要依照正確順序協調機器手臂動作與夾具動作。

簡化流程如下:

  1. 移動至預抓取姿態。
  2. 接近目標物件。
  3. 關閉夾具。
  4. 若可取得回饋,確認抓取是否成功。
  5. 在規劃場景中將物件 Attach 至 End Effector。
  6. 抬起並搬運物件。
  7. 移動至放置姿態。
  8. 開啟夾具。
  9. 從規劃場景中將物件分離。
  10. 從放置區域 Retreat。

夾具可能使用標準動作,例如 control_msgs/action/GripperCommand、Trajectory Controller、Digital I/O,或 Vendor-Specific Command。

單純送出 Close Command 並不能保證物件已被成功抓取。完整系統可能會使用 Finger Position、Motor Current、Force Sensing、Vacuum Pressure 或 Vision 來確認抓取結果。


任務排序​

機械手臂的任務由多個彼此相依的動作組成。每個步驟都應在前一步成功完成後才開始。

Application 可以將工作流程表示成以下狀態:

Waiting
→ Detecting
→ Planning
→ Moving to pre-grasp
→ Approaching
→ Grasping
→ Lifting
→ Moving to place
→ Releasing
→ Returning
→ Waiting

這樣做可以更容易:

  • 追蹤目前的操作狀態。
  • 避免多個指令彼此重疊。
  • 向 User Interface 回報進度。
  • 處理取消與超時。
  • 在失敗後返回已知狀態。

任務狀態與機器人狀態不應混淆。像 Grasping 這樣的 Software State 描述目前正在進行的操作,而關節回饋則描述機器人實際量測到的物理姿態。


故障處理與恢復​

執行失敗必須明確處理。Application 不應假設失敗的動作已經成功,並直接繼續下一個步驟。

可能的處理方式包括:

  • 停止目前任務並回報錯誤。
  • 若系統支援,取消目前執行中的軌跡。
  • 根據實際物理狀況,決定開啟或保持夾具狀態。
  • 在任何新的規劃前,重新讀取目前的 Robot State。
  • 從實際量測到的狀態重新規劃。
  • 在安全情況下,移動至預先定義的恢復姿態或等待姿態。
  • 發生 Protective Stop 或 Hardware Fault 後,要求 Operator Intervention。

Recovery Behavior 會依任務而有所不同。例如,如果機器人正將物件懸空在 Workspace 上方,自動開啟夾具可能是不安全的。

如果沒有先辨識失敗原因就進行大量重試,可能導致重複且不安全的動作。因此,Retry Limit 與 Recovery Condition 應明確定義在任務邏輯中。


安全考量​

Planning 與 ROS 層級的控制無法取代機器人本身的安全系統。

實體部署必須遵循機器人製造商的操作要求,並可能需要:

  • 緊急停止電路
  • 保護性停止裝置及安全等級監控停止裝置
  • 關節、速度、力量和工作空間限制
  • 碰撞偵測或扭力監控
  • 限制操作區域
  • 防護裝置、連鎖裝置或安全掃描儀
  • 低速調試
  • 操作規程和風險評估

RViz 只能確認軟體預期的動作,不能保證實際環境中的安全性。初期整合時應避免攜帶 Payload,使用較保守的限制設定,並確保機器人的 Hardware Stop 隨時可使用。


範例:執行方塊堆疊任務​

在彩色方塊 Demo 中,Application 會依照指定的堆疊順序執行一連串動作。

對每個可移動的方塊,系統會:

  1. 接收已驗證的 Pick-and-Place 軌跡。
  2. 將 Pre-Grasp 與 Approach Motion 傳送至手臂控制器。
  3. 等待執行成功完成。
  4. 命令夾具抓取方塊。
  5. 執行 Lift 與 Transfer Motion。
  6. 將方塊放置到目標堆疊位置。
  7. 釋放方塊並 Retreat。
  8. 只有在前一步成功後才繼續下一個操作。

所有方塊都完成放置後,機器手臂會返回等待狀態。如果目標無法到達,或某個執行步驟失敗,Application 會回報錯誤並依照預先定義的 Recovery Behavior 處理,而不是繼續執行後續堆疊。


了解 Robotic Suite 範例​

原始即時 Demo 會在實體 Manipulator 上規劃並執行動作。可下載的離線範例則不會對實體控制器發送任何控制指令。

ROS bag 中包含已錄製的 /joint_states、/tf 與 /tf_static 資料,但有兩種方式可以重建 Robot TF Tree。

方法 1:由已錄製的 Joint State 產生 TF​

重播 /joint_states,並讓 robot_state_publisher 根據 Robot Model 計算各 Link Transform:

Recorded /joint_states
|
v
robot_state_publisher
|
v
Robot TF tree
|
v
RViz RobotModel movement

方法 2:直接重播已錄製的 TF​

直接重播原始系統所記錄的 Transform:

Recorded /tf and /tf_static
|
v
Robot TF tree
|
v
RViz RobotModel movement

相同的 Transform 應只由一個來源發布。如果一邊重播已錄製的 TF,一邊又由 robot_state_publisher 發布相同的 TF Tree,可能會產生重複或互相衝突的 Transform Authority。

這兩種方式都能展示最終的機器手臂動作與 TF 關係,但都不包含:

  • 即時軌跡執行
  • 實體機器人的控制器回饋
  • 夾具控制
  • 硬體故障處理
  • 保護性停止

若要控制其他機械手臂,使用者必須設定對應的驅動、控制器、指令介面、Feedback Topic、安全行為,以及 MoveIt Execution Setting。

請參考Manipulator。


驗證手臂執行​

在實體硬體上執行任務之前,請確認:

  • 正確的控制器已啟用。
  • 關節名稱與 Unit 與機器人模型一致。
  • 回報的當前狀態與實體機器人一致。
  • 機器人位於預期的操作模式。
  • 軌跡目標能被接受,且可取得回饋。
  • Cancellation 與 Timeout Behavior 符合預期。
  • 夾具指令與夾具回饋正確。
  • 發生錯誤時,任務會停止,而不是直接進入下一個步驟。
  • Recovery Behavior 已在 Reduced Speed 下完成測試。
  • Hardware Safety Function 保持啟用且可操作。

偵錯過程中,應同時監控軟體狀態與實體機器人。


重點整理​

  • 機械手臂動作會將 Planned Trajectory 轉換為可監控的實體動作。
  • ROS 2 Action 支援 Long-Running Goal、Feedback、Result 與 Cancellation。
  • Trajectory Controller 與 Robot Driver 負責將 MoveIt 與實體硬體串接。
  • /joint_states 提供量測 Feedback,用於監控與視覺化。
  • 手臂與夾具指令必須透過具狀態管理的 Task Sequence 進行協調。
  • Failure 必須根據機器人實際狀態進行明確處理。
  • ROS 軟體無法取代硬體安全機能。
  • Robotic Suite 範例只會重播已錄製的動作,而不會控制實體機器人。

機械手臂動作完成整個機械手臂流程:

Object Perception → Pose Estimation → Motion Planning → Arm Action