Apollo学习笔记

2023-11-03

Apollo学习笔记

Apollo课程

智能驾驶入门课程

无人驾驶概览

1、软件层分为三层:
实时操作系统(RTOS):确保在给定时间内完成特定任务,实时时确保系统稳定性、驾驶安全性的重要要求。通过在Ubuntu Linux操作系统加入Apollo内核,使其成为RTOS
运行时框架:ROS的定制版,改进了共享内存的功能和性能(一次写入多次读取)加快数据传输速度、去中心化和数据兼容性(ROS需要所有节点通信消息格式相同,当一个节点消息升级后,需要修改其他所有节点,比较麻烦,于是改进protobuf通信,在消息尾部加入新成员,不会影响各节点通信)
应用程序模块层:定位、感知、预测、规划、控制、人机接口等应用程序
2、云服务器的作用:高精地图、仿真、数据平台、安全、OTA和DuerOS智能语音系统

高精地图

人通过知道自己大致位置,可以很快的识别行人、斑马线和红绿灯等信息,作出决策,但这对无人驾驶汽车比较有挑战性。需要借助包含大量驾驶辅助信息的高精地图,
1、地图:包括道路定义、交叉路口、交通信号、车道规则以及用于汽车导航的其他元素。如道路网的精确三维特征,交叉路口布局和左右转、斑马线等路标位置;语义信息,交通灯上不同颜色的含义、速度限制、左右转开始的位置。需达到厘米级精度。需要庞大车队绘制和更新地图,appollo已绘制了每条高速公路的地图,所有国道以及许多其他高等级公路,采用OpenDRIVE行业制图标准并进行改进,使其更使用无人驾驶,地图绘制流程实现90%自动化。
2、用于定位:通过当前传感器数据与高精地图匹配,确定当前位置。首先通过对各传感器数据进行预处理、坐标转换和数据融合,与地图路标匹配,预处理消除不准确或质量差的数据,坐标表换将不同视角数据转换为同一坐标系(利用外参转换到机体坐标系?),数据融合将各传感器数据合并,确定汽车在地图中位置
3、用于感知:各传感器受遮挡、天气等影响,只能观测一定范围物体,地图能记录遮挡物之后的物体,提前作出决策;可以告知各传感器重点探测区域,如知道红绿灯、停车路标等大致位置后,提高检测精度和速度。
4、用于规划和预测:规划汽车行车路径,预测其他车辆在将来的位置,如辅助识别精确的中间线,可以靠中间线行驶,提前感知低速限制、人行道或减速带等信息,预先减速,根据障碍物信息变道,规划路径
5、地图构建:构建和更新过程中使用众包,向公众发布其数据采集工具,以便任何人都可以参与制作高精地图的任务,可通过手机、智能信息娱乐系统甚至无人驾驶车来实现
数据采集:300辆车采集GPS、lidar、相机、IMU等数据,用于维护和更新,保证道路因为拆建等因素及时更新
数据处理:整理、分类和清洗以获得没有任何语义信息或注释的初始地图模板,包括点云地图等
物体检测:检测静态对象并分类,包括车道线、交通标志、电线杆
人工确认:确保自动构建正确进行并及时发现问题,使用软件辅助标记和编辑
地图发布:包括高精地图、自上而下的高精定位地图和三维点云地图

定位

