在 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 中打开项目。

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

    你可以编辑 (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,并修改监听端口。

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. 设置 AirSim 无人机参数,加入双目摄像头。我们在 GAAS 中提供了飞机的配置文件。

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

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

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

  3. 我们在配置文件中设置了一组双目摄像头,基线为 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

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

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

Last updated