setting.json是airsim的核心配置文件,下面对官方文档进行解读

文章目录

  • 1 json存储位置
  • 2 如何在车辆Car和旋翼无人机Multirotor之间进行选择
  • 3 可用的设置和对应默认值
    • SimMode
    • ViewMode
    • TimeOfDay
    • OriginGeopoint
    • SubWindows
    • Recording
    • ClockSpeed
    • Segmentation Settings
    • Camera Settings
    • Vehicles Settings
    • 其他的一些设置
  • 总结

1 json存储位置

Windows在Documents\AirSim,Linux在 ~/Documents/AirSim

第一次启动Airsim时候将自动创建一个空的setting文件,为了避免其他问题,永远使用ASCII保存文件。

2 如何在车辆Car和旋翼无人机Multirotor之间进行选择

如果想使用Car则在json文件设置"SimMode": "Car" ,如下所示

{"SettingsVersion": 1.2,"SimMode": "Car"
}

选择Multirotor则设置 "SimMode": "Multirotor". 如果设置"SimMode": "".则启动Airsim时候会自动弹出一个对话框询问使用哪个。

3 可用的设置和对应默认值

下面是所有可用的设置和其对应默认值,一些默认值为 "" 将会根据实际使用的车辆类型进行选择,比如 ViewMode"" ,对于无人机则使用"FlyWithMe" ,对无人车则使用"SpringArmChase"

注意: 没有必要将所有的设置复制过去,需要什么粘贴什么即可,仅有 "SettingsVersion"是需要设置的。

