在 AirSim 中模拟无人机对客机巡检
Last updated
Was this helpful?
Last updated
Was this helpful?
众所周知,航空飞行的安全极其重要,所以检修人员需要定期对客机进行检修。因为体积问题,人工操作很难看到飞机的上半部分,所以每次检修都会动用大量的人力物力去一点点看。从 17 年开始,空客就率先开始利用无人机对载人的客机进行检修,这样更加方便快速。无人机可以拍摄大量的客机照片,检修人员只要在电脑上就可以分析飞机的状态。
传统无人机也有自己的问题:一是无人机还是需要人去操作的,而人工操作无法保证安全性。毕竟手一抖无人机可能就撞到飞机了,很多无人机飞手是不愿意飞这个场景的。而客机对检修的要求又非常严格,每次最好都可以在同一个位置拍照。但人工操作无法保证这种精度。其次是传统无人机都极其依赖 GPS 做定位,而机库里是没有 GPS 的。所以无人机也很容易「炸机」。这两个问题导致了无人机巡检真飞机迟迟不能普及。
这就是为什么我们希望利用 GAAS 为有志于做自主飞行无人机的朋友提供无人机巡检真飞机的案例,让无人机在完全不需要 GPS 和飞手的操作下,进行飞机的巡检。
是一个由微软开发的开源的仿真平台,基于 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 都支持多个平台,你可以使用 。但是由于 PX4 只支持 Linux 平台,为了方便使用 GAAS,我们还是使用 Linux 版 Unreal。
注册 账号,并关联自己的 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 Firmware。注意:AirSim 需要 Firmware v1.8.2 版本。
编译并运行 SITL 模式:
你可以编辑
(Firmware_Path)/posix-configs/SITL/init/ekf2/iris
文件来设置飞机参数
在 Unreal 中点击 Play 按键,我们就打开了模拟器,你现在应该可以在地上看见一个无人机了。
按
F1
键可以查看快捷键,你也可以打开 FPS 显示随时查看 FPS。
7. 这时便可以通过 QGC 来简单控制无人机了。
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:
以往客机在机库中的巡检需要动用大量的人力物力,因为客机非常大,而且巡检要求非常严格,对于客机的各个部位都有拍摄需求。无人机可以帮助人们更方便的对客机进行巡检,但是巡检一般要在机库中进行,所以我们无法使用 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
注意:当你使用 SLAM 时,请进入 Unreal 的
Edit >> Editor Preference
中把Use Less CPU when in Background
选项关闭。不然的话当 Unreal 处在后台运行的时候,会影响帧率。
首先确保你已经成功安装了 PX4 的所需依赖。参考 。
修改 ,在 Linux 下,设置文件路径为 ~/Documents/AirSim/settings.json
。
6. 下载 ,并修改监听端口。
GAAS 通过 MAVROS 与 PX4 通信,所以如果想通过 GAAS 控制无人机,我们需要先启动 MAVROS 。安装 MAVROS 请参考 。推荐使用第二种方法安装 MAVROS。
这时我们使用 的 demo 便可以控制无人机。
首先,搭建机库布景,推荐从 Epic Games 上直接(购买和下载必须在 Windows 上的 Epic Games 客户端进行)。然后对布景进行相应的修改,可以参考 。由于版权问题,我们不能直接放出 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 。
最后,参考 ,运行 SLAM 后,你就可以使用 AirSim 来模拟飞机的巡检了。