确定汽车在高精地图的位置,常用汽车传感器所见路标与地图路标比较,确定位置。Apollo基于GPS、IMU和lidar多传感器融合定位,GNSS定位输出位置和速度信息,lidar定位输出位置和行进方向信息,通过卡尔曼融合两者输出,惯性导航用于预测步,GNSS定位和lidar定位用于更新步
1、GNSS RTK:以GPS为例,其包括三部分:
卫星-有大约30颗卫星在离地面约2万公里外层空间运行
控制站:用于监视、控制卫星和验证GPS广播信号的精确度
GPS接收器:通过信号从卫星到接收器飞行时间乘光速计算距离(影响因素信号在不同介质传播速度有些差别,时间误差),至少需要检测到四颗卫星才能定位。由于光速很大,少量时间误差也会引起巨大误差,每颗卫星配备高精度的原子钟(两个时间怎么同步?),RTK利用地面基站得到更准确位置,基站已知自己精确位置,也通过卫星测量位置,从而得到测量误差,用于调整接收器位置,得到更精确的定位。手机GPS一般精度1-3m,被高楼、山脉等遮挡时只有10-50m,RTK可到达10厘米以内精度(要求附近16公里范围内有基站),有遮挡时定位精度也会降低,GPS的更新频率较低,为10HZ左右,较难满足快速运动汽车需求
2、惯性导航:已知初始位置后,通过IMU测得加速度和角速度定位,优点是更新频率可达到1000HZ,但长时间漂移较大。
3、激光雷达定位:使用点云匹配算法将当前激光雷达点云数据和高精地图进行匹配,得到初始位姿。优点是定位精度高,难点是高精度构建难度大,动态物体会影响匹配精度。点云匹配方法包括:
ICP:迭代最近点匹配
滤波算法:可去除冗余信息。卡尔曼滤波
直方图滤波算法:(Apollo使用,也叫SSD误差平方和算法SSD)。SSD方法通过传感器扫描的点云滑过地图上的每个位置,在每个位置计算扫描点与地图上的对应点之间的误差或距离,求误差的平方和,平方和越小匹配越好,寻找平方和误差最小的方法。
4、视觉定位:通过粒子滤波定位,可用匹配方法确定在车道线位置,数据易获取,但缺乏三维信息、不便利用三维地图

感知

Apollo可感知障碍物、交通灯和车道等物体,对于三维对象检测,在高精地图上使用感兴趣区域重点关注相关对象,将ROI过滤器应用于点云和图像数据,以缩小搜索范围并加快感知, 然后将已过滤得三维点云输入检测网络构建三维边界框,最后使用检测跟踪关联的算法,跨时间步识别单个对象(分类),该算法先保留每个时间步对象列表,再在下一个时间步找到每个对象的最佳匹配。对于交通灯灯等静态物体,先使用高精地图来确定前方是否存在交通信号灯,若有,返回信号灯位置,使用图像检测网络对灯进行定位,从灯较大的图裁剪信号灯,使用分类网络确定灯颜色,如果有多个灯,需要确定灯与车道的关联关系。使用YOLO检测车道线和动态物体,最后通过融合多传感器数据得到虚拟车道数据结构,融合其他传感器检测每个对象类型、位置、速度和前进方向,虚拟车道和动态对象传到规划与控制模块进行决策。
在这里插入图片描述

1、感知任务:
检测:找出物体在环境中的位置
分类:指明对象是什么,如路标分类器用于识别停车、让路和限速等标志。处理步骤输入图像、预处理(图像缩放、旋转、颜色空间变换等,更快处理和学习)、特征、分类模型
跟踪:随时间的推移观察移动物体 ,如行人、车辆等
语义分割:将图像中的每个像素与语义类别进行匹配,如道路、车辆和天空
2、感知世界的包括摄像头和激光雷达图像数据
3、神经网络:前馈、误差测定和反向传播
4、卷积神经网络:第一个卷积层识别基本边缘和颜色信息,第二层归纳更复杂的结构,如车轮、车门和挡风玻璃,第三层识别物体,最后进行分类
5、检测与分类:,动态障碍物,如首先考虑障碍物检测和分类,分为静态障碍物,如建筑物、树木、杆子,动态障碍物,如行人、自行车和各种车辆。首先需要知道它们位置,然后分类。可使用CNN先检测位置,再用另一个CNN分类;也可以用一个CNN进行检测和分类,如R-CNN、Fast R-CNN。
6、跟踪:跟踪可以解决遮挡问题,还可以保留障碍物身份,找出帧间物体对应关系。跟踪第一步通过查找特征相似度最高的对象进行匹配,由于相邻两帧物体速度相近,也可以根据速度辅助匹配
7、分割:对图像每个像素进行分类,并确定车辆可驾驶区域,语义分割常用全卷积网络(FCN),其输出层也是卷积网络。为了分割图像,输出图像和原始图像尺寸得一样,可通过上采样恢复尺寸,可分为编码器和解码器两部分
8、三种传感器优缺点:摄像头优势在分类,主要用于交通信号灯和车道检测,激光雷达在于检测障碍物,即使在夜间也能工作,但其为纳米波绕不过雨雪冰雹等,雷达在探测范围和应对恶劣天气方面占优势,雷达为毫米波,可以绕过毫米级障碍物。

