4. 单点导航行为树
本文逐层解析 config/navigator/behavior_tree/navigate_to_pose.xml——Autonomy 默认的单点导航行为树,含全局导航、局部生存模式与恢复链。
4.1 设计目标
目标 |
实现 |
|---|---|
标准 nav2 流水线 |
规划 → 平滑 → 验证 → 跟踪 |
定位韧性 |
TF 丢失时进入局部生存模式 |
快速 SUCCESS |
|
失败恢复 |
清图 + 后退 + 旋转,最多 8 次 |
动态插件切换 |
Planner / Controller / Smoother Selector |
4.2 树形结构总览
RecoveryNode [SafeNavigate, retries=8]
├── ReactiveFallback [AdaptiveNavigation]
│ ├── GoalReached ← 已到达 → 整树 SUCCESS
│ ├── Sequence [GlobalMode] ← TF 可用
│ │ ├── InitialPoseReceived
│ │ ├── TransformAvailable(map←base_link)
│ │ └── PipelineSequence [GlobalNavigatePipeline]
│ │ ├── ControllerSelector
│ │ ├── PlannerSelector
│ │ ├── SmootherSelector
│ │ ├── RateController(5Hz) → ComputePathToPose
│ │ ├── SmoothPath
│ │ ├── IsPathValid
│ │ └── FollowPath
│ └── RecoveryNode [LocalSurvivalMode, retries=200] ← TF 不可用
│ ├── Sequence [LocalMotionAndRelocalize]
│ │ ├── Inverter(TimeExpired)
│ ├── Inverter(TransformAvailable)
│ └── RoundRobin → DriveOnHeading / Spin / BackUp
│ └── Sequence [RelocalizationRecovery]
│ ├── ClearEntireCostmap(local)
│ └── Wait(0.2s)
└── Sequence [NavigationRecovery] ← 失败恢复
├── ClearEntireCostmap(local + global)
├── BackUp(0.25m)
└── Spin(1.57 rad)
4.6 模式切换状态机
┌─────────────┐
│ GoalReached?│──YES──→ SUCCESS
└──────┬──────┘
NO
┌────────────┴────────────┐
▼ ▼
TF available? TF NOT available
│ │
▼ ▼
GlobalMode LocalSurvivalMode
(plan→smooth→follow) (RoundRobin + relocalize)
│ │
│ TF restored ◄────────┘
│ │
└──── failure ────────────┘
▼
NavigationRecovery
(×8 retries max)
4.7 关键参数调优
参数 |
位置 |
建议 |
|---|---|---|
|
|
室内 0.25m;精确定位 0.10m |
|
|
定位慢恢复 180s;快速失败 60s |
|
XML |
动态环境 10Hz;静态 2Hz |
|
SafeNavigate |
复杂环境 12;简单 4 |
|
XML |
局部生存低速 0.12m/s |