自动驾驶初级概念

[toc]

文中部分概念摘录自百度 Apollo 系统公众号,并以 Apollo 系统为例进行概念讲解。

运营

运行设计域 ODD

运行设计域指的是自动驾驶系统功能设定的运行条件,包括但不限于环境地理时段限制交通流量道路特征等。只有当全部条件都满足的时候该自动驾驶才能保证正常运作。相反,欠缺任何一个前提条件,该系统都有可能出现故障,可能会采取停车或是需要驾驶者接管。

宏观

无人驾驶车的工作原理

我们使用计算机视觉和传感器融合技术,获取一幅关于我们在世界上的位置的丰富画面,使用定位确定我们在这个世界的精确位置,然后使用路径规划来绘制一条通过这个局部世界到达目的地的路径,通过控制车辆的转动方向盘、油门、制动器,沿着该轨迹行驶并最终移动车辆。从本质上讲,其他一切无人车都是这些核心功能更复杂的实现。

自动驾驶 vs 汽车电子

自动驾驶更偏向于机器人工业。看待无人车和传统车视角是不一样的,无人车更像一个机器人,不像一个车。 传统汽车电子是基于比较确切的规则、长时间经验积累的一种技术,两者技术差异较大。 自动驾驶和汽车电子的专注领域、迭代的频率、速度,适合这种技术的开发模式、方式、流程之间都有很大的差别。

参考链接

操作系统

实时操作系统(RTOS)

实时操作系统(RTOS),可确保在给定时间内完成特定任务,“实时” 是指无人车的操作系统,能够及时进行计算,分析并执行相应的操作,是在车辆传感器收集到外界数据后的短时间内完成的。

实时性能是确保系统稳定性和驾驶安全性的重要要求。

ROS 概念

ROS 全称 Robot Operating System(机器人操作系统)

  • ROS 是适用于机器人的开源元操作系统;
  • ROS 集成了大量的工具、库、协议,简化对机器人的控制;
  • 还提供了用于在多台计算机上获取、构建、编写以及运行代码的工具和库,ROS 在某些方面类似于 “机器人框架”。

参考链接

ROS 系统架构

  • OS 层,也即经典意义的操作系统 ROS 只是元操作系统,需要依托真正意义的操作系统,目前兼容性最好的是 Linux 的 Ubuntu,Mac、Windows 也支持 ROS 的较新版本了;
  • 中间层,是 ROS 封装的关于机器人开发的中间件,比如:基于 TCP/UDP 继续封装的 TCPROS/UDPROS 通信系统,用于进程间通信 Nodelet,为数据的实时性传输提供支持;
  • 应用层,功能包,以及功能包内的节点,比如: master turtlesim 的控制与运动节点等。

ROS 设计目标

  • 代码复用:ROS 的目标不是成为具有最多功能的框架,ROS 的主要目标是支持机器人技术研发中的代码重用;
  • 分布式:ROS 是进程(也称为 Nodes)的分布式框架,ROS 中的进程可分布于不同主机,不同主机协同工作,从而分散计算压力;
  • 松耦合:开发者不需要关注模块内部实现,只要了解接口规则就能实现复用,实现了模块间点对点的松耦合连接。

车辆

激光雷达

自动驾驶是用光学传感器来获取环境信息的,这个过程就是感知。

在光学传感器里,激光雷达是一种快速的遥感技术,它有非常精确的测距能力,还有比较大的探测范围,是一种高精度或高分辨率的传感器,以激光雷达传感器为主的自动驾驶感知方案是现在最为常用而且可靠的方案。

目前,通用的激光雷达的产品主要是 Velodyne (国外) 和 Hesai (国内) 等。

高精地图

与普通地图不同,高精地图主要服务于自动驾驶车辆,通过一套独特的导航体系,帮助自动驾驶解决系统性能问题,扩展传感器检测边界。目前高精地图主要应用在高精定位、环境感知、决策规划、仿真运行四大场景,帮助解决林荫道路 GPS 信号弱、红绿灯是定位与感知以及十字路口复杂等导航难题。

什么是高精地图?它和手机上的地图有何区别?

高精地图不仅具有更高的精度(可以达到厘米级);而且具有更加丰富、更加精细的内容。它能够表述所有能看到的影响交通驾驶行为的元素,有更深层次的交通语义内容,更加全面清晰。

在实际中,高精地图与导航地图最大的区别在于,它本身就是一套面向自动驾驶的地图,而不是面向人的地图。它提供的能力,或它提供的信息,是用于自动驾驶相关的定位系统,感知系统和决策系统。

