目录
课程链接:https://apollo.baidu.com/community/online-course/1
Apollo(百度自动驾驶)
包含内容HD maps高精地图、Localization定位、Perception感知、Prediction预测、Planning规划、Control控制
self-driving car、High Definition Map
传感器:摄像头/相机Camera、激光雷达/LiDAR、雷达Radar、IMU
基本工作流程:由摄像头/相机、传感器(例如激光和雷达)进行定位、感知,后进行路径规划、轨迹生成,最后执行控制。
0. 高精地图
传统地图精度米级,高精地图精度厘米级
采用行业制图标准OpenDRIVE格式
高精地图构建过程:数据采集、数据处理、对象检测、手动验证、地图发布
1. 定位:车辆自身实时位置。
使用技术:
- 三角测量原理:平面内知道三个参考点(位置已知)离自己的距离,则可以确定自己的位置。
在自动驾驶中(空间,地球表面的三维定位)需要四个参考点(四颗GPS卫星)即可知道车辆位置。GNNS-RTK技术
但GPS测量距离存在误差。距离=时间(卫星到电子设备里GPS接收器) * 光速,使用原子钟计时,使用实时运动定位(RTK):根据卫星对控制站的GPS结果与控制站位置Ground Truth结果,来矫正GPS结果。可将GPS精度可提高到10cm
经管可以使用RTK提高GPS定位的精度,但1.特殊位置高楼、障碍物,GPS信号很差;2.GPS更新频率很低,每秒10次,对于自动驾驶实时定位 - 惯性导航。s = s0 + vt或s0 + vt + 1/2at^2。需要测量加速度,使用三轴加速计的传感器,使用三轴陀螺仪进行坐标转换,它们是惯性测量单元(IMU)的主要组件。
IMU的优势是更新频率快,缺点是会累积误差,只能短时间内定位。IMU与GPS结合,实现互补,GPS大范围定位,IMU局部定位,但仍不能解决GPS的缺陷1,即障碍物等缺陷无GPS信号。 - 激光雷达定位
车辆激光雷达得到所处位置的点云,与高精地图的点云进行匹配,匹配度高的即是所在位置
点云匹配方法:1)迭代最近点(ICP):最小化点云1和点云2最匹配点对距离的误差均值。(2)直方图滤波(也叫误差平方和算法,SSD):用点云扫描地图上的每一个位置,计算对应点间的误差,取误差最小的位置。(3)卡尔曼滤波:根据历史情况预测位置(移动距离和方向),再根据新的观测、观测误差和预测误差修正卡尔曼滤波参数,再做进一步预测。
优点是稳健性;缺点是依赖最新的高精地图,例如汽车实时激光雷达的点云有行人、垃圾等,而高精地图的最近更新在昨天,那时没有行人和垃圾。 - 视觉定位
通常和地图结合,通过概率类的方法来确定位置。如粒子滤波。
假设车辆可能出现在一些位置上(位置即粒子)。每个粒子都有一个权重,代表这个位置的可信性。如果车辆观测到它的右侧有一颗树,那么根据地图,有一些位置能观察到树的概率高,有一些位置能观察到树的概率低,那么根据概率的差异,可重新为粒子赋权,更新车辆的最新位置。
优点是图片数据很容易获得,缺点是缺少3维信息
Apollo使用基于GPS、IMU和激光雷达的多传感器融合定位系统
匹配往往需要预处理、坐标转换(不同传感器/相机的数据统一到一个坐标系)和数据融合
2. 感知:静态和动态对象
数据:Camera/LiDAR/Radar。
四类任务:
- 检测detection,找出物体在环境中的位置;
- 分类classification,识别对象是什么;
- 追踪tracking(跨时间步对不同视频帧的物体ID匹配、遮挡时检测失败时能够进行还原),追踪移动物体;
- 语义分割segmentation,将像素与语义类别(道路、填空等)匹配
对象:静态(墙壁、树木等),动态交通参与者(行人、机动车、非机动车)
流程:数据输入(摄像机、雷达的图像数据)、预处理(图像的标准化处理,大小、旋转、色彩)、提取特征(例如形状)、分类模型(特征作为输入)
摄像机的彩色图片- > 三维数字矩阵,深度为3(RGB),灰度图像则是二维矩阵
距离、速度
Apollo使用YOLO模型作为目标检测算法
3. 预测:预测其他交通参与者(行人和车辆)的路径
预测其他移动物体的路径
基于模型的预测和数据驱动预测
基于车道的预测:将道路划分为多个独立的区域,每个区域用数字标号标识,则车辆预测轨迹可表示为数字序列
则预测其他物体的轨迹转变为预测区域标号序列。以车辆状态(自身的速度位置等信息+所处的环境信息)、车道序列作为输入,输出每个车道序列的采样概率。
后续还需要由粗粒度的车道序列生成真正预测的轨迹
4. 规划:规划自身的最佳路线
A到B的最佳路线。Apollo先将地图转换为Graph,
-
路线规划(高层面):粒度粗一点。先将地图转化为静态Graph。Graph的边可以对任何东西建模,如行驶成本。
A*算法
f value = g value + h value = 起始点到下一候选点的成本 + 从下一候选点到目的地的估计成本 -
轨迹生成(低层面):粒度更细,低级别规划。考虑动态信息,周围行人、车辆行为
使用frenet坐标系代替笛卡尔坐标系,描述了车辆相对道路的位置,横坐标L代表车辆偏移道路中心线的距离,纵坐标S代表道路距离即纵向位移,得到SL曲线
1. 轨迹生成(得到SL曲线):将道路分成一个一个单元格,然后在每个格子内随机选点,然后随机连线成多个候选轨迹。每个点有时间戳和速度,拟合的点序列不能被其他车辆占用
轨迹评估:基于偏移(偏离道路中心)、道路中心偏离距离的平滑度、碰撞、限速、轨迹曲率、速度变化平滑(乘客舒适)等。基于上述指标构建一条轨迹的成本函数,对不同轨迹评估,选择最好(成本最低)的一条。
2. 速度生成(得到ST曲线):路径-速度解耦规划,上述轨迹生成仅得到了轨迹曲线,但车辆沿该轨迹的行驶速度曲线也得确定。轨迹曲线和速度曲线两种确定了最终的行驶轨迹。速度曲线使用ST图描述车辆运动,横轴T代表时间,纵轴S代表车辆纵向位移。斜率则表示了瞬时速度。ST中可以方便的处理某时段的障碍物,mask单元格,对多个候选的速度曲线,由优化算法(考虑速度限制、汽车的物理限制如加速度等)选择最优的一个。原点是起点,右上角是终点,寻找源目的路径
轨迹曲线和速度曲线都是离散的分段函数,都因为划分的单元格。使用二次规划技术来平滑离散分段的ST曲线,最终合并SL轨迹曲线和ST速度曲线(由共同的纵向位移S关联),得到最终轨迹
5. 控制:调控或修正方向盘角度等执行轨迹规划
最大限度降低车辆状态与目标轨迹的偏差,最高乘客满意度。
控制输出包括:转向、加速、制动。
- PID
- LQR(线性二次规划器)
- MPC