AirSim 中的传感器#

AirSim 目前支持以下传感器。每个传感器都关联一个整数枚举,指定其传感器类型。

  • 摄像头
  • 气压计 = 1
  • 惯性测量单元 = 2
  • 全球定位系统 = 3
  • 磁力计 = 4
  • 距离传感器 = 5
  • 激光雷达 = 6

注意:摄像头的配置与其他传感器不同,没有与其关联的枚举。请参阅通用设置图像API以获取摄像头配置和API。

默认传感器#

如果在settings.json中未指定任何传感器,则根据模拟模式默认启用以下传感器。

多旋翼飞行器#

  • 惯性测量单元
  • 磁力计
  • 全球定位系统
  • 气压计

汽车#

  • 全球定位系统

计算机视觉#

  • None (无)

在后台,AirSimSettings.hpp中的createDefaultSensorSettings方法根据settings.json文件中指定的模拟模式,使用其默认参数设置上述传感器。

配置默认传感器列表#

默认传感器列表可以在设置json中配置

"DefaultSensors": {
    "Barometer": {
        "SensorType": 1,
        "Enabled" : true,
        "PressureFactorSigma": 0.001825,
        "PressureFactorTau": 3600,
        "UncorrelatedNoiseSigma": 2.7,
        "UpdateLatency": 0,
        "UpdateFrequency": 50,
        "StartupDelay": 0

    },
    "Imu": {
        "SensorType": 2,
        "Enabled" : true,
        "AngularRandomWalk": 0.3,
        "GyroBiasStabilityTau": 500,
        "GyroBiasStability": 4.6,
        "VelocityRandomWalk": 0.24,
        "AccelBiasStabilityTau": 800,
        "AccelBiasStability": 36
    },
    "Gps": {
        "SensorType": 3,
        "Enabled" : true,
        "EphTimeConstant": 0.9,
        "EpvTimeConstant": 0.9,
        "EphInitial": 25,
        "EpvInitial": 25,
        "EphFinal": 0.1,
        "EpvFinal": 0.1,
        "EphMin3d": 3,
        "EphMin2d": 4,
        "UpdateLatency": 0.2,
        "UpdateFrequency": 50,
        "StartupDelay": 1
    },
    "Magnetometer": {
        "SensorType": 4,
        "Enabled" : true,
        "NoiseSigma": 0.005,
        "ScaleFactor": 1,
        "NoiseBias": 0,
        "UpdateLatency": 0,
        "UpdateFrequency": 50,
        "StartupDelay": 0
    },
    "Distance": {
        "SensorType": 5,
        "Enabled" : true,
        "MinDistance": 0.2,
        "MaxDistance": 40,
        "X": 0, "Y": 0, "Z": -1,
        "Yaw": 0, "Pitch": 0, "Roll": 0,
        "DrawDebugPoints": false
    },
    "Lidar2": {
        "SensorType": 6,
        "Enabled" : true,
        "NumberOfChannels": 16,
        "RotationsPerSecond": 10,
        "PointsPerSecond": 100000,
        "X": 0, "Y": 0, "Z": -1,
        "Roll": 0, "Pitch": 0, "Yaw" : 0,
        "VerticalFOVUpper": -15,
        "VerticalFOVLower": -25,
        "HorizontalFOVStart": -20,
        "HorizontalFOVEnd": 20,
        "DrawDebugPoints": true,
        "DataFrame": "SensorLocalFrame"
    }
},

配置特定于车辆的传感器列表#

车辆可以覆盖上述默认传感器的子集。激光雷达和距离传感器默认不会添加到车辆中,因此您需要以这种方式添加它们。每个传感器都必须有一个有效的“SensorType”,并且可以定义属性子集以覆盖上面显示的默认值,您可以将Enabled设置为false以禁用特定类型的传感器。

"Vehicles": {

    "Drone1": {
        "VehicleType": "SimpleFlight",
        "AutoCreate": true,
        ...
        "Sensors": {
            "Barometer":{
                "SensorType": 1,
                "Enabled": true,
                "PressureFactorSigma": 0.0001825
            },
            "MyLidar1": {
                "SensorType": 6,
                "Enabled" : true,
                "NumberOfChannels": 16,
                "PointsPerSecond": 10000,
                "X": 0, "Y": 0, "Z": -1,
                "DrawDebugPoints": true
            },
            "MyLidar2": {
                "SensorType": 6,
                "Enabled" : true,
                "NumberOfChannels": 4,
                "PointsPerSecond": 10000,
                "X": 0, "Y": 0, "Z": -1,
                "DrawDebugPoints": true
            }
        }
    }
}

传感器特定设置#

有关这些传感器设置含义的详细信息,请参阅以下页面

服务器端可视化以进行调试#

默认情况下,距离传感器击中的点不会在视口上绘制。要在视口上启用击中点的绘制,请通过settings json启用设置DrawDebugPoints。例如 -

"Distance": {
    "SensorType": 5,
    "Enabled" : true,
    ...
    "DrawDebugPoints": true
}

传感器API#

直接跳转到hello_drone.pyhello_drone.cpp查看示例用法,或参阅下文以获取完整的API。

气压计#

msr::airlib::BarometerBase::Output getBarometerData(const std::string& barometer_name, const std::string& vehicle_name);
barometer_data = client.getBarometerData(barometer_name = "", vehicle_name = "")

惯性测量单元#

msr::airlib::ImuBase::Output getImuData(const std::string& imu_name = "", const std::string& vehicle_name = "");
imu_data = client.getImuData(imu_name = "", vehicle_name = "")

全球定位系统#

msr::airlib::GpsBase::Output getGpsData(const std::string& gps_name = "", const std::string& vehicle_name = "");
gps_data = client.getGpsData(gps_name = "", vehicle_name = "")

磁力计#

msr::airlib::MagnetometerBase::Output getMagnetometerData(const std::string& magnetometer_name = "", const std::string& vehicle_name = "");
magnetometer_data = client.getMagnetometerData(magnetometer_name = "", vehicle_name = "")

距离传感器#

msr::airlib::DistanceSensorData getDistanceSensorData(const std::string& distance_sensor_name = "", const std::string& vehicle_name = "");
distance_sensor_data = client.getDistanceSensorData(distance_sensor_name = "", vehicle_name = "")

激光雷达#

有关激光雷达API,请参阅激光雷达页面