代码结构#
AirLib#
大部分代码位于 AirLib 中。这是一个独立的库,您可以使用任何 C++11 编译器编译它。
AirLib 包含以下组件
- 物理引擎: 这是一个仅包含头文件的物理引擎。它旨在快速且可扩展,以实现不同的载具。
- 传感器模型: 这是气压计、IMU、GPS 和磁力计的仅包含头文件的模型。
- 载具模型: 这是载具配置和模型的仅包含头文件的模型。目前我们已经实现了多旋翼飞行器模型和 PX4 四旋翼飞行器在 X 型配置下的配置。MultiRotorParams.hpp 中定义了几种不同的多旋翼飞行器模型,其中也包括六旋翼飞行器。
- API 相关文件: AirLib 的这一部分为我们的 API 提供了抽象基类,并为特定载具平台(如 MavLink)提供了具体实现。它还包含 RPC 客户端和服务器的类。
除了这些,所有常用的实用程序都定义在 common/
子文件夹中。这里一个重要的文件是 AirSimSettings.hpp,如果要在 settings.json
中添加任何新字段,则应修改此文件。
AirSim 支持用于多旋翼飞行器的不同固件,例如它自己的 SimpleFlight、PX4 和 ArduPilot,与每个固件通信的文件都放置在 multirotor/firmwares
中各自的子文件夹中。
载具特定的 API 定义在 api/
子文件夹中,以及所需的结构体。AirLib/src/
包含 .cpp 文件,其中实现了 .hpp 文件中定义的各种方法。例如,MultirotorApiBase.cpp 包含多旋翼飞行器 API 的基本实现,如果需要,也可以在特定的固件文件中重写。
Unreal/Plugins/AirSim#
这是项目唯一依赖于虚幻引擎的部分。我们将其隔离,以便我们也可以为其他平台实现模拟器,就像为 Unity 所做的那样。虚幻引擎代码利用其基于 UObject 的类,包括蓝图。Source/
文件夹包含 C++ 文件,而 Content/
文件夹包含蓝图和资产。下面介绍一些主要组件
- SimMode_ 类:SimMode 类有助于实现许多不同的模式,例如纯计算机视觉模式,其中没有载具或特定载具的模拟(目前是汽车和多旋翼飞行器)。载具类位于
Vehicles/
中 - PawnSimApi:这是所有载具棋子可视化的基类。每个载具都有自己的子 (Multirotor|Car|ComputerVision)Pawn 类。
- UnrealSensors:包含距离和激光雷达传感器的实现。
- WorldSimApi:实现了大多数环境和与载具无关的 API
除了这些,PIPCamera
包含摄像机初始化,而 UnrealImageCapture
和 RenderRequest
包含图像渲染代码。AirBlueprintLib
包含许多用于与 UE4 引擎交互的实用程序和包装方法。
MavLinkCom#
这是我们团队成员 Chris Lovett 开发的库,它提供 C++ 类来与 MavLink 设备通信。这个库是独立的,可以在任何项目中使用。有关更多信息,请参阅 MavLinkCom。
示例程序#
我们创建了一些示例程序来演示如何使用 API。请参阅 HelloDrone 和 DroneShell。DroneShell 演示了如何使用 UDP 连接到模拟器。模拟器正在运行一个服务器(类似于 DroneServer)。
Python客户端#
PythonClient 包含 Python API 包装文件和演示其用法的示例程序。
贡献#
请参阅 贡献指南
虚幻引擎框架#
下图说明了虚幻游戏引擎如何加载和调用 AirSim