项目说明
AprilTag Docking Demo 在 Gazebo 中让 TurtleBot3 靠近充电桩。连续有效观测通过门控后,任务才会交给复用的 Nav2 SimpleChargingDock 做最后接近;低置信、多 Tag、位姿跳变、Guard 失效和取消都会走明确的处理分支。

仿真平台Gazebo Harmonic · TurtleBot3 Waffle Pi
ROS 2Jazzy · apriltag_ros · Nav2 Docking
关键门限三帧确认 · Tag loss · pose jump · Guard
任务怎么开始
Gazebo RGB
camera→apriltag_ros
detection + TF→Tag pose bridge
置信与去抖→Guard + task bridge→Nav2 Docking
DockRobot Action
camera→apriltag_ros
detection + TF→Tag pose bridge
置信与去抖→Guard + task bridge→Nav2 Docking
DockRobot Action
项目复用 opennav_docking::SimpleChargingDock。自定义部分负责 Tag 到 dock type 的映射、观测门限、状态桥接和诊断。只有确认过的 PoseStamped 才会进入 Docking。
哪些观测会被拒绝
低置信 / Hammingdecision margin 不够或 Hamming distance 非零时,忽略这次观测。未知 / 多 TagID 没映射或同时出现多个 Tag 时,不给停靠目标。三帧确认连续三帧通过后才发布,避免偶然识别改变任务状态。位姿跳变平移或 yaw 超过门限时重新确认,防止错误 TF 混进来。Tag 丢失接受的样本超时会报告出来,由 Nav2 按 stale-pose 和 retry 处理。Guard缺失、过期或 false Guard 会阻止新目标,也能取消正在执行的 DockRobot。
先跑一次
1 | source /opt/ros/jazzy/setup.bash |
需要 Guard 时,以 transient-local 方式发布 /guard/docking_allowed。随后检查 /demo2/tag_state、/demo2/docking_state 和 /diagnostics。
这只是仿真
- 可以复现 staging、Tag 确认、Guard、DockRobot、取消、状态诊断和多种拒绝路径。
SimpleChargingDock用距离行为表示停靠成功,不表示真实充电接触。- 没有包括物理接点、电池电流、底盘制动、传感器噪声、动态障碍物和生产级安全认证。
上真机前,先分别测相机内外参、地面摩擦、停靠误差、传感器失效和独立安全停止。
链接: GitHub 源码、视频与测试