【Airsim】各种设置详解

警告: settings.json 中仅添加不需要默认值的设置,其他保留默认

ref

https://github.com/microsoft/AirSim/blob/main/docs/settings.md

设置

设置存储位置

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 上,如果Blocks.sh从 LinuxNoEditor 文件夹内执行脚本(例如./Blocks.sh),则使用前面提到的路径。但是,如果从 LinuxNoEditor 文件夹外部启动,例如./LinuxNoEditor/Blocks.sh,则将/settings.json使用。

  1. 在 AirSim 子文件夹中查找名为settings.json. AirSim 子文件夹位于Documents\AirSimWindows 和~/Documents/AirSimLinux 系统上。

该文件采用通常的json 格式。首次启动时,AirSim 将settings.json在用户主文件夹中创建没有设置的文件。为避免出现问题,请始终使用 ASCII 格式保存 json 文件。

车辆、无人机、cv模式切换

轿车和多旋翼如何选择?
默认是使用多旋翼。要使用汽车简单设置"SimMode": "Car"如下:

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

SimMode 确定将使用哪种模拟模式。以下是当前支持的值:

"":提示用户选择车辆类型多旋翼或汽车
"Multirotor":使用多旋翼模拟
"Car":使用汽车模拟
"ComputerVision":仅使用相机,不使用车辆或物理

默认设置

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

屏幕显示的视图模式

ViewMode 确定默认使用哪个摄像头以及摄像头如何跟随车辆。对于多旋翼飞行器,默认 ViewMode 为 ,“FlyWithMe"而对于汽车,默认 ViewMode 为"SpringArmChase”。

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

时间

此设置控制太阳在环境中的位置。默认情况下Enabled为 false,这意味着太阳的位置保留在环境中的默认位置,并且不会随时间变化。如果Enabled为 true,则使用在字符串格式%Y-%m-%d %H:%M:%SOriginGeopoint中指定的日期部分中指定的经度、纬度和海拔高度来计算太阳位置,例如。如果该字符串为空,则使用当前日期和时间。如果为真,那么我们将调整夏令时。然后,太阳的位置按照 中指定的时间间隔不断更新。在某些情况下,可能希望天体时钟比模拟时钟运行得更快或更慢。这可以使用 来指定,例如,值 100 表示模拟时钟每 1 秒,太阳的位置就会提前 100 秒,因此太阳在天空中的移动速度会更快。StartDateTime2018-02-12 15:20:00StartDateTimeDstUpdateIntervalSecsCelestialClockSpeed

另请参阅时间 API。

原点地理点

此设置指定放置在 Unreal 环境中的 Player Start 组件的纬度、经度和海拔高度。车辆的起始点是使用此变换计算的。请注意,通过 API 公开的所有坐标均使用 SI 单位的 NED 系统,这意味着每辆车在 NED 系统中从 (0, 0, 0) 开始。一天中的时间设置是根据 中指定的地理坐标计算的OriginGeopoint。

子窗口

此设置确定按 1、2、3 键时可见的 3 个子窗口中的每一个中显示的内容。

WindowID: 可以是 0 到 2
CameraName:车辆上任何可用的摄像头或外部摄像头
ImageType:整数值决定根据ImageType enum显示哪种图像。
VehicleName:字符串允许您指定使用摄像头的车辆,在设置中指定多个车辆时使用。如果出现任何错误,例如车辆名称不正确或只有一辆车,则将使用第一辆车的摄像头。
Externaltrue:如果相机是外接相机,则设置为。如果为 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}
  ]

记录

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

RecordInterval:指定捕获两个图像之间的最小间隔(以秒为单位)。
RecordOnMove:指定如果车辆的位置或方向没有改变,则不记录帧。
Folder:创建包含录音的带有时间戳的子文件夹的父文件夹。必须指定目录的绝对路径。如果不使用,则将Documents/AirSim使用文件夹。例如"Folder": “/home//Documents”
Enabled:是否从头开始录音,设置为true模拟开始时自动开始录音。默认情况下,它设置为false
Cameras:此元素控制使用哪些相机来捕获图像。默认情况下,来自摄像机 0 的场景图像记录为压缩 png 格式。此设置是 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 }
]

