Build Your Own Autonomous Drone: Software Realization
Build Your Own Autonomous Drone: Hardware Implementation
Case Study
Handy Tools

在 AirSim 中模拟无人机对客机巡检

众所周知,航空飞行的安全极其重要,所以检修人员需要定期对客机进行检修。因为体积问题,人工操作很难看到飞机的上半部分,所以每次检修都会动用大量的人力物力去一点点看。从 17 年开始,空客就率先开始利用无人机对载人的客机进行检修,这样更加方便快速。无人机可以拍摄大量的客机照片,检修人员只要在电脑上就可以分析飞机的状态。

传统无人机也有自己的问题:一是无人机还是需要人去操作的,而人工操作无法保证安全性。毕竟手一抖无人机可能就撞到飞机了,很多无人机飞手是不愿意飞这个场景的。而客机对检修的要求又非常严格,每次最好都可以在同一个位置拍照。但人工操作无法保证这种精度。其次是传统无人机都极其依赖 GPS 做定位,而机库里是没有 GPS 的。所以无人机也很容易「炸机」。这两个问题导致了无人机巡检真飞机迟迟不能普及。

这就是为什么我们希望利用 GAAS 为有志于做自主飞行无人机的朋友提供无人机巡检真飞机的案例,让无人机在完全不需要 GPS 和飞手的操作下,进行飞机的巡检。

什么是 AirSim?

AirSim 是一个由微软开发的开源的仿真平台,基于 Unreal 引擎。相对于 Gazebo 来说,AirSim 的仿真环境更加真实。AirSim 支持基于PX4的 Hardware-In-The-Loop (HITL) 和 Software-In-The-Loop (SITL)。

像所有 Unreal 项目一样,AirSim 的项目也可以被打包出来,但是我不建议你在 Ubuntu 环境下这么做,因为在 Ubuntu 环境下 AirSim 使用 PX4 SITL 可能会出现崩溃的情况。我们也正在解决这个问题。

另外,Unreal 需要的硬盘空间很大(大约 69 GB),需要的硬件配置也很高,所以如果你不想在自己的电脑上安装一个如此巨大的软件,也可以使用 Gazebo ,可以省却很多适配的烦恼。

安装 Unreal 和 AirSim

Unreal 和 AirSim 都支持多个平台,你可以使用 BashOnWindows。但是由于 PX4 只支持 Linux 平台,为了方便使用 GAAS,我们还是使用 Linux 版 Unreal。

  1. 注册 Epic Games 账号,并关联自己的 GitHub 账号。

  2. 编译 Unreal 4.22 ,可能会需要约 69 GB 的硬盘空间。

    git clone -b 4.22 https://github.com/EpicGames/UnrealEngine.git
    cd UnrealEngine
    ./Setup.sh
    ./GenerateProjectFiles.sh
    make

    注意:AirSim 官方支持 Unreal 4.18,但是在本示例中所用到的 Unreal 布景只支持 Unreal 4.22 版本,而经过测试 AirSim 在 Unreal 4.22 版本下也可以使用,故我们选择了 Unreal 4.22 版本。

  3. Clone 并编译 AirSim:

    git clone https://github.com/Microsoft/AirSim.git
    cd AirSim
    ./setup.sh
    ./build.sh
  4. 在 Linux 下进入 Unreal 的目录,并运行 UnrealEngine/Engine/Binaries/Linux/UE4Editor

  5. 此时进入了选择项目的界面,在 AirSim 目录下的 Unreal/Environments 目录中,有一个名字叫 Blocks 预设的项目,但是在打开该项目之前请先把 AirSim/Unreal/Enviroments/Plugins 复制到 AirSim/Unreal/Enviroments/Blocks 中,然后在 Unreal 中打开项目。

    Blocks Project

How to launch PX4 SITL

在 AirSim 中模拟 PX4 控制无人机之前,我们应该首先安装并运行 PX4 SITL 仿真,通过此仿真,你可以使用 PX4 作为飞控来控制 AirSim 中的无人机。

  1. 首先确保你已经成功安装了 PX4 的所需依赖。参考 GAAS 的教程

  2. 获取 PX4 Firmware。注意:AirSim 需要 Firmware v1.8.2 版本。

    mkdir -p PX4
    cd PX4
    git clone https://github.com/PX4/Firmware.git
    cd Firmware
    git checkout v1.8.2
  3. 编译并运行 SITL 模式:

    make posix_sitl_default none_iris

    Start PX4 SITL

    你可以编辑 (Firmware_Path)/posix-configs/SITL/init/ekf2/iris 文件来设置飞机参数

  4. 修改 AirSim 设置,在 Linux 下,设置文件路径为 ~/Documents/AirSim/settings.json

    {
    "SettingsVersion": 1.2,
    "SimMode": "Multirotor",
    "Vehicles": {
    "PX4": {
    "VehicleType": "PX4Multirotor",
    "UseSerial": false
    }
    }
    }
  5. 在 Unreal 中点击 Play 按键,我们就打开了模拟器,你现在应该可以在地上看见一个无人机了。

