目录
帧率的范畴涉及到:由AirSim发布数据的频率,相机捕捉图像的频率等。如何修改设置或采用什么方法,才能按照期望的帧率进行图像捕捉,以及发布数据并记录下来呢?
1. 相机视图 Camera Views
Camera Views是显示在屏幕上的相机视图,通过simGetImages API获取。关于获取图像的API介绍,可参考:点击我。
从左到右分别为深度视图、分割视图和FPV视图。有关各种可用视图的描述,请参阅Image APIs。
2. 如何程序中获取相机视图?
可参考Image APIs:点击我。
你可以进行如下操作:
- 如何利用python或C++获取单幅图(可指定PNG或未压缩的RGB)?
- 如何使用numpy进行图像操作?
- 如何添加额外的车机意外的摄像头?
除了每辆车的默认摄像头外,还可以通过设置添加更多的摄像头到车辆上,或外置外部摄像头(没有连接到任何车),通过settings来配置,可参见之前的介绍—配置篇。
3. 相机视图对仿真性能的影响
渲染这些视图确实会影响仿真的FPS性能,因为渲染增加了GPU的额外工作负担。
下面展示了打开这些视图时对FPS的影响。
- 没有子视图打开的normal state:每帧16毫秒,这意味着保持了一个不错的稳定的60帧/秒(这是目标FPS帧/秒)
- 即使在最糟糕的情况下,仿真器仍然可以正常运行和飞行,因为physics与rendering是分离的。然而,如果延迟太高,例如以至于与PX4硬件的通信由于CPU过于繁忙而中断,那么飞行可能会由于离线控制消息的超时而停止运行。
下面展示了打开这些视图对CPU的影响,可能有点令人惊讶的结果是:对CPU的影响也不是微不足道的
4. 降低AirSim运行的分辨率、限制最大帧率
AirSim二进制程序,像是CityEnviron,需要强大beefy的GPU才能顺利运行。
可以通过在Windows上编辑run.bat文件来在低分辨率模式下运行(如果run.bat不存在,可创建),例如
start CityEnviron -ResX=640 -ResY=480 -windowed
对于Linux二进制文件,使用Blocks.sh或对应的shell脚本,如
./Blocks.sh -ResX=640 -ResY=480 -windowed
也可以使用simRunConsoleCommand() API来限制最大FPS,如
>>> import airsim
>>> client = airsim.VehicleClient()
>>> client.confirmConnection()
Connected!
Client Ver:1 (Min Req: 1), Server Ver:1 (Min Req: 1)
>>> client.simRunConsoleCommand("t.MaxFPS 10")
True
5. 改变分辨率和相机参数
要改变分辨率,FOV视场角等,可以使用settings.json来配置。
例如,下面为设置场景捕捉scene capture的参数所添加的settings.json。
{
"SettingsVersion": 1.2,
"CameraDefaults": {
"CaptureSettings": [
{
"ImageType": 0,
"Width": 256,
"Height": 144,
"FOV_Degrees": 90,
"AutoExposureSpeed": 100,
"MotionBlurAmount": 0
}
]
},
"SimMode": "ComputerVision"
}
上面配置中,采用的是“Computer Vision”模式。如果忽略任何设置,则将使用默认值的设置。有关更多信息,请参阅设置文档 settings doc。如果使用的是立体相机,目前左右之间的距离是固定在25厘米。
6. FPS影响因素总结
settings>>RecordInterval | 记录两帧图像之间的时间间隔(秒) |
settings>>“NoDisplay”: | 冻结主屏幕的渲染,但子窗口、记录和API仍然是活跃的。在“headless”模式下,即若只对获取图像感兴趣,而不关心在主屏幕上渲染什么,这个模式有助于节省资源,可以改善记录图像的FPS |
采用normal | 不打开子视图。注意physics与rendering是分离的,即使打开子视图,导致渲染帧率下降,最糟糕的情况下,仿真器仍然可以正常运行和飞行,除非延迟太大影响了与vehicle的正常通信 |
simRunConsoleCommand() | 可以用该API来API来限制最大FPS |
run.bat文件 | 编辑该文件,使得虚拟环境在低分辨率模式下运行:start CityEnviron -ResX=640 -ResY=480 -windowed |
7. AirSim发布数据时增加频率的思路
增加频率方法参考资料:
- #2369
《Running SLAM system on AirSim · Issue #2369 · microsoft/AirSim (github.com)》 - 修改airsim的rob包实现高频率
- 总结bolg:AirSim中获取视觉、惯性数据方法研究