news 2026/4/16 22:25:53

joint_trajector and follow_joint_trajectory

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
joint_trajector and follow_joint_trajectory

/arm_controller/joint_trajectory是怎么一步步流到你这份 C++ 代码,再发给 Action Server的全过程讲透。

你现在的文件是:moveit_simple_controller_manager/follow_joint_trajectory_controller_handle.cpp

它的身份:MoveGroup 用来发指令给机器人控制器的 “快递员”


🔥 终极流程(一步不漏,完全对应你的代码)

plaintext

1. MoveIt2 Servo 发布 /arm_controller/joint_trajectory ↓ 2. MoveGroup 接收这个轨迹 ↓ 3. MoveGroup 把它包装成 RobotTrajectory ↓ 4. 进入 **你这份 C++ 代码** 的 sendTrajectory() 函数 ↓ 5. 代码把轨迹塞进 FollowJointTrajectory 的 Action Goal ↓ 6. 代码通过 **Action Client** 发送 /arm_controller/follow_joint_trajectory ↓ 7. 到达 **Action Server**(arm_controller) ↓ 8. 机器人运动

📌 第 1 步:Servo 发布话题

plaintext

/arm_controller/joint_trajectory

类型:trajectory_msgs/msg/JointTrajectory


📌 第 2–4 步:进入你这份代码的核心函数

MoveGroup 调用你这份代码里的:

cpp

运行

bool FollowJointTrajectoryControllerHandle::sendTrajectory( const moveit_msgs::msg::RobotTrajectory& trajectory )

这一行就是关键:

cpp

运行

goal.trajectory = trajectory.joint_trajectory;

意思:

把 /arm_controller/joint_trajectory 直接塞进 Action 的 goal 里


📌 第 5 步:构建 Action 指令

你代码里做的事:

cpp

运行

control_msgs::action::FollowJointTrajectory::Goal goal; goal.trajectory = trajectory.joint_trajectory; // <-- 这里!

goal.trajectory就是你要发的/arm_controller/joint_trajectory


📌 第 6 步:Action Client 发送

你代码里这一行:

cpp

运行

auto current_goal_future = controller_action_client_->async_send_goal(goal, send_goal_options);

它发送到:

plaintext

/arm_controller/follow_joint_trajectory

这是Action,不是普通话题。


📌 第 7 步:到达 Action Server

接收者是:

plaintext

arm_controller (ros2_control)

它是Action Server,负责真正执行电机运动。


✨ 最核心的一句话总结(你一定要记住)

plaintext

/arm_controller/joint_trajectory ↓(直接塞进) FollowJointTrajectory.action 的 goal.trajectory ↓(通过你这份代码发送) Action Client → Action Server (arm_controller)

你这份代码的唯一作用:把轨迹话题转成 Action 发给控制器。


🔍 我直接在你的代码里标出关键路径

cpp

运行

bool FollowJointTrajectoryControllerHandle::sendTrajectory( const moveit_msgs::msg::RobotTrajectory& trajectory) { // ... // 👇 👇 👇 核心行 👇 👇 👇 goal.trajectory = trajectory.joint_trajectory; // <-- 这里就是你的 joint_trajectory // ... // 发送 Action controller_action_client_->async_send_goal(goal, send_goal_options); }

🚀 最终流向图(最简洁版)

plaintext

MoveIt2 Servo → 发布 /arm_controller/joint_trajectory ↓ MoveGroup → 调用你的代码:sendTrajectory() ↓ 你的代码 → goal.trajectory = 接收的轨迹 → 通过 Action Client 发送 ↓ Action Server: /arm_controller/follow_joint_trajectory ↓ 机器人运动
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 22:23:35

86787

67843

作者头像 李华
网站建设 2026/4/16 22:18:44

智慧电力设备巡检数据集 电力智能化巡检项目 电力设备缺陷识别 绝缘缺陷图像识别 输电线路巡检图像数据集 YOLO深度学习第10370期

目标检测数据集说明一、数据集核心信息项目详情类别数量及中文名称28 类&#xff1a;布桶、陶土电箱&#xff08;半装&#xff09;、陶土电箱&#xff08;无盖&#xff09;、聚合物电箱&#xff08;半装&#xff09;、聚合物电箱&#xff08;组装&#xff09;、聚合物电箱&…

作者头像 李华
网站建设 2026/4/16 22:18:17

好用的东莞高新技术企业认定咨询专家

在东莞&#xff0c;企业想要成功认定为高新技术企业&#xff0c;选择一位专业靠谱的咨询专家至关重要。这不仅关系到认定的成功率&#xff0c;还会影响企业后续的发展。今天&#xff0c;就来给大家分享一下如何选择好用的东莞高新技术企业认定咨询专家&#xff0c;同时为大家推…

作者头像 李华