在这里插入图片描述
9、Apollo使用激光雷达和雷达通过卡尔曼滤波融合检测障碍物,

预测

预测其他物体的运动轨迹,如其他车辆变道、下匝道等,为规划和控制提供决策信息。对实时性、准确性。分为基于模型和基于数据驱动的预测。预测和感知输出的区别是预测了更长得运动轨迹。
1、基于模型方法:先用不同模型作为车辆可能路径,再通过后续信息确定车辆更符合哪个模型,优点是直观,可以结合物理知识、交通规则等信息
2、基于数据驱动预测:使用机器学习算法训练模型
3、基于车道序列预测:将车道分为不同区域,预测车辆在车道如何转换,组成有限模式组合,作为车道序列
4、障碍物状态:结合车辆位置、朝向、速度、加速度和与车道线距离预测车辆轨迹
5、预测目标车道:Apollo使用RNN建立一个模型来预测车辆的目标车道
在这里插入图片描述
6、轨迹生成:预测目标车道序列后,最后生成预测轨迹

规划

第一步是路线规划,生成免碰撞和舒适的可执行轨迹,由一系列点定义,每个点都有一个关联速度和指示何时应抵达那个点的时间戳。输入高精地图、当前在地图上位置、目的地位置,输出点到点的路径(路由,全局规划)和汽车执行何种水平的轨迹(局部规划),是时间曲线,包括速度信息
1、Apollo通过搜索规划点到点路径,将路段作为节点,边作为节点连接线。拐弯比直行成本高
2、全局规划:A*是一种经典搜索算法,用于规划全局路径
3、局部规划:生成由一系列包含2D位置(速度)和时间戳的点组成,与预测时间结合,确保按计划通过
4、评价轨迹:与障碍物距离、乘客舒适(平滑)、符合汽车运动模型、符合法律法规、曲率。通过成本函数选出最佳路径
5、规划时使用Frenet坐标系,描述车辆相对道路的位置,s代表沿道路的距离,为纵坐标,d表示与横向向线的位移,为横坐标,表示偏离中心线距离,两者相互垂直
6、路径和速度解耦规划:分为路径规划和速度规划,首先生成可性的候选路径,使用成本函数对每条曲线进行评估,选择成本最低路径;然后,确定行进速度,
7、生成候选路径:首先将道路分成单元格,然后对单元格中点进行随机采样,每个单元格选一个点,连接生成路径
8、确定速度:ST图,s纵向位移,t表示时间,通过斜率得到速度。根据成本函数确定最佳速度
9、二次规划:使用优化包将路径平滑
10、lattice轨迹生成方法:分别建立ST和SL轨迹(横坐标)。巡航、跟随和停止。根据两个图可以将其转换到笛卡尔坐标系

控制

控制器输入一系列路径点来接收规划模块的轨迹和车辆当前状态(定位、车辆内部传感器数据:速度、转向和加速度),通过两者偏差,控制汽车沿路径点移动。控制器输出转向、加速和制动。准确、安全性、可行性和舒适度,即使路滑等情况也要准确规划路径。Apollo实现的三种控制策略:PID、线性二次调节器(LQR)、模型预测控制(MPC)
1、PID:偏差为偏离目标轨迹距离,优点是简单
2、LQR:基于模型的控制器,使车辆的状态误差最小化,使用LQR作横向控制,包括四个组件:横向误差及其变化率,朝向误差及其变化率。控制输入:转向、加速和制动
3、MPC:依赖数学优化,分为三步:建立车辆模型;使用优化引擎计算有限时间范围内的控制输入;执行第一组输入。不断重新评估。模型、约束和成本函数作为优化问题解决。MPC考虑了车辆模型,比PID更精确,适合不同的成本函数,缺点是更复杂、更缓慢和更难以实现。但在无人驾驶中比较常用

