AirSim 设置#

设置存储在哪里?#

AirSim 按以下顺序搜索设置定义。将使用第一个匹配项

  1. 查看 -settings 命令行参数指定的(绝对)路径。例如,在 Windows 中:AirSim.exe -settings="C:\path\to\settings.json" 在 Linux 中 ./Blocks.sh -settings="/home/$USER/path/to/settings.json"

  2. 查找作为 -settings 参数通过命令行参数传递的 json 文档。例如,在 Windows 中:AirSim.exe -settings={"foo":"bar"} 在 Linux 中 ./Blocks.sh -settings={"foo":"bar"}

  3. 在可执行文件文件夹中查找名为 settings.json 的文件。这将是编辑器或二进制文件的实际可执行文件存储的深层位置。例如,对于 Blocks 二进制文件,搜索位置是 <path-of-binary>/LinuxNoEditor/Blocks/Binaries/Linux/settings.json

  4. 在可执行文件启动的文件夹中搜索 settings.json

    这是一个包含启动脚本或可执行文件的顶级目录。例如,Linux:<path-of-binary>/LinuxNoEditor/settings.json,Windows:<path-of-binary>/WindowsNoEditor/settings.json

    请注意,此路径会根据调用位置而变化。在 Linux 上,如果从 LinuxNoEditor 文件夹内部执行 Blocks.sh 脚本,例如 ./Blocks.sh,则使用前面提到的路径。但是,如果从 LinuxNoEditor 文件夹外部启动,例如 ./LinuxNoEditor/Blocks.sh,则将使用 <path-of-binary>/settings.json

  5. 在 AirSim 子文件夹中查找名为 settings.json 的文件。AirSim 子文件夹位于 Windows 上的 Documents\AirSim 和 Linux 系统上的 ~/Documents/AirSim

该文件采用常见的 json 格式。首次启动时,AirSim 将在用户主文件夹中创建一个不带任何设置的 settings.json 文件。为避免问题,请始终使用 ASCII 格式保存 json 文件。

如何选择汽车或多旋翼飞行器?#

默认使用多旋翼飞行器。要使用汽车,只需像这样设置 "SimMode": "Car"

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

要选择多旋翼飞行器,请设置 "SimMode": "Multirotor"。如果您想提示用户选择车辆类型,请使用 "SimMode": ""

可用设置及其默认值#

以下是可用设置及其默认值的完整列表。如果 json 文件中缺少任何设置,则使用默认值。某些默认值仅指定为 "",这意味着实际值可能会根据您使用的车辆进行选择。例如,ViewMode 设置的默认值为 "",对于无人机转换为 "FlyWithMe",对于汽车转换为 "SpringArmChase"

警告:不要将以下所有内容复制粘贴到您的 settings.json 中。我们强烈建议仅添加您不希望使用默认值的设置。唯一必需的元素是 "SettingsVersion"

{
  "SimMode": "",
  "ClockType": "",
  "ClockSpeed": 1,
  "LocalHostIp": "127.0.0.1",
  "ApiServerPort": 41451,
  "RecordUIVisible": true,
  "LogMessagesVisible": true,
  "ShowLosDebugLines": false,
  "ViewMode": "",
  "RpcEnabled": true,
  "EngineSound": true,
  "PhysicsEngineName": "",
  "SpeedUnitFactor": 1.0,
  "SpeedUnitLabel": "m/s",
  "Wind": { "X": 0, "Y": 0, "Z": 0 },
  "CameraDirector": {
    "FollowDistance": -3,
    "X": NaN, "Y": NaN, "Z": NaN,
    "Pitch": NaN, "Roll": NaN, "Yaw": NaN
  },
  "Recording": {
    "RecordOnMove": false,
    "RecordInterval": 0.05,
    "Folder": "",
    "Enabled": false,
    "Cameras": [
        { "CameraName": "0", "ImageType": 0, "PixelsAsFloat": false,  "VehicleName": "", "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,
    "UnrealEngine": {
      "PixelFormatOverride": [
        {
          "ImageType": 0,
          "PixelFormat": 0
        }
      ]
    }
  },
  "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, "VehicleName": "", "Visible": false, "External": false},
    {"WindowID": 1, "CameraName": "0", "ImageType": 5, "VehicleName": "", "Visible": false, "External": false},
    {"WindowID": 2, "CameraName": "0", "ImageType": 0, "VehicleName": "", "Visible": false, "External": false}
  ],
  "SegmentationSettings": {
    "InitMethod": "",
    "MeshNamingMethod": "",
    "OverrideExisting": true
  },
  "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,
      "EnableTrace": false,
      "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
    }
  },
  "ExternalCameras": {
    "FixedCamera1": {
        // same elements as in CameraDefaults above
    },
    "FixedCamera2": {
        // same elements as in CameraDefaults above
    }
  }
}

