目标一、运行示例程序1
Blocks.sln
操作:AirSim安装
参考博客【Windows 10】AirSim基础配置 (v1.3.1 + Visual Studio 2019 + UE 4.24)
安装过程中,遇到2个问题:
“Eigen/Dense”: No such file or directory
解决:下载eigen,复制其中的Eigen文件夹到相应目录;见github中相应的Issuse。Install a version of .NET Framework SDK at 4.6.0 or higher.
解决:启动VS的Installer,选择相应的组件安装。
备注:
- 按
F5
运行示例程序后,UE4自动打开。 - 遇到新问题时,多查阅AirSim的wiki和Issuse。
目标二、运行实例程序2
HelloDrone.py
操作:安装依赖包,配置python环境
通过管理python程序包
完成依赖包的安装。安装过程中,遇到的1个问题:
- AirSim运行
HelloDrone.py
依赖哪些包;
msgpack-rpc-python
,matplotlib
,opencv-python
- 命令行报错
pip不是内部或外部命令,也不是可运行的程序或批处理文件
解决:在环境变量
的PATH
中,添加python和pip的路径,如D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\python.exe
和D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\Scripts
备注:
- 先启动UE4并打开项目
Blocks
,然后在VS2019运行HelloDrone.py
,程序会与UE4进行ConfirmConnection
,并控制四旋翼执行相应的运动。 - 决定使用python编写后续算法。
有待明确的点:
- 尝试在
添加python环境
中,创建了conda环境
,但是未能成功搜索到msgpack-rpc-python
;
感觉原因出在,该新建的conda环境
无法使用pip install
安装第三方库? - 新建的
conda环境
如何删除?目前在C:\Users\HP\.conda\envs\airsimenv37
路径。 - Microsoft VS2019 官方文档>>管理python环境
目标三、梳理HelloDrone.py
中的程序控制
约90行,梳理其中关键函数的功能、参数及使用,建立一个初步的印象。
操作:
行号 | 代码 | 功能、参数 |
---|---|---|
11 | client = airsim.MultirotorClient() | 实例化一个类对象 |
12 | client.confirmConnection() | 确认连接 |
13 | client.enableApiControl(True) | 使能API控制 |
14 | client.armDisarm(True) | arm 表示什么? |
16 | state = client.getMultirotorState() | 获取四旋翼状态 |
20 | imu_data = client.getImuData() | 获取IMU的数据 |
24 | barometer_data = client.getBarometerData() | 获取气压表数据 |
28 | magnetometer_data = client.getMagnetometerData() | 获取磁力计数据 |
32 | gps_data = client.getGpsData() | 获取GPS数据 |
36 | airsim.wait_key('Press any key to takeoff') | airsim模块的函数 |
37 | client.takeoffAsync().join() | 有待细看 |
43 | client.moveToPositionAsync(-10, 10, -10, 5).join() | 有待细看 |
45 | client.hoverAsync().join() | |
52 | responses = client.simGetImages([...]) | 获取图像 |
59 | tmp_dir = os.path.join(tempfile.gettempdir(), "airsim_drone") | 图片保存的位置 |
69 | filename = os.path.join(tmp_dir, str(idx)) | 生成路径 |
71 | if response.pixels_as_float: | 判断图片类型 |
73 | airsim.write_pfm(os.path.normpath (filename + '.pfm'), airsim.get_pfm_array(response)) | 存储pfm图片 |
74 | elif response.compress: #png format | 判断图片类型 |
76 | airsim.write_file(os.path.normpath(filename + '.png'), response.image_data_uint8) | 压缩png格式 |
77 | else: #uncompressed array | 无压缩png格式 |
… | 处理见代码 | |
85 | client.armDisarm(False) | disarm 何意? |
86 | client.reset() | 重置为初始状态 |
89 | client.enableApiControl(False) | 关闭使能 |
备注:
- 明确
armDisarm()
的含义; - 明确
***Async().join()
的含义; airsim.py
中的全部代码:
from .client import *
from .utils import *
from .types import *
client.py
中定义的三个类:
- 程序运行结果
程序运行过程中,在窗口输出的结果,以截图的形式在附录部分展示。
目标四、可视化
可视化的详细描述:
- 绘制出四旋翼的飞行运动轨迹,保存为图片;
目标五、四旋翼程序控制
程序控制的详细描述:
- 通过阅读AirSim提供的官网文档,明确用户可使用的四旋翼程序控制API,并梳理为表格;
附录
HelloDrone.py
程序运行的部分结果展示: