利用 ArduCopter、ROS 和 AprilTag 检测器实现室内自主飞行

本维基页面介绍如何建立一个能够实现室内自主飞行的系统。该系统基于一架带有 Raspberry Pi 3 和 USB 摄像头的四旋翼飞行器。摄像头拍摄的图像用于在 Raspberry Pi 上计算姿势估计,并将结果作为 MAVLink 信息发送给飞行控制器。摄像头朝下,地板上有一块这样的 AprilTag 板:

./_images/ros-apriltag-board.png

系统概述

系统使用 ROS 的所有任务。来自 USB 摄像模块usb_cam 节点,姿势估计值的计算公式为 apriltag_ros 节点然后由 vision_too_mavros 节点相关信息将通过 马弗罗斯.所有这些 ROS 软件包都可以在 Raspberry Pi 3 上运行。

"这款" USB 摄像头 节点发布 摄像机/图像摄像机/摄像机信息 主题 priltag_ros 节点会订阅这些主题,并将 camera_pose 消息发布到 mavros/vision_pose/pose 主题、 马夫罗斯 将 ROS 信息转换为 MAVLink 信息并发送给飞行控制器。

信息 set_gps_global_origin 和一个 设置起始位置 在系统准备好运行之前发送。设置 EKF 起始点的两种方法:

  • 使用Mission Planner地面站(右击> 设置 EKF 主页> 设置原点)

  • 用脚本 set_origin.py.

飞行控制器和四旋翼飞行器上的 Raspberry Pi 3 通过串口连接,而 Raspberry Pi 3 和台式电脑则通过 WiFi 连接。台式电脑仅用于配置和可视化目的。 RViz 用于在 ROS 的 PC 上进行可视化。

系统组件

备注

摄像机的安装方向没有硬性限制,只能朝下,但需要进行帧变换,以便根据摄像机的不同方向对齐帧。

软件设置

# 安装 Apriltag 库
CD
git 复制 https://github./四月机器人/杏花.git
CD 杏花
cmake .
苏都 生产 安装

# 安装 Apriltag ROS 封装程序
CD ~/catkin_ws/来源
git 复制 https://github./hoangthien94/priltags2_ros.git
git 复制 https://github./hoangthien94/对马夫罗斯的憧憬.git
CD ../
catkin_make

相机校准

  • 按照 ROS 维基百科 来校准并获取相机的校准文件。

  • 更换 相机信息URL 停止gsoc.launch 文件,其中包含校准文件的正确路径。

准备标签板

  • 您可以打印一份 A3 尺寸标签示例.

  • 根据打印机的设置,标签的实际尺寸和位置可能会略有不同。测量标签的真实尺寸并修改 布局文件 因此。

提示

预生成的标签图像可在以下网址找到 priltag-imgs.您还可以使用 apiltag-生成.

配置 ArduPilot

用地面站(即 Mission Planner)连接飞行控制器,并检查以下参数是否设置如下:

ahrs_ekf_type 2 brd_rtc_types 2 ekf2_enable 1 ekf3_enable 0 ek2_gps_type 3 ek2_posne_m_nse 0.1 ek2_veld_m_nse 0.1 ek2_velne_m_nse 0.1 EK2_EXTNAV_DELAY 80 GPS_TYPE 0 COMPASS_USE 0 COMPASS_USE2 0 COMPASS_USE3 0 SERIAL1_BAUD 921(用于连接 Raspberry Pi 的串行端口) SERIAL1_PROTOCOL 2 SYSID_MYGCS 1(接受来自 mavros 的控制)。

复制系统的说明

1.运行所有节点

首先,让我们分别测试每个 ROS 节点,并解决出现的任何问题:

  • USB 摄像头 节点:

    • 在 RPi 上 玫瑰发射 USB 摄像头 usb_cam-test.launch

    • 如果 RPi 没有连接到显示器,则可在装有 Linux Ubuntu 的电脑上查看原始图像: 出口 ROS_MATER_URI=http://<rpi-ip>:11311 &&; rqt_image_view

    • 确认相机是否有图像输出。

  • 马弗罗斯 节点:

    • 在 RPi 上 玫瑰发射 马夫罗斯 apm.launch fcu_url:=<tty-port>:<baud-rate>;

    • 确认 MAVROS 运行正常。例如 游标 回响 /mavros/state 应显示 FCU 已 "连接"。

  • Apriltag 网站对马夫罗斯的憧憬 节点:

    • 确保 相机信息URL 指向相机校准文件的正确路径。

    • 在 RPi 上 玫瑰发射 对马夫罗斯的憧憬 apriltags_too_mavros.launch

    • 打开 RViz 并查看 /tf/mavros/vision_pose/pose 主题。与 /tf然后,您就可以在标签帧中看到摄像机的姿态,Z 轴朝下。如果摄像机的 x 轴指向右侧,那么 /mavros/vision_pose/pose 将与主体帧对齐。如果摄像机的 X 轴指向不同的方向,则需要修改 对马夫罗斯的憧憬 因此。

2.接地测试

如果每个节点都能成功运行,就可以进行地面测试:

  • 在 RPi 上:如上所述启动所有节点。查看主题 /mavros/vision_pose/pose 上的 RViz。移动载具,看看姿势是否会随着移动而改变。

  • 设置 EKF 主页 通过发送 MAVLink 信息 set_gps_global_origin设置起始位置.

    • 使用Mission Planner地面站:右键单击地图上的任意一点>; 设置 首页 这里 >; 设置 EKF 起源 这里.

      ../_images/zed-set-ekf-origin.png
    • 使用代码:您可以使用此 Python 脚本 set_origin.py.

      • 安装 pymavlink:按照说明操作 这里.

      • 运行脚本: 玫瑰 对马夫罗斯的憧憬 set_origin.py.

  • 设置好 EKF 的原点后,地图上会出现一个四旋翼飞行器图标。

  • 举起飞行器,在保持标签板在摄像头视野内的情况下左右移动,并在Mission Planner地面站上观察飞行器的轨迹。

如果最后一步成功,就可以进行飞行测试。

3.飞行测试

  • 在稳定状态下起飞,检查四旋翼飞行器是否稳定。

  • 在摄像机可以很好地看到标签的高度,切换到 Alt-Hold,调整水平位置。观察 RViz 和Mission Planner地面站上的反馈,查看是否检测到标签。

  • 查看Mission Planner地面站地图,确认系统仍在跟踪。

  • 切换到 "闲置 "状态,但随时准备在出现意外时切换回 "Alt-保持 "状态。

否则,四旋翼飞行器应在标签上方稳定悬停。

备注

EKF 要接受外部导航数据,数据速率必须高于某个阈值(通常为 10Hz)。如果您使用的也是 RPi,首先我们需要调整与计算成本相关的参数,以达到可接受的检测率。 标签这将提高检测率而降低准确率,或提高 标签线程如果您没有运行任何其他程序,并且有多余的 CPU。相关调整参数位于文件 settings.yaml.