Part1前言

airsim是微软开源的一款基于虚幻引擎的无人机、汽车的模拟器。可以使用主流的飞行控制器进行软件仿真模拟。其基于虚幻引擎插件开发,可以简单的放置在任意虚幻引擎场景中。本文主要对其使用和结构进行了简单研究。


airsim:体验在虚幻世界中“自由飞行”_python

Part2初次使用

我们可以直接下载虚幻引擎提供的编译好的场景,地址如下:

https://github.com/Microsoft/AirSim/releases

之后随便选择一个场景即可,这里选择了最小的场景。


airsim:体验在虚幻世界中“自由飞行”_python_02

通过启动命令,可以开启场景。

start CityEnviron -ResX=640 -ResY=480 -windowed


airsim:体验在虚幻世界中“自由飞行”_游戏引擎_03

之后即可通过python代码对场景需要模拟的车辆进行模拟仿真。安装python环境。

pip install msgpack-rpc-python
pip install airsim

测试demo可以在github的下面地址找到。这里是车辆模拟的示例。

https://github.com/microsoft/AirSim/blob/main/PythonClient/car/hello_car.py

运行​​python hello_car.py​​即可控制车辆进行运行。

Part3python接口研究

python控制通过msgpack的rpc通信接口来进行。这里对无人机的demo进行研究,做一些简单的解释。连接无人机模拟器

client = airsim.MultirotorClient()
client.confirmConnection()
client.enableApiControl(True)

获取无人机的状态

state = client.getMultirotorState()

获取惯性数据,惯性测量单元(英文:Inertial measurement unit,简称IMU)是测量物体三轴姿态角(或角速率)以及加速度的装置。

imu_data = client.getImuData()

获取气压数据

barometer_data = client.getBarometerData()

获取磁场数据

magnetometer_data = client.getMagnetometerData()

获取gps数据

gps_data = client.getGpsData()

移动到指定位置

client.moveToPositionAsync(-10, 10, -10, 5).join()

悬停效果

client.hoverAsync().join()

回归原位

client.reset()
client.armDisarm(False)

# that's enough fun for now. let's quit cleanly
client.enableApiControl(False)

Part4多个无人机模拟

airsim支持多个无人机的模拟操作。参考​​https://microsoft.github.io/AirSim/multi_vehicle/ ​​即通过配置文件即可生成多个无人机,然后通过名字进行控制。配置示例如下,保存为settings.json

{
"SettingsVersion": 1.2,
"SimMode": "Multirotor",
"Vehicles": {
"Drone1": {
"VehicleType": "SimpleFlight",
"X": 4, "Y": 0, "Z": -2,
"Yaw": -180
},
"Drone2": {
"VehicleType": "SimpleFlight",
"X": 8, "Y": 0, "Z": -2
}
}
}

启动的时候,需要指定配置文件

start MSBuild2018 -ResX=1280 -ResY=720 -windowed  -settings="settings.json"

Part5插件编译

如果需要更换场景,就需要自己编译插件,目前最新的版本,需要vs2022才能编译。

Note: Unreal 4.27 will auto-generate the .sln file targetting Visual Studio 2019. Visual Studio 2022 will be able to load and run this .sln, but if you want full Visual Studio 2022 support, you will need to explicitly enable support by going to 'Edit->Editor Preferences->Source Code' and selecting 'Visual Studio 2022' for the 'Source Code Editor' setting.

下载vs2022社区版​​https://visualstudio.microsoft.com/zh-hans/vs/​​安装内容如下 Install Visual Studio 2022. Make sure to select Desktop Development with C++ and Windows 10 SDK 10.0.19041 (should be selected by default) and select the latest .NET Framework SDK under the 'Individual Components' tab while installing VS 2022.

之后编译遇到了错误提示如下

CMake Error: Could not create named generator Visual Studio 17 2022

下载安装最新的cmake程序即可,下载路径​​https://cmake.org/download/​

之后编译又遇到错误。原来UE4.27默认使用vs2019编译,但是我们的airsim只能vs2022编译,导致引用的库对不上了。解决方案如下:
尝试修改把依赖Airsim的都去掉,编辑器可以打开,然后修改 设置'Edit->Editor Preferences->Source Code' and selecting 'Visual Studio 2022' for the 'Source Code Editor' setting. 之后便可以完美编译


airsim:体验在虚幻世界中“自由飞行”_游戏引擎_04

Part6rpc调用流程

针对无人机的初始化流程如下


airsim:体验在虚幻世界中“自由飞行”_无人机_05

rpc的调用流程如下


airsim:体验在虚幻世界中“自由飞行”_无人机_06

整个rpc调用其实有两种状态,一种是和无人机模拟没关系的调用,例如设置全局参数,如天气,风速等,通过ASimModeWorldMultiRotor类来处理。另外一类接口是处理无人机状态的,通过无人机的名称转到各自的无人机处理函数中,这里的rpc统一在MultirotoPawnSimApi进行管理。

Part7总结

本文主要介绍了airsim的功能以及源码编译以及rpc的调用流程。

airsim:体验在虚幻世界中“自由飞行”_python_07

Part8关于IN VETA

IN VETA是一支由建模、美术、UE5组成的年轻团队。


airsim:体验在虚幻世界中“自由飞行”_python_08

我们的开源项目:
​​​https://github.com/inveta​

我们致力于三维数字孪生技术分享与研发。
欢迎与各界朋友一起探讨技术与商务合作,一起推动数字孪生的发展。