如何在AirSim中使用激光雷达#
AirSim支持多旋翼飞行器和汽车的激光雷达。
激光雷达的启用和其他激光雷达设置可以通过AirSimSettings json进行配置。有关通用/共享传感器设置的配置信息,请参阅通用传感器。
在车辆上启用激光雷达#
- 默认情况下,激光雷达未启用。要启用激光雷达,请在settings json中设置SensorType和Enabled属性。
"Lidar1": {
"SensorType": 6,
"Enabled" : true,
}
- 可以在车辆上启用多个激光雷达。
激光雷达配置#
目前可以通过settings json配置以下参数。
参数 | 描述 |
---|---|
NumberOfChannels | 激光雷达的通道/激光数量 |
Range | 范围,以米为单位 |
PointsPerSecond | 每秒捕获的点数 |
RotationsPerSecond | 每秒旋转次数 |
HorizontalFOVStart | 激光雷达的水平视场起始角度,以度为单位 |
HorizontalFOVEnd | 激光雷达的水平视场结束角度,以度为单位 |
VerticalFOVUpper | 激光雷达的垂直视场上限,以度为单位 |
VerticalFOVLower | 激光雷达的垂直视场下限,以度为单位 |
X Y Z | 激光雷达相对于车辆的位置(在NED坐标系中,以米为单位) |
Roll Pitch Yaw | 激光雷达相对于车辆的方向(以度为单位,偏航-俯仰-滚转顺序到前向矢量+X) |
DataFrame | 输出中点的坐标系(“VehicleInertialFrame”或“SensorLocalFrame”) |
ExternalController | 如果正在使用外部控制器(例如ArduPilot或PX4),是否将数据发送到外部控制器(默认`true`)(PX4目前不发送激光雷达数据) |
例如。
{
"SeeDocsAt": "https://msdocs.cn/AirSim/settings/",
"SettingsVersion": 1.2,
"SimMode": "Multirotor",
"Vehicles": {
"Drone1": {
"VehicleType": "simpleflight",
"AutoCreate": true,
"Sensors": {
"LidarSensor1": {
"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"
},
"LidarSensor2": {
"SensorType": 6,
"Enabled" : true,
"NumberOfChannels": 4,
"RotationsPerSecond": 10,
"PointsPerSecond": 10000,
"X": 0, "Y": 0, "Z": -1,
"Roll": 0, "Pitch": 0, "Yaw" : 0,
"VerticalFOVUpper": -15,
"VerticalFOVLower": -25,
"DrawDebugPoints": true,
"DataFrame": "SensorLocalFrame"
}
}
}
}
}
用于调试的服务器端可视化#
默认情况下,激光雷达点不会在视口上绘制。要在视口上绘制击中激光点,请通过settings json启用设置`DrawDebugPoints`。
"Lidar1": {
...
"DrawDebugPoints": true
},
注意:在`v1.3.1`、`v1.3.0`版本中启用`DrawDebugPoints`可能会导致内存使用过多并崩溃。这已在主分支中修复,并应在后续版本中正常工作
客户端API#
使用`getLidarData()` API检索激光雷达数据。
- API返回一个点云,它是一个浮点数的平面数组,以及捕获的时间戳和激光雷达姿态。
- 点云
- 浮点数表示上次扫描中范围内每个击中点的[x,y,z]坐标。
- 输出中点的坐标系可以使用“DataFrame”属性进行配置 -
- ""或`VehicleInertialFrame` -- 默认;返回的点在车辆惯性坐标系中(在NED中,以米为单位)
- `SensorLocalFrame` -- 返回的点在激光雷达局部坐标系中(在NED中,以米为单位)
- 激光雷达姿态
- 激光雷达在车辆惯性坐标系中的姿态(在NED中,以米为单位)
- 可用于将点转换为其他坐标系。
- 分割:每个激光雷达点碰撞对象的分割
Python示例#
即将推出#
- 客户端激光雷达数据的可视化。