如何在 AirSim 中使用激光雷达#

AirSim支持多旋翼飞行器和汽车的激光雷达。

激光雷达的启用及其他激光雷达设置可通过 AirSimSettings.json 文件进行配置。有关通用/共享传感器设置的配置信息,请参阅 通用传感器 部分。

在载具上启用激光雷达#

  • 默认情况下,激光雷达未启用。要启用激光雷达,请在设置 JSON 文件中设置 SensorType 和 Enabled 属性。
    "Lidar1": {
         "SensorType": 6,
         "Enabled" : true,
    }
  • 一辆载具上可以安装多个激光雷达。

激光雷达配置#

以下参数现在可以通过 settings.json 文件进行配置。

参数 描述
NumberOfChannels 激光雷达的通道/激光器数量
Range 范围,单位为米
PointsPerSecond 每秒捕获的点数
RotationsPerSecond 每秒旋转次数
HorizontalFOVStart 激光雷达水平视场角起始值(以度为单位)
HorizontalFOVEnd 激光雷达水平视场角(FOV)末端,单位为度
VerticalFOVUpper 激光雷达垂直视场角上限(以度为单位)
VerticalFOVLower 激光雷达垂直视场角下限(以度为单位)
X Y Z 激光雷达相对于载具的位置(NED,单位:米)
Roll Pitch Yaw 激光雷达相对于载具的方位(以度为单位,偏航-俯仰-横滚顺序,以前方矢量 +X 为参考)
DataFrame 输出点的坐标系(“车辆惯性坐标系(VehicleInertialFrame)”或“传感器本地坐标系(SensorLocalFrame)”)
ExternalController 是否将数据发送到外部控制器(例如 ArduPilot 或 PX4,如果使用)(默认为 true)(PX4 目前不发送激光雷达数据)

例如

{
    "SeeDocsAt": "https://microsoft.github.io/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
    },

注意: 启用 DrawDebugPoints 可能会导致 v1.3.1v1.3.0 版本中内存占用过高并导致程序崩溃。此问题已在主分支中修复,应该会在后续版本中得到解决。

客户端 API#

使用 getLidarData() API 获取激光雷达数据。

  • API 返回一个点云,它是浮点数的扁平数组,同时还包含捕获时间戳和激光雷达姿态。
  • Point-Cloud:
    • 浮点数表示上次扫描中该范围内每个命中点的 [x,y,z] 坐标。
    • 输出数据点的框架可以通过“DataFrame”属性进行配置 -
      • "" 或 VehicleInertialFrame -- 默认; 返回的点位于载具惯性坐标系中(NED 格式,单位为米)。
      • SensorLocalFrame -- 返回的点坐标系为激光雷达局部坐标系(NED格式,单位为米)。
  • Lidar Pose:
    • 载具惯性系中的激光雷达姿态(单位:米,单位:NED)
    • 可用于将点转换到其他坐标系。
  • Segmentation: 对每个激光雷达点碰撞对象进行分割

Python 例子#

即将推出#

  • 在客户端可视化激光雷达数据。