RealSense AprilTag ROS2 识别与降落前置验证手册
卓博泰智能科技 · RGB/Depth → apriltag_ros → 精准降落前置验证
RealSense
AprilTag 36h11
ROS2 Humble
降落前置验证
通过 验证通过
引言
本文记录从 RealSense RGB/Depth 话题到 AprilTag 检测成功的完整过程,并说明这些数据如何作为后续无人机精确降落的前置输入。
版本:V1.0 · 日期:2026-09-19
图 1 AprilTag 36h11 - ID 0 测试标记
1. 使用场景
该功能用于在无人机机载 Jetson 上识别 AprilTag 降落标记。RealSense 提供 RGB 图像与深度信息,AprilTag 检测器输出标签 ID、中心像素位置、四角位置与几何信息,后续可进一步结合 MAVROS 生成降落控制输入。
RealSense RGB: 用于识别 AprilTag
RealSense Depth: 用于距离或高度辅助判断
apriltag_ros: 用于识别 Tag ID 与图像位置
MAVROS: 后续用于将目标偏差转换为飞控控制指令
RealSense Depth: 用于距离或高度辅助判断
apriltag_ros: 用于识别 Tag ID 与图像位置
MAVROS: 后续用于将目标偏差转换为飞控控制指令
2. RealSense ROS2 环境检查
本项目已经确认 RealSense ROS2 驱动正常工作。
rs-enumerate-devices --version
ros2 pkg list | grep realsense
ros2 topic list | grep camera
已确认的主要图像话题:
/camera/camera/color/image_raw
/camera/camera/color/camera_info
/camera/camera/depth/image_rect_raw
/camera/camera/depth/camera_info
/camera/camera/color/image_raw
/camera/camera/color/camera_info
/camera/camera/depth/image_rect_raw
/camera/camera/depth/camera_info
通过 RGB 实测约 29-30 Hz
通过 Depth 实测约 28-30 Hz
通过 Depth 实测约 28-30 Hz
3. AprilTag ROS2 软件检查
ros2 pkg list | grep apriltag
ros2 pkg executables apriltag_ros
正常结果应包含:
apriltag_msgs
apriltag_ros
apriltag_ros apriltag_node
apriltag_msgs
apriltag_ros
apriltag_ros apriltag_node
警告 4. 原始启动文件为什么不能直接用于 RealSense
系统自带的
camera_36h11.launch.yml 会启动自己的相机节点和 image_proc,并默认订阅固定话题。RealSense 已经有自己的 ROS2 相机节点,因此直接使用该 launch 文件时,AprilTag 节点会订阅错误的图像路径。
错误订阅示例:
/camera/image_rect
/camera/camera/camera_info
/camera/image_rect
/camera/camera/camera_info
RealSense 实际话题为:
/camera/camera/color/image_raw
/camera/camera/color/camera_info
/camera/camera/color/image_raw
/camera/camera/color/camera_info
因此,本项目采用直接启动
apriltag_node 并进行 ROS2 Remap 的方式。 5. 正确启动 AprilTag 检测器
首先创建一个只检测 ID 0 的 tag36h11 配置文件:
mkdir -p ~/drobotics_ws/config
cat > ~/drobotics_ws/config/apriltag_36h11_id0.yaml <<'EOF'
/**:
ros__parameters:
image_transport: raw
family: 36h11
size: 0.10
max_hamming: 0
qos_profile: default
detector:
threads: 2
decimate: 1.0
blur: 0.0
refine: True
sharpening: 0.25
debug: False
pose_estimation_method: "pnp"
tag:
ids: [0]
frames: [landing_tag]
sizes: [0.10]
EOF
然后直接启动检测器,并把输入 Remap 到 RealSense RGB:
source /opt/ros/humble/setup.bash
ros2 run apriltag_ros apriltag_node \
--ros-args \
--params-file ~/drobotics_ws/config/apriltag_36h11_id0.yaml \
-r image_rect:=/camera/camera/color/image_raw \
-r camera_info:=/camera/camera/color/camera_info
通过 6. 确认订阅是否正确
ros2 node info /apriltag/apriltag
正常情况下 Subscribers 应包含:
/camera/camera/color/image_raw
/camera/camera/color/camera_info
/camera/camera/color/image_raw
/camera/camera/color/camera_info
检测结果话题:
/apriltag/detections
/apriltag/detections
7. Bench Test:手机屏幕显示 AprilTag
没有打印标记时,可以把 Tag 36h11 ID 0 图片放到手机屏幕上做室内 Bench Test。
• 保持完整黑白 Tag 与白色边缘可见
• 手机屏幕尽量正对 RealSense
• 建议距离约 0.5-1.5 m
• 提高屏幕亮度并尽量减少反光
• Bench Test 只用于确认识别链路,不建议作为最终飞行降落标记
• 手机屏幕尽量正对 RealSense
• 建议距离约 0.5-1.5 m
• 提高屏幕亮度并尽量减少反光
• Bench Test 只用于确认识别链路,不建议作为最终飞行降落标记

图 2 本次测试使用的 Tag 36h11 ID 0
8. 查看检测结果
未检测到 Tag 时,会看到:
detections: []
检测成功后,本项目实际输出包括:
family: tag36h11
id: 0
hamming: 0
decision_margin: 196.0
centre:
x: 383.2
y: 610.1
corners:...
homography:...
字段说明:
id: 标签编号,本次为 0
hamming: 纠错位数,0 表示识别结果干净
decision_margin: 识别置信质量指标,越高通常越可靠
centre: 标签中心在 RGB 图像中的像素坐标
corners: 四个角的像素坐标
homography: 平面投影变换信息,可用于几何计算
id: 标签编号,本次为 0
hamming: 纠错位数,0 表示识别结果干净
decision_margin: 识别置信质量指标,越高通常越可靠
centre: 标签中心在 RGB 图像中的像素坐标
corners: 四个角的像素坐标
homography: 平面投影变换信息,可用于几何计算
9. 为什么 centre 对降落很重要
当前 RealSense RGB 分辨率为 1280x720,因此图像中心约为:
Image Center: X = 640, Y = 360
Image Center: X = 640, Y = 360
AprilTag 检测结果会输出 Tag 中心,例如:
Tag Center: X = 405.9, Y = 527.0
Tag Center: X = 405.9, Y = 527.0
则可计算图像偏差:
Error X = Tag Center X - 640
Error Y = Tag Center Y - 360
Error X = Tag Center X - 640
Error Y = Tag Center Y - 360
这些误差就是后续降落控制的基础输入。无人机可以根据 Error X / Error Y 逐步调整水平位置,使标签中心靠近图像中心。
10. 与 RealSense Depth 的关系
AprilTag 提供的是图像中的目标位置,而 RealSense Depth 可以提供该目标附近的距离信息。
AprilTag center
↓
RGB pixel position
↓
Depth ROI / aligned depth
↓
distance / height estimate
警告 后续建议使用 AprilTag 中心附近的一个小 ROI 读取 Depth,而不是单个像素,以避免无效深度值导致跳变。
11. 后续降落控制建议
建议按照以下阶段逐步开发,不要直接从识别跳到自动飞行:
| 阶段 | 内容 |
|---|---|
| 1 | AprilTag 稳定检测 |
| 2 | 计算 Tag 中心与图像中心偏差 |
| 3 | 融合 RealSense Depth / 高度数据 |
| 4 | 地面静态测试偏差输出 |
| 5 | 桨叶拆除条件下测试 MAVROS 控制指令 |
| 6 | 低高度悬停测试水平修正 |
| 7 | 小速度下降与自动降落测试 |
12. 实际飞行标记建议
手机屏幕适合 Bench Test,但正式降落建议使用打印并固定在平整板材上的 AprilTag。
通过 使用哑光打印,避免高反光
通过 标记必须平整,不要弯曲
通过 Tag 实际边长应准确写入 YAML 中的 size/sizes 参数
通过 降落高度较高时应使用更大的标记,例如 20-30 cm 或更大
通过 保证四周留有明显白色边界
通过 使用哑光打印,避免高反光
通过 标记必须平整,不要弯曲
通过 Tag 实际边长应准确写入 YAML 中的 size/sizes 参数
通过 降落高度较高时应使用更大的标记,例如 20-30 cm 或更大
通过 保证四周留有明显白色边界
通过 13. 本次测试已验证项目
| 项目 | 状态 |
|---|---|
| RealSense RGB ROS2 Topic | 通过 通过 |
| RealSense Depth ROS2 Topic | 通过 通过 |
| apriltag_ros 安装 | 通过 通过 |
| AprilTag 节点订阅 RealSense RGB | 通过 通过 |
| Tag36h11 ID 0 检测 | 通过 通过 |
| Hamming = 0 | 通过 通过 |
| Tag Center 输出 | 通过 通过 |
| Corners / Homography 输出 | 通过 通过 |
| 自动降落控制 | ⏳ 待后续开发 |
14. 结论
当前系统已经完成 RealSense RGB → apriltag_ros → ROS2 detections 的完整识别链路,并成功识别 Tag 36h11 ID 0。
系统能够稳定输出 Tag ID、中心像素位置、四角位置和几何信息,可作为后续无人机精准降落算法的视觉输入基础。
下一阶段建议优先完成 Tag 中心误差计算 与 Depth 融合,再进入 MAVROS 控制测试。
平台:Jetson · Ubuntu 22.04 · ROS2 Humble · RealSense · apriltag_ros
(c) 卓博泰智能科技 · RealSense AprilTag ROS2 识别与降落前置验证手册
(c) 卓博泰智能科技 · RealSense AprilTag ROS2 识别与降落前置验证手册