0. Navigator 导航编排指南
autonomy/navigator:移动机器人导航编排层,对齐 nav2 nav2_bt_navigator。通过行为树(BT)协调 planning、control、map、localization,完成单点导航与多点巡航。
本文 §0 |
其他文档 |
|---|---|
快速开始、配置、排错 |
0.1 文档地图
角色 |
阅读顺序 |
|---|---|
新手 |
|
BT 定制 |
|
集成 |
§0.2、§0.5、§0.8 → §6.6 选型 |
背景调研 |
§ |
文档 |
内容 |
|---|---|---|
0 |
本指南 |
上手、形式化、配置、排错 |
1 |
分层、数据流、状态、扩展 |
|
2 |
模式对比与专题索引 |
|
3–5 |
引擎 · 单点 BT · 插件 |
实现与 XML 专题 |
6 |
历史、分类、选型 |
0.2 快速开始
config/navigator/navigator.lua— 帧、容差、BT XML、插件列表config/autonomy.lua—navigator = include("navigator/navigator.lua").navigator启动
system::Autonomy并调用NavigateToPose()
config/common.lua 与 planner / controller / navigator 三处必须一致:
AUTONOMY_COMMON = {
global_frame = "map",
robot_base_frame = "base_link",
default_planner_id = "navfn_planner",
default_controller_id = "FollowPath",
default_goal_checker_id = "goal_checker",
default_smoother_id = "simple_smoother",
goal_reached_tolerance = 0.25,
}
直驱模式(当前默认):Autonomy::Configure() 设置 use_bt_navigation_ = false,NavigateToPose() 仅调用 GetPlan 并 NotifyPath,不执行 FollowPath。
autonomy::system::RuntimeOptions runtime;
runtime.config_directory = "config";
runtime.use_bt_navigation = false;
autonomy->Configure(runtime);
autonomy->NavigateToPose(goal, cancel, keep_alive, 300.0);
BT 模式(目标):
export AUTONOMY_BT_PLUGIN_PATH=/path/to/install/lib
bazel run //autonomy/system/tools:nav_test -- --config_directory=config --use_bt=true
模式 |
配置 |
行为 |
|---|---|---|
直驱规划 |
|
单次 |
BT 单点 |
|
|
BT 多点 |
|
|
当前阶段:配置、接口骨架、BT XML 已就绪;
BtEngine+ 52 插件 +BtNavigator待迁回。详见 §1.2 实现状态。
0.3 问题形式化
任务. 给定起点 \(q_s\)、目标 \(q_g \in \mathrm{SE}(2)\),求控制序列使机器人在全局帧 \(\mathcal{F}_g\)(默认 map)下进入目标邻域,并满足 costmap 可行约束。
编排层职责:不直接解 \(J\),而是通过 BT 调度 ComputePath → FollowPath → Recovery,并维护任务生命周期。路径搜索与跟踪分别由 Planning、Control 完成。
双层到达判定. BT GoalReached 仅检 XY(每 tick 无状态);FollowPath 内 SimpleGoalChecker 检 XY + 航向(stateful)。GoalReached 置于 ReactiveFallback 首位,XY 满足后整树立即 SUCCESS:
默认 \(\varepsilon_{xy} = 0.25\,\mathrm{m}\)(AUTONOMY_COMMON.goal_reached_tolerance)。完整 GoalChecker 推导见 Control · SimpleGoalChecker。
TF 模式切换(navigate_to_pose.xml):
TransformAvailable 等价于 \(\mathrm{canTransform}(\mathcal{F}_g, \mathcal{F}_b, t, \tau_{\mathrm{tf}})\),默认 \(\tau_{\mathrm{tf}} = 0.1\,\mathrm{s}\)。逐层 XML 解析见 §4。
0.4 能力边界
能力 |
状态 |
说明 |
|---|---|---|
|
✅ |
Lua → Protobuf |
|
✅ |
头文件完整 |
|
✅ |
单 Navigator 活跃 |
BT XML(单点含局部生存 / 多点) |
✅ |
|
52 BT 插件清单 + Groot 模型 |
⏳ |
|
|
⏳ |
实现待恢复 |
|
⏳ |
当前 |
直驱规划验证 |
✅ |
|
0.5 配置与 API
config/navigator/navigator.lua
字段 |
说明 |
默认 |
|---|---|---|
|
TF 帧 |
来自 |
|
BT tick 周期 (ms) |
|
|
子 Action 超时 (ms) |
|
|
局部生存最长等待 (s) |
|
|
BT |
|
|
BT 插件 |
52 个 |
|
单点 BT XML |
|
system::Autonomy
API |
用途 |
|---|---|
|
加载 navigator 配置 |
|
单点导航 |
|
多点巡航 |
|
触发重规划 |
|
最近规划路径 |
|
取消当前导航 |
顶层 Action:NavigateToPoseAction、NavigateThroughPosesAction;子 Action 含 ComputePathToPose、FollowPath、Spin / BackUp 等。分层与时序见 §1.3–§1.4。
0.6 自定义行为树
复制
navigate_to_pose.xml并修改节点组合(参考 §4)更新
navigator.lua的behavior_tree_file,或 Goal 的behavior_tree字段运行时指定新增节点时同步
autonomy_tree_nodes.xml与plugin_lib_names
<RateController hz="10.0">
<ComputePathToPose goal="{goal}" path="{path}" planner_id="{selected_planner}"/>
</RateController>
黑板键须在 PopulateBlackboardDefaults() 或 OnGoalReceived() 注入。插件目录见 §0.5 与 §3.2。
0.7 BT 插件环境
export AUTONOMY_BT_PLUGIN_PATH=/path/to/install/lib
BtEngine::LoadPlugins() 从 plugin_lib_names 加载各 .so 的 BT_REGISTER_NODES。Groot 模型:config/navigator/behavior_tree/autonomy_tree_nodes.xml。节点目录见 §5。
0.8 故障排查
错误码 |
名称 |
常见原因 |
处理 |
|---|---|---|---|
9001 |
|
BtNavigator 未 Configure |
检查 |
9002 |
|
超过 |
增大超时或检查卡住原因 |
9003 |
|
用户 Cancel |
正常行为 |
9004 |
|
新 Goal 抢占 |
正常行为 |
9005 |
|
XML 或插件缺失 |
检查 BT 文件与 |
9006 |
|
map→base_link 不可用 |
检查 localization / TF |
9007 |
|
Goal 帧或位姿无效 |
检查 |
9008 |
|
规划失败 |
costmap、起终点 |
9009 |
|
ComputePath FAILURE |
Planning §0.8 |
9010 |
|
FollowPath FAILURE |
Control §0.19 |
9011 |
|
SmoothPath 超时 |
增大 |
9012 |
|
IsPathValid FAILURE |
清图或重规划 |
9013 |
|
航向无法对齐 |
增大 |
现象 |
先查 |
|---|---|
直驱无路径 |
Planning §0.8 |
|
Controller 里程计 / TF |
BT 插件加载失败 |
|
TF 错误 (9006) |
localization、 |
容差不一致 |
|
FollowPath 失败 (9010) |
Control §0.19 |
| 多 Navigator 冲突 | NavigatorMuxer 拒绝并发 Goal |
选型矩阵见 §6.6。