查看修改记录数据,了解有关如何修改正在记录的运动学数据的详细信息。

捕捉设置

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

自动曝光:https://docs.unrealengine.com/5.3/en-US/auto-exposure-in-unreal-engine/

噪音设置

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

<think>好的,我现在需要处理用户关于AirSim无人机仿真平台的详细询问。用户已经明确要求了解其使用指南、功能特点和配置要求,并且之前的历史对话中,我提供了一些信息,但用户现在需要更深入的细节。 首先,我需要回顾之前的回答,确保这次的信息不会重复,同时补充更多细节。之前的回答提到了AirSim的核心优势,如基于Unreal Engine的高保真视觉仿真、支持多光谱相机和激光雷达,以及如何用Python控制多机协同。还有配置示例和注意事项,比如Windows下的版本匹配和端口分配。用户现在可能希望得到更系统的指南,分步骤的安装和使用说明,以及更详细的功能列表。 接下来,我需要检查用户提供的引用内容,特别是引用[1]、[2]、[3]。引用[2]提到在Win10下部署AirSim的步骤和常见问题解决,而引用[1]和[3]讨论了Gazebo和ROS2的兼容性。用户现在专注于AirSim,所以需要集中处理引用[2]的信息,但也要注意是否还有其他相关内容。例如,引用[1]中的教程链接可能需要被引用到AirSim的官方文档中,但用户特别提到的是AirSim,所以应该主要参考引用[2]的内容。 用户的问题分为三个部分:使用指南、功能介绍和配置要求。我需要将回答结构化为这三个部分,每个部分下再分小点,确保信息清晰。同时,用户可能需要具体的代码示例和配置步骤,这在我的之前的回答中有部分涉及,但需要更详细。 在功能介绍部分,我需要涵盖AirSim支持的传感器类型,如RGB摄像头、深度相机、激光雷达等,以及环境模拟能力,如天气变化、时间变化等。此外,多无人机协同仿真的实现方式,比如通过MultirotorClient类控制多个实例,以及如何与机器学习框架集成,如TensorFlow或PyTorch,这些都是用户可能关心的点。 配置要求方面,用户可能需要知道不同操作系统下的要求,如Windows和Linux的区别,硬件配置如CPU、GPU、内存和存储的具体建议。例如,引用[2]中提到的Windows 10部署,可能需要强调Windows下的特定配置,而Linux用户可能需要不同的步骤。 使用指南需要分步骤,从环境安装到基本控制,再到高级功能。例如,安装步骤可能包括安装Unreal Engine、克隆AirSim仓库、编译插件等。基本控制部分需要代码示例,比如如何启动无人机、控制飞行、获取传感器数据。高级功能可能涉及自定义环境、添加障碍物、天气模拟等。 同时,用户可能遇到常见问题,如编译错误、API连接问题、性能优化等,需要根据引用[2]中的经验提供解决方法。例如,解决VS2019的编译错误可能需要安装特定的Windows SDK版本,或者调整构建参数。 最后,需要确保所有引用都正确标注,比如引用[2]中的部署问题和解决方法,引用[1]中的官方教程链接。同时,用户可能需要进一步的学习资源,如官方文档、GitHub仓库和社区论坛,这些都需要包含在回答中。 总结来说,我需要组织一个结构清晰、内容详尽的回答,涵盖用户需求的所有方面,并结合引用中的具体信息,提供实用的步骤和解决方案,确保用户能够顺利开始使用AirSim进行无人机仿真。</think>### AirSim无人机仿真平台深度解析 --- #### 一、核心功能与特性 1. **高保真环境模拟** - **视觉渲染**:基于Unreal Engine 4/5实现电影级画质(支持PBR材质、动态光照)[^2] - **天气系统**:可模拟雨雪雾霾(通过`simSetWeatherParameter`控制强度) ```python client.simSetWeatherParameter(WeatherParameter.Rain, 0.8) # 降雨强度80% ``` - **昼夜循环**:支持24小时动态时间变化(UTC时间同步) 2. **多传感器支持** | 传感器类型 | 参数配置示例 | 数据输出格式 | |------------------|----------------------------------|-----------------------| | RGB摄像头 | `CameraInfo("front", 0)` | 720P@30fps PNG序列 | | 深度相机 | `enable_depth=True` | 16位浮点深度图 | | 激光雷达 | `NumberOfChannels=32` | PointCloud2消息 | | IMU | `update_frequency=200Hz` | 四元数+加速度计原始值 | 3. **多无人机协同** - 支持最多16台无人机同步控制(需分配不同端口) - 集群通信协议: ```python # 创建多客户端实例 drones = [AirSimClient(port=41451+i) for i in range(3)] # 同步起飞指令 [drone.takeoffAsync() for drone in drones] ``` --- #### 二、环境配置指南(Windows/Linux双平台) ##### 1. **硬件要求** | 组件 | 最低配置 | 推荐配置 | |------------|-----------------------|-------------------------| | **CPU** | Intel i5-6500 | Intel i7-10700K | | **GPU** | NVIDIA GTX 1060 6GB | NVIDIA RTX 3080 12GB | | **内存** | 16GB DDR4 | 32GB DDR4 3200MHz | | **存储** | 50GB SSD(UE4资源) | 1TB NVMe SSD | ##### 2. **软件依赖安装** - **Windows专项步骤**: 1. 安装Visual Studio 2019+(必须包含C++桌面开发组件)[^2] 2. 配置Windows SDK 10.0.18362.0(旧版本AirSim兼容性关键) 3. 安装Epic Games Launcher并获取UE4.27源码(需注册开发者账户) - **Linux专项步骤**(Ubuntu 20.04为例): ```bash sudo apt install clang-10 libvulkan1 mesa-utils git clone https://github.com/Microsoft/AirSim.git ./setup.sh # 自动安装UE4编译环境 ``` ##### 3. **AirSim插件编译** ```bash # 在UE4工程中集成AirSim cd AirSim/Unreal/Environments ./generate.sh # 生成Blocks示例环境 # 使用Visual Studio或Qt Creator打开.sln工程文件编译 ``` --- #### 三、基础到进阶使用教程 ##### 1. **快速启动无人机控制** ```python from airsim import MultirotorClient import numpy as np # 初始化连接 client = MultirotorClient() client.confirmConnection() client.enableApiControl(True) client.armDisarm(True) # 执行起飞-航点飞行-降落 client.takeoffAsync().join() client.moveToPositionAsync(10, 5, -8, 5).join() # 坐标系为NED client.landAsync().join() ``` ##### 2. **传感器数据采集** ```python # 获取双目相机图像 responses = client.simGetImages([ ImageRequest("front_center", AirSimImageType.Scene), ImageRequest("front_center", AirSimImageType.DepthPlanar, True) ]) # 深度图解码 depth_data = np.frombuffer(responses[1].image_data_uint8, dtype=np.uint8) depth_img = depth_data.reshape(responses[1].height, responses[1].width, 3) ``` ##### 3. **集群编队算法验证** ```python # 实现三角形编队 positions = { "Drone1": (0, 0, -10), "Drone2": (5, 0, -10), "Drone3": (2.5, 5, -10) } for name in positions: client.moveToPositionAsync(*positions[name], 3, vehicle_name=name) ``` --- #### 四、典型问题解决方案 1. **UE4编译错误** - **现象**:`MSB3073`退出代码5 - **解决**:以管理员身份运行`GenerateProjectFiles.bat`并关闭杀毒软件[^2] 2. **API连接超时** - **检查项**: - 确认`settings.json`中`ApiServerPort`与代码一致 - Windows防火墙允许`UE4Editor.exe`通过 3. **帧率过低优化** - 修改`Engine.ini`添加: ``` [ConsoleVariables] r.VSync=0 r.ScreenPercentage=70 ``` --- #### 五、学习资源推荐 1. **官方文档**:<https://microsoft.github.io/AirSim/>(含API详解)[^1] 2. **实战案例库**:<https://github.com/Microsoft/AirSim-NeurIPS2019-Drone-Racing> 3. **社区支持**:AirSim Discord频道(实时问题讨论) --- 如需具体场景的配置案例(如农业巡检仿真、城市物流路径规划),可提供详细需求继续深入探讨。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值