# Nav2 Route缺少接近节点触发机制，建议用ON_QUERY插件实现

> 原文链接：https://robotics.hellobike.com/pitfalls/2026-10-14-navigation2-6647
> 频道：pitfalls | 更新日期：2026-10-14 | 标签：auto, github-issue, navigation2
> 核心摘要：针对Nav2 Route缺乏接近节点触发功能的问题，维护者建议使用现有ON_QUERY操作配合L2距离检查作为替代方案。

# Nav2 Route缺少接近节点触发机制，建议用ON_QUERY插件实现

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[[nav2_route] Approaching node notifier](https://github.com/ros-navigation/navigation2/issues/6647)（GitHub ros-navigation/navigation2 #6647）

**状态**：有绕过办法

## 问题

在Nav2 Route中，机器人需要在接近目标节点（如自动门、电梯）时提前触发行为，而非仅在到达时触发。现有方法要么添加中间节点破坏图语义，要么增大radius_to_achieve_node导致规划器误判到达状态。提议新增ON_APPROACH操作及approach_radius参数以支持基于距离的预触发。

## 环境

ROS Navigation2 (nav2_route), RouteTracker, ON_QUERY/ON_ENTER/ON_EXIT node operations

## 解决办法

1. 复用现有 `ON_QUERY` 路由操作机制（参考 `collision_monitor.hpp` 实现模式），无需修改核心代码或新增 `ON_APPROACH` 类型。
2. 编写自定义 Route Operation 插件，在 Query 回调中读取当前 `next_node` 元数据中的接近距离阈值配置。
3. 计算当前位置与目标节点的 L2 距离，当距离小于设定阈值且满足触发条件时执行对应行为逻辑。
4. 利用元数据字段标记已处理节点，避免对无相关配置的节点进行重复距离计算，确保轮询开销不随行为数量线性增长。

讨论原作者：@SuadOcado 等，版权归原作者所有。
:::

## 原始参考来源 (Sources)

- [GitHub ros-navigation/navigation2 #6647：[nav2_route] Approaching node notifier](https://github.com/ros-navigation/navigation2/issues/6647)