Skip to content

踩坑GitHub ros-planning/moveit2昨天

MoveIt2 CollisionObject MOVE校验失败致物体位姿被错误修改 ​

本文由 AI 根据公开内容整理,可能有误,请以原文为准:Collision object MOVE modifies object pose before validating shape pose count(GitHub ros-planning/moveit2 #3941)

状态:有绕过办法

问题 ​

在 PlanningScene::processCollisionObjectMove() 中,系统先调用 world_->setObjectPose() 更新碰撞物体全局位姿,随后才校验 primitive_poses 等形状位姿数量是否匹配。若校验失败函数返回 false,但物体位姿已被永久修改,导致规划场景处于部分更新的脏状态,后续碰撞查询将基于错误位姿进行计算。

环境 ​

ROS 2 Rolling / Humble, Ubuntu 22.04, MoveIt 2 v2.15.2 (Source Build), moveit_core/planning_scene

解决办法 ​

  1. 修改 moveit_core/planning_scene/src/planning_scene.cpp,将形状位姿数量校验逻辑移至 world_->setObjectPose() 调用之前,确保所有验证通过后再执行状态变更。
  2. 作为临时规避措施,在发送 CollisionObject::MOVE 消息前,务必在应用层严格校验 primitive_poses、mesh_poses 与 plane_poses 的总数与当前场景中该物体的形状数量完全一致,防止触发后端校验失败。
  3. 参考 Issue #3939 提供的复现测试包 FailedMoveLeavesObjectPoseChanged 验证修复效果,确保被拒绝的 MOVE 请求不会改变全局物体位姿及独立形状位姿。

讨论原作者:@Huangguanyao 等,版权归原作者所有。

基于本页技术方向关联的整机参数、核心零部件、实测报告与同赛道选型横评。

来源

本页事实对应的公开页面,以原文为准。

  1. GitHub ros-planning/moveit2 #3941:Collision object MOVE modifies object pose before validating shape pose count访问 2026-11-04