外观
踩坑Robotics Stack Exchange2024-06-08
MoveIt轨迹关节顺序按字母排序且无法通过配置修改
本文由 AI 根据公开内容整理,可能有误,请以原文为准:Joint Order in MoveIt Trajectory(Robotics Stack Exchange #95667)
状态:有绕过办法
问题
在ROS Kinetic下使用MoveIt规划轨迹时,发布的FollowJointTrajectory消息中关节顺序被强制按字母排序(如elbow, shoulder, waist),与controllers.yaml中定义的顺序不一致。尝试设置controller_joint_names参数无效,导致自定义机器人驱动因关节索引错位无法正确执行轨迹。
环境
Ubuntu 16.04, ROS Kinetic, MoveIt, 自定义机器人驱动节点, FollowJointTrajectory接口
解决办法
- 确认MoveIt不支持自定义JointTrajectory关节发布顺序,controller_joint_names参数仅适用于industrial_robot_client包,对MoveIt无效。
- 修改自定义机器人驱动节点逻辑,使其不再依赖固定的关节数组索引位置。
- 在驱动接收到JointTrajectory消息时,读取消息头部的joint_names字段获取当前实际关节顺序。
- 遍历JointTrajectoryPoint中的positions/velocities/effort数组,根据joint_names建立从消息顺序到硬件期望顺序的索引映射表。
- 依据映射表重组数据后再下发至底层硬件控制器,确保关节值与物理轴对应正确。
原问题作者:swiz23;采纳答案作者:gvdhoorn-rse。原内容依 CC BY-SA 4.0 授权,本页摘要同样依 CC BY-SA 4.0 授权。
来源
本页事实对应的公开页面,以原文为准。