ros2 runtime_error ai_generated partial

[costmap_2d] 更新代价地图层'obstacle_layer'失败:标记函数缓冲区溢出

[costmap_2d] Failed to update costmap layer 'obstacle_layer': buffer overflow in mark function

ID: ros2/nav2-costmap-layer-buffer-overflow

其他格式: JSON · Markdown 中文 · English
80%修复率
83%置信度
1证据数
2024-01-20首次发现

版本兼容性

版本状态引入弃用备注
ros2-humble active
ros2-iron active
ros2-rolling active

根因分析

当单个更新周期内添加过多点时,障碍物层的内部标记缓冲区会溢出,通常是由于高频率传感器发布了过多点。

English

The obstacle layer's internal buffer for marking obstacles overflows when too many points are added in a single update cycle, often due to a high-rate sensor publishing an excessive number of points.

generic

官方文档

https://docs.nav2.org/configuration/packages/costmap-2d/index.html

解决方案

  1. 降低传感器点云发布频率:在传感器驱动配置中设置'publish_rate: 5.0'(Hz),或使用'voxel_grid'滤波器进行降采样。
  2. 提高代价地图更新频率并将障碍物层的'combination_method'设置为'1'(最大值)以减少缓冲区使用:在costmap_common_params.yaml中设置'update_frequency: 10.0'和'obstacle_layer.combination_method: 1'。

无效尝试

常见但无效的做法:

  1. 50% 失败

    Buffer overflow is a symptom of excessive data rate; increasing buffer may delay overflow but not prevent it.

  2. 30% 失败

    Disabling obstacle layer removes obstacle avoidance, making navigation unsafe.