Wiki
Joint-Trajectory-Controller
約 3 分鐘閱讀
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
軌跡是時間軸上的關節目標,不只是一次位置數組賦值。
1.示例 1:加載並切換控制器
保持自己的雙關節實例運行,另一終端 source 學習工作區:
source /opt/ros/jazzy/setup.bash
source ~/ros2_control_jazzy_ws/install/setup.bash
ros2 run controller_manager spawner trajectory_controller --inactive \
--param-file $(ros2 pkg prefix jazzy_control_hardware)/share/jazzy_control_hardware/config/controllers.yaml
ros2 control switch_controllers --deactivate forward_position_controller \
--activate trajectory_controller --strict
ros2 control list_controllers
spawner 使用 --inactive 完成加載與配置;switch 在同一個請求裏釋放舊接口並激活新控制器。不要讓兩個普通控制器爭用同一 position 命令接口。
2.示例 2:Action 發送目標
ros2 action send_goal /trajectory_controller/follow_joint_trajectory \
control_msgs/action/FollowJointTrajectory \
"{trajectory: {joint_names: [joint1, joint2], points: [
{positions: [0.2, 0.1], time_from_start: {sec: 3}}
]}}" --feedback
2.1.成功時的示例輸出
error_code: 0
Goal finished with status: SUCCEEDED
成功表示符合配置中的軌跡和目標容差,不表示設備沒有誤差。教學硬件有跟隨延遲,因此配置了允許誤差與額外到達時間。
3.示例 3:Topic 發送兩段軌跡
ros2 topic pub --once /trajectory_controller/joint_trajectory \
trajectory_msgs/msg/JointTrajectory \
"{joint_names: [joint1, joint2], points: [
{positions: [0.3, -0.2], time_from_start: {sec: 2}},
{positions: [0.0, 0.0], time_from_start: {sec: 5}}
]}"
time_from_start 是相對整條軌跡起點,第二點表示開始後 5 秒,不是再等 5 秒。時間應遞增,數組順序與 joint_names 一致。
Action 提供接受、反饋和結果;Topic 發佈成功不能證明執行完成。指定絕對 header 時間時,要確保發送端與控制器使用相同時間域;仿真中尤其要檢查 use_sim_time。
4.參數與恢復
command_interfaces 決定輸出類型,state_interfaces 決定所需反饋,constraints 定義軌跡誤差與目標誤差。換成 velocity 或 effort 時,還要核對對應的接口組合要求。
ros2 control switch_controllers --deactivate trajectory_controller \
--activate forward_position_controller --strict
源碼:ros2_controllers/joint_trajectory_controller/src/joint_trajectory_controller.cpp。沿目標回調、軌跡緩衝、採樣和容差判斷閲讀。
返回 Jazzy 總覽 · 上一篇:命令轉發與控制模式 · 下一篇:Harmonic機械臂物理仿真