云计算百科
云计算领域专业知识百科平台

Moveit2 中 JointTrajectoryController 和 FollowJointTrajectory 有什么区别?

目录

1. JointTrajectoryController 是什么?

2. FollowJointTrajectory 是什么?

3. 它们如何配合?

4. 在配置文件中怎么看?

5. 运行时如何查看 Action?

6. 总结


在学习 ROS 2 控制机械臂时,我遇到了两个容易混淆的名字:

joint_trajectory_controller/JointTrajectoryController control_msgs/action/FollowJointTrajectory

它们看起来都和关节轨迹有关,但实际上一个是控制器插件,另一个是Action 接口。

先用一句话总结:

JointTrajectoryController 是执行者,FollowJointTrajectory 是它接收轨迹任务的 Action 接口。

1. JointTrajectoryController 是什么?

JointTrajectoryController 是 ros2_control 提供的控制器。它接收一组关节轨迹,并让对应关节按照轨迹运动。

例如,机械臂有多个关节,可以给它一组目标:

2 秒后: arm_1_joint 到 0.3 rad arm_2_joint 到 -0.5 rad arm_3_joint 到 0.8 rad

控制器会根据轨迹中的关节名称、目标位置和时间信息,生成关节命令并交给底层硬件接口。

在仿真中,底层接口连接 Gazebo 的关节;在真实机器人上,底层接口则连接实际硬件驱动。  

2. FollowJointTrajectory 是什么?

FollowJointTrajectory 是一个 ROS 2 Action 类型:

control_msgs/action/FollowJointTrajectory

Action 适合耗时任务。客户端发送目标后,可以持续获取执行反馈,也可以取消任务,最后还会收到成功或失败结果。

机械臂执行轨迹通常需要一段时间,所以用 Action 发送和监控轨迹很合适。

3. 它们如何配合?

可以把它们的关系理解成:

MoveIt 或其他客户端         │         │ 发送 FollowJointTrajectory Action 目标         ▼ JointTrajectoryController         │         │ 输出关节命令         ▼ ros2_control 硬件接口         │         ▼ Gazebo 仿真关节或真实机械臂

其中:

  • FollowJointTrajectory 定义了客户端和控制器之间如何通信。

  • JointTrajectoryController 接收并执行轨迹。

  • ros2_control 硬件接口负责把控制器命令传到底层。

4. 在配置文件中怎么看?

以机械臂控制器为例,控制器管理器的配置可能是:

controller_manager:
ros__parameters:
arm_controller:
type: joint_trajectory_controller/JointTrajectoryController

表示:加载一个名为 arm_controller 的控制器实例,并使用 JointTrajectoryController 插件。

控制器自己的参数还会指定要控制哪些关节,以及使用什么命令接口:

arm_controller:
ros__parameters:
joints:
– arm_1_joint
– arm_2_joint
– arm_3_joint
command_interfaces:
– position
state_interfaces:
– position
– velocity

配置中的 arm_controller 是实例名称;joint_trajectory_controller/JointTrajectoryController 是插件类型。它们也不是 Action 名称。

5. 运行时如何查看 Action?

控制器启动并激活后,可以用下面的命令查看 Action:

ros2 action list -t

通常会看到类似:

/arm_controller/follow_joint_trajectory
[control_msgs/action/FollowJointTrajectory]

这里:

  • /arm_controller/follow_joint_trajectory 是 Action 名称。
  • control_msgs/action/FollowJointTrajectory 是 Action 类型。
  • arm_controller 是控制器实例名称。

6. 总结

理解这两个名字时,记住它们所在的层次:

JointTrajectoryController:负责执行轨迹的控制器插件
FollowJointTrajectory:客户端向控制器发送轨迹任务的 Action 接口

所以它们不是两个互相竞争的控制器,而是执行者与通信接口的关系。 MoveIt 规划出机械臂轨迹后,可以通过 FollowJointTrajectory 把轨迹交给 JointTrajectoryController 执行。

赞(0)
未经允许不得转载:网硕互联帮助中心 » Moveit2 中 JointTrajectoryController 和 FollowJointTrajectory 有什么区别?
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!