天天看点

Apollo学习笔记(一)概述+大纲

自动驾驶

Apollo学习笔记(一)概述+大纲

自动驾驶正处在告诉发展的阶段。写篇博客便于以后复习。因为做的是自动驾驶中的某个流程,但是和机器学习无关。所以很多都是略过略过,有时间一定会好好研读机器学习相关的内容。讲真大学本科学机器学习真是给我这个菜鸡留下了心理阴影。主要是概述,连起来便于我复习,整个自动驾驶系统分为几个主要模块

  • 定位:车必须要知道自己在哪里,去哪里
  • 感知:通过雷达,摄像头等传来的信息,车要感知自己周围的障碍物,是车还是人,结合定位地图的信息(红绿灯等)都会传入规划
  • 预测:根据传来的感知信息等去预测『其他』的动作,便于做决策
  • 规划:决策步骤,规划出一条路径。
  • 控制:计算机控制车沿着规划的路径开。

Apollo

Apollo学习笔记(一)概述+大纲

百度Apollo无人车主要分为四个部分

  • 线控车(这是必备,由计算机支配而不是人为去开)
  • 硬件(感知,定位等都需要高精度,采集数据来让我们完成精密计算)需要达到apollo的硬件规格
  • 软件:自动驾驶=计算机

    1. ubuntu+apollo内核=RTOS实时操作系统

    2. Runtime Framework(自动驾驶都是差不多这几个模块,区别在于算法各方面。这几个模块又有一个共性都是收数据,处理数据,发数据。比如规划:收到传感器等传来的数据发出自己规划的路径数据)所以Runtime Framework Apollo用的是cyber_RT。定义了各个模块,模块之间的交流(数据通道),模块之间传递消息的格式(message)等。这样解耦合,便于apollo的开发。

    3. 模块(在自动驾驶部分已经介绍过了)通过框架通信,分离。

  • 云服务(通过网络访问服务器,不在车辆之上的服务): 仿真,数据,安全,DuerOS等

Apollo技术改进和亮点

共享内存:一次写入多次读取

去中心化:所有节点放在一个域内(域的概念:同一个域内通信,不同域内隔离,有时会根据ip分配域,做到隔离),从主节点和其他节点变成公共域,每个节点备份全部信息,消除单点故障风险

数据兼容:message 统一格式 protobuf接口语言

仿真环境平台:构建不同的驾驶场景,每个模块有自己的算法上传你自己模块的算法,有评分标准,三维可视化实时路况,打分便于开发者调参。

仿真数据:记录场景和虚拟场景:障碍物,交通信号灯等数据

ApolloScape数据集:对中国所有公路已完成高精度绘图

高精度地图:语义:交通队灯,速度限制,左转——重要的精度保证安全。

定位:各种数据(摄像头+雷达等)+找地标+和地图对比 坐标变换 数据融合 预处理(删除差的数据),便于建立感知(地图上的信息,信号灯,还有找停车点 )

Apollo Runtime Framework——CyberRT

Apollo是开源项目,github上可以找到,内部有很多文档。以下只是个人理解,可能有误,欢迎大家指正。

  • 模块——>component 继承基类,自定义初始化函数和数据处理函数
  • mainboard:看做是进程,加载一个或多个模块(如果两个模块数据交互大,加载到同一个进程内)。cyberRT main函数入口
  • 模块之间的通信
    • 通信类:Reader/Writer(通过channel通道即组件间数据总线,p2p)

      Service(request/response)

      Param(全局参数传递,C/S模式)

    • Node:框架里最基本的组成单元,模块包含并通过Node进行通信
    • Message:模块间通信的消息格式定义
  • DAG:把模块抽象成点(本来也是通过Node通信),模块之间的通信抽象成边,加载整个框架cyber_launch会根据launch file启动多个mainboards,根据dag file加载模块进mainboards,
  • 协程:优化线程使用资源分配实现的用户级线程
  • 调度
  • 多路数据融合

    直接上图吧,根据cyber文档写的。想深入,看代码

    Apollo学习笔记(一)概述+大纲

README

接下来会研读apollo repo里的DreamView部分,因为都是开源的,就继续写博客做笔记了。

学习资料很多,最开始一头雾水,看了大纲明白了很多。bilibili搜百度 apollo会有几个很好的课程都是度学堂开的

以及最近一周工作跌跌撞撞学了好几点超级重要

  • 一定要问,多问(不耻下问,会发现很多事豁然开朗,别因为刚工作不好意思)
  • 看文档和代码永远是最好的解决方法(先看再问)

继续阅读