apollo学习笔记

原文链接:https://blog.csdn.net/Maple_Lu1986/article/details/81276944

高清地图属于机器人地图

    道路网的精确三维表征,如十字路口布局、路标位置及各种其他语义信息
    厘米级(普通地图只能达到米级,一般1-2米)
    VSLAM定位:预处理、坐标变换、数据融合
    帮助感知:提前在远距离的位置提供ROI区域,供视觉或其他传感器缩小搜索范围
    增强视觉的TSR功能:提前知道各种限速信息、车道信息(车道线中心、左转车道、右转车道等)
    Apollo地图:道路定义、交叉路口、交通信号、车道规则,例如红绿灯的位置和高度
    制图流程:数据采集、数据处理、目标检测、人工验证、地图发布

%%%%%%%%%%%%%%%%%%%%%%%%%%%

定位

    对比来自HD Map道路网周围的路标坐标,以及根据车辆坐标系算出来的路标坐标,并对比;
    GNSS系统的卫星星座的三角测量,测量车辆位置+车速
    RTK:车辆接收来自卫星星座的定位坐标;地面基站与卫星星座通信,获取卫星星座的定位误差;地面基站将误差传送给车辆,车辆利用定位坐标+误差信息,一起考量,获得精度为10厘米级别的定位精度。缺点:更新速率低
    IMU=三轴加速度计+陀螺仪,缺点:实时精度高,累计误差大。
    Lidar:测量车辆位置+heading
    INS惯性导航=RTK+IMU:预测下一周期位置并更新;
    卡尔曼滤波整合GNSS定位+激光雷达定位+INS惯性导航(GNSS+IMU),其中INS惯性导航用于卡尔曼滤波的预测步骤中;GNSS定位+激光雷达定位用于卡尔曼滤波的测量结果更新步骤中。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

感知

    计算机视觉:
        检测(Detection)
        分类(Classification):图像分类器,各种分类器
            输入图像
            预处理
            提取特征
            放入分类模型
        跟踪(Tracking)
        语义分割( Segmentation )
    计算机视觉处理摄像头图像:
        图像对于计算机来说,只是像素矩阵
        图像高度、宽度和图像深度(RGB有三个深度,红、绿、蓝三个颜色深度)
        图像的灰度化,就是减少图像空间的深度
    计算机视觉处理激光雷达图像:
        将激光雷达点云图像化
    机器学习:模型和训练模型
    人工神经网络工作步骤:前馈(按照原有模型算一遍,得到一个output)、误差测量、反向传播(将对比出来的误差,反向传播,修正各个feature的权值)
    卷积神经网络(CNN):

           

 

    检测与分类
    跟踪
    分割
    Apollo感知系统:
        YOLO 检测模块

                     

    感知系统架构

                     

 

    传感器数据比较:

           

 

    感知融合策略:卡尔曼滤波实现Radar和Lidar的目标级别的融合

          

          

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

预测

预测其他目标的行驶路径,预测模块要回自学习

    基于模型(Model-Based)的预测:找到已知可能的轨迹模型,跟踪车辆的轨迹,看后续事件最有可能往哪个轨迹模型中接近;
    数据驱动(Data-Based)的预测:使用机器学习来训练模型;
    Apollo使用基于车道序列的模型预测方法,计算可能性:
        Lane Sequence 车道段序列
        Obstacle Status 一系列的跟踪目标状态
    追踪目标,会使用航向角、位置、速度、加速度等目标信息追踪预测目标的行驶路径;
    利用递归神经网络来识别目标类型来分别预测车道段+障碍物目标,并结合起来进行进一步RNN训练,获得最终的预测模型
        训练的方法:用RNN的output输出对比真值标记(Ground Truth),利用反向传播来训练网络
        训练出最有可能的B点后,根据A当前点到B目标点的轨迹可以根据当前车的运动状态(速度、加速度)拟合出一条最可能的运行轨迹,来最终获得追踪目标车辆的预测行驶轨迹。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

