5. BT 插件节点
本文 catalog autonomy/navigator/behavior_tree/plugins/ 下的全部行为树节点插件,以及 navigate_through_poses.xml 多点导航树。
5.1 插件体系
5.1.1 命名规则
autonomy_behavior_tree_{category}_{stem}
类别 |
数量 |
目录 |
|---|---|---|
|
24 |
|
|
16 |
|
|
3 |
|
|
7 |
|
5.1.2 加载配置
config/navigator/navigator.lua 的 plugin_lib_names 列出全部 52 个库名,须与 CMake 目标一致。
环境变量 AUTONOMY_BT_PLUGIN_PATH 指定 .so 搜索路径(plugin_lib_path 为空时使用)。
5.1.3 Groot 模型
config/navigator/behavior_tree/autonomy_tree_nodes.xml 定义全部节点的输入/输出端口,可用 Groot2 可视化编辑。
5.2 Action 节点(24)
Action 节点调用 autolink Action Server 或 Service,执行期间返回 RUNNING。
5.2.1 规划类
节点 |
库名 |
调用目标 |
主要端口 |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
本地路径裁剪 |
|
|
|
局部最近点裁剪 |
|
|
|
从路径提取位姿 |
|
5.2.2 控制类
节点 |
库名 |
调用目标 |
主要端口 |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
定时等待 |
|
5.2.3 取消节点
节点 |
用途 |
|---|---|
|
取消进行中的 Spin |
|
取消进行中的 BackUp |
|
取消进行中的 DriveOnHeading |
|
取消进行中的 Wait |
|
取消 FollowPath |
5.2.4 Selector 节点
节点 |
Topic |
输出键 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5.2.5 服务类
节点 |
库名 |
调用目标 |
|---|---|---|
|
|
|
5.2.6 航点管理
节点 |
用途 |
|---|---|
|
移除已通过的航点 |
|
移除碰撞航点 |
5.3 Condition 节点(16)
Condition 节点瞬时判定,返回 SUCCESS 或 FAILURE。
5.3.1 导航判定
节点 |
判定逻辑 |
用于 |
|---|---|---|
|
\(d_{xy} \leq \varepsilon_{xy}\) |
目标到达(仅 XY) |
|
|
TF 可用性 |
|
|
AMCL 初始化 |
|
路径碰撞检测 |
Pipeline 验证 |
|
机器人卡住检测 |
恢复决策 |
|
速度低于阈值 |
停止判定 |
|
goal 话题更新 |
动态目标 |
|
全局 goal 更新 |
动态目标 |
5.3.2 时空判定
节点 |
判定逻辑 |
|---|---|
|
\(t_{\text{elapsed}} \geq T_{\mathrm{exp}}\)(XML 端口 |
|
路径即将过期 |
|
累计移动距离超过阈值 |
|
两位姿距离 < 阈值 |
5.3.3 恢复决策
节点 |
用途 |
|---|---|
|
规划恢复是否有帮助 |
|
控制恢复是否有帮助 |
|
平滑恢复是否有帮助 |
|
检查错误码集合 |
5.3.4 电源(可选)
节点 |
用途 |
|---|---|
|
电量低 |
|
正在充电 |
5.4 Control 节点(3)
节点 |
语义 |
用于 |
|---|---|---|
|
流水线按序执行,前 SUCCESS 才激活下一个 |
规划→平滑→跟踪 |
|
主分支 FAILURE 时执行恢复子树,限 retries |
SafeNavigate、LocalSurvivalMode |
|
轮询子节点,ForceFailure 跳过 |
局部运动循环 |
PipelineSequence vs Sequence
特性 |
|
|
|---|---|---|
已完成子节点 |
不再 tick |
保持 SUCCESS 状态 |
适用场景 |
一次性步骤 |
持续运行的流水线 |
典型用途 |
恢复链 |
规划+跟踪 |
5.5 Decorator 节点(7)
节点 |
行为 |
典型参数 |
|---|---|---|
|
限制子节点最大频率 |
|
|
移动超过距离后 re-tick |
|
|
根据速度限制 tick |
|
|
监听 goal 更新 |
topic 名 |
|
goal 更新时重置子节点 |
— |
|
接近目标时路径变长则 FAILURE |
— |
|
子节点仅执行一次 |
— |
5.6 节点 → 子系统映射
flowchart TB
subgraph BT["BT Action 节点"]
CP[ComputePath*]
SP[SmoothPath]
FP[FollowPath]
CL[ClearEntireCostmap]
MV[Spin / BackUp / DriveOnHeading]
end
subgraph Servers["子系统 Server"]
PS[PlannerServer]
SS[SmootherServer]
CS[ControllerServer]
CM[Costmap Service]
end
CP --> PS
SP --> SS
FP --> CS
CL --> CM
MV --> CS
5.8 扩展自定义节点
在
plugins/{category}/my_node.cpp实现节点类继承
BtActionNode/BtConditionNode/BtControlNode/BtDecoratorNode通过
bt_context访问子系统BT_REGISTER_NODES(factory)注册CMake 添加到
behavior_tree_plugins.cmake更新
navigator.lua和autonomy_tree_nodes.xml