AirSim + UE4 在Ubuntu下联合仿真简介
在现实世界中,数据采集是一个费时费力的流程。时间通常都会花在硬件调试上,并且在算法验证前期很难排查问题。因此,在仿真环境下采集与现实中相近的数据非常重要。AirSim与UE4联合仿真可以给到用户灵活的场景定义与多样的传感器采集设备。研究者们可以在这个平台上进行算法的研究和测试。而Ubuntu 20.04版本是目前稳定且支持较新算法的操作系统,本文对AirSim + UE4的自定义联合仿真进行介绍。
UE4安装
Epic 账号注册
首先,下载UE4需要注册Epic账号并与github账号关联,点击链接:Epic Signup。
按找上面的指示进行账号注册,注意保持Epic账号与Github账号邮箱一致。
注册完后,下载指定4.27版本的UE源码,可在命令行中输入如下命令:
git clone -b 4.27 git@github.com:EpicGames/UnrealEngine.git
cd UnrealEngine
./Setup.sh
./GenerateProjectFiles.sh
修改源码文件确保编译通过
接下来,需要找到源码的如下文件,并搜索查找编译选项Arguments并将其修改:
{UE4 workplace}/Engine/Source/Developer/DesktopPlatform/Private/DesktopPlatformBase.cpp
//{UE4 workplace}/Engine/Source/Developer/DesktopPlatform/Private/DesktopPlatformBase.cpp
//修改前
Arguments += " -Progress -NoEngineChanges -NoHotReloadFromIDE"
//修改后
Arguments += " -Progress"
修改UE源码后,编译源码,在终端中输入:
make
等待编译完成。
AirSim安装
AirSim的安装比较简单,只需要输入如下命令:
git clone https://github.com/Microsoft/AirSim.git
cd AirSim
./setup.sh
./build.sh #该步骤如果安装失败请使用sudo
# ./build.sh --debug 和上述步骤二选一
等待安装即可。
启动测试样例
在Ubuntu下UE的启动方式为:
./Engine/Binaries/Linux/UE4Editor #在UE4文件夹中运行
即执行UE中的UE4Editor
若想测试AirSim安装是否正常,可以打开AirSim目录下的测试工程项目,在起始界面点击更多,选择{Airsim floder path}/AirSim/Unreal/Environments/Blocks.uproject这个project的打开。点击Play,即可运行。
自定义场景导入
在仿真过程中,很可能用户需要自定义想要的场景进行测试。在Windows的Epic Game客户端中,有许多场景可以下载。在Windows下载完成后,将Content文件替换在Ubuntu下的UE4项目中的Content文件,如下图所示,将下载好的Content文件夹替换掉原来新建项目的Content文件夹。
打开此新建的UE4项目,并在Content即内容文件夹中选择对应的关卡文件,在本文样例中,即为文件名为shanghai的关卡文件。
双击打开后,即可进入自定义下载的场景,以下是笔者自定义的上海陆家嘴场景。
采集设备模型导入
采集设备的设置在通常在~/Documents/AirSim/settings.json中,所有关于传感器的设置都在此文件中。
如果想要自定义采集设备的外观,就需要更改BP_Pawn模型。接下来详述更改流程。
FBX文件导入
首先我们要对模型的FBX文件进行导入,点击添加/导入,选择导入导入FBX文件。
本文导入的是笔者团队研发的SCUBE采集设备模型,导入后可双击查看形状。
如下图所示,是不是非常酷炫,想要购买实际采集设备及获得仿真技术支持可以联系笔者。
蓝图文件构建
除了模型,我们还需要AirSim中的蓝图作为基础进行传感器配置更改,将如下所示的AirSim自带的BP_Pawn文件复制到Content文件夹中。
双击导入的蓝图文件,点击BodyMesh,将其静态网格体更换为自定义的网格体,并且对摄像头的位置进行调整,这些摄像头的位置直接决定了数据采集中相机的外参。需要调整位置并记录下外参,以便后续算法配置。
更改settings文件
在本文中,直接在Content中建立了新的传感器模型与蓝图,因此在settings文件中,需要将指定传感器蓝图的路径修改如下即可:
{
"SettingsVersion": 1.2,
"SimMode": "Multirotor",
"ClockType": "SteppableClock",
"PawnPaths":{
"DefultQuadrotor":{"PawnBP":"Class'/Game/BP_FlyingPawn.BP_FlyingPawn_C'"}
},
"Vehicles": {
"UAV1":{
"VehicleType": "SimpleFlight",
"PawnPath":"DefultQuadrotor",
"X": 0, "Y": 0, "Z": 0,
"Yaw": 0
}
}
}
其他传感器设置与普通的设置均相同。
数据采集流程
点击运行,可以看到Scube的设备出现在了场景中。数据采集流程和正常AirSim的流程相同,后续会继续介绍如何高效采集严格同步的高帧率数据。