具有四月标签板检测的 ROS

具有ArduCopter,ROS和AprilTag检测功能的室内自主飞行

本维基页面描述了如何设置能够实现室内自主飞行的系统。该系统基于带有Raspberry Pi 3和USB摄像头的四轴飞行器。来自相机的图像用于计算树莓派上的姿势估计,结果作为MAVLink消息发送到飞行控制器。 相机是向下看的,在地板上有一个AprilTag板,如下所示:

../_images/ros-apriltag-board.png

系统概述

系统使用 ROS 来完成它必须执行的所有任务。来自USB相机模块的图像由usb_cam节点捕获,apriltag_ros节点计算姿势估计,然后由vision_to_mavros节点处理,并使用MAVROS将相关消息发送到飞行控制器。所有这些ROS软件包都在Raspberry Pi 3上运行。

节点发布和主题,节点订阅这些主题并向主题发布camera_pose消息,将ROS消息转换为MAVLink消息并发送到飞控。usb_camcamera/imagecamera/camera_infoapriltag_rosmavros/vision_pose/posemavros

消息SET_GPS_GLOBAL_ORIGINSET_HOME_POSITION在系统准备好运行之前发送。将 EKF 设为主页的两种方法:

  • 使用任务规划器(右键单击>设置 EKF 主页>设置原点)

  • 与脚本set_origin.py

四轴飞行器上的飞行控制器和树莓派 3 通过串行端口连接,而树莓派 3 和台式电脑通过 WiFi 连接。台式 PC 仅用于配置和可视化目的。RViz用于ROS中的PC可视化。

系统组件

注意

除了朝下之外,相机的安装方向没有硬性限制,但需要进行帧转换以对齐帧以适应不同的相机方向。

软件设置

# Install Apriltag library
cd
git clone https://github.com/AprilRobotics/apriltag.git
cd apriltag
cmake .
sudo make install

# Install Apriltag ROS wrapper
cd ~/catkin_ws/src
git clone https://github.com/hoangthien94/apriltags2_ros.git
git clone https://github.com/hoangthien94/vision_to_mavros.git
cd ../
catkin_make

相机校准

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

  • gsoc.launch 文件中的 替换为校准文件的正确路径。camera_info_url param

准备标签板

  • 您可以打印出示例 A3 尺寸标签

  • 根据您的打印机设置,标签的实际大小和位置可能略有不同。测量标签的真实尺寸并相应地修改布局文件

提示

预生成的标签图像可以在apriltag-imgs上找到。您还可以使用四月标签生成来设计自己的标签。

配置 ArduPilot

使用地面站(即任务规划器)连接到飞行控制器,并检查是否设置了如下所示的参数:

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   (the serial port used to connect to Raspberry Pi)
SERIAL1_PROTOCOL 2
SYSID_MYGCS 1   (to accept control from mavros)

重现系统的说明

1. 运行所有节点

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

  • usb_cam节点:

    • 在 RPi 上:roslaunch usb_cam usb_cam-test.launch

    • 如果 RPi 未连接到显示器,请在使用 Linux Ubuntu 的 PC 上查看原始图像:export ROS_MATER_URI=http://<rpi-ip>:11311 && rqt_image_view

    • 验证是否有来自相机的图像。

  • MAVROS节点:

    • 在 RPi 上:roslaunch mavros apm.launch fcu_url:=<tty-port>:<baud-rate>

    • 验证 MAVROS 是否运行正常。例如,应显示 FCU 是“已连接的”。rostopic echo /mavros/state

  • Apriltag node和节点:vision_to_mavros

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

    • 在 RPi 上:roslaunch vision_to_mavros apriltags_to_mavros.launch

    • 打开 RViz 并查看和主题。使用 ,您应该会看到相机在标签框中摆姿势,z 轴朝下。如果您的相机的 x 轴指向右侧,则将与机身框架对齐。如果相机的 x 轴指向不同的方向,则需要相应地修改 的参数。/tf/mavros/vision_pose/pose/tf/mavros/vision_pose/posevision_to_mavros

2. 地面测试

如果每个节点都能成功运行,则可以执行接地测试:

  • 在 RPi 上:如上所述启动所有节点。查看有关 RViz 的主题。移动车辆,看看姿势是否根据运动而变化。/mavros/vision_pose/pose

  • 通过SET_GPS_GLOBAL_ORIGINSET_HOME_POSITION发送 MAVLink 消息将 EKF 设置为主页

    • 使用任务规划器:右键单击地图上的任意点> >。Set Home HereSet EKF Origin Here

      ../_images/zed-set-ekf-origin.png

    • 使用代码:您可以使用此 Python 脚本set_origin.py

      • 安装 :按照此处的说明进行操作。pymavlink

      • 运行脚本:。rosrun vision_to_mavros set_origin.py

  • 设置EKF的原点后,地图上将出现一个四轴飞行器图标。

  • 举起载具,四处移动,同时将标签板保持在摄像机的视野中,并在任务规划器上观察载具的轨迹。

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

3. 飞行测试

  • 在稳定状态下起飞以检查四轴飞行器是否稳定。

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

  • 查看任务规划器地图,确认系统仍在跟踪。

  • 切换到 Loiter,但随时准备在出现任何问题时切换回 Alt-Hold。

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

注意

对于EKF接受的外部导航数据,数据速率需要高于某个阈值(通常为10Hz)。如果您也使用 RPi,首先我们需要调整与计算成本相关的参数以实现可接受的检测率,要么通过增加 ,这将以降低准确性为代价提高检测率,要么增加,如果您没有运行任何其他东西并且有一些 CPU 备用。相关的优化参数位于文件 settings.yaml 中。tag_decimatetag_threads

一些有用的链接

Last updated