Skip to content

踩坑GitHub ros-planning/moveit2昨天

MoveIt2 World子帧查询不一致:knowsTransform误报缺失 ​

本文由 AI 根据公开内容整理,可能有误,请以原文为准:Inconsistent subframe lookup between World::knowsTransform() and World::getTransform()(GitHub ros-planning/moveit2 #3943)

状态:有绕过办法

问题 ​

在moveit_core/collision_detection/src/world.cpp中,当碰撞对象ID存在包含关系(如robot与robot/tool)时,World::knowsTransform()匹配到短前缀对象若无对应子帧即返回false,而World::getTransform()会继续搜索并成功返回变换。这导致有效的子帧在可用性检查中被错误拒绝,引发规划或附着代码行为异常。

环境 ​

ROS 2 Humble/Rolling,Ubuntu 22.04,MoveIt 2 v2.15.2源码编译版本。

解决办法 ​

  1. 修改World::knowsTransform()逻辑,使其在匹配对象未找到子帧时不立即返回false,而是像getTransform()一样继续遍历后续对象。
  2. 若暂不修改源码,应制定命名规范,避免使用带斜杠且互为前缀的碰撞对象ID(如禁止同时存在robot和robot/tool)。
  3. 添加针对重叠对象名前缀的回归测试用例OverlappingSubframePrefixMakesTransformQueriesDisagree以验证修复效果。
  4. 参考Issue #3939附带的复现包MoveIt2_Reproduction_Package_v0.4.zip进行本地验证与调试。

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

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

来源

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

  1. GitHub ros-planning/moveit2 #3943:Inconsistent subframe lookup between World::knowsTransform() and World::getTransform()访问 2026-11-04