SimMode(模拟模式)#

SimMode 决定将使用哪种模拟模式。目前支持以下值: - "":提示用户选择车辆类型(多旋翼或汽车) - "Multirotor":使用多旋翼模拟 - "Car":使用汽车模拟 - "ComputerVision":仅使用相机,不使用车辆或物理

ViewMode(视图模式)#

ViewMode 决定了默认使用哪个相机以及相机如何跟随车辆。对于多旋翼飞行器,默认 ViewMode 为 "FlyWithMe",而对于汽车,默认 ViewMode 为 "SpringArmChase"

  • FlyWithMe:从车辆后方以六个自由度追逐车辆
  • GroundObserver:从地面上方 6 英尺处追逐车辆,但在 XY 平面中具有完全自由。
  • Fpv:从车辆的前置摄像头查看场景
  • Manual:不自动移动相机。使用箭头键和 ASWD 键手动移动相机。
  • SpringArmChase:使用安装在通过弹簧连接到车辆(因此其运动存在一些延迟)的(隐形)臂上的相机追逐车辆。
  • NoDisplay:这将冻结主屏幕的渲染,但子窗口、录制和 API 的渲染保持活动状态。此模式在“无头”模式下很有用,您只对获取图像感兴趣,而不关心主屏幕上渲染的内容。这还可以提高录制图像的 FPS。

TimeOfDay(时间)#

此设置控制环境中太阳的位置。默认情况下,Enabled 为 false,这意味着太阳的位置保持环境中默认的位置,并且不会随时间变化。如果 Enabled 为 true,则太阳位置使用 OriginGeopoint 部分中指定的经度、纬度和高度,以及 StartDateTime 中以 %Y-%m-%d %H:%M:%S 格式(例如 2018-02-12 15:20:00)指定的日期计算。如果此字符串为空,则使用当前日期和时间。如果 StartDateTimeDst 为 true,则我们调整夏令时。然后以 UpdateIntervalSecs 中指定的间隔连续更新太阳位置。在某些情况下,可能希望天体时钟比模拟时钟运行得更快或更慢。这可以使用 CelestialClockSpeed 指定,例如,值 100 表示每 1 秒模拟时钟,太阳位置前进 100 秒,因此太阳将在天空中移动得更快。

另请参阅 时间 API

OriginGeopoint(原点地理坐标)#

此设置指定放置在 Unreal 环境中的玩家起始组件的纬度、经度和海拔高度。车辆的起点是使用此转换计算的。请注意,通过 API 公开的所有坐标都使用 SI 单位的 NED 系统,这意味着每辆车都在 NED 系统中的 (0, 0, 0) 处启动。时间设置是针对 OriginGeopoint 中指定的地理坐标计算的。

SubWindows(子窗口)#

此设置决定了当您按下 1,2,3 键时可见的 3 个子窗口中的每个窗口中显示的内容。

  • WindowID:可以是 0 到 2
  • CameraName:是车辆上的任何可用摄像头或外部摄像头
  • ImageType:整数值根据ImageType 枚举决定显示哪种图像。
  • VehicleName:字符串允许您指定要从中获取摄像头的车辆,在设置中指定多辆车辆时使用。如果存在任何错误(例如车辆名称不正确或只有一辆车辆),则将使用第一辆车辆的摄像头。
  • External:如果摄像头是外部摄像头,请将其设置为 true。如果为 true,则忽略 VehicleName 参数

例如,对于一辆汽车,下面分别显示了驾驶员视图、前保险杠视图和后视图作为场景、深度和表面法线。

  "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}
  ]

在多辆车辆的情况下,可以按以下方式指定不同的车辆 -

    "SubWindows": [
        {"WindowID": 0, "CameraName": "0", "ImageType": 3, "VehicleName": "Car1", "Visible": false},
        {"WindowID": 1, "CameraName": "0", "ImageType": 5, "VehicleName": "Car2", "Visible": false},
        {"WindowID": 2, "CameraName": "0", "ImageType": 0, "VehicleName": "Car1", "Visible": false}
    ]

Recording(录制)#

录制功能允许您以指定间隔录制数据,例如位置、方向、速度以及捕获的图像。您可以通过按右下角的红色录制按钮或 R 键开始录制。数据存储在 Documents\AirSim 文件夹(或使用 Folder 指定的文件夹)中,每个录制会话都有一个带时间戳的子文件夹,作为制表符分隔文件。

  • RecordInterval:指定捕获两张图像之间的最小间隔(以秒为单位)。
  • RecordOnMove:指定如果车辆位置或方向没有改变,则不记录帧。
  • Folder:创建带时间戳的录制子文件夹的父文件夹。必须指定目录的绝对路径。如果未使用,则将使用 Documents/AirSim 文件夹。例如 "Folder": "/home/<user>/Documents"
  • Enabled:是否从头开始录制,设置为 true 将在模拟开始时自动开始录制。默认情况下,它设置为 false
  • Cameras:此元素控制用于捕获图像的摄像头。默认情况下,以压缩 png 格式录制摄像头 0 的场景图像。此设置为 json 数组,因此您可以指定多个摄像头来捕获图像,每个摄像头可能具有不同的图像类型
    • PixelsAsFloat 为 true 时,图像将保存为 pfm 文件而不是 png 文件。
    • VehicleName 选项允许您为单个车辆指定单独的摄像头。如果 Cameras 元素不存在,则将记录每辆车的默认摄像头的 Scene 图像。
    • 如果您不想录制任何图像而只录制车辆的物理数据,则指定 Cameras 元素但将其留空,如下所示:"Cameras": []
    • 外部摄像头目前不支持录制

例如,下面的 Cameras 元素记录 Car1 的场景和分割图像以及 Car2 的场景 -

"Cameras": [
    { "CameraName": "0", "ImageType": 0, "PixelsAsFloat": false, "VehicleName": "Car1", "Compress": true },
    { "CameraName": "0", "ImageType": 5, "PixelsAsFloat": false, "VehicleName": "Car1", "Compress": true },
    { "CameraName": "0", "ImageType": 0, "PixelsAsFloat": false, "VehicleName": "Car2", "Compress": true }
]

有关如何修改正在录制的运动学数据的详细信息,请查看修改录制数据

ClockSpeed(时钟速度)#

此设置允许您设置模拟时钟相对于挂钟的速度。例如,值 5.0 意味着当挂钟经过 1 秒时,模拟时钟已经过 5 秒(即模拟运行得更快)。值 0.1 意味着模拟时钟比挂钟慢 10 倍。值 1 意味着模拟实时运行。重要的是要认识到,随着模拟时钟运行得更快,模拟质量可能会下降。您可能会看到诸如物体越过障碍物等伪影,因为未检测到碰撞。但是,减慢模拟时钟(即值 < 1.0)通常会提高模拟质量。

Segmentation Settings(分割设置)#

InitMethod 确定在启动时如何初始化对象 ID 以生成分割。值 "" 或 "CommonObjectsRandomIDs"(默认)表示在启动时为每个对象分配随机 ID。这将生成带有分配给每个对象的随机颜色的分割视图。值 "None" 表示不初始化对象 ID。这将导致分割视图具有单一纯色。如果您计划使用 API 设置对象 ID,此模式很有用,并且可以为 CityEnviron 等大型环境节省大量启动延迟。

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

如果 MeshNamingMethod 为 "" 或 "OwnerName",则我们使用网格的所有者名称生成随机哈希作为对象 ID。如果为 "StaticMeshName",则我们使用静态网格的名称生成随机哈希作为对象 ID。请注意,这样无法区分同一静态网格的各个实例,但名称通常更直观。

Wind Settings(风力设置)#

此设置以世界坐标系 NED 方向指定风速。值以米/秒为单位。默认情况下,速度为 0,即无风。

Camera Director Settings(相机导向器设置)#

此元素指定用于视口中跟随车辆的摄像机设置。

  • FollowDistance:摄像机跟随车辆的距离,默认为汽车 -8(8 米),其他为 -3。
  • X, Y, Z, Yaw, Roll, Pitch:这些元素允许您指定摄像机相对于车辆的位置和方向。位置采用 SI 单位的 NED 坐标,原点设置为 Unreal 环境中的玩家起始位置。方向以度为单位指定。

Camera Settings(相机设置)#

根级别的 CameraDefaults 元素指定所有摄像机使用的默认值。这些默认值可以在后面描述的 Vehicles 元素中的单个摄像机中被覆盖。

ImageType 元素说明#

JSON 数组中的 ImageType 元素决定了这些设置适用于哪种图像类型。有效值在ImageType 部分中描述。此外,我们还支持特殊值 ImageType: -1,以将设置应用于外部摄像机(即您在屏幕上看到的)。

例如,CaptureSettings 元素是 json 数组,因此您可以轻松添加多种图像类型的设置。

CaptureSettings(捕获设置)#

CaptureSettings 决定如何渲染不同图像类型,例如场景、深度、视差、表面法线和分割视图。Width、Height 和 FOV 设置应该不言自明。AutoExposureSpeed 决定了眼睛适应的工作速度。我们通常将其设置为较高的值,例如 100,以避免图像捕获中的伪影。同样,我们默认将 MotionBlurAmount 设置为 0,以避免真实图像中的伪影。ProjectionMode 决定了捕获相机使用的投影,可以取值 "perspective"(默认)或 "orthographic"。如果投影模式为 "orthographic",则 OrthoWidth 决定了捕获的投影区域的宽度(以米为单位)。

有关其他设置的说明,请参阅本文

NoiseSettings(噪声设置)#

NoiseSettings 允许向指定的图像类型添加噪声,目的是模拟相机传感器噪声、干扰和其他伪影。默认情况下不添加噪声,即 Enabled: false。如果将 Enabled: true,则启用以下不同类型的噪声和干扰伪影,每种都可以通过设置进一步调整。噪声效果作为虚幻引擎中名为 CameraSensorNoise 的后期处理材质实现的着色器。

相机噪声和干扰模拟演示

AirSim Drone Demo Video

随机噪声#

这会添加具有以下参数的随机噪声斑点。* RandContrib:这决定了噪声像素与图像像素的混合比例,0 表示无噪声,1 表示仅噪声。* RandSpeed:这决定了噪声波动的速度,1 表示无波动,1E6 等更高值表示完全波动。* RandSize:这决定了噪声的粗糙度,1 表示每个像素都有自己的噪声,而更高值表示多个像素共享相同的噪声值。* RandDensity:这决定了总像素中有多少像素会受到噪声影响,1 表示所有像素,而更高值表示更少的像素(指数级)。

水平颠簸失真#

