Apollo2.0自动驾驶howto文件夹之how_to_understand_architecture_and_workflow.md

自动驾驶 同时被 2 个专栏收录
68 篇文章 6 订阅

/****************Apollo源码分析****************************

Copyright 2018 The File Authors & zouyu. All Rights Reserved.
Contact with: 1746430162@qq.com 181663309504

源码主要是c++实现的,也有少量python,git下载几百兆,其实代码不太多,主要是地图和数据了大量空间,主要程序
在apollo/modules目录中,
我们把它分成以下几部分(具体说明见各目录下的modules):
感知:感知当前位置,速度,障碍物等等
Apollo/modules/perception
预测:对场景下一步的变化做出预测
Apollo/modules/prediction
规划:
(1) 全局路径规划:通过起点终点计算行驶路径
Apollo/modules/routing
(2) 规划当前轨道:通过感知,预测,路径规划等信息计算轨道
Apollo/modules/planning
(3) 规划转换成命令:将轨道转换成控制汽车的命令(加速,制动,转向等)
Apollo/modules/control
其它
(1) 输入输出
i. Apollo/modules/drivers 设备驱动
ii. Apollo/modules/localization 位置信息
iii. Apollo/modules/monitor 监控模块
iv. Apollo/modules/canbus 与汽车硬件交互
v. Apollo/modules/map 地图数据
vi. Apollo/modules/third_party_perception 三方感知器支持
(2) 交互
i. Apollo/modules/dreamview 可视化模块
ii. Apollo/modules/hmi 把汽车当前状态显示给用户
(3) 工具
i. Apollo/modules/calibration 标注工具
ii. Apollo/modules/common 支持其它模块的公共工具
iii. Apollo/modules/data 数据工具
iv. Apollo/modules/tools 一些Python工具
(4) 其它
i. Apollo/modules/elo 高精度定位系统,无源码,但有文档
ii. Apollo/modules/e2e 收集传感器数据给PX2,ROS

自动驾驶系统先通过起点终点规划出整体路径(routing);然后在行驶过程中感知(perception)当前环境
(识别车辆行人路况标志等),并预测下一步发展;然后把已知信息都传入规划模块(planning),规划出之后的轨道;
控制模块(control)将轨道数据转换成对车辆的控制信号,通过汽车交互模块(canbus)控制汽车.
我觉得这里面算法技术含量最高的是感知perception和规划planning,具体请见本博客中各模块的分析代码。
/****************************************************************************************


如何理解体系结构和工作流程

===========================================

##理解aplloauto  - 核心的基础知识

       通过控制器区域网络CAN总线规划引擎来控制自动车辆(AV )动态。软件从中读取数据,硬件寄存器并将其写回,就像我们在汇编语言中所做的一样要简明计算,快速响应。位置模块,感知模块,计划模块是独立的输入源和输出源通过Peer2Peer一起工作。P2P支持RPC网络应用程序。
        Apolloauto使用ROS1作为底层网络,这意味着apolloauto借用ROS1的Master-Nodes框架,这是一种消息订阅框架。由于来自ROS1的xmlRPC真的很老。有鉴于此,百度自己开发了自己的RPC框架,名为BRPC。

在百度ApolloAuto中,已经描述了三个阶段的发展

1.离线模拟引擎Dreamviewer&apolloauto核心软件模块
   - 首先了解算法如何适用于汽车
   - 我们不需要碰到真正的汽车或硬件,并立即开始开发
2.核心模块集成:
   - 位置
   -  Perception \(支持第三方的解决方案,如基于Mobileye ES4芯片的摄像头,用于L2开发)\>处理来自`Lidar`的点云数据并根据请求返回分段对象信息
   - 计划:计算精细调整的路径,为路径服务的路径段提供汽车动态控制信息
   - 例程:通过`Navigator`界面查找路径段的本地实现; 使用A \ *星号算法。
3. Hdmap(高清地图)。与L2级AV开发的主要区别之一。L4 AV机器需要Hdmap。由于机器人\(自动车辆)需要重建
(请查看opencv [SLAM]()chapter \)在其微型计算机中,参考对象坐标对于在地图和现实世界中重新定位VA非常重要。
4.基于云的在线仿真驱动场景引擎和数据中心。
   - 作为百度的合作伙伴,您将被授予证书,以提交新图像并在云上重播您开发的算法。
   - 创建和管理复杂的场景以模拟真实世界的驾驶体验

## ROS底层订阅和发布机制和apolloauto模块结构
#### ROS底层订阅和发布机制
那么基于ROS1的系统如何相互通信?apolloauto如何使用它?ROS有[教程](http://wiki.ros.org/ROS/Tutorials),我会解释它
在我们分析apolloauto模块结构之前很快。
ROS是一个软件,目前完全由Ubuntu系列支持。


#### apolloauto模块结构

         我已经对此进行了充分的研究,但是我无法向您展示他们全部。ApolloAuto模块/通用/提供基本的微控制器来控制每个ros :: spin模块。每个模块将从[点](https://github.com/yiakwy/apollo/blob/master/modules/common/adapters/adapter_manager.cc#L50)注册。通过读取定义的$ {MODULE_NAME} / conf的配置文件,我们可以获取有关模块订阅和发布的主题的基本信息。

每个模块通过触发“Init”接口和注册回调开始。

##数据预处理和扩展卡尔曼滤波

卡尔曼滤波器是数学交互式方法,可以在不知道整个真实时间输入序列的情况下收敛到实际估计。无论您需要处理哪种数据,都可以依靠卡尔曼滤波器。扩展卡尔曼滤波器用于矩阵格式的三维刚性运动。这并不难。我向你推荐美国F15导演的系列教程
[Michel van Biezen](https://www.youtube.com/watch?v=CaCcOwJPytQ)。
由于它用于输入数据预处理,因此您可以在hdmap,知觉,计划等中看到它。
 
##选择模块分析
#### HMI&Dreamviewer
关于hmi界面和dreamviewer并没有太多的介绍,但它是一个可视化主题参数的好地方。

HMI是基于Flask的简单的Python应用程序。
它不使用http,而是使用websocket来查询ROS模块应用程序。如果你有异步http下载器,很容易理解,http连接只是一个
套接字连接文件描述符,我们已经将http头文件写入该缓冲区。一旦hmi烧瓶后端接收到命令,它将执行一个子进程
执行相应的二进制。

相比之下,Dreamviewer的作品有点像用React,Webpack和Threejs \(webgl,见/ dreamvidw / backend / simulation_world,/ dreamview / frontend / src / render \)编写的前端应用程序,
技术。它订阅来自ROS节点的消息,并在一帧后绘制一帧。

####感知

最初,该模块专门为激光雷达和雷达处理实施了逻辑。它由AdapterManager注册为用作信息融合系统的ros节点
输出观察障碍物信息。在最新版本的代码中,ROS节点的不同硬件输入处理程序在/ perception / barriers / onboard中指定,并在其中实现
不同的平行位置,其中包括*激光雷达,雷达,交通灯和GPS *。

激光雷达:
   -  Hadmap:获得转换矩阵转换点的世界坐标到本地坐标并建立地图多边形
   -  ROI过滤器:获取ROI并对输入数据执行卡尔曼滤波
   - 分段:基于U-Net的\(很多变体\)caffemodel将被加载并且执行基于来自Hdmap和ROI过滤结果的数据的正向计算
   - 对象建筑:激光雷达返回点\(x,y,z \)。因此,您需要将它们分组为“障碍”\(向量或集合\)
   - 障碍追踪器:百度使用Google的HM解算器。对于大的二分图,通常采用拉格朗日格式的KM算法
     SGD对此非常简单。

2.雷达:
   - 与来自传感器的原始\ _obstacles信息的Lidar类似。
   -  ROI过滤器:获取ROI对象并对输入数据执行卡尔曼滤波
   - 对象跟踪器

3.概率融合\(Apollo 1.5中的新功能!\):
   - 据我所知,apolloatuo融合系统
   - 它通常是最重要的部分之一:收集所有信息并将来自母板上传感器的信息进行最终组合
     用于追踪列表和基于规则的认知引擎
   - 主要过程是关联,因此这里的HM算法再次用作二分图。
   - 跟踪列表沿时间戳维护,每个列表将根据概率规则引擎进行更
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

北漠苍狼1746430162

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值