如何在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示例#

即将推出#

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