这会添加水平颠簸/闪烁/重影效果。* HorzWaveContrib:这决定了噪声像素与图像像素的混合比例,0 表示无噪声,1 表示仅噪声。* HorzWaveStrength:这决定了效果的整体强度。* HorzWaveVertSize:这决定了有多少垂直像素会受到效果影响。* HorzWaveScreenSize:这决定了屏幕有多少部分受到效果影响。

水平噪声线#

这会在水平线上添加噪声区域。* HorzNoiseLinesContrib:这决定了噪声像素与图像像素的混合比例,0 表示无噪声,1 表示仅噪声。* HorzNoiseLinesDensityY:这决定了水平线中有多少像素受到影响。* HorzNoiseLinesDensityXY:这决定了屏幕上有多少行受到影响。

水平线失真#

这会在水平线上添加波动。* HorzDistortionContrib:这决定了噪声像素与图像像素的混合比例,0 表示无噪声,1 表示仅噪声。* HorzDistortionStrength:这决定了失真的大小。

云台#

Gimbal 元素允许冻结相机的俯仰、滚转和/或偏航方向。除非 ImageType 为 -1,否则此设置将被忽略。Stabilization 默认设置为 0,表示无万向节,即相机方向随身体方向在所有轴上变化。值为 1 表示完全稳定。0 到 1 之间的值充当指定固定角度(以度为单位,在世界坐标系中)在 PitchRollYaw 元素中以及车辆车身方向的权重。当 json 中省略任何角度或设置为 NaN 时,该角度不会稳定(即它随车辆车身移动)。

UnrealEngine(虚幻引擎)#

