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

- **ID:** `ros2/nav2-costmap-layer-buffer-overflow`
- **领域:** ros2
- **类别:** runtime_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

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

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| ros2-humble | active | — | — |
| ros2-iron | active | — | — |
| ros2-rolling | active | — | — |

## 解决方案

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'。
   ```

## 无效尝试

- **** — Buffer overflow is a symptom of excessive data rate; increasing buffer may delay overflow but not prevent it. (50% 失败率)
- **** — Disabling obstacle layer removes obstacle avoidance, making navigation unsafe. (30% 失败率)
