利用 ArduCopter、ROS 和 AprilTag 检测器实现室内自主飞行¶
本维基页面介绍如何建立一个能够实现室内自主飞行的系统。该系统基于一架带有 Raspberry Pi 3 和 USB 摄像头的四旋翼飞行器。摄像头拍摄的图像用于在 Raspberry Pi 上计算姿势估计,并将结果作为 MAVLink 信息发送给飞行控制器。摄像头朝下,地板上有一块这样的 AprilTag 板:
系统概述¶
系统使用 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 上进行可视化。
系统组件¶
小型四旋翼飞行器配备 Pixhack (飞行)控制器, CUAV PX4FLOW, TeraRanger One.有了这样的设置,您就可以根据维基实现 使用 PX4FLOW 进行非 GPS 飞行.
树莓派 3 B 型 使用 16GB micro SD 卡运行 Ubuntu Mate 16.04连接到 USB 摄像头 面向地面,摄像机的 x 轴在右侧。
备注
摄像机的安装方向没有硬性限制,只能朝下,但需要进行帧变换,以便根据摄像机的不同方向对齐帧。
软件设置¶
为相机安装 ROS 驱动程序:
用于 USB 摄像机:
苏都 apt-get 安装 ROS-KINETECH-USB-CAM
对于 RPi 摄像头模块:您可以按照以下步骤操作 本说明 以启用摄像机,然后安装 rastpicam_节点.
安装 Apriltag 图书馆, Apriltag ROS 包装器 和 对马夫罗斯的憧憬 打包。
# 安装 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 文件,其中包含校准文件的正确路径。
配置 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 起源 这里
.使用代码:您可以使用此 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.