19. PoseProgressChecker
归属 §3.6 PoseProgressChecker · Autonomy ✅ 已实现
PoseProgressChecker 继承 SimpleProgressChecker:除 XY 位移外,航向变化 \(\Delta\theta\) 超过阈值也视为有效进度,避免「先原地转向再前进」策略被误判为卡住。
1. 背景
Graceful / RPP 等控制器常采用先对齐航向、再前进;此阶段 XY 位移很小,SimpleProgressChecker 会持续返回 false。PoseProgressChecker 将转角纳入进度,与 Nav2 nav2_controller 中同名插件语义一致。
2. 问题
任务. 判定自基线以来是否发生足够 平移或旋转。
输入 / 输出. Check(current_pose) → bool;true = 有进度。
在线形式. 与 Simple 相同基线更新逻辑;扩展 IsRobotMovedEnough 为析取条件。
3. 位姿与位移模型
XY 位移(同 §18).
航向变化.
\(r\):位移半径(默认 0.5 m,继承 Simple)
\(\Delta\theta_{req}\):
required_movement_angle(默认 0.5 rad)
4. 数学问题定义
有进度条件.
满足 → 重置基线,返回 true;否则 false(无进度)。
5. 判定算法
\(d_{xy} \leftarrow \mathrm{hypot}(x-x_b, y-y_b)\)
\(\Delta\theta \leftarrow |\mathrm{NormalizeAngleDiff}(\theta - \theta_b)|\)
若 \(d_{xy} > r\) 或 \(\Delta\theta > \Delta\theta_{req}\) → 返回 true
否则 返回 false
Check() 外层逻辑同 §18 算法 1:首次或 IsRobotMovedEnough 为真时 ResetBaselinePose。
实现见 pose_progress_checker.cpp。与 Simple 选型见 §3.7。
6. 参考文献
Navigation2 Controller Server — Progress Checker plugins: configuring-controller-server