F1 键可以查看快捷键,你也可以打开 FPS 显示随时查看 FPS。

6. 下载 QGroundControl,并修改监听端口。

Common Link Common Link UDP

7. 这时便可以通过 QGC 来简单控制无人机了。

使用 GAAS 控制无人机

  1. GAAS 通过 MAVROS 与 PX4 通信,所以如果想通过 GAAS 控制无人机,我们需要先启动 MAVROS 。安装 MAVROS 请参考 GAAS 教程1 。推荐使用第二种方法安装 MAVROS。

  2. PX4 通过 UDP 通信,所以我们需要修改以下 MAVROS 的 fcu_url 参数,首先新建一个 launch 文件。

    cd (MAVROS_PATH)/mavros/launch
    cp px4.launch px4_airsim.launch
  3. 修改第 5 行 <arg name="fcu_url" default="/dev/ttyACM0:57600" /> 的默认参数为<arg name="fcu_url" default="udp://:14540@localhost:14557" />

  4. 运行 MAVROS:

    roslaunch mavros px4_airsim.launch

这时我们使用 GAAS教程一 的 demo 便可以控制无人机。

cd (GAAS_PATH)/demo/tutorial_1/1_px4_mavros_offboard_controller
python px4_mavros_run.py

在 AirSim 中模拟无人机对客机的巡检

以往客机在机库中的巡检需要动用大量的人力物力,因为客机非常大,而且巡检要求非常严格,对于客机的各个部位都有拍摄需求。无人机可以帮助人们更方便的对客机进行巡检,但是巡检一般要在机库中进行,所以我们无法使用 GPS 传感器。

  1. 首先,搭建机库布景,推荐从 Epic Games 上直接购买资源(购买和下载必须在 Windows 上的 Epic Games 客户端进行)。然后对布景进行相应的修改,可以参考 Unreal 的文档。由于版权问题,我们不能直接放出 Project 文件,如果你在搭建 Unreal Project 的时候遇到了问题,可以随时提 issue 或者在微信群里提问。

  2. 关闭 GPS 。首先,先将 PX4 SITL iris 中的 EKF2_AID_MASK 参数改为 vision position fusion,对应值为 8。编辑 (Firmware_Path)/posix-configs/SITL/init/ekf2/iris 文件,将其中的 EKF2_AID_MASK 值改为 8,默认为 1 。

  3. 设置 AirSim 无人机参数,加入双目摄像头。我们在 GAAS 中提供了飞机的配置文件。

    git pull origin master
    cp (GAAS_PATH)/simulator/AirSim/settings.json ~/Documents/AirSim/

    在这个配置文件中,GPS 的 Enable 选项已经被设置成 false,并且加入了双目摄像头。

  4. 在完成前期的设置之后,开启 PX4 SITL 并且启动 MAVROS 之后,我们可以点击 Play 来运行模拟器了,但是当前由于没有 GPS 你是不能起飞的,接下来我们需要开启 SLAM 。

  5. 我们在配置文件中设置了一组双目摄像头,基线为 12 cm 与 GAAS SLAM 默认设置相同,在运行 SLAM 之前,我们需要将模拟器中的摄像头发布到 ROS 中。首先安装 AirSim 的 Python 库,然后在 GAAS 的 simulator/airsim 目录中,运行 drone_image_ros.py

    bash

    sudo pip install airSim cd (GAAS_PATH)/simulator/airsim python drone_image_ros.py

  6. 最后,参考 GAAS 教程三,运行 SLAM 后,你就可以使用 AirSim 来模拟飞机的巡检了。

Airplane Fly

注意:当你使用 SLAM 时,请进入 Unreal 的 Edit >> Editor Preference 中把 Use Less CPU when in Background 选项关闭。不然的话当 Unreal 处在后台运行的时候,会影响帧率。