{"SimMode": "","ClockType": "","ClockSpeed": 1,"LocalHostIp": "127.0.0.1","RecordUIVisible": true,"LogMessagesVisible": true,"ViewMode": "","RpcEnabled": true,"EngineSound": true,"PhysicsEngineName": "","SpeedUnitFactor": 1.0,"SpeedUnitLabel": "m/s","Recording": {"RecordOnMove": false,"RecordInterval": 0.05,"Cameras": [{ "CameraName": "0", "ImageType": 0, "PixelsAsFloat": false, "Compress": true }]},"CameraDefaults": {"CaptureSettings": [{"ImageType": 0,"Width": 256,"Height": 144,"FOV_Degrees": 90,"AutoExposureSpeed": 100,"AutoExposureBias": 0,"AutoExposureMaxBrightness": 0.64,"AutoExposureMinBrightness": 0.03,"MotionBlurAmount": 0,"TargetGamma": 1.0,"ProjectionMode": "","OrthoWidth": 5.12}],"NoiseSettings": [{"Enabled": false,"ImageType": 0,"RandContrib": 0.2,"RandSpeed": 100000.0,"RandSize": 500.0,"RandDensity": 2,"HorzWaveContrib":0.03,"HorzWaveStrength": 0.08,"HorzWaveVertSize": 1.0,"HorzWaveScreenSize": 1.0,"HorzNoiseLinesContrib": 1.0,"HorzNoiseLinesDensityY": 0.01,"HorzNoiseLinesDensityXY": 0.5,"HorzDistortionContrib": 1.0,"HorzDistortionStrength": 0.002}],"Gimbal": {"Stabilization": 0,"Pitch": NaN, "Roll": NaN, "Yaw": NaN}"X": NaN, "Y": NaN, "Z": NaN,"Pitch": NaN, "Roll": NaN, "Yaw": NaN},"OriginGeopoint": {"Latitude": 47.641468,"Longitude": -122.140165,"Altitude": 122},"TimeOfDay": {"Enabled": false,"StartDateTime": "","CelestialClockSpeed": 1,"StartDateTimeDst": false,"UpdateIntervalSecs": 60},"SubWindows": [{"WindowID": 0, "CameraName": "0", "ImageType": 3, "Visible": false},{"WindowID": 1, "CameraName": "0", "ImageType": 5, "Visible": false},{"WindowID": 2, "CameraName": "0", "ImageType": 0, "Visible": false}],"SegmentationSettings": {"InitMethod": "","MeshNamingMethod": "","OverrideExisting": false},"PawnPaths": {"BareboneCar": {"PawnBP": "Class'/AirSim/VehicleAdv/Vehicle/VehicleAdvPawn.VehicleAdvPawn_C'"},"DefaultCar": {"PawnBP": "Class'/AirSim/VehicleAdv/SUV/SuvCarPawn.SuvCarPawn_C'"},"DefaultQuadrotor": {"PawnBP": "Class'/AirSim/Blueprints/BP_FlyingPawn.BP_FlyingPawn_C'"},"DefaultComputerVision": {"PawnBP": "Class'/AirSim/Blueprints/BP_ComputerVisionPawn.BP_ComputerVisionPawn_C'"}},"Vehicles": {"SimpleFlight": {"VehicleType": "SimpleFlight","DefaultVehicleState": "Armed","AutoCreate": true,"PawnPath": "","EnableCollisionPassthrogh": false,"EnableCollisions": true,"AllowAPIAlways": true,"RC": {"RemoteControlID": 0,"AllowAPIWhenDisconnected": false},"Cameras": {//same elements as CameraDefaults above, key as name},"X": NaN, "Y": NaN, "Z": NaN,"Pitch": NaN, "Roll": NaN, "Yaw": NaN},"PhysXCar": {"VehicleType": "PhysXCar","DefaultVehicleState": "","AutoCreate": true,"PawnPath": "","EnableCollisionPassthrogh": false,"EnableCollisions": true,"RC": {"RemoteControlID": -1},"Cameras": {"MyCamera1": {//same elements as elements inside CameraDefaults above},"MyCamera2": {//same elements as elements inside CameraDefaults above},},"X": NaN, "Y": NaN, "Z": NaN,"Pitch": NaN, "Roll": NaN, "Yaw": NaN}}
}

SimMode

SimMode用来确定仿真模式,当前支持以下模式值:

  • "": 启动仿真时候自定义选择模式
  • "Multirotor": 使用旋翼仿真
  • "Car": 使用车辆仿真
  • "ComputerVision": 仅使用相机,无无人机和车辆

ViewMode

ViewMode确定将哪个摄影机用作默认摄影机以及摄影机将如何跟随车辆。对于无人机,默认是 "FlyWithMe",而无人车则默认是"SpringArmChase".

  • FlyWithMe: 以6个自由度从后面追赶车辆
  • GroundObserver: 从离地6’处追逐车辆,但在XY平面上保持完全自由。
  • Fpv: 从车辆前摄像头观看场景,就是车辆视角,可以理解为第一人称视角。
  • Manual: 不要自动移动相机。使用箭头键和ASWD键手动移动摄像机。
  • SpringArmChase: 用安装在隐形的手臂上的摄像头追踪车辆,该手臂通过弹簧连接到车辆上(因此它在运动中有一些延迟)。
  • NoDisplay: 就是不可视化仿真器,但是子窗口、录制和API的渲染仍处于活动状态。此模式对于在“无头”模式下保存资源非常有用,在这种模式下,您只对获取图像感兴趣,而不关心在主屏幕上呈现的内容。这也可以提高记录图像的FPS。

TimeOfDay

控制太阳在环境中的时间用的,其中的属性Enabled是false,太阳将永远保持不变。如果属性为true,则太阳的位置将会使用经纬度和高度来计算,这些将会在后面介绍的OriginGeopoint属性进行介绍。 在属性StartDateTime使用 %Y-%m-%d %H:%M:%S设置时间,例如2018-02-12 15:20:00,如果为空则使用当前时间。StartDateTimeDst截止时间,到那个时间就会保持不变(我理解的)。在某些情况下,可能希望天体时钟比模拟时钟运行得快或慢,则可以指定CelestialClockSpeed,比如,值100表示时间是实际时间的100倍。

这个也可以通过API控制,我们后面再分析。

{"TimeOfDay": {"Enabled": false,"StartDateTime": "","CelestialClockSpeed": 1,"StartDateTimeDst": false,"UpdateIntervalSecs": 60},
}

OriginGeopoint

这个用来记录经纬度和高度,起始原点也是利用这个计算出来的。所有坐标是北东地坐标系,在系统中,每个车辆从(0,0,0)点开始。时间设置也是通过这个算出来的OriginGeopoint(感觉解释很模糊,等以后测试使用后再补充细节吧)

{"OriginGeopoint": {"Latitude": 47.641468,"Longitude": -122.140165,"Altitude": 122},
}

SubWindows

这个设置用来确定当按下0的时候,哪个窗口是可见的。具体用法如下所示。

  "SubWindows": [{"WindowID": 0, "ImageType": 0, "CameraName": "3", "Visible": true},{"WindowID": 1, "ImageType": 3, "CameraName": "0", "Visible": true},{"WindowID": 2, "ImageType": 6, "CameraName": "4", "Visible": true}]
  • "WindowID"表示使用哪个窗口,值在0-2之间。
  • "ImageType"表示图像类型,一共有8种类型,分别如下所示
    • Scene = 0,
    • DepthPlanner = 1,
    • DepthPerspective = 2,
    • DepthVis = 3,
    • DisparityNormalized = 4,
    • Segmentation = 5,
    • SurfaceNormals = 6,
    • Infrared = 7
  • "CameraName"相机名称,一共有5个相机,front_center, front_right, front_left, fpvback_center,为了向后兼容,用0-4对应。

Recording

按照特定的时间间隔记录数据,比如位置、姿态、速度和对应图像。仿真器上面有按钮可以开始记录。数据存在Documents\AirSim,对应配置代码如下所示。

"Recording": {"RecordOnMove": false,"RecordInterval": 0.05,"Cameras": [{ "CameraName": "0", "ImageType": 0, "PixelsAsFloat": false, "Compress": true }]},
  • RecordInterval 指定采集两张图片的最小时间间隔,就是每隔多少秒采集一张图片。
  • RecordOnMove指定如果车辆不动是否还采集图像
  • Cameras设置相机的属性,默认是使用相机0,并压缩存储。相同属性跟SubWindows一样,如果PixelsAsFloat为true,图像将会存储为pfm格式。

ClockSpeed

调整仿真速度,默认是1与实际一样,小于1则慢,大于1则快。注意:随着仿真时钟的运行速度加快,仿真质量可能会下降。可能会看到像物体移动过障碍物这样的伪影,因为没有检测到碰撞。然而,减慢模拟时钟(即值<1.0)通常会提高模拟质量。

Segmentation Settings

"SegmentationSettings": {"InitMethod": "","MeshNamingMethod": "","OverrideExisting": false},

InitMethod 确定分割图的分割ID信息,默认"" 和"CommonObjectsRandomIDs"意味着随机分配ID。"None"意味着不初始化ID,导致分割图只有一个颜色,如果计划使用API设置ID的话,这个模式很有用,对于城市的环境,可以节省大量延迟。

如果 OverrideExisting 为false,则初始化不会更改已分配的非零对象ID,否则会更改。

如果 MeshNamingMethod是 “” 或 “OwnerName” 分配ID用的,还有个属性是 “StaticMeshName” ,这个具体用法我不是很明白,后续使用后更新。

Camera Settings

CameraDefaults 在第一级根目录,指定所有相机的默认值,这些默认值在每个Vehicles中的相机Cameras中重写。

属性ImageType已经在前面介绍过了,除此之外可以设置ImageType: -1应用在外部相机(也就是显示屏成像的相机)。

"CaptureSettings"设置的是不同种图像属性,比如scene, depth, disparity, surface normals和segmentation 等等。属性Width, Height, FOV就是图像分辨率内参相关。AutoExposureSpeed值较高可以消除图像采集中的伪影。MotionBlurAmount设置为0以避免真值中的伪影。ProjectionMode投影模式,不太能理解,用默认perspective就行(其他参数有的跟参数有关,主要是需要设置前4个,其他默认就好)。

NoiseSettings允许想特定图像添加噪声,目的是模拟传感器噪声,干扰和伪影。默认是无噪声添加的Enabled: false。如果需要噪声,设置其余属性就行。

  • RandContrib噪声混合比,0表示无噪声,1表示只有噪声。
  • RandSpeed设置噪波波动的速度,1表示无波动,较高的值如1E6表示完全波动。
  • RandSize这决定了噪声的粗糙程度,1表示每个像素都有自己的噪声,而较高的值意味着超过1个像素共享相同的噪声值。
  • RandDensity这决定了有多少像素会有噪声,1表示所有像素,值越高表示像素数越少。
  • HorzWaveContrib添加水平凹凸/闪烁/重影效果,这决定了噪波像素与图像像素的混合比,0表示无噪波,1表示只有噪波。
  • HorzWaveStrength这决定了效果的整体强度。
  • HorzWaveVertSize这决定了有多少垂直像素会受到效果的影响。
  • HorzWaveScreenSize这决定了屏幕有多大程度上受效果的影响。
    其他都是各种方向噪声,感觉用途不多,暂时不分析了,专业人士看文档即可。

Gimbal允许冻结相机三个轴的方向,这个设置对第三人称视角是无用的,也就是ImageType为-1,当 Stabilization 为0就表示相机随着本体模型的运动而运动,值为1时候,表示完全稳定。值取值范围为0-1,用来与车的角度进行混合,Pitch, RollYaw 任何一个值设为NaN,表示这个角度将随车运动。

"CameraDefaults": {"CaptureSettings": [{"ImageType": 0,"Width": 256,"Height": 144,"FOV_Degrees": 90,"AutoExposureSpeed": 100,"AutoExposureBias": 0,"AutoExposureMaxBrightness": 0.64,"AutoExposureMinBrightness": 0.03,"MotionBlurAmount": 0,"TargetGamma": 1.0,"ProjectionMode": "","OrthoWidth": 5.12}],"NoiseSettings": [{"Enabled": false,"ImageType": 0,"RandContrib": 0.2,"RandSpeed": 100000.0,"RandSize": 500.0,"RandDensity": 2,"HorzWaveContrib":0.03,"HorzWaveStrength": 0.08,"HorzWaveVertSize": 1.0,"HorzWaveScreenSize": 1.0,"HorzNoiseLinesContrib": 1.0,"HorzNoiseLinesDensityY": 0.01,"HorzNoiseLinesDensityXY": 0.5,"HorzDistortionContrib": 1.0,"HorzDistortionStrength": 0.002}],"Gimbal": {"Stabilization": 0,"Pitch": NaN, "Roll": NaN, "Yaw": NaN}"X": NaN, "Y": NaN, "Z": NaN,"Pitch": NaN, "Roll": NaN, "Yaw": NaN},

Vehicles Settings

仿真器将遍历"Vehicles"列表创建 "AutoCreate": true的车辆。
Each simulation mode will go through the list of vehicles specified in this setting and create the ones that has "AutoCreate": true. 指定的每个车辆都有个key,这个key就是车的名字。如果这个设置中不存在这个属性,则使用默认叫“PhysXCar”的车和“SimpleFlight”的无人机来填充。

"Vehicles": {"SimpleFlight": {"VehicleType": "SimpleFlight","DefaultVehicleState": "Armed","AutoCreate": true,"PawnPath": "","EnableCollisionPassthrogh": false,"EnableCollisions": true,"AllowAPIAlways": true,"RC": {"RemoteControlID": 0,"AllowAPIWhenDisconnected": false},"Cameras": {//same elements as CameraDefaults above, key as name},"X": NaN, "Y": NaN, "Z": NaN,"Pitch": NaN, "Roll": NaN, "Yaw": NaN},"PhysXCar": {"VehicleType": "PhysXCar","DefaultVehicleState": "","AutoCreate": true,"PawnPath": "","EnableCollisionPassthrogh": false,"EnableCollisions": true,"RC": {"RemoteControlID": -1},"Cameras": {"MyCamera1": {//same elements as elements inside CameraDefaults above},"MyCamera2": {//same elements as elements inside CameraDefaults above},},"X": NaN, "Y": NaN, "Z": NaN,"Pitch": NaN, "Roll": NaN, "Yaw": NaN}}

下面对其中的一些属性进行说明。

  • VehicleType: 这个属性可以选择 PhysXCar, SimpleFlight, PX4MultirotorComputerVision. 不存在默认值因此这个必须被指定。
  • PawnPath: This allows to override the pawn blueprint to use for the vehicle. For example, you may create new pawn blueprint derived from ACarPawn for a warehouse robot in your own project outside the AirSim code and then specify its path here. See also PawnPaths.
  • DefaultVehicleState: 用于无人机的可能值, ArmedDisarmed
  • AutoCreate: 如果为真,则生成此车辆。
  • RC: 指定车辆使用的遥控器
  • RemoteControlID. 控制器选择,值为-1时候使用键盘控制(不支持无人机),值≥0时候指定一个连接在电脑的控制器。
  • X, Y, Z, Yaw, Roll, Pitch: 车辆初始化时候的位置和方向。
  • IsFpvVehicle: 选择那辆车产生第一视角数据,默认是使用第一辆车作为FPV车辆,其实就是数据窗口总共就3个,必须指定一个来采集数据。
  • Cameras: 为每个车辆指定相机,属性和值的使用与 CameraDefaults是一样的。如果改变前置相机的FOV为120°,那么可以按照如下的代码对Vehicles进行修改.
"Vehicles": {"FishEyeDrone": {"VehicleType": "SimpleFlight","Cameras": {"front-center": {"CaptureSettings": [{"ImageType": 0,"FOV_Degrees": 120}]}}}
}

Airsim支持PX4,这就很强了,默认设置是启用硬件在环设置,用法示例如下所示,

"Vehicles": {"PX4": {"VehicleType": "PX4Multirotor","ControlIp": "127.0.0.1","ControlPort": 14580,"LogViewerHostIp": "127.0.0.1","LogViewerPort": 14388,"OffboardCompID": 1,"OffboardSysID": 134,"QgcHostIp": "127.0.0.1","QgcPort": 14550,"SerialBaudRate": 115200,"SerialPort": "*","SimCompID": 42,"SimSysID": 142,"TcpPort": 4560,"UdpIp": "127.0.0.1","UdpPort": 14560,"UseSerial": true,"UseTcp": false,"VehicleCompID": 1,"VehicleSysID": 135,"Model": "Generic","LocalHostIp": "127.0.0.1"}
}

(许多设置我不清楚具体用法,等后续接PX4研究下)

其他的一些设置

  • "EngineSound": false,关闭模拟器的声音,当前仅对Car有效。
  • "SpeedUnitFactor": 1.0,速度尺度,与"SpeedUnitLabel": "m/s"在一起使用,改单位时候修改对应的变换尺度。
  • "LocalHostIp": "127.0.0.1",设置仿真器端的ip地址,以保证可以在两台电脑上相连。
  • "PhysicsEngineName": "",,物理引擎名称,汽车只支持PhysX,无人机仅支持 "FastPhysicsEngine"(个人感觉这个参数目前还是冗余的)。
  • PawnPaths设置使用自己的模型,具体用法等实际操作时候补充。

总结

Airsim集成了大量的功能,基本满足仿真的需求,但是前期使用不多,很多不是很理解,等后续实操时候再补充相关说明。

Airsim(1.3.1版本)setting.json帮助文档解析相关推荐

  1. postman json格式文档转word表格文档

    postman json格式文档转word表格文档 说明 依赖 代码 说明 json版本Collection v2.1,运行main方法输入json文件路径,生成word 参考: https://gi ...

  2. json接口文档模板_在.Net Core WebAPI下给Swagger增加导出离线文档功能

    一丶前言 最近刚接触到Swagger,在github上下载了它的源码和demo学习了一遍,发现这个组件非常好用,不过不足的是它没有导出离线文档的功能,于是乎我就想给它加一个导出功能 Swagger G ...

  3. 软件项目、产品版本号的命名规则、定义、命名规范(git代码分支版本、项目产品文档版本)

    文章目录 前言 一.关于对项目.产品版本的一些学习探索 问题:大家都是怎么样定义版本号的?(参考资料) 二.我在团队中是这是实践的 团队版本号实践 总结 前言 工作几年了,最近在总结项目.产品版本号命 ...

  4. 引用Bootstrap无法显示样式,可能是安装的版本和参考的文档不相符

    安装版本时没有指定版本号,默认安装最新版本4.0.0,但是使用时参考的是3.3.7版本的文档,导致不显示样式. 所以,如果使用bootstrap时出现样式问题,可以从引用文件是否正确这方面来考虑.

  5. Newtonsoft.Json Sample文档

    在.Net使用Newtonsoft.Json时,有时会需要查阅一些使用方法,现给出其官方文档. 文档地址:Sampleshttps://www.newtonsoft.com/json/help/htm ...

  6. 小幺鸡 json接口文档 转化为文档格式 输出

    前两天 非让 整理个接口文档,幸好 小幺鸡 接口 能导出 结果一看 居然是个 json 文件 内容也是json数据,也比较懒 就手写了一个 小工具  用代码 整理了一下数据 并进行输出 刚好能满足 需 ...

  7. python最新版本安卓下载_Python文档app最新版下载-Python文档app安卓版下载v1.0- 游侠下载站...

    Python文档是一款很棒的手机编程文档阅读app,用户可以在这里进行快速的Python文档的阅读和修改,非常的简单方便,这款软件很适合那些学习编程的朋友使用,这里还能对语言的性质进行解释,需要的朋友 ...

  8. 最新JDK版本JDK7U51以及帮助文档下载

    Java Development Kit(JDK)是太阳微系统针对Java开发人员发布的免费软件开发工具包(SDK,Software development kit).自从Java推出以来,JDK已经 ...

  9. Airsim Python API文档整理(1.3.1版本)

    AirSim公开了API,可以调用API与仿真器进行交互(核心就是通过RPC向仿真器发消息,进行模拟),可以通过API获取图像.状态和控制车辆等. API有Python版本和C++版本的,Python ...

最新文章

  1. reverse()反转字符串的正确使用方式
  2. CentOS防火墙操作实例(启动、停止、开、闭端口)
  3. Linux 监控命令 iostat
  4. 安卓开发——JNI——回调java中的方法
  5. 机器学习九大挑战(转载)
  6. linux服务器忘记ssh密码_【Linux】配置linux服务器之间ssh不用密码访问
  7. 手机页面图片显示高低不一致
  8. Altium Designer(3)-绘制PCB封装库
  9. 联通光猫+路由器配置IPv6流程
  10. 深度学习与人工神经网络的介绍
  11. 俄罗斯方块游戏(Python实现)
  12. Nginx nginx.conf配置文件详解
  13. 【数学分析】集合 ① ( 集合概念 | 集合表示 | 常用的数集合 | 集合的表示 )
  14. 分析基于Jsp+Servlet+JavaBean的个人信息管理系统的运行流程
  15. 尚好房 07_前端房源展示
  16. srtruct input_event学习
  17. 图书借阅管理系统微信小程序的开发 报告+开题报告+PPT+SSM项目源码及数据库文件+演示视频
  18. 推荐 10 个不错的网络监视工具
  19. java创建符号链接_符号链接或其他
  20. 基于asp.net护肤化妆品销售网站的设计与开发

热门文章

  1. RFID软件:简介、功能和应用范围
  2. 平均每个月帮节省你至少10%的时间,你还有理由不写实现命令行工具吗?
  3. 亚马逊官方选品工具——“入驻卖家产品指南”使用方法-跨境知道
  4. React focus鼠标指针变成手指
  5. 【C语言】实现3位数码管显示
  6. Vijos P1028魔族密码
  7. 度量学习DML之Contrastive Loss及其变种
  8. 数据结构:01 概念与结构
  9. 判断输入是否符合规则
  10. 前端学习之table的常用属性