百度高精地图

目前百度高精地图主要分为四个部分: 第一部分,是定位的图层,顾名思义是用于定位; 第二部分,是静态矢量图层,是基于生产出来的矢量信息,这个也可以被称作狭义的高精地图。在这个部分将会表达我们日常在道路上看到的所有的跟交通相关的信息。比如道路两旁的交通设施,道路本身的车道,道路上的其他标线、道路停止线等,以及基于这些交通设施实际上表达出来的一些语义关系,如拓扑关系,虚拟车道之间的连接关系,红绿灯的绑定关系等; 最后,在这两层最基本的数据之上,目前还提供了人类经验的图层以及动态的信息图层。

参考链接

高精定位有哪些特点?

高精定位是自动驾驶核心技术之一,自动驾驶车辆在道路上需要实现厘米级的实时定位精度,复杂环境,如天气变化、季节变化、道路拥堵等各种外部因素的干扰。

参考链接

基于高精地图的决策规划方案有哪些?

对于规划决策模块,感知输入和定位输入的信息都会交给决策模块来决定自己的自动驾驶行为。这种自己决定自己的驾驶行为,就是一个间接应用在决策规划模块的例子。 同时,地图当中也会提供一些数据直接应用到决策模块。比如在 L4 级的自动驾驶里,过路口一直是件比较复杂的事情。通过地图当中预设一些虚拟的引导线,车就可以沿着引导线走,这样就大幅降低了自动驾驶的难度,提高了自动驾驶车辆的通行性。另外可以根据地图的信息来进行路径规划和速度规划,这部分与传统的导航是比较类似的。

高精地图用于定位

高精地图是 L4/L5 级别自动驾驶系统的核心,许多无人驾驶车模块都有赖于高精地图,有了高精地图我们就需要在该地图上进行自定位。这意味,需要弄清我们在地图上的位置,这就是定位 —— 无人驾驶车辆在地图上的确切位置。

  • 首先车辆可能会寻找地标,我们可以使用从各类传感器收集的数据,如摄像机图像数据、激光雷达收集的三维点云数据来查找地标。车辆将其收集的数据与其在高精地图上的已知地标进行比较,这一匹配过程是需要预处理、坐标转换、数据融合的复杂过程。
  • 无人车的整个定位过程取决于高精地图,所以车辆需要通过高精地图明确它处于什么位置。

高精地图的定位方案有哪些?

基于高精地图的定位方案一般分为两种:

  • 一种是视觉的定位、点云的定位。它们的原理相差不大,就是通过地图预先找出一些特征,然后通过车辆传感器拿到的数据,再把这个特征进行匹配,如果匹配到了,就能够比较精确地获取到当前位置。

  • 另一种是多传感器融合的定位。在传统的方案中,更多的是通过卫星定位来获得定位结果,这就跟我们手机上用到的 GPS 类似。除了卫星定位系统以外,还有 IMU、轮速计。通过 IMU、轮速计进行推算,也能够大致推算出当前位置,这些都是属于传统的定位手段。

    在实际高精地图定方案当中,通常是多传感器融合的定位方案。

高精地图用于感知

无人车也可以使用高精地图来帮助感知,就像人的眼睛和耳朵会受到环境因素的影响一样,无人车的传感器也是如此。

  • 摄像机、激光雷达、雷达探测物体的能力,在超过一定距离后都会受到限制。

  • 在恶劣的天气条件下或在夜间,传感器识别障碍物的能力可能会受到进一步限制。

  • 另外当车辆遇到障碍物时,传感器无法透过障碍物来确定障碍物后面的物体。

    这时,就需要借助高精地图的帮助了。

即使传感器尚未检测到交通信号灯,高精地图也可以将交通信号灯的位置提供给软件栈的其余部分,帮助车辆做下一个决策。

另一个好处在于,高精地图可帮助传感器缩小检测范围,如高精地图可能会告知我们在特定位置寻找停车标志,传感器就可以集中在该位置检测停车标志,被称为感兴趣区域 ROI。ROI 可帮助我们提高检测精确度和速度,并节约计算资源。

高精地图在自动驾驶系统中的其他应用有哪些?

高精地图作为自动驾驶的核心基础模块。除了在定位、感知、决策规划中具有重要作用外,在安全、预测、仿真等阶段都是不可缺少的。比如高精地图可以搭建与真实场景高度一致的仿真场景,协助自动驾驶的测试开发工作。此外在人机交互和可视化以及安全驾驶策略上,高精地图都发挥着重要的作用。

