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.py
或hello_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,请参阅激光雷达页面。