此元素包含特定于虚幻引擎的设置。在 Unity 项目中,这些将被忽略。* PixelFormatOverride:这包含一个列表,其中包含 ImageTypePixelFormat 设置。每个元素允许您覆盖为 ImageType 设置指定的捕获实例化的 UTextureRenderTarget2D 对象的默认像素格式。指定此元素可防止由意外像素格式引起的崩溃(有关这些崩溃的示例,请参阅 #4120#4339)。像素格式的完整列表可以在 此处 查看。

External Cameras(外部摄像机)#

此元素允许指定与连接到车辆的摄像机分开的摄像机,例如CCTV摄像机。这些是固定摄像机,不随车辆移动。元素中的键是摄像机的名称,值(即设置)与上述 CameraDefaults 相同。所有摄像机 API 都适用于外部摄像机,包括捕获图像、更改姿态等,只需在 API 调用中传递参数 external=True

Vehicles Settings(车辆设置)#

每种模拟模式都将遍历此设置中指定的车辆列表,并创建 "AutoCreate": true 的车辆。此设置中指定的每辆车辆都有一个键,该键成为车辆的名称。如果缺少 "Vehicles" 元素,则此列表将填充名为“PhysXCar”的默认汽车和名为“SimpleFlight”的默认多旋翼飞行器。

Common Vehicle Setting(通用车辆设置)#

  • VehicleType:这可以是以下任何一种 - PhysXCarSimpleFlightPX4MultirotorComputerVisionArduCopterArduRover。没有默认值,因此必须指定此元素。
  • PawnPath:这允许覆盖用于车辆的典当蓝图。例如,您可以在 AirSim 代码之外的自己的项目中为仓库机器人创建从 ACarPawn 派生新典当蓝图,然后在此处指定其路径。另请参阅PawnPaths。请注意,您必须使用您专有定义的对象名称在全局 PawnPaths 对象中指定您的自定义典当蓝图类路径,并在 Vehicles 设置中引用该名称。例如,
        {
          ...
          "PawnPaths": {
            "CustomPawn": {"PawnBP": "Class'/Game/Assets/Blueprints/MyPawn.MyPawn_C'"}
          },
          "Vehicles": {
            "MyVehicle": {
              "VehicleType": ...,
              "PawnPath": "CustomPawn",
              ...
            }
          }
        }
  • DefaultVehicleState:多旋翼的可能值为 ArmedDisarmed
  • AutoCreate:如果为 true,则将生成此车辆(如果选定的模拟模式支持)。
  • RC:此子元素允许使用 RemoteControlID 指定用于车辆的遥控器。值 -1 表示使用键盘(多旋翼飞行器尚不支持)。值 >= 0 指定连接到系统的众多遥控器之一。例如,Windows 中的游戏控制器面板中可以看到可用遥控器列表。
  • X, Y, Z, Yaw, Roll, Pitch:这些元素允许您指定车辆的初始位置和方向。位置采用 SI 单位的 NED 坐标,原点设置为 Unreal 环境中的玩家起始位置。方向以度为单位指定。
  • IsFpvVehicle:此设置允许指定哪个车辆摄像头将跟随以及当 ViewMode 设置为 Fpv 时将显示的视图。默认情况下,AirSim 选择设置中的第一辆车作为 FPV 车辆。
  • Sensors:此元素指定与车辆关联的传感器,请参阅传感器页面了解详细信息。
  • Cameras:此元素指定车辆的摄像头设置。此元素中的键是可用摄像头的名称,其值与上面描述的 CameraDefaults 相同。例如,要将前置中央摄像头的 FOV 更改为 120 度,您可以在 Vehicles 设置中使用此项
"Vehicles": {
    "FishEyeDrone": {
      "VehicleType": "SimpleFlight",
      "Cameras": {
        "front-center": {
          "CaptureSettings": [
            {
              "ImageType": 0,
              "FOV_Degrees": 120
            }
          ]
        }
      }
    }
}

使用 PX4#

默认情况下,我们使用 simple_flight,因此您无需进行单独的 HITL 或 SITL 设置。我们还支持"PX4",供高级用户使用。要在 AirSim 中使用 PX4,您可以将 Vehicles 设置使用以下内容

"Vehicles": {
    "PX4": {
      "VehicleType": "PX4Multirotor",
    }
}

Additional PX4 Settings(其他 PX4 设置)#

PX4 的默认值是启用硬件在环设置。PX4 还有其他各种设置,如下所示,并附有其默认值

"Vehicles": {
    "PX4": {
      "VehicleType": "PX4Multirotor",
      "Lockstep": true,
      "ControlIp": "127.0.0.1",
      "ControlPortLocal": 14540,
      "ControlPortRemote": 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",
      "Logs": "d:\\temp\\mavlink",
      "Sensors": {
        ...
      }
      "Parameters": {
        ...
      }
    }
}

这些设置定义了模拟器 (SimSysID, SimCompID) 和车辆 (VehicleSysID, VehicleCompID) 的 MavLink SystemId 和 ComponentId,以及允许从另一个应用程序远程控制无人机的节点,这称为离板节点 (OffboardSysID, OffboardCompID)。

如果您希望模拟器也将 mavlink 消息转发到您的地面控制应用程序(如 QGroundControl),您还可以设置该 UDP 地址,以防您想在不同的机器上运行它(QgcHostIp,QgcPort)。默认是本地主机,因此 QGroundControl 应该“正常工作”,如果它在同一台机器上运行的话。

您可以通过设置其 UDP 地址(LogViewerHostIp,LogViewerPort)将模拟器连接到此仓库中提供的 LogViewer 应用程序。

对于添加到模拟器中的每架飞行无人机,都有一组附加设置。在上面您可以看到默认名称“PX4”。当您添加新的 BP_FlyingPawn 资产时,您可以在 Unreal 编辑器中更改此名称。您将看到这些属性分组在“MavLink”类别下。此典当的 MavLink 节点可以通过 UDP 远程连接,也可以连接到本地串行端口。如果串行,则将 UseSerial 设置为 true,否则将 UseSerial 设置为 false。对于串行连接,您还需要设置适当的 SerialBaudRate。默认值 115200 适用于通过 USB 的 Pixhawk 版本 2。

当通过串行端口与 PX4 无人机通信时,HIL_* 消息和车辆控制消息共享同一串行端口。当通过 UDP 或 TCP 通信时,PX4 需要两个独立的通道。如果 UseTcp 为 false,则 UdpIp、UdpPort 用于发送 HIL_* 消息,否则使用 TcpPort。PX4 在 1.9.2 版中添加了 TCP 支持以及 lockstep 功能,因为 lockstep 的正常运行需要 TCP 提供的消息传递保证。在这种情况下,AirSim 成为 TCP 服务器,并等待 PX4 应用程序的连接。用于控制车辆的第二个通道由 (ControlIp, ControlPort) 定义,并且始终是 UDP 通道。

Sensors 部分可以为模拟传感器提供自定义设置,请参阅传感器Parameters 部分可以在 PX4 连接初始化期间设置 PX4 参数。有关示例,请参阅设置 PX4 软件在环

使用 ArduPilot#

AirSim 主分支和 v1.3.0 及更高版本支持 ArduPilot Copter 和 Rover 车辆。有关设置和使用方法,请参阅 使用 AirSim 的 ArduPilot SITL

Other Settings(其他设置)#

EngineSound(发动机声音)#

要关闭发动机声音,请使用设置 "EngineSound": false。目前此设置仅适用于汽车。

PawnPaths(典当路径)#

这允许您指定自己的车辆典当蓝图,例如,您可以用自己的汽车替换 AirSim 中的默认汽车。您的车辆 BP 可以位于您自己的 Unreal 项目的内容文件夹中(即 AirSim 插件文件夹之外)。例如,如果您的项目中有一个汽车 BP 位于文件 Content\MyCar\MySedanBP.uasset 中,那么您可以设置 "DefaultCar": {"PawnBP":"Class'/Game/MyCar/MySedanBP.MySedanBP_C'"}XYZ.XYZ_C 是指定 BP XYZ 类的特殊表示法。请注意,您的 BP 必须派生自 CarPawn 类。默认情况下不是这种情况,但您可以在打开 BP 后使用 UE 编辑器工具栏中的“类设置”按钮重新绑定 BP,然后在“类选项”中选择“Car Pawn”作为父类设置。禁用“自动拥有玩家”和“自动拥有 AI”以及在 BP 详细信息中将 AI 控制器类设置为 None 也是一个好主意。如果您正在创建二进制文件,请确保您的资产包含在打包选项中。

PhysicsEngineName(物理引擎名称)#

对于汽车,我们目前只支持 PhysX(无论此设置中的值如何)。对于多旋翼飞行器,我们支持 "FastPhysicsEngine""ExternalPhysicsEngine""ExternalPhysicsEngine" 允许通过 setVehiclePose() 控制无人机,使其保持原位直到下一次调用。它对于使用外部模拟器或沿着保存的路径移动 AirSim 无人机特别有用。

LocalHostIp Setting(本地主机 IP 设置)#

现在,当连接到远程机器时,您可能需要选择特定的以太网适配器才能访问这些机器,例如,它可能通过以太网或 Wi-Fi,或一些其他特殊的虚拟适配器或 VPN。您的 PC 可能有多个网络,并且这些网络可能不允许相互通信,在这种情况下,来自一个网络的 UDP 消息将无法通过其他网络。

因此,LocalHostIp 允许您配置如何访问这些机器。默认的 127.0.0.1 无法访问外部机器,此默认值仅在您要与之通信的所有内容都包含在单个 PC 上时使用。

ApiServerPort(API 服务器端口)#

此设置决定了 AirSim 客户端使用的服务器端口,默认端口为 41451。通过指定不同的端口,用户可以并行运行多个环境以加速数据收集过程。

SpeedUnitFactor(速度单位因子)#

速度单位转换因子,与 m/s 相关,默认值为 1。与 SpeedUnitLabel 结合使用。这可能仅用于显示目的,例如驾驶汽车时屏幕上的速度。例如,要获得以 英里/小时 为单位的速度,请使用因子 2.23694。

SpeedUnitLabel(速度单位标签)#

速度单位标签,默认为 m/s。与 SpeedUnitFactor 结合使用。