在 AirSim 中模拟无人机对客机巡检
Last updated
Last updated
众所周知,航空飞行的安全极其重要,所以检修人员需要定期对客机进行检修。因为体积问题,人工操作很难看到飞机的上半部分,所以每次检修都会动用大量的人力物力去一点点看。从 17 年开始,空客就率先开始利用无人机对载人的客机进行检修,这样更加方便快速。无人机可以拍摄大量的客机照片,检修人员只要在电脑上就可以分析飞机的状态。
传统无人机也有自己的问题:一是无人机还是需要人去操作的,而人工操作无法保证安全性。毕竟手一抖无人机可能就撞到飞机了,很多无人机飞手是不愿意飞这个场景的。而客机对检修的要求又非常严格,每次最好都可以在同一个位置拍照。但人工操作无法保证这种精度。其次是传统无人机都极其依赖 GPS 做定位,而机库里是没有 GPS 的。所以无人机也很容易「炸机」。这两个问题导致了无人机巡检真飞机迟迟不能普及。
这就是为什么我们希望利用 GAAS 为有志于做自主飞行无人机的朋友提供无人机巡检真飞机的案例,让无人机在完全不需要 GPS 和飞手的操作下,进行飞机的巡检。
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 都支持多个平台,你可以使用 BashOnWindows。但是由于 PX4 只支持 Linux 平台,为了方便使用 GAAS,我们还是使用 Linux 版 Unreal。
注册 Epic Games 账号,并关联自己的 GitHub 账号。
编译 Unreal 4.22 ,可能会需要约 69 GB 的硬盘空间。
注意:AirSim 官方支持 Unreal 4.18,但是在本示例中所用到的 Unreal 布景只支持 Unreal 4.22 版本,而经过测试 AirSim 在 Unreal 4.22 版本下也可以使用,故我们选择了 Unreal 4.22 版本。
Clone 并编译 AirSim:
在 Linux 下进入 Unreal 的目录,并运行 UnrealEngine/Engine/Binaries/Linux/UE4Editor
。
此时进入了选择项目的界面,在 AirSim 目录下的 Unreal/Environments
目录中,有一个名字叫 Blocks
预设的项目,但是在打开该项目之前请先把 AirSim/Unreal/Enviroments/Plugins
复制到 AirSim/Unreal/Enviroments/Blocks
中,然后在 Unreal 中打开项目。
在 AirSim 中模拟 PX4 控制无人机之前,我们应该首先安装并运行 PX4 SITL 仿真,通过此仿真,你可以使用 PX4 作为飞控来控制 AirSim 中的无人机。
首先确保你已经成功安装了 PX4 的所需依赖。参考 GAAS 的教程。
获取 PX4 Firmware。注意:AirSim 需要 Firmware v1.8.2 版本。
编译并运行 SITL 模式:
你可以编辑
(Firmware_Path)/posix-configs/SITL/init/ekf2/iris
文件来设置飞机参数
修改 AirSim 设置,在 Linux 下,设置文件路径为 ~/Documents/AirSim/settings.json
。
在 Unreal 中点击 Play 按键,我们就打开了模拟器,你现在应该可以在地上看见一个无人机了。
按
F1
键可以查看快捷键,你也可以打开 FPS 显示随时查看 FPS。
6. 下载 QGroundControl,并修改监听端口。
7. 这时便可以通过 QGC 来简单控制无人机了。
GAAS 通过 MAVROS 与 PX4 通信,所以如果想通过 GAAS 控制无人机,我们需要先启动 MAVROS 。安装 MAVROS 请参考 GAAS 教程1 。推荐使用第二种方法安装 MAVROS。
PX4 通过 UDP 通信,所以我们需要修改以下 MAVROS 的 fcu_url
参数,首先新建一个 launch 文件。
修改第 5 行 <arg name="fcu_url" default="/dev/ttyACM0:57600" />
的默认参数为<arg name="fcu_url" default="udp://:14540@localhost:14557" />
。
运行 MAVROS:
这时我们使用 GAAS教程一 的 demo 便可以控制无人机。
以往客机在机库中的巡检需要动用大量的人力物力,因为客机非常大,而且巡检要求非常严格,对于客机的各个部位都有拍摄需求。无人机可以帮助人们更方便的对客机进行巡检,但是巡检一般要在机库中进行,所以我们无法使用 GPS 传感器。
设置 AirSim 无人机参数,加入双目摄像头。我们在 GAAS 中提供了飞机的配置文件。
在这个配置文件中,GPS 的
Enable
选项已经被设置成false
,并且加入了双目摄像头。
在完成前期的设置之后,开启 PX4 SITL 并且启动 MAVROS 之后,我们可以点击 Play 来运行模拟器了,但是当前由于没有 GPS 你是不能起飞的,接下来我们需要开启 SLAM 。
我们在配置文件中设置了一组双目摄像头,基线为 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
最后,参考 GAAS 教程三,运行 SLAM 后,你就可以使用 AirSim 来模拟飞机的巡检了。
注意:当你使用 SLAM 时,请进入 Unreal 的
Edit >> Editor Preference
中把Use Less CPU when in Background
选项关闭。不然的话当 Unreal 处在后台运行的时候,会影响帧率。
首先,搭建机库布景,推荐从 Epic Games 上直接购买资源(购买和下载必须在 Windows 上的 Epic Games 客户端进行)。然后对布景进行相应的修改,可以参考 Unreal 的文档。由于版权问题,我们不能直接放出 Project 文件,如果你在搭建 Unreal Project 的时候遇到了问题,可以随时提 issue 或者在微信群里提问。
关闭 GPS 。首先,先将 PX4 SITL iris 中的 EKF2_AID_MASK
参数改为 vision position fusion
,对应值为 8
。编辑 (Firmware_Path)/posix-configs/SITL/init/ekf2/iris
文件,将其中的 EKF2_AID_MASK
值改为 8
,默认为 1 。