AirSim 无人机仿真入门:起飞与降落控制
概述: 完成软件与环境安装,通过 Python 代码控制无人机实现起飞与降落操作。
1. 环境搭建
1.1 核心组件说明
AirSim 基于 Unreal Engine(UE)开发,主要用于模拟无人机和自动驾驶汽车。我们需要先准备好 Epic Games 平台、UE 引擎以及开发工具。
1.2 安装步骤
建议按以下顺序配置环境,确保版本兼容性:
- 注册 Epic 账号:访问 Epic Games 官网并完成注册。
- 下载 UE 引擎:在 Epic 平台的'库'中选择 4.27.2 版本进行安装,该版本对 AirSim 支持较好。
- 配置 Visual Studio:安装 VS Community 2022,勾选'C++ 桌面开发'及'Windows 10 SDK 10.0.19041'。在'单个组件'中确保包含最新的 ".NET Framework SDK"。
- 安装 Git Bash:用于克隆项目代码。
- 克隆 AirSim 工程:在指定磁盘执行
git clone,进入目录运行build.cmd编译。成功后会在AirSim\Unreal下生成Plugins文件夹,这是后续导入的关键。
验证安装: 使用 AirSim 自带的 Block 环境进行测试,确认引擎能正常加载插件。
![仿真界面截图]
至此,基础环境已就绪,可以开始构建仿真工程。
2. 创建仿真工程
2.1 工程初始化
从虚幻商城选择一个场景(如山脉景观)创建新项目,获取 .uproject 文件。
2.2 插件集成
- 新建 C++ 类:双击
.uproject打开编辑器,新建 C++ 类并等待编译完成,生成.sln文件。 - 添加插件:将之前生成的
AirSim\Unreal\Plugins文件夹复制到当前工程目录(例如LandscapeMountains)。 - 修改配置文件:编辑
LandscapeMountains.uproject及Config\DefaultGame.ini以启用插件。 - 生成 VS 项目:右键点击
.uproject选择 "Generate Visual Studio project files"。 - 配置多旋翼模式:修改
settings.json,将SimMode设为Multirotor:{"SettingsVersion":1.2, "SimMode":"Multirotor"} - 启动调试:在 VS 中打开
.sln,设置启动项为LandscapeMountains,编译选项选DebugGame Editor和Win64。点击调试运行,编辑器右下角应提示新插件可用。 - 设置游戏模式:在关卡编辑器的'世界场景设置'中,将'游戏模式重载'改为
AirSimGameMode并保存。 - 运行仿真:点击绿色三角按钮启动,此时 AirSim 插件已成功加载。
![工程运行截图]
3. Python 控制程序
3.1 环境准备
建议使用 Conda 管理虚拟环境,PyCharm 作为编辑器。
pip install msgpack-rpc-python
pip install airsim
3.2 通信机制
AirSim API 基于 TCP/IP 的 msgpack-rpc 协议。仿真器默认监听 41451 端口。Python 程序向该端口发送 RPC 包即可建立连接。这种机制允许仿真端与控制端分离,即使 Python 中断,仿真仍可继续。
若需跨设备通信(如一台跑仿真,一台跑算法),可指定 IP 地址:
server_ip = "192.168.0.10"
port = 41451
client = airsim.MultirotorClient(ip=server_ip, port=port)
3.3 控制逻辑
在 PyCharm 中创建 Python 文件,编写以下控制脚本。注意 Async 函数会立即返回,需配合 .join() 确保任务完成。
import airsim
# 连接仿真器
client = airsim.MultirotorClient()
client.confirmConnection()
# 获取控制权
client.enableApiControl(True)
# 解锁电机
client.armDisarm(True)
# 起飞并等待完成
client.takeoffAsync().join()
# 降落并等待完成
client.landAsync().join()
# 锁定电机并释放控制权
client.armDisarm(False)
client.enableApiControl(False)
运行脚本后,仿真中的四旋翼将自动起飞至设定高度并安全降落。
![起飞降落效果]
4. 常见问题排查
现象: 仿真时 UE 界面未显示无人机的三个摄像头画面。
解决: 修改 settings.json 文件,显式开启子窗口。
"SubWindows": [
{"WindowID": 0, "ImageType": 0, "CameraName": "front_center", "Visible": true},
{"WindowID": 1, "ImageType": 3, "CameraName": "front_center", "Visible": true},
{"WindowID": 2, "ImageType": 5, "CameraName": "front_center", "Visible": true}
]
- ImageType:定义图像类型(如深度图、语义图等)。
- CameraName:指定相机名称。
配置完成后重启仿真,摄像头视图即可正常显示。至此,AirSim 环境搭建与基础控制流程已完成,可作为后续算法迁移的起点。


