Apollo详解之感知模块——点云识别

前言

Apollo感知模块激光雷达感知文档

基本介绍

激光雷达感知dag文件为modules/perception/production/dag/dag_streaming_perception_lidar.dag,其中分别存在DetectionComponentRecognitionComponentFusionComponentV2XFusionComponent四个组件。

DetectionComponent

该组件的功能是处理激光点云消息,获得对应的障碍物信息LidarFrameMessage并发布至相关话题。
该组件包含一个TransformWrapper对象,用于监听静态坐标变换和动态坐标变换,获得传感器坐标系和组合导航坐标系以及世界坐标系之间的变换关系。另外,该组件包含一个LidarObstacleDetection对象,用于对点云消息进行预处理和识别,该对象包含PointCloudPreprocessor对象,负责点云的预处理,还包含PointPillarsDetection,负责点云的识别检测(具体工作是通过PointPillars来完成的)

DetectionComponent::Init

首先读取配置文件,该组件配置文件定义可参考modules/perception/onboard/proto/lidar_component_config.proto

message LidarDetectionComponentConfig {
  optional string sensor_name = 1;
  optional bool enable_hdmap = 2;
  optional double lidar_query_tf_offset = 3;
  optional string lidar2novatel_tf2_child_frame_id = 4;
  optional string output_channel_name = 5;
}

然后需要读取传感器元数据,元数据的读取是通过SensorManager来完成的,其在初始化时会读取modules/perception/production/data/perception/common/sensor_meta.pt的包含所有传感器元数据的列表,定义可参考modules/perception/proto/sensor_meta_schema.proto

message SensorMeta {
  enum SensorType {
    UNKNOWN_SENSOR_TYPE = -1;
    VELODYNE_64 = 0;
    VELODYNE_32 = 1;
    VELODYNE_16 = 2;
    LDLIDAR_4 = 3;
    LDLIDAR_1 = 4;
    SHORT_RANGE_RADAR = 5;
    LONG_RANGE_RADAR = 6;
    MONOCULAR_CAMERA = 7;
    STEREO_CAMERA = 8;
    ULTRASONIC = 9;
    VELODYNE_128 = 10;
  }

  enum SensorOrientation {
    FRONT = 0;
    LEFT_FORWARD = 1;
    LEFT = 2;
    LEFT_BACKWARD = 3;
    REAR = 4;
    RIGHT_BACKWARD = 5;
    RIGHT = 6;
    RIGHT_FORWARD = 7;
    PANORAMIC = 8;
  }

  optional string name = 1;
  optional SensorType type = 2;
  optional SensorOrientation orientation = 3;
}

// 感知模块传感器元信息列表
message MultiSensorMeta {
  repeated SensorMeta sensor_meta = 1;
}

读取完成后,会将所有的传感器元数据加入到键值对为传感器名称和元数据的关联容器中,在SensorManager::GetSensorInfo函数中,就会根据传感器的名称在关联容器中找到对应的传感器元数据

LidarObstacleDetection::Init

在进行LidarObstacleDetection的初始化时,需要通过ConfigManager获得初始化文件,其会获得modules/perception/production/conf路径下所有的config_manager.config文件,该文件包含一系列的model_config_path,每个路径包含一个MultiModelConfigProto消息,ConfigManager会将所有的model_configs以传感器名称为键添加到关联容器中,在ConfigManager::GetModelConfig函数中,会根据传感器名称找到对应的model_configs,然后会根据传感器的名称在modules/perception/production/data/perception/lidar/models/lidar_obstacle_pipeline文件夹下找到对应传感器的lidar_obstacle_detection.conf配置文件,获得LidarObstacleDetectionConfig配置消息,定义可参考:

message LidarObstacleDetectionConfig {
  optional string detector = 1 [default = "PointPillarsDetection"];
  optional bool use_map_manager = 2 [default = true];
  optional bool use_object_filter_bank = 3 [default = true];
}
PointCloudPreprocessor::Init

预处理对象PointCloudPreprocessor初始化时,会通过ConfigManager获得初始化文件pointcloud_preprocessor.conf,获取预处理配置消息PointCloudPreprocessorConfig,定义可参考:

message PointCloudPreprocessorConfig {
  optional bool filter_naninf_points = 1 [default = true];
  optional bool filter_nearby_box_points = 2 [default = false];
  optional float box_forward_x = 3 [default = 0];
  optional float box_backward_x = 4 [default = 0];
  optional float box_forward_y = 5 [default = 0];
  optional float box_backward_y = 6 [default = 0];
  optional bool filter_high_z_points = 7 [default = false];
  optional float z_threshold = 8 [default = 5.0];
}

然后会通过该配置消息初始化数据成员。

PointPillarsDetection::Init

检测对象 PointPillarsDetection会根据命令行参数初始化PointPillars对象,各参数可参考modules/perception/common/perception_gflags.cc

TransformWrapper::Init

tf监听器会根据传感器坐标系的名称进行初始化

DetectionComponent::Proc

该函数会订阅话题,获得激光点云消息,进行预处理和识别后,获得识别结果LidarFrameMessage,并发布至相应话题。

LidarFrameMessage

点云的处理消息类型,包含处理的阶段、类型、点云处理数据等参数。

LidarFrame

该结构体包含预处理后的点云、世界坐标系下预处理后的点云以及识别出的物体

Object

识别物体结构体,包含朝向,位置类别等信息,种类可参考:

enum class ObjectType {
  UNKNOWN = 0,
  UNKNOWN_MOVABLE = 1,
  UNKNOWN_UNMOVABLE = 2,
  PEDESTRIAN = 3,
  BICYCLE = 4,
  VEHICLE = 5,
  MAX_OBJECT_TYPE = 6,
};
PointCloudPreprocessor::Preprocess

首先进行预处理,会根据预处理配置消息PointCloudPreprocessorConfig,对点云进行预处理,包括去除点云中的nan点和坐标大于阈值的点,去除组合导航坐标系下原点周围长方形范围的激光点,去除高度高于阈值的激光点

PointPillarsDetection::Detect

进行识别,首先会通过射线ID和voxel grid的方法进行降采样,得到降采样之后的点云;然后会与之前数帧的点云进行融合,更新点云容器;然后会随机将点云打乱,转换为列表,传入至训练好的深度学习模型中,获得预测信息,由此获得检测的障碍物信息。
障碍物信息包括障碍物的种类(目前只支持CARPEDESTRIANCYCLISTUNKNOWN四种类型)、位置、朝向、识别框顶点坐标。

总结

激光雷达感知模块需要transform模块、定位模块提供的激光雷达坐标系、组合导航坐标系以及世界坐标系之间的变换关系,而变换关系是通过订阅tf,static_tf话题获得的。感知模块经过深度神经网络,可以获得物体的类别、大小、位置信息。

疑问

激光雷达感知是否可以获得物体的速度?

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值