无人机自动驾驶软件系列 E01:OFFBOARD控制以及Gazebo仿真

OFFBOARD 模式,PX4提供的一种飞行控制模式,允许你通过机载电脑控制无人机飞行,在本节课中,我们将在Gazebo7 模拟器环境下通过提供的脚本控制无人机实现例如指点飞行以及转向等功能。

这里是视频教程:https://www.bilibili.com/video/av44348419

我们建议开发者使用镜像来安装 GAAS,这样可以节省很多的时间和精力:

GAAS v0.7 Release 镜像 - x64

无人机可以使用机载电脑,通过OFFBOARD模式进行控制飞行。控制过程主要通过一连串的MAVROS命令来实现,而MAVROS是MAVLink的一层高级封装,从而免去了我们通过MAVLink控制无人机的繁琐。通过MAVROS,我们可以轻松实现很多功能,例如:起飞,降落,指点飞行,朝向控制等等。

本课中,我们会讲解一下如何通过机载电脑,在模拟器中控制你的无人机飞行。首先,我们先从配置环境开始讲起。

本课在 Ubuntu 16.04 LTS 以及ROS-Kinetic环境下测试通过,我们建议优先选择Ubuntu 16.04 LTS环境,但是如有需要也可以在Ubuntu 18.04 LTS和ROS-Melodic下工作。

在虚拟机环境下(VMWare,VirtualBox等)可能会出现问题,不建议使用虚拟机。

以下是测试版 GAAS 镜像的下载链接,包含了第一课和 SLAM 所需要的配置,以及 GAAS 的软件(以防万一,请使用前更新到最新版)。

因为是测试版,所以可能还会有一些问题,如遇困难欢迎在 GAAS 讨论群联系我们。

Environment Setup 环境配置

我们提供两种方式配置环境,你可以选择逐个安装依赖包,也可以直接使用Docker。

1. 源码编译

若选择使用此种安装方式,请确保网络连接 “稳定”。

基本依赖项

为了使用所有脚本的功能,请先按照如下安装依赖项:

ROS的安装

ROS (Robot Operating System) 是一个在机器人领域应用非常广泛的框架,它包含了很多有用的库以及工具,我们在本课以及接下来的所有课程中都会使用ROS Kinetic,首先,让我们安装ROS Kinetic。

若您在Ubuntu 18.04下安装,则可以使用ROS Melodic版本,只要将以下命令中的所有ros-kinetic更改为ros-melodic即可,例如对于:

sudo apt-get install ros-kinetic-desktop-full

可以将其改为:

sudo apt-get install ros-melodic-desktop-full

安装 ROS Kinetic,请按照如下步骤:

浏览 http://wiki.ros.org/kinetic/Installation/Ubuntu 以便了解更多信息

完成上列步骤后,你可以通过下面的命令来测试是否成功安装:

如果 ROS 安装成功,你可以看到下列结果:

接下来,需要生成catkin工作空间,你所有的基于ROS的库都可以存放在此。

MAVROS

如之前所说,MAVROS是一层MAVLink与ROS通信的封装,旨在方便无人机与机载电脑通信。若要安装,你可以选择通过apt安装,或者从源码编译。请参考如下步骤:

PX4 Firmware

我们会在此课以及接下来的课程中使用 PX4 v1.8.0固件。

若以上步骤通过,此时会弹出Gazebo模拟器窗口,你会看到一架无人机出现在环境中,现在将窗口关闭即可。

修改环境变量,这样每次打开新的终端都可以保持环境变量一致:

打开一个新终端,输入:

在另一个终端,输入:

或者你可以直接输入:

一个如下图所示的窗口会弹出:

Figure 1, Gazebo and PX4 simulation in empty world

在一个新终端,输入

你可以看到:

如果你看到上面的connected为True,那就代表你的Gazebo仿真环境配置成功,同时你的MAVROS通信也成功设置。

运行 Gazebo 时,如果一切正常但出现以上报错信息,该报错信息并不会影响 Gazebo 运行,可以继续进行到下一步。

如果您知道如何解决以上报错,欢迎在 GAAS GitHub 页面提交 PR,帮助我们减少不必要的报错信息。