路径规划

    全局路径规划:点对点的路线规划,单纯的空间曲线;Apollo算法使用A*算法来实现全局路径规划。
    局部路径规划:运动轨迹水平的轨迹规划,不仅是空间曲线,也是时间曲线

三个路径规划输入:

    地图:公路网及实时交通信息
    当前位置:在地图中的当前位置
    目的地:在地图中的目标地坐标

轨迹点包含的信息:

    轨迹点的坐标;
    矢量速度;
    预计达到下一坐标的时间

轨迹规划:

    三维轨迹生成=二维点坐标+时间戳;
    矢量速度保证车辆按照时间戳的要求到达下一个轨迹点;
    成本函数:设置惩罚因子,如偏离车道中心的程度、发生碰撞的几率、车速限制、舒适性(例如实现某个轨迹规划需要很大的加速度才能完成,那么这个过大的加速度就影响舒适性)
    成本函数在不同场景中的区别:例如在停车场,与在高速公路上,成本函数的各个因子的设置,一定是不一样的。
    坐标变换:百度的Apollo平台使用Frenet Coordinate(弗莱纳坐标系);德尔福公司常说的Curvillinear Coordinate System(曲线坐标系)属于简化了的弗莱纳坐标系。

轨迹-速度解耦规划:

    轨迹规划:利用成本函数计算单纯的路径轨迹;
        路径生成与选择:
            将路面分段,并在各段(区域)中,选择随机采样点,连成多条路径;
            根据成本函数(包含距离车道中心线、距离障碍物距离、车速和车道线曲率变化及车辆压力等约束因素),删选最小成本路径。
    速度规划:利用轨迹点的一系列“速度曲线”来控制车速;
        选择速度曲线:利用ST图,选择车速;S,纵向位移,T,时间
        将速度曲线ST图网格化,道路离散化;将障碍物绘制在ST图中不同的时间域中(在t0到t1时间域内,会占据s0到s1的前方距离范围),速度曲线不应穿越ST图中的该矩形区域;利用各种约束(法规约束、车辆运动极限约束、障碍物距离限制)组成的优化算法,来选择最佳速度曲线
    二次规划:将离散曲线平滑化

三维轨迹生成(轨迹曲线与速度曲线的合并,基于Lattice规划):

    三个维度:纵向维度、横向维度、时间维度
    具有时间戳的纵向轨迹,ST轨迹,纵向+时间维;
        ST轨迹的终止状态:巡航状态、跟车状态、停止状态
    相对于纵向轨迹的横向偏移,SL轨迹,横向+时间维;
        终止状态应与车道线中心线重合,即heading angle与offset的一阶导数和二街倒数都为零
    合并后,用成本函数选择最佳路线。
        将ST和SL轨迹点都转化为笛卡尔坐标系,然后,按照S值来匹配T和L;

%%%%%%%%%%%%%%%%%%%%%%%%%%%

车辆控制算法

PID 控制器

    优点:简单有效;
    缺点:线性控制;只能针对横向控制或者纵向控制进行单独控制;无法将横向控制和纵向控制集成在一个控制器中控制;

LQR控制器

    L-线性
        X-term
            误差
            误差变化率
            航向角
            航向角变化率
        U-term
            steering
            accel
            brake
    Q&R-最小化成本方程

MPC模型预测控制器

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 
总结

1. Apollo使用ROS操作系统;

2. 百度基于自己做地图的背景,倾向于在自动驾驶系统设计过程中,尽量多的发挥高清地图的作用;

3. 感知模块倾向于采用神经网络算法;

4. 激光雷达的数据使用方式:

   a. 在点云级别,转化为图像,与摄像头图像融合,获取更丰富的道路feature;

   b. 在目标级别(Object Level),与毫米波雷达进行目标融合,并跟踪目标。
---------------------  
作者:逯建枫  
来源:CSDN  
原文:https://blog.csdn.net/Maple_Lu1986/article/details/81276944  
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(无人驾驶)