智能驾驶进阶课程

自动驾驶行业概述

轨迹一般最多做到5阶平滑,加速度倒数和踩油门的频率有关,决定有没有推背感,abs不停的点刹,防止车漂移。可见光波长380-780nm,激光雷达是905nm和可见光离得比较近,功率比较大,避免伤害人眼,1550nm可以做大功率,功率越大测得距离越远
Apollo框架:云端、软件层、硬件层、线控控
在这里插入图片描述

硬件开发平台

1.Uber出现事故原因:系统未闭环(碰撞前6s传感器发现行人,前1s原车开始制动,因为改装后并没用原车发送刹车指令,造成制动机构未动作)、交互设计缺陷(车辆未提醒驾驶员)、路面照明不足、不符合车规(车体重心较高,容易侧翻)
2.研发流程:软件在环(基于模拟器仿真)、硬件在环(基于必要的硬件平台,数据包)、车辆在环(基于车辆执行,封闭场地)、司机在环(基于实际道路,司机评判)
3.硬件系统:V2X指车车通信、人车通信等;T-BOX是车联网通信网关,上接互联网,下接CAN总线;远距离用77G激光雷达,近距离用24G激光雷达;
在这里插入图片描述
4.各传感器作用:L1和L2以人为主怕误检,L3以上以车为主,怕漏检;根据刹车距离,传感器达到150m足够了;0.4度分辨率,在100m外可以探测到汽车、人和自行车,0.1度400米能检测到人(1.4米);
在这里插入图片描述
5.计算单元:需要冗余设计,目前主要是集中式处理器,所有计算集合到工控机;以后可能用嵌入式,使用sensor box做传感器数据融合;算法固定后可采用专用芯片,分为芯片设计、芯片制造和芯片封装;
在这里插入图片描述
6.车辆线控:减速控制(刹车)、转向控制(方向盘)和加速控制(油门),采用双备份冗余设计,提高安全性。分为三个阶段:对原车进行改装,加装电机控制,没有经过安全检测,安全隐患大;对车辆的ADAS系统进行接用,破解CAN总线协议,如MKZ的自动泊车及ACC;对车辆的定制,所有系统均可线控和手动控制,可考虑备份和冗余设计
7.Apollo硬件开发平台
在这里插入图片描述

百度Apollo定位技术

1.定位要求:精度小于10cm;鲁棒性,最大误差小于30cm;全天候场景
2.定位方法分类:
在这里插入图片描述
3.GPS:距离差分和载波相位差分,后者精度较高,分为RTK和PPP技术,目前RTK用的比较大,容易受电磁环境、遮挡和多路反射等影响;由于钟差需要四颗卫星;GPS授时
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.激光定位:地图可分为3D的体素地图和点云地图,2D的概率地图。航向角优化使用LK的方法优化颜色值和高度值信息,1、2度以内精度较高
在这里插入图片描述
定位地图格式:压成XY格子,每个格子有很多点,点中包含了Z值和颜色值,颜色值平均求方差放在反射值地图块,z值放在高度值地图块,格子分辨率为12.5cm
在这里插入图片描述
可用于定位地图、反射值和高度值等,窗口大小21*21个格子,红色表示响应值比较大,在这个位置概率比较大在这里插入图片描述
加权自适应融合各图定位结果
在这里插入图片描述

5.视觉定位:特征点可能因为光照等影响,检测的重复率较低;但具有语义信息的特征检测率比较高,如灯杆等。
在这里插入图片描述
在这里插入图片描述
包含杆状物和地标等,线段较难找到描述子,利用PF通过投影算法计算重合度,判断是否匹配,未标注杆状物时横向能保持十厘米以内,纵向达到几十厘米
在这里插入图片描述
在这里插入图片描述

6.惯性导航(SINS):几十块到上千万,无人车用的IMU有1、2十万,5、600ms还很准;
在这里插入图片描述
初始化对准:低等级IMU航向角对准较难,常用双天线方式;
在这里插入图片描述
在这里插入图片描述