定位

定位在自动驾驶中的作用

定位在自动驾驶中的作用有以下三点: 第一,与高精地图配合提供静态场景感知; 第二,感知得到的动态物体正确放入静态场景; 第三,位置和姿态用于路径规划和车辆控制。

参考链接

Apollo 多传感器融合定位

融合框架分为两部分,一个是航迹导航解算,这部分的输入是 IMU 提供的高频的加速度和角速度。此外会在整个融合的框架里面进行误差修正,对于 IMU 零偏进行修正。还有一个真正的把各个模块的两侧融合到一起的模块,这个模块有很多种实现方式,现在学术上比较流行的基于优化的方式。

参考链接

基于高精地图的定位方案

基于高精地图的定位方案一般分为两种,一种是视觉的定位、点云的定位。通过地图预先找出特征,然后通过车辆传感器拿到的数 据,把特征进行匹配,如果匹配到,就能够较精确地获取到当前位置。另一种是多传感器融合的定位。

LiDAR 定位

激光雷达定位,主要就是在线点云与预制底图,基于预测 pose 在小的搜索范围内,按照滑动像素的方式,计算 features 之间的匹配度 cost value,然后把 cost value 换算成概率,最终根据概率分布来进行位置计算。

参考链接

卡尔曼滤波是什么?

卡尔曼滤波是另一种 LiDAR 定位方法,卡尔曼滤波用于根据我们在过去的状态和新的传感器测量结果预测我们当前的状态。

GNSS 定位技术的基本原理

  • 用户设备可以从接收信号中解码获得数据码,包含电文内容。这样,卫星轨道参数已知,通过时间计算卫星的位置、速度和钟差;
  • 从卫星到地面的传播距离通过测距码信号处理获得传播时间后,乘以光速得到距离;
  • 通过 3 颗卫星交会,可以得到用户位置;

视觉定位

现有视觉定位方案一般都需要预先构建定位地图,再基于构建好的地图进行定位。分为两类:一类是从 SLAM 方案(simultaneous localization and mapping)出发,将地图构建和定位拆开,预先构建特征点地图用于定位。这类方案中特征点的性能至关重要,传统的特征点方法比如 SIFT、ORB 无法满足地图时效性的需求。另一类是基于高级语义元素构建地图并进行定位的方案,比如车道线或者杆状物。

SLAM

SLAM(simultaneous localization and mapping),也称为 CML (Concurrent Mapping and Localization),即时定位与地图构建,或并发建图与定位。SLAM 问题可以描述为:机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和地图进行自身定位,同时在自身定位的基础上建造增量式地图,以绘制出外部环境的完全地图。

参考链接

捷联惯导

捷联惯性导航可以提供两种量测,一个是加速度的信息,另一个是角速度的信息,加速度严格意义上是物体本身的加速度合成重力所得到的。 通过这个传感器,可以得到一个角速度,也可以得到一个加速度,可以去递推前后时间的一个轨迹。

定位的基础性技术

那么定位主要基于哪几类技术? 整体分成三类技术:首先是基于信号的定位,主流的做法是利用 GNSS,比如说天上的卫星、GPS、北斗,然后也可能接收基站的信号,综合结算,来得到一个高精度的定位结果。当然也可以不用卫星,比如说可以用车路协同的方式,可以用 UWB 或者是 WiFi。

三轴陀螺仪是怎么操作的?

三轴陀螺仪的三个外部平衡环一直在旋转,但三轴陀螺仪中的旋转轴始终固定在世界坐标系中。在坐标系中的位置是通过测量旋转轴和三个外部平衡环的相对位置来计算的。

参考链接

IMU 有什么作用?

结合 GPS 和 IMU 来定位汽车,一方面 IMU 弥补了 GPS 更新频率较低的缺陷。另一方面 GPS 纠正了 IMU 的运动误差。但是即使将 GPS 和 IMU 系统相结合也不能完全解决定位问题,比如我们在山间行驶或城市峡谷中或在地下隧道中行驶,那么可能长时间没有 GPS 更新。

参考链接

激光雷达定位的原理是什么?

利用激光雷达,可以通过点云匹配来对汽车进行定位。该方法将来自激光雷达传感器的检测数据与预先存在的高精地图之间匹配,通过这种比较可获知汽车在高精度地图上的全球位置和行驶方向。

参考链接

pitch yaw roll 指什么?

