joint_trajectory_controller
现在的控制器是plaintextarm_controller 类型joint_trajectory_controller/JointTrajectoryController它提供Action 服务plaintext/arm_controller/follow_joint_trajectory只要向这个 Action 发轨迹机械臂就会动。一、最快速测试命令行不用写代码直接在终端运行机械臂立刻动1. 查看当前关节角度确认能读到bash运行ros2 topic echo /joint_states2. 发送一条轨迹命令直接复制bash运行ros2 action send_goal /arm_controller/follow_joint_trajectory control_msgs/action/FollowJointTrajectory { trajectory: { joint_names: [JM0, JM1-2, JM4-3, JM4, JM5, YB], points: [ { positions: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], time_from_start: {sec: 2, nanosec: 0} } ] } }✅运行后机械臂会在 2 秒内走到全零位这就证明你的 joint_trajectory_controller 工作正常二、Python 代码控制最实用创建文件send_trajectory.py直接复制运行python运行import rclpy from rclpy.action import ActionClient from rclpy.node import Node from control_msgs.action import FollowJointTrajectory from trajectory_msgs.msg import JointTrajectoryPoint class ArmController(Node): def __init__(self): super().__init__(arm_simple_controller) self._action_client ActionClient( self, FollowJointTrajectory, /arm_controller/follow_joint_trajectory ) def send_goal(self): goal_msg FollowJointTrajectory.Goal() # 填入你的关节名字和你配置一致 goal_msg.trajectory.joint_names [ JM0, JM1-2, JM4-3, JM4, JM5, YB ] # 定义一个轨迹点 point JointTrajectoryPoint() point.positions [0.5, -0.3, 0.2, 0.0, -0.1, 0.4] # 目标角度 point.time_from_start.sec 3 # 3秒到达 goal_msg.trajectory.points.append(point) # 等待Action服务器上线 self._action_client.wait_for_server() # 发送目标 self._action_client.send_goal_async(goal_msg) self.get_logger().info(轨迹已发送 → 机械臂运动中) def main(argsNone): rclpy.init(argsargs) arm ArmController() arm.send_goal() rclpy.spin(arm) if __name__ __main__: main()运行bash运行ros2 run your_package send_trajectory.py✅机械臂会平滑运动到目标角度三、MoveIt 如何使用它你最关心的MoveIt 不是直接调用而是通过moveit_simple_controller_manager它会自动连接plaintext/arm_controller/follow_joint_trajectory你只需要在 MoveIt 配置文件simple_moveit_controllers.yaml写yamlcontroller_list: - name: arm_controller action_ns: follow_joint_trajectory type: FollowJointTrajectory default: true joints: - JM0 - JM1-2 - JM4-3 - JM4 - JM5 - YB然后启动 MoveIt就能用MoveGroupPython APIRViz 拖动C 代码全部都能控制机械臂运动四、总结超级简单你的joint_trajectory_controller运动方法只有 1 条向 Action /arm_controller/follow_joint_trajectory 发送轨迹 → 机械臂就会运动三种使用方式命令行快速测试Python 代码直接控制MoveIt 高级规划通过 simple_controller_manager