Skip to content

踩坑GitHub ros-planning/moveit2昨天

MoveIt2 PlanningScene ADD替换失败导致有效碰撞物体被误删 ​

本文由 AI 根据公开内容整理,可能有误,请以原文为准:Failed collision object ADD replacement removes the existing object before validation(GitHub ros-planning/moveit2 #3942)

状态:有绕过办法

问题 ​

在 PlanningScene::processCollisionObjectAdd() 中,当对已存在的碰撞物体执行 ADD 替换操作时,代码会先调用 world_->removeObject 删除原物体,随后才解析并校验新几何体。

环境 ​

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 中的 processCollisionObjectAdd 逻辑,将 shapesAndPosesFromCollisionObjectMessage 几何校验与构建步骤移至 world_->removeObject 之前执行。
  2. 仅当新几何体解析成功且返回 true 时,再执行删除旧物体及 world_->addToObject 添加新物体的操作;若校验失败则保留原物体不变并返回 false。
  3. 应用层作为临时规避措施,需在发送 CollisionObject ADD 消息前严格校验 primitives 与 primitive_poses 数组长度一致性,防止触发该缺陷。
  4. 建议添加回归测试验证被拒绝的替换操作不会改变现有碰撞世界状态。

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

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

来源

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

  1. GitHub ros-planning/moveit2 #3942:Failed collision object ADD replacement removes the existing object before validation访问 2026-11-04