pitch[pɪtʃ]yaw[jɔː]roll[rəʊl] 本是航空学的概念,如下图所示,现在逐渐应用到自动驾驶领域。

  • 在航空中,pitch, yaw, roll 如上图所示:
    • pitch 是围绕 X 轴旋转,也叫做俯仰角。
    • yaw 是围绕 Y 轴旋转,也叫偏航角。
    • roll 是围绕 Z 轴旋转,也叫翻滚角。

参考链接

仿真

仿真

目前主要有 3 种不同形式的仿真:

  • 真实场景下的路测和结构化测试,可以对无人车在真实环境中进行端到端的测试,但是成本高昂;
  • 基于真实数据回放的测试,先通过收集路测过程中的各种数据,再进行测试,它可以保证测试数据足够真实,但是可交互性极差;
  • 基于仿真器模拟的测试,可以自由地构建测试场景,特别是一些现实生活中较少遇到的场景,而且测试成本比真实路测的成本低,时间花费更少。

参考链接

仿真场景用于做什么呢?

仿真场景分为 Worldsim 和 Logsim。

  • Worldsim 是由人为预设的障碍物行为和交通灯状态构成的场景,可以简单高效地测试自动驾驶车辆,但缺乏真实交通环境中复杂的情况;
  • Logsim 是由路测数据提取的场景,提供复杂多变的障碍物行为和交通状况,使场景充满不确定性。

参考链接

仿真真实性

可量化的 “仿真真实性” 的度量准则: 1、仿真的准召率:与真实路上问题做比对,仿真离线发现的所有问题中,有多少是路上可能发生的?召回率:路上发生的所有问题中,有多少是仿真能够召回的?准召率高则仿真能力强。 2、效果预估准确性:使用仿真对新算法进行路测效果的预估,将最终路测后得到的实际路测效果作为真值。对两者(预估值与真实值)进行相对 diff 的计算,以评估仿真对真实效果预估能力的强弱。预估 vs 真实值的相对 diff 小,则仿真能力强。

参考链接

仿真场景合理性

对于场景合理性的考量,需要同时兼顾:场景微观合理性(即单个场景是否有可能在路上出现,不会出现天外飞仙),以及场景宏观合理性(场景是否具有足够的多样性,能够覆盖了路上各种 case,在频度上是否与路上实际趋同)。 微观合理保证了仿真产出结果的准确性,宏观合理保证了仿真产出结果能够有足够的召回能力。 很显然,在具体实现时,两者容易出现冲突 —— 在提升准确性时多样化上就会不足;而在多样性提升时准确性就会下跌。因此需要对宏观 / 微观两者做良好的 balance。

仿真复现率

模块在仿真中运行,与真实道路上的运行相比,在同样输入的情况下,产生的 diff 有多大?这个 diff 的量化评估,称之为 “仿真复现率”。很明显,仿真的复现能力是仿真能够做出正确预测的前置依赖:如果仿真中的效果,与路测时真实效果无法完成严格的一一对齐,那么仿真给出的任何结论都是没有任何价值的。而提升 “仿真复现率” 的首要问题还是量化问题 ——“如何客观度量仿真复现率”。

LGSVL Simulator

LGSVL Simulator 是一款开源的无人驾驶仿真系统,支持 Linux 和 Windows,可以对接 Apollo 及 Autoware 自动驾驶软件使用。

运行该仿真系统需要一台带 NVidia 独立显卡的高配置的电脑。在 Windows 版本的 Simulator 中,通过访问指定的 ip 地址的方式与运行在 Linux 上的 Apollo 建立连接。

参考链接

Routing

Routing 模块

Routing 模块正如其名称所示,其主要作用就是根据请求生成路由信息 模块输入:

  • 地图数据
  • 请求,包括:开始和结束位置 模块输出:
  • 路由导航信息

参考链接

Map

点云地图的制作

点云地图的制作主要是把采集好的数据进行加工,采用激光雷达数据来进行点云地图的制作。制作的过程简单的来说就是通过激光雷达来扫描整个街道,以建立整个街道的三维模型。

因为激光雷达的扫描范围有限,因此需要逐帧把激光雷达的数据拼接起来,来获取整个街道的模型,这个过程也被称为点云注册。

Apollo 之 Map 模块

Map 模块主要提供的功能是读取高精度地图,并且转换成 Apollo 程序中的 Map 对象。 简单来说,就是说把 Xml 格式的 Opendrive 高精度地图,读取为程序能够识别的格式。 参考链接

Perception

源码分析 之 Perception

