【Apollo】Apollo-ros版本架构学习与源码分析

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍Apollo-ros版本架构学习与源码分析。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 项目介绍
    • :blush:2. 架构学习
    • :satisfied:3. 源码学习

😏1. 项目介绍

Apollo1.0源码注释项目Github地址:https://github.com/slam-code/apollo

Apollo perception项目Github地址:https://github.com/Tartisan/apollo_ros

Apollo planning项目Github地址:https://github.com/yufan25/apollo-trajectory-planning

Apollo 是百度开发的自动驾驶软件平台,旨在提供完整的自动驾驶解决方案。它包括一套完整的软件和硬件系统,涵盖了感知、定位、规划、控制等关键领域。以下是 Apollo 软件的主要组成部分和特点:

  1. 感知模块:Apollo 提供了多种传感器数据融合的算法和技术,包括摄像头、激光雷达和毫米波雷达等,以实时感知车辆周围的环境,并对障碍物、行人、交通标志等进行识别和跟踪。

  2. 定位模块:Apollo 借助高精度地图和多种定位技术(如 GPS、惯性测量单元等),能够实现准确的车辆定位和导航功能,为自动驾驶系统提供必要的位置信息。

  3. 规划和决策模块:Apollo 集成了先进的路径规划和决策算法,能够根据感知数据和行车情况生成最佳的驾驶路径,并做出智能的驾驶决策,例如车道保持、避障、超车等。

  4. 控制模块:Apollo 利用先进的车辆控制算法和硬件设备,能够实现精确的车辆控制,包括油门、刹车和转向等,以保持稳定的行驶状态和响应紧急情况。

  5. 数据录制和回放:Apollo 提供了数据录制和回放功能,可以记录车辆传感器数据、位置信息和控制指令等,用于测试和验证自动驾驶系统的性能和安全性。

  6. 开发工具和平台:Apollo 提供了丰富的开发工具和平台,包括模拟器、调试器、仿真环境和数据管理工具,帮助开发人员进行自动驾驶系统的设计、测试和改进。

  7. 安全性和可靠性:Apollo 强调安全性和可靠性,采用多层次的安全保护机制和备份措施,以确保自动驾驶的安全运行。

😊2. 架构学习

Apollo是国内比较开放、完整、安全的自动驾驶平台,1.0是基于ros通信的架构,后面自研了cyberrt;代码编译是基于bazel的,此外还用到了protobuf、abseil、gtest、gflag等库;部署一般建议Docker,也可源码安装;开放版本也提供了Dreamviewer交互界面和仿真器。

核心代码在modules目录,分别有common、canbus、drivers、localizetion、perception、prediction、decision、planning、control、monitor、hmi、tools等模块。

😆3. 源码学习

下面进行使用分析:

common模块中,使用glog作为日志库;VehicleState类是标识车辆状态信息的class,主要包含线速度、角速度、加速度、挡位状态、车辆坐标x,y,z;EstimateFuturePosition用于根据当前信息估计t时刻后的车辆位置;util/factory提供了工厂模式示例;time/time将chrono库作为时间管理工具,默认精度是ns;status/status定义了状态码用于标识车辆工作状态;monitor/monitor类收集并监控各模块的msg;math中提供了多个数学计算工具;adapter/adapter是提供将来自传感器的底层数据和Apollo各个模块交互的统一接口(c++ 适配器模式的示例),将数据IO抽象,使得各模块不必强依赖ROS框架通信。

localization模块中,输入是GPS&IMU模块,输出以proto格式定义,主要是车辆的位置和位姿信息;localization主要实现模块名称显示、初始化、开启、停止等操作,并将模块注册到工厂实例;此外还实现CameraLocalization类的原型,继承自LocalizationBase,搭建了相机定位的接口。

perception模块处理所有传感器的输入,包含相机、雷达,并发布目标检测、交通灯检测等信息;Perception类也是对Name、Init、Start、Stop进行函数重写,并用到了common模块的adapter。

decision模块根据感知和地图信息,生成决策信息给下游规控模块,具体输入有障碍物、交通灯、地图和路由循迹、车辆状态信息,输出是决策指令,并生成虚拟障碍物。

planning模块根据给定的车辆定位和状态信息、感知预测决策信息,计算出一条安全且舒适的路径(轨迹点)给底层去到达。