7.融合定位(组合导航)框架:
在这里插入图片描述
简化框架:
在这里插入图片描述

如:
在这里插入图片描述

8.地心惯性坐标系(ECI)
在这里插入图片描述

地心地固坐标系(ECEF) 在这里插入图片描述
9.当地水平坐标系:原点随载体移动而移动在这里插入图片描述10.UTM:水平地图,把地球划分为60个区域,平时定位输出坐标系在这里插入图片描述
11.车体坐标系
在这里插入图片描述
12.IMU坐标系
在这里插入图片描述
13.激光雷达坐标系
在这里插入图片描述
14.整体坐标系
在这里插入图片描述

百度Apollo高精地图

1.高精度图与自动驾驶关系,从云端下发车端需要保证实时性,
在这里插入图片描述
2.高精地图采集与生产:激光雷达和相机相互补充生成地图,宽凳和deepmotion都采用纯视觉制图,可达到厘米级,宽凳为20厘米,还有用行车记录仪做众包制图。
3.格式规范:常用NDS和OpenDrive。NDS支持局部更新。Apollo基于OpenDRIVE,如下图,采用section方式分割道路,根据道路变窄和属性切分;车道线和虚拟车道基于reference line描述,
在这里插入图片描述
在这里插入图片描述
4.高精地图产品:HERE的Live Map,生成过程基于激光雷达,如下图,使用激光雷达建立Base Map,每天有28T数据量,NVME硬盘传输数据块,其优点是更新快,分为静态层、定位层和冬动态物体层、人的驾驶习惯。
在这里插入图片描述
mobileeye基于视觉的众包REM制图方案,视觉方案车道线没那么连续,road boo数据结构一公里10k左右数据量。另外还有谷歌和TomTom等。
5.Apollo采集方案:16线激光雷达扫描比较高的红绿灯标志牌等; 跑4、5遍重建效果才比较好;红绿灯用riegl采集
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

百度Apollo规划技术介绍

规划的本质是搜索,寻找目标函数的最优解。深度优先和广度优先都属于无信息的搜索方式,为了提高搜索效率,常使用启发式的搜索方式。
在这里插入图片描述

百度Apollo ROS接收

百度Apollo感知介绍

百度Apollo控制介绍

百度Apollo安装和仿真平台

docker近似建在Linux上的虚拟机,docker可以发布一个官方配置好的容器,可以下载部署,解决依赖问题
在这里插入图片描述

百度Apollo实战

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

智能驾驶实践课程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apollo学习笔记 的相关文章

  • (React入门)组件、组件样式、事件处理

    组件的创建 类组件 类组件 顾名思义 也就是通过使用ES6类的编写形式去编写组件 该类必须继承React Component如果想要访问父组件传递过来的参数 可通过this props的方式去访问 在组件中必须实现render方法 在ret

