Airsim(1.3.1版本)setting.json帮助文档解析

  • Post author:
  • Post category:其他


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



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

    ,

    fpv



    back_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

,

Roll



Yaw

任何一个值设为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

    ,

    PX4Multirotor



    ComputerVision

    . 不存在默认值因此这个必须被指定。

  • 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

    : 用于无人机的可能值,

    Armed



    Disarmed


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



版权声明:本文为Zhaoxi_Li原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。