control模块是根据规划和车辆状态信息,用不同的控制算法去生成好的驾驶行为,并将控制指令给到canbus车辆通信网络模块;filters提供了多种滤波器;controller提供了不同的横纵向控制算法。

tools模块提供了常用的各类工具,如标定、诊断、配置、画图、包录制等。

在这里插入图片描述

以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/60633.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

django实现登录和登录的鉴权

1、创建数据库的管理员表 在models.py 中定义admin表,为了简单,表里只有用户名和密码还有默认加的id 三个字段 from django.db import models# Create your models here.class Admin(models.Model):username models.CharField(verbose_name"用户…

勘探开发人工智能技术:机器学习(4)

0 提纲 5.1 半监督学习 5.2 主动学习 5.3 代价敏感学习 5.4 多标签学习 5.5 多示例学习 1 半监督学习 用无标签的数据提升学习器的效果. 1.1 基本概念 半监督学习强调的是一种学习场景, 在该场景下, 无标签数据可以协助带标签数据提升预测质量. 监督学习: 训练数据都有标签…

【AndroidStudio】新版本Androidstudio logcat过滤设置

新版本的过滤没有以前简洁,但是功能性更全了;老版本的只能过滤一个包名,或一个TAG,或关键字,新版本按需过滤即可,下面说一下过滤的具体使用 1.按包名过滤: //输入package:(输入一个…

如何将Linux上的cpolar内网穿透设置成 - > 开机自启动

如何将Linux上的cpolar内网穿透设置成 - > 开机自启动 文章目录 如何将Linux上的cpolar内网穿透设置成 - > 开机自启动前言一、进入命令行模式二、输入token码三、输入内网穿透命令 前言 我们将cpolar安装到了Ubuntu系统上,并通过web-UI界面对cpolar的功能有…

【福建事业单位-推理判断】02图形推理(数量-空间重构)

【福建事业单位-推理判断】02图形推理(数量-空间重构) 一、数量规律1.1点(交点、切点)点的细化考法总结 1.2线条(线条的数量)线的细化考点一笔画(重点)一笔画的判定 总结 1.3 面面的…

设计方法编写测试用例---思路分析

测一四年我在YX公司带测试团队,一个用例评审的会议上,一不小心超常发挥,结果卡在了一个用例设计方法上,印象非常深刻,当时的业务场景是支付方式的选择和优惠方案。 在后来的工作中,也曾几次遇到需要选择合…

勘探开发人工智能技术:机器学习(3)

0 提纲 4.1 logistic回归 4.2 支持向量机(SVM) 4.3 PCA 1 logistic回归 用超平面分割正负样本, 考虑所有样本导致的损失. 1.1 线性分类器 logistic 回归是使用超平面将空间分开, 一边是正样本, 另一边是负样本. 因此, 它是一个线性分类器. 如图所示, 若干样本由两个特征描…

matplotlib 笔记 plt.grid

用于添加网格线 主要参数 visible 布尔值,True表示画网格 which表示要显示的刻度线类型,可以是 major(主刻度)或 minor(次刻度),或者同时显示(both)alpha 透明度 …

【Git】Git切换地址

如何切换git代码地址? 1、查看当前远程 url git remote -v执行命令后,可以看见当前有2个URL。 远程 URL 在一般情况下有两个,分别是 fetch 和 push。 fetch URL 是用于从远程仓库获取最新版本的数据。当您运行 git fetch 命令时&#xf…

xxx酒业有限责任公司突发环境事件应急预案WORD

导读:原文《xxx酒业有限责任公司突发环境事件应急预案word》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 目 录 1 总则 1.1 编制目的 1.2 编制…

Spring Boot集成EasyPoi实现导入导出操作

文章目录 Spring Boot集成EasyPoi实现导入导出操作0 简要说明1 环境搭建1.1 项目目录1.2 依赖管理2.3 关于swagger处理2.4 关于切面处理耗时1 自定义注解2 定义切面类3 如何使用 2.5 核心导入操作2.6 核心导出操作 2 最佳实线2.1 导入操作1 实体类说明2 业务层3 效果3 控制层 2…

使用乐观锁解决超卖问题

目录 什么是超卖? 乐观锁和悲观锁的定义 悲观锁: 乐观锁: 乐观锁的实现方式 1.版本号 2.CAS法 什么是超卖? 举个例子:订单系统中,用户在执行下单操作时,可能同一时间有无数个用户同时下单&…