随机推荐

  • Vite按需引入自定义组件unplugin-vue-components

    1 安装插件 npm i unplugin vue components D 2 vite config ts文件加如下代码 plugins vue reactivityTransform true Components extension
  • html 学习 常用的html标签及使用

    html是什么 超文本标记语言 Hypertext Markup Language HTML 是一种用于创建网页的标记语言 本质上是浏览器可识别的规则 我们按照规则写网页 浏览器根据规则渲染我们的网页 对于不同的浏览器 对同一个标签可能会有
  • nginx下载安装启动(mac)

    为了方便下载管理 建议下载brew工具 bin zsh c curl fsSL https gitee com cunkai HomebrewCN raw master Homebrew sh 使用brew安装nginx brew inst
  • 利用stm32cubemx生成单极性倍频spwm调制代码步骤

    利用stm32实现单极性倍频SPWM调制 电赛必备 哔哩哔哩 利用stm32cubemx生成单极性倍频spwm调制 首先打开cubemx选择mcu型号 配置时钟等 很多教程讲得很好 我这就跳过这些 接下来来到定时器的配置 对于全桥电路 需要
  • 代码管理工具github+git+tortoisegit下载

    GitHub是世界上最大的代码托管平台 是程序员的必备神器 Git 是一个开源的分布式版本控制系统 用于敏捷高效地处理任何或小或大的项目 tortoisegit是一款开源的git的版本控制系统 也叫海龟git TortoiseGit的安装和
  • Session 简介及绑定

    session是什么 其实session是一个存在服务器上的类似于一个散列表格的文件 里面存有我们需要的信息 在我们需要用的时候可以从里面取出来 说起session的作用 简单的举个例子 我们在登录某些网站的时候 输入了用户名密码 登录以后
  • GTest测试框架使用

    Gtest框架简介 Gtest是Google Test的简称 是Google开发的C 单元测试框架 适用于多个平台 Liunx Mac OS X Windows Cygwin Windows CE and Symbian PlatformI
  • OpenWrt-uci脚本命令

    转自 http developer t firefly com thread 1035 1 1 html 目录 1 UCI命令 2 UCI的文件和流程 3 UCI 的文件语法 4 UCI 命令读写配置 5 综合实例 1 UCI命令 一个众所
  • 国内知名公共DNS服务器 IP

    国内知名公共 DNS 服务器 IP 腾讯 DNS 119 29 29 29 182 254 116 116 阿里 DNS 223 5 5 5 223 6 6 6 百度 DNS 180 76 76 76 114DNS 114 114 114
  • osg学习(六十八)序列化插件加载过程

    加载D OSG OAGEARTH x86 bin osgPlugins 3 6 3 osgdb serializers osgd dll
  • 微信小程序 公众号 订阅消息 模板 正则 参数校验

    自己配置订阅消息模板 如果参数格式不正确 会导致订阅消息发不出去 所以在创建模板的时候需要校验参数格式 订阅通知参数值内容限制说明 微信官方文档 创建模板 代码
  • qt 信号发送太快,槽太慢的解决办法

    手机码字太慢 自己看 ifndef THREADTEST H define THREADTEST H include include include include class ThreadTest public QObject Q OBJ
  • 职业规划-IT方向(超详细,超具体)

    前言 今天是周五 本来想好好休息 前天写了一篇博文 说出我的故事 献给正在迷茫的你 不少读者留言不知该如何做职业规划 于是继续拖着忙碌了一周疲倦的身体 坐在电脑前 吹着电扇 提笔写下这篇 职业规划 IT方向 如果你是应届生 或者准备转行 I
  • Django项目想要在 Python Console里面进行操作 报错找不到对应模块

    Django项目想要在 Python Console里面进行操作 报错找不到对应模块 问题描述 ModuleNotFoundError No module named django 问题原因 在进行对 Python console操作 进行
  • 6.1-深度学习简介

    文章目录 一 深度学习的三个步骤 1 1 全连接前馈网络 Fully Connect Feedforward Network 1 2 矩阵运算 Matrix Operation 1 3 手写数字辨识 二 确定评价函数 goodness of
  • 静电电容

    1 用电容进行ESD的防护只能用数pF到数百pF的小电容 这里关注的不是容量而是串联等效电感参数 静电放电极快 对应极高的频率 耐压的问题不用考虑 因为静电源内阻极高 能量很小 放电时电压跌落极快 2 理论上讲大电容并不会因为时间常数的增加
  • ❤echarts折线图完整使用及详细配置参数

    echarts折线图完整使用及详细配置参数 进入echarts官网 查看案例 下面说说一些echarts图的调节 一 配置echarts具体参数 01 基础版本的折线图 option xAxis type category data Mon
  • 将gif图转成静态图片显示canvas

    需求描述 仅一张gif动图 进入页面 呈现静态图片显示 点击 gif图显示 代码实现
  • uniapp全局分享以及指定页面分享禁用的设置

    1 创建share js文件 module exports onLoad 设置默认的转发参数 share title 默认为小程序名称 path 默认为当前页面路径 imageUrl 默认为当前页面的截图 白名单 const urlList
  • Apollo学习笔记

    Apollo学习笔记 Apollo课程 智能驾驶入门课程 无人驾驶概览 1 软件层分为三层 实时操作系统 RTOS 确保在给定时间内完成特定任务 实时时确保系统稳定性 驾驶安全性的重要要求 通过在Ubuntu Linux操作系统加入Apol