• Apollo星火计划学习笔记第六讲——Apollo感知模块详解实践2感知基础


    零、目录

    在这里插入图片描述
    在这里插入图片描述

    一、Apollo感知框架介绍

    在这里插入图片描述
    在这里插入图片描述

    1.1 检测和分类

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    1.2 跟踪

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    感知要实现的功能:

    • 红绿灯检测
    • 车道线检测
    • 基于相机的障碍物检测
    • 基于点云的3D障碍物检测
    • radar检测

    1.3 感知模块代码结构

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    1.3.1 感知模块入口

    在这里插入图片描述

    看代码从此处开始

    在这里插入图片描述

    dag文件启动:

    mainboard -d 路径/***.dag
    
    • 1

    在这里插入图片描述

    上图所示为conf文件下一个64线Lidar的配置文件。

    在这里插入图片描述

    value:对应配置文件的目录

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    二、Lidar障碍物检测、红绿灯识别

    2.1 Lidar感知模块

    在这里插入图片描述

    流程:
    点云预处理→3D障碍物检测→目标追踪→融合

    输出:
    type类型(车辆、行人、非机动车道?)、distance目前空间中的位置、velocity(当前速度)、航向角(heading)

    2.1.1 dag文件

    在这里插入图片描述

    首先需要了解dag文件。

    上图流程中检测到的障碍物detection objects是单帧的。

    在这里插入图片描述
    在这里插入图片描述

    module_config:
    module_library:说明最终会生成一个二进制文件.so
    components:实现哪些功能
    components/config_file_path:即1.3.1中的config文件,其config目录
    reader:该模块读取哪个channel的数据

    检测模块
    在这里插入图片描述

    上游:128线激光雷达拿到的数据

    点云补偿等

    输出:检测到的障碍物

    追踪模块
    在这里插入图片描述

    输出:融合之前的障碍物

    融合模块
    在这里插入图片描述
    fusion_method:概率融合

    2.1.2 源码追溯

    通过.so可执行文件搜索其源码,可知它由如下build文件产生。
    在这里插入图片描述

    deps:再查看deps中的target——inner_lidar又由什么生成,同理一层一层寻找。

    在这里插入图片描述

    可在component的BUILD里边查看。
    在这里插入图片描述

    2.1.3 具体实现—检测模块

    代码结构
    在这里插入图片描述

    proto文件和配置文件相互对应

    在这里插入图片描述

    设计模式

    在这里插入图片描述
    比如右侧detector:可通过多种方式实现,但实现的时候只能采用其中一。通过配置文件选取指定detector。

    补充CNN和Pointpillars

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    图片是三个通道。

    在这里插入图片描述
    在这里插入图片描述

    9个通道:
    (x,y,z):空间位置
    r:点云强度
    xc:中心
    其他点云点相对于中心的偏移

    再类似图像的3个通道卷积,这里对9个通道进行卷积操作。
    在这里插入图片描述
    紫色圆框:先缩小分辨率;再上采样(方便检测体积不同的障碍物)

    2.1.4 具体实现—追踪模块

    代码结构
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    匹配过程中考虑因素:类型相近、大小、heading等。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    得到障碍物轨迹后可用来做预测:如下2为直行趋势,3为右转趋势。

    在这里插入图片描述
    在这里插入图片描述

    optimizer里边。

    在这里插入图片描述

    1可以匹配的有a和b,所以可暂时1匹配a;

    在这里插入图片描述

    2可以匹配的有b和c,所以可暂时2匹配b;

    在这里插入图片描述

    此时3已无新的可匹配项,故让3匹配a,再让1匹配另一个(此时1还有得选),依次推到2也要更改匹配为c。

    在这里插入图片描述

    在这里插入图片描述
    d:可能是新出现的障碍物
    4:可能是已经消失的障碍物,若持续几帧还未检测到,则将之抛弃。

    在这里插入图片描述

    location距离不会相差太大;
    direction即heading也不会相差太大,不太可能前一帧向前后一帧向后;
    大小。

    在这里插入图片描述

    最下函数专门计算各个维度的distance。

    代码结构
    在这里插入图片描述

    • 关联模块
    • 测量值模块
    • 多激光雷达融合模块
    • 地图分割模块(目前貌似未使用)

    右下思维导图解析:

    • 首先由MlfEngine实现,其分为两个模块MlfTrackObjectMatcher和MlfTracker;
    • MlfTrackObjectMatcher:数据匹配模块,即上述匈牙利匹配和distance计算;distance_collection收集进行匹配所需要的数据后交由MlfTrackObjectDistance进行计算最终得出一个权重送到二分图中进行匈牙利匹配,匹配有前景和后景(Gnn)两个匹配;
    • 匹配完成后需要对运动状态进行更新:两个模块,形状更新(shape)和速度信息之类(motion)更新;同样需要收集当前数据信息再进行计算后refine。

    卡尔曼滤波
    在这里插入图片描述

    假设它匀速运动,可得到Xt时刻的位置:
    在这里插入图片描述

    Xm为地图测量得到的位置

    在这里插入图片描述

    此时该信哪一个位置呢?Xt还是Xm?

    可通过权重分配进行计算,若传感器精度较为精确,可赋予Xm更高的权重后进行计算:

    在这里插入图片描述

    2.1.5 具体实现—融合模块

    上述tracking障碍物已具有速度。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    • 第一步:关联

    代码结构
    在这里插入图片描述

    左上:max_lidar_invisible_period,允许最大跟丢时间;不同传感器设定不同阈值;

    右下:每个传感器特性不一样因此每个传感器融合的距离也有所不一。

    配置文件先打开。

    在这里插入图片描述
    在这里插入图片描述

    从include里边找到依赖库

    在这里插入图片描述
    在这里插入图片描述

    此时是基类,可查看是哪里引用了它,便可找到它的派生类。

    在这里插入图片描述

    DS证据理论
    在这里插入图片描述

    在这里插入图片描述

    2.2 红绿灯识别

    在这里插入图片描述

    dag文件

    在这里插入图片描述
    在这里插入图片描述

    若果没有红绿灯信息会返回进行下一次的查询;

    获取红绿灯ID后获取其在点云中的位置(高精地图中的位置);
    长焦摄像头:
    在这里插入图片描述

    短焦摄像头:
    在这里插入图片描述
    在这里插入图片描述

    这张会被舍去,转而锁定短焦摄像头那一张;若两张摄像头都可见,则选择清晰的那一张。

    在这里插入图片描述

    在这里插入图片描述

    投影后:
    在这里插入图片描述

    在这里插入图片描述

    时序预测修正
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    三、模块的启动方法和基础配置

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    四、感知模块启动视频演示

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    C++ 入门到踩坑
    正则表达式每个字符的学习
    keepalived安装配置(服务器主备、负载均衡)
    javaScript数组和对象相互转换
    icu是哪个国家的域名?icu是什么域名?
    Eclipse-MAT 案例:Tomcat堆溢出分析
    Base64
    go学习知识点
    WeakHashMap 和 HashMap 的区别是什么,何时使用?
    从F5 BIG-IP RCE漏洞(CVE-2023-46747)来看请求走私的利用价值
  • 原文地址:https://blog.csdn.net/qq_37346140/article/details/127639072