2. 使用Docker

如果你想直接跳过上面的步骤,可以使用Docker来运行仿真。Docker的使用较为简单,但是需要的资源较多,所以使用Docker的话GUI程序帧率以及分辨率会较低。我们使用VNC作为GUI交互,它的使用很广泛,可以用在包括Macos, Windows以及Android的多种平台上。

建议通过第一种方式配置环境以便获得最优效果。

使用VNC并获取Docker镜像

为了在Docker环境下使用GUI程序,需要在本地环境中安装VNC-viewer。你可以访问下面的网站了解更多信息:

对于Linux系统来说,你可以直接下载下面的二进制文件:

之后:

其他平台的安装很简单,我们在此跳过。VNC-viewer安装后,需要获取Docker镜像到你的本地环境下:

若要使用Docker,打开一个终端并输入:

在使用Docker过程中,视需求需要使用ROOT权限。

在另一个终端:

你可以看到一个如下窗口弹出:

Figure 2, VNC viewer window

输入如下地址:

回车后,你可以看到一个LXDE桌面的Ubuntu系统窗口:

Figure 3, Docker Container

本课所需要的所有资料都可以在如下文件夹内找到:

最后,每次打开Docker后,使用仿真前,你都需要手动执行下列命令:

仿真环境窗口弹出后,让我们暂时将它关闭。

现在,你可以直接跳到最后的 “控制无人机” 部分了!

OFFBOARD 控制

如果你使用Docker的话,可以直接跳到 “控制无人机” 部分。

首先,将仿真需要的文件获取到本地环境,文件包括无人机模型,世界模型以及其他一些你会用到的内容。此课程中我们将只关注基于python的MAVROS例子,如果你感兴趣的话可以试试GAAS提供的其他功能。

你可以看到四个文件夹:

  • demo: 本课用到的所有内容都可以在此文件夹内找到;

  • hardware: 制作无人机所需的硬件资料可以在此文件夹找到;

  • simulator: 包含仿真用到的模型等;

  • software: 包含了例如ObstacleMap, SLAM,Local 以及Global path planner等内容。

你可以在各个文件夹内的README.md 中了解更多信息。

现在,将模型文件所在地址更新到环境变量中:

将模型以及配置文件拷贝到对应文件夹中:

控制无人机

如果你使用的是Docker,执行:

若make成功,Gazebo仿真窗口成功弹出,无人机出现在环境中,此时可以暂时将弹出的Gazebo窗口关闭。

接下来,无论你通过哪种方式配置的环境,都需要用同样的命令启动仿真环境,打开一个终端,输入:

同时,不要忘记检查MAVROS连接情况:

如果Gazebo仿真环境成功启动且MAVROS连接成功,在一个新的终端,改变路径到GAAS下的DEMO文件夹,执行python脚本:

你可以看到一个无人机逐渐起飞到3米高并悬停在此。在另外一个终端中:

你可以看到无人机按照下面的顺序飞行:

  1. 向右飞一米;

  2. 逆时针旋转90度;

  3. 降落。

或者你可以打开一个新的终端,使用提供的API来控制无人机:

你可以看到无人机按照正方形运行,升高之后降落。你可能已经发现无人机运动时总是按照”当前“位置作为坐标系,此时运动的参考系为BODY_OFFSET_ENU 或 FLU(Forward,Left,Up),每次运动命令总会控制无人机按照机身坐标系进行运动。move 方法中的第一个参数控制无人机向前飞行(注意,向前飞行不等于向北飞行),第二个参数控制无人机向左飞行,第三个参数向上飞行。飞机飞行的默认参考系为BODY_OFFSET_ENU。如果你想使用LOCAL_ENU坐标系,此时运动按照的参考系是对于“起飞”时的位置,你可以在move方法中添加第四个参数,如下:

Figure 4, FLU body frame

接下来,你可以在模拟器中试试其他提供的API。

下一课,我们会讲解一下如果在模拟器环境中通过OFFBOARD模式制作一个3D模型。

阅读资料

若有兴趣,请阅读如下资料:

  1. General ROS introduction: http://wiki.ros.org/

Last updated

Was this helpful?