机械臂只能规划不能执行的问题
moveit_controllers.yaml中
arm_controller: type: FollowJointTrajectory joints: - joint1 - joint2 - joint3 - joint4 - joint5 - joint6这个type是一个数据类型
ros2_controllers.yaml中
arm_controller: type: joint_trajectory_controller/JointTrajectoryController这个type是控制插件的类型
解决方案:
加action的命名空间
arm_controller: type: FollowJointTrajectory joints: - joint1 - joint2 - joint3 - joint4 - joint5 - joint6 action_ns: follow_joint_trajectory原因:
关系是这样的
JointTrajectoryController 是 ros2_control 里的一个控制器插件,而 FollowJointTrajectory 是它提供出来的 ROS 2 Action 接口数据类型。
action_ns 主要取决于使用的控制插件类型(比如 JointTrajectoryController)所提供的 Action 接口名
<controller_name>/follow_joint_trajectory[control_msgs::action::FollowJointTrajectory]
这是该 Action 的名称格式。<controller_name> 是一个占位符,需要替换成实际控制器的名字。
例如上面的控制器名称arm_controller,
那么这里的实际名称就arm_controller/follow_joint_trajectory。
方括号里的 control_msgs::action::FollowJointTrajectory 是这个 Action 的数据类型(消息接口),它规定了发送的指令和接收的反馈长什么样
所以是moveit_controllers缺少“follow_joint_trajectory”这一段Action名称空间
以下是官方文档