Perception 系统是以多种 sensor 的数据,以及高精度地图的信息作为输入,经过一系列的计算及处理,对自动驾驶车的周围的环境精确感知。 能够为下游模块提供丰富的信息,包括障碍物的位置、形状、类别及速度信息,也包括对一些特殊场景的语义理解(包括施工区域,交通信号灯及交通路牌等)。 参考链接

视觉感知算法

视觉感知算法在 Apollo 平台上主要有 3 个应用场景,分别是红绿灯检测、车道线检测、基于摄像头的障碍物检测。每个模块又可以分为 3 部分,分别是图像的预处理、神经网络模型以及后处理。

  • 预处理:对上游信息做一些处理和整合,以方便把信息直接输入到模型中做预测。
  • 神经网络模型:主要涉及一些深度学习算法,包括目标检测、语义分割、图像分类等。
  • 后处理:从神经网络模型拿到输出后,会结合模型的输出、其他传感器的信号以及经验信息,利用一些传统的算法进一步优化网络模型的预测,这样可以使我们的检测结果能够适应一些比较复杂的路况,或者针对性地应对一些特殊的情形,让我们的算法可以在实车上跑得更加流畅。

参考链接

神经网络模型

神经网络模型分成了两部分:一是检测,二是对检测的结果做分类识别。我们的检测模型并不会直接输出灯的颜色信息,它的输出类别是三种形状,有横着的、竖着的和方形的,我们会根据不同的形状类别,针对性的用分类模型做具体的颜色识别。

规划

Planning 功能

Planning 功能:基于预测的结果、路由模块的全局路线指引和地图信息,生成安全舒适的驾驶轨迹。 这里有两个关键词,第一个关键词是安全,在第二个关键词是舒适。 后面的算法,很多都是基于安全和舒适来考虑的。

参考链接

Path Bound Decision

首先,车在起始状态时,会判断需不需要进行换道:

  • 如果不需要进行换道,还需要判断是否需要借道(向左变道,再变回来),如果不需要借道,boundary 就会限制在本车道内。如果我们需要借道,需要判断借道是否安全,如果不安全,boundary 还会限制在本车道内。如果判断是安全的,就会进行借道路径的限制。
  • 如果需要换道,首先还需要进行安全性判断。如果不安全,依然限制在本车道内,如果安全,就会进行换道的路径限制。

规则的选择需要考虑哪些因素呢?

到底如何选规则需要考虑很多因素,主要有三点,第一点要考虑舒适度,不能够加速度太快,或者加速变化太快;第二点要考虑车本身物理特性,比如车最高加速度能达到多少;第三点考虑 SV 道路限速。

参考链接

参考线平滑的优化目标有哪几种?

参考线平滑的优化目标有三个,第一个是每相邻两个点的距离要尽量近;第二是每三个相邻采样点的夹角要足够小;第三是优化目标尽量不要远离于初始点位置,调整尽量小。

静态速度限制有哪些呢?

静态速度限制又叫 SV 线,横轴 S 指沿着路径的位移,纵轴 V 是在位移处的速度限制。这里列举三种限制,第一是道路的基本限速。第二是路上的减速带,我们需要把速度降到足够低,让乘客体感足够好。第三种情况是在离行驶路径较近处有行人或者自行车,为了安全,车速不能太快。在实践中静态速度限制有更多因素。

障碍物可分为哪几种?

障碍物可分为三种:机动车、行人和自动车。障碍物的配置要复杂一些,包括 ID、类型(类型主要是机动车、行人和自动车)、起点和速度。不同的类型会影响算法的规避。障碍物的移动方式有两种,一种是静止的,另一种按照轨迹移动。如果选择按照轨迹移动,必须要编辑它的轨迹,这里面从起点出发到结束会路过三个规定的点,对每个点都要进行配置。

决策模块有哪些特点呢?

决策模块有两个特点:

  • 第一是相当于信息 hub,它把所有信息集中起来;

  • 第二是经过决策模块传给轨迹优化之后,轨迹优化不用考虑上层所有复杂的信息,使抽象的问题变得相对简单,有助于替换新的算法。

决策对无人车的限制有哪几类?

决策就是对无人车的行车进行各种限制,主要分为三类:

  • 第一类是交规限制,保证无人车遵守交规,比如信号灯、人行横道等交规;
  • 第二类是路径限制,例如,不能跨两条车道行车,不能驶出道路边界;
  • 第三类是速度限制,无人车不能超过道路限速,需要低速通过限速带。

