Skip to content

踩坑GitHub ros-planning/moveit2昨天

MoveIt2 PlanningScene子帧数组长度不一致导致SIGSEGV崩溃 ​

本文由 AI 根据公开内容整理,可能有误,请以原文为准:Missing bounds check for collision object subframe names(GitHub ros-planning/moveit2 #3939)

状态:有绕过办法

问题 ​

在moveit_core/planning_scene.cpp的processCollisionObjectMsg(行1616–1620)和processAttachedCollisionObjectMsg(行1925–1933)中,遍历subframe_poses时直接索引subframe_names而未校验两向量长度相等。

环境 ​

MoveIt 2.15.2源码编译,ROS 2 Rolling,Ubuntu 22.04;涉及moveit_core/planning_scene模块的CollisionObject ADD及AttachedCollisionObject处理路径。

解决办法 ​

  1. 在调用PlanningScene接口前,严格校验消息中object.subframe_poses.size() == object.subframe_names.size(),不等则拒绝提交并报错。
  2. 若具备源码修改权限,参照moveit_core/robot_state/src/conversions.cpp第271行逻辑,在上述两处循环前增加if (object.subframe_poses.size() != object.subframe_names.size()) { RCLCPP_ERROR(...); return; }防护。
  3. 使用AddressSanitizer或边界检查STL配置运行GTest验证修复有效性,避免畸形输入导致进程崩溃。

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

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

来源

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

  1. GitHub ros-planning/moveit2 #3939:Missing bounds check for collision object subframe names访问 2026-11-04