外观
踩坑GitHub ros-planning/moveit2昨天
MoveIt2 PlanningScene几何转换失败静默跳过致碰撞体缺失
本文由 AI 根据公开内容整理,可能有误,请以原文为准:Failed shape conversions are silently skipped in PlanningScene collision object processing(GitHub ros-planning/moveit2 #3944)
状态:有绕过办法
问题
在MoveIt2的PlanningScene::shapesAndPosesFromCollisionObjectMessage()中,当constructShapeFromMsg()返回nullptr时,lambda函数直接return跳过该几何体,但外层函数仍无条件返回true。
环境
ROS 2 Humble/Rolling, Ubuntu 22.04, MoveIt2 2.15.2 (Source Build), moveit_core/planning_scene模块
解决办法
- 部署验证测试:使用复现包
MoveIt2_Reproduction_Package_v0.4.zip中的GTest用例ShapeConversionFailureCanBeSilentlySkipped,输入混合有效Box与无效类型255的primitive,确认processCollisionObjectMsg返回true但World仅存储1个形状。 - 运行时防御:在调用
processCollisionObjectMsg后,立即比对输入消息中的几何体总数与PlanningScene World中实际存储的形状数量,若不一致则视为添加失败并触发告警或拒绝该物体。 - 源码级修复:修改
planning_scene.cpp中append lambda及treat_shape_vectors逻辑,增加布尔标志位追踪constructShapeFromMsg()是否返回nullptr;一旦发现转换失败,除非显式允许部分接受,否则应返回false或抛出异常,并…
讨论原作者:@Huangguanyao 等,版权归原作者所有。
来源
本页事实对应的公开页面,以原文为准。