外观
踩坑/GitHub ros-navigation/navigation2·12 天前
Nav2 Collision Monitor拒绝range=inf的Range消息导致避障失效
Collision Monitor因校验逻辑不支持INF值而丢弃有效Range消息,需修改validateMsg函数以允许浮点INF。
AI 整理
- 本体 SDK 与控制
- 感知与导航
本文由 AI 根据公开内容整理,可能有误,请以原文为准:Collision Monitor rejects "sensor_msgs/msg/Range" messages with range=.inf(GitHub ros-navigation/navigation2 #6669)
状态:有绕过办法
问题
在ROS2 Lyrical版Nav2中,Collision Monitor节点接收sensor_msgs/msg/Range消息时,若range字段值为float('inf'),会被内部消息校验机制判定为无效并丢弃,导致超声波等传感器在探测不到障碍物时无法正确更新状态,进而影响StopZone等安全策略的执行。
环境
Ubuntu 26.04.1, ROS2 Lyrical, nav2_collision_monitor 1.5.2-2resolute.20260921.014704, Intel/AMD64或Raspberry Pi 5
解决办法
- 定位nav2_ros_common/include/nav2_ros_common/validate_messages.hpp中针对float/double的validateMsg函数
- 新增validateMsgInfValid模板函数,在原有数值范围检查基础上显式允许std::isinf()为true的情况
- 修改nav2_collision_monitor/src/range.cpp第169行附近的校验调用,将Range类型传感器的range字段验证替换为validateMsgInfValid
- 确保该修改仅作用于type: range的观测源,不影响其他传感器类型的校验逻辑
- 向navigation2仓库main分支提交PR,维护者确认后将自动反向移植至lyrical分支
讨论原作者:@slgrobotics 等,版权归原作者所有。
来源
本页事实对应的公开页面,以原文为准。