Lattice Planner

Lattice Planner 主要基于采样+选择,算法首先需要参考线,可以处理多弯道的场景。Lattice Planner 现在已经在低速园区和高速公路的场景中有产品落地。

“末知不安全场景” 缩小

在主车跟驰前车突然避让的情况下,若没有车路协同的加持,后车无法感知;而有了车路协同的加持就可以提前感知到这个末知不安全的 状态。在遇非机动车闯红灯违规驾驶的情况下,正常行驶的汽车是无法预知到非机动车不安全交通规则的情况,在有车路协同路端设备的加持下则能提前感知到,也可以缩小未知不安全的场景范围。

动态规划

动态规划一般应用于最优化问题 (optimization problems)。这类问题一般存在多个解,每个解都具有一个度量值。我们期望得到具有度量值最优(即取最大或最小值)的解。该最优解一般称为最优化问题的一个解。

注意,这个解并非唯。因为最优化问题可能存在多个最优解。

轨迹生成

高等级地图路线只是规划过程中的一部分,我们仍需要构建沿这条路线前进的低等级轨迹。这意味着要处理一些不属于地图的物体:如其他车辆、自行车或行人。例如,,我们可能需要与试图在我们前面掉头的汽车互动,或者我们可能希望超过辆在公路上行驶的慢车。这些场景需要更低级别、更高精确度的规划。

如何选择最佳轨迹?

答案是使用 “成本函数”。成本函数为每个轨迹分配了一个 “成本”,我们选择成本最低的轨然。轨迹” 成本 “由各种犯规处罚组成,例如:偏离道路中心,有可能产生碰撞,速度限制,轨迹的曲率和加速度让乘客惑到不舒服等。

控制

规划控制模块 / PNC 模块

人类通过大脑做完规划和决策后,指令双手、双脚完成指令。自动驾驶汽车需要结合地图提供的参考规划结果 + 车端实时规划来完整地整体操作。

参考链接

控制参数自动调整服务

控制参数自动调整服务利用机器学习方法自动优化 Apollo 控制模块中使用的 PID、LQR、MPC、MRAC 等控制器的控制参数,从而实现在离线模拟环境中控制器全自动调整,这会省去大量的手动测试和道路实验。它继承了多种 Apollo 在线服务工具,包括动态建模、仿真平台和控制配置文件。

参考链接

软件设计

懒汉式单例

不同于钱汉式单例,懒汉式单例仅在初次执行荻取实例的动作时才对实例进行动态内存分配 (懒” 的体现),因而程序具有更高的启动速度,但无可避免地会降低初次访问实例时的效率。

饿汉式单例

饿汉式单例在类的加载过程中便迫不及待地 (“饿” 的体现) 为实例指针分配了动态内存,当有多个线程尝试获取实例指针时,获得的将是同一个实体,因此饿汉式单例天然地具有多线程安全性,但也正因为实例的动态内存分配过程末考虑访问时机,因而会降低程序启动速度。

单例模式

单例模式是一种创建型设计模式,能够保证一个类只有唯一的实例存在,并提供一个访问该实例的全局节点,基于该特性,单例模式广泛应用于线程池管理、日志管理和全局配置参数管理等场景。

数据 Meta

数据 Meta 是详细记录了数据信息的数据,比如采集的时间、地点、天气、采集的人,以及当时的情况等信息,对数据做分类管理。

Linux 性能优化

Linux 操作系统的 "perf" 命令可以采样一段时间内的系统调用,保存成文件之后再结合火焰图,可以查看当前系统各个进程对 CPU 的使用情况,火焰图中的横轴代表了 CPU 占用时问的比例,宽度越宽,代表该进程越耗时。火焰图的横轴是当前进程的调用栈,可以逐级查看每个调用栈和具体的耗时。

Linux 对实时进程的调度

Linux 对实时进程的调度有 2 种方式:

  1. SCHED_FIFO: 先到的进程优先执行,后到的进程需要等之前的进程执行完成之后再开始执行;

  2. SCHED_RR:基于时间片轮转,先到的进程执行完成之后放到队列尾部,在队列中循环执行。


入门建议

百度 Apollo 可谓是中国自动驾驶的黄埔军校,孵化出一系列初创公司和优秀工程师,现在依然活跃在自动驾驶的第一梯队。

自动驾驶的入门者,可以先以 Apollo 系统为学习对象,对自动驾驶技术栈加以了解。

mmexport1519643664553


上述内容如有侵权,邮件联系可删除!