使用 ArduCopter、ROS 和 Aruco 电路板进行室内自主飞行检测

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

./_images/ros-aruco-board.png

系统使用 ROS 的所有任务。Raspberry Pi 摄像头的图像由以下设备采集 rastpicam_节点的修正版来计算姿势估计值。 aruco_gridboard 并将相关信息发送给飞行控制器。 马夫罗斯.所有这些 ROS 软件包,以及我们稍后将看到的其他软件包,都可以在 Raspberry Pi 3 上运行。

ROS 节点 raspicam_node 发布 camera/image 和 camera/camera_info 主题,节点 aruco_gridboard 订阅这些主题并向 mavros/vision_pose/pose 主题发布 camera_pose 消息,mavros 将 ROS 消息转换为 MAVLink 消息并发送给飞行控制器。

在发送 SET_GPS_GLOBAL_ORIGIN 和 SET_HOME_POSITION 消息时,会同时发送一个 脚本 在开始使用系统之前。

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

系统组件

  • 一架小型四旋翼飞行器(160 毫米),配备革命飞行控制器和 ArduCopter 3.7-dev 以及以下相关参数:

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 的控制) VISO_TYPE 0
  • 四旋翼飞行器上有一个 Raspberry Pi 3(通过串行端口与飞行控制器连接)和一个 Raspberry Pi 摄像头

  • Raspberry Pi 上的 ROS Kinetic 包含 raspicam_node、aruco_gridboard 和 mavros 软件包。

复制系统的说明

四旋翼飞行器上的 Raspberry Pi 3

  • 使用 Ubiquity Robotics 安装 Ubuntu 16.04 和 ROS Kinetic 树莓派图像

  • 编辑 /boot/config.txt,提高 /dev/ttyAMA0 的串行速度(连接波特率为 921600)。

找到#init_uart_clock=3000000 的行,并按以下方式修改: init_uart_clock=16000000 在文件末尾注释 # 允许 UART 和蓝牙 ... 之后的所有行......添加一行: dtoverlay=pi3-disable-bt 保存 重新启动
  • 将串行端口与飞行控制器上的一个遥测端口连接起来

  • 按照以下步骤使用 WiFi 连接电脑 说明 在 Ubiquity Robotics 网站上

  • 编辑 mavros 配置文件 apm_config.yaml,使用 MAVLink 的 SYSTEM_TIME 和 TIMESYNC 消息同步飞行控制器和配套电脑(Raspberry Pi)的时钟,如下所示 维基

  • 按照本手册中的说明校准摄像机。 维基

  • 克隆 aruco_gridboard 在 ~/catkin_ws/src 中

  • 构建所有

cd ~/catkin_ws catkin_make

在台式电脑上

  • 安装 ROS 动力 在 Ubuntu 16.04 上(也许更新的版本也能运行,但没有测试过)

  • 安装 ros-kinetic-joy-teleop (sudo apt install ros-kinetic-joy-teleop),并为您的操纵杆进行配置 - 我们使用操纵杆而非遥控装置,因为使用 2.4GHz 遥控装置会干扰 WiFi 视频流。在 mavros 中有一个罗技 F710 操纵杆的配置文件,而在 aruco_gridboard 软件包中,我们添加了一个 Xbox one 操纵杆的配置文件。

  • 安装 mavros(sudo apt install ros-kinetic-mavros*)

  • 如果您不熟悉 ROS,请按照 教程

  • 编辑 ~/.bashrc,添加以下一行:

export ROS_MASTER_URI="http://ubiquityrobot.local:11311";
  • 创建 Catkin 工作空间(在 Raspberry Pi 上无需创建,因为 Ubiquity Robotics 图像中已包含此功能)

CD $HOME
mkdir -p catkin_ws/src
CD catkin_ws catkin_init_workspace
CD ~/catkin_ws catkin_make

在电脑上,您还必须运行自己选择的 GCS 来配置四旋翼飞行器、查看遥测数据、查看 MAVLink 检查员、设置飞行模式并下达命令。所有这些工作也都可以通过 ROS 消息和服务来完成,但这种方式更为简单。

启动所有 ROS 节点

现在,要启动系统工作所需的所有节点,请在不同的终端(或使用 CTRL+SHIFT+T 在标签页)上执行以下命令(本例中,192.168.10.16 表示 PC,192.168.10.10 表示四旋翼飞行器上的 Raspberry Pi)

标签1

ssh ubuntu@ubiquityrobot
(登录)
ubuntu@ubiquityrobot:~/catkin_ws$ 玫瑰发射 aruco_gridboard 检测_rpicam.launch

标签2

ssh ubuntu@ubiquityrobot
(登录)
ubuntu@ubiquityrobot:~/catkin_ws$ 玫瑰发射 马夫罗斯 apm.launch fcu_url:=/dev/ttyAMA0:921600 gcs_url:=tcp-l://192.168.10.10:2000

选项卡3

ssh ubuntu@ubiquityrobot
(登录)
ubuntu@ubiquityrobot:~/catkin_ws$ 玫瑰 aruco_gridboard set_origin.py (只是  接收 EK2 ...)

标签4

andrea@galileo:~/catkin_ws$ 玫瑰 rqt_reconfigure rqt_reconfigure (对于 设置 照相机 参数  出口)
andrea@galileo:~/catkin_ws$ 玫瑰发射 mavros_extras teleop.launch

标签5

andrea@galileo:~/catkin_ws$ 玫瑰 rviz rviz -d catkin_ws/src/aruco_gridboard/data/aruco_grid.rviz

此时应该可以在 rviz 上看到 /mavros/vision_pose/pose 和 /mavros/local_position/pose,表示为 3 个轴,将四旋翼飞行器连同摄像头一起移向 Aruco Board,应该可以看到两个姿势相互靠近。将 GCS 与四旋翼飞行器连接(tcp 192.168.10.10 2000),应该可以在地图上看到四旋翼飞行器,设置飞行模式并下达指令。

如果最后一点没有问题,那么第一次测试就可以在 Loiter 模式下启动四旋翼飞行器,起飞并用操纵杆在 Aruco 板上悬停,然后降落。

最后一步(目前)是使用其中一个脚本测试全自主飞行,为此请打开另一个术语或选项卡

ssh ubuntu@ubiquityrobot
(登录)
ubuntu@ubiquityrobot:~/catkin_ws$ 玫瑰 aruco_gridboard mavros_control1.py

您应该能看到四旋翼飞行器臂、起飞、沿广场飞行和着陆,如本页开头的视频所示。