项目说明

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

Gazebo 中的 AprilTag 视觉停靠演示
仿真平台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 bridgeNav2 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
2
3
4
5
source /opt/ros/jazzy/setup.bash
colcon build --symlink-install
source install/setup.bash
ros2 launch demo2_apriltag_docking demo.launch.py headless:=true rviz:=false
ros2 service call /demo2/start_docking std_srvs/srv/Trigger "{}"

需要 Guard 时,以 transient-local 方式发布 /guard/docking_allowed。随后检查 /demo2/tag_state/demo2/docking_state/diagnostics

这只是仿真

  • 可以复现 staging、Tag 确认、Guard、DockRobot、取消、状态诊断和多种拒绝路径。
  • SimpleChargingDock 用距离行为表示停靠成功,不表示真实充电接触。
  • 没有包括物理接点、电池电流、底盘制动、传感器噪声、动态障碍物和生产级安全认证。

上真机前,先分别测相机内外参、地面摩擦、停靠误差、传感器失效和独立安全停止。

链接: GitHub 源码、视频与测试