【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.mzph.cn/news/34963.shtml

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

相关文章

微信小程序如何自定义分享卡片文案和图片

微信小程序提供了onShareAppMessage方法,专门用来监听用户点击页面内转发按钮(button 组件 open-type"share")或右上角菜单“转发”按钮的行为,并自定义转发内容。 > 注意:只有定义了此事件处理函数&…

Android studio 设置安卓手机

参考这个链接 ghttps://developer.android.com/studio/debug/dev-options 列出常用手机的设置,但是我的手机不在此列 Google Pixel Settings > About phone > Build number Samsung Galaxy S8 and later Settings > About phone > Software informa…

git: ‘lfs‘ is not a git command. see ‘git --help‘

在克隆hugging face里面的项目文件的时候,需要用到git lfs,本文介绍安装git lfs方法 在Ubuntu下 curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash sudo apt-get install git-lfs在Windows下 到这个链…

解决GitHub的速度很慢的几种方式

1. GitHub 镜像访问 这里提供两个最常用的镜像地址: https://hub.njuu.cf/search https://www.gitclone.com/gogs/search/clonesearch 也就是说上面的镜像就是一个克隆版的 GitHub,你可以访问上面的镜像网站,网站的内容跟 GitHub 是完整同步…

期权定价模型系列【4】—期权组合的Delta-Gamma-Vega中性

期权组合的Delta-Gamma-Vega中性 期权组合构建时往往会进行delta中性对冲,在进行中性对冲后,期权组合的delta敞口为0,此时期权组合仍然存在gamma与vega敞口。因此研究期权组合的delta-gamma-vega敞口中性是有必要的。 本文旨在对delta-gamma-…

关于新手学习STM32开发应该如何入门?

对于新手来说,学习STM32开发可能会感到困惑,尤其是在拿到开发板后该如何入门。在这里有嵌入式学习路线,毕设,各种项目,需要留个6。以下是部分内容概述:硬件介绍:了解STM32开发板的基本硬件组成和…

Springboot 默认路径说明

Spring Boot基本上是Spring框架的扩展,它消除了设置Spring应用程序所需的样板配置,极大的方便了开发者,其默认识别路径如下: Spring Boot 作为Spring默认将 /** 所有访问映射到以下目录: 1、classpath:/static 用于加…

【密码学】穴居人密码

穴居人密码 文字记载中,有时会把来自古希腊文化之前的各种记录作为密码学的例子,但称它们为密码学一定太不严格了,这是因为那些方法都太原始了。密码学的起源能追溯到多早,取决于你把密码学的相关定义确定得有多宽泛。大多数作者都…

每日后端面试5题 第四天

1. 线程池的核心参数(高薪常问) (1)corePoolSize:核心线程个数 (2)maximumPoolSize:最大线程个数 (3)keepAliveTime:最大存活时间 &#xff0…

如何在Vue中进行单元测试?什么是Vue的模块化开发?

1、如何在Vue中进行单元测试? 在Vue中进行单元测试可以提高代码的可维护性和可读性,同时也能够帮助开发者更快地找到代码中的问题和潜在的错误。下面是一些在Vue中进行单元测试的步骤: 安装单元测试工具 首先需要安装一个单元测试工具&…

第8章 【C语言】善于利用指针

8.1 指针是什么 由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。将地址形象化称为“指针”。 直接按变量名进行的访问,称为“直接访问”方式。 还可以采用另一种称为“间接访问”的方式,即将变量i的地址存放在另…

如何让你的图片服务也有类似OSS的图片处理功能

原文链接 前言 有自己机房的公司一般都有一套存储系统用于存储公司的图片、视频、音频、文件等数据,常见的存储系统有以NAS、FASTDFS为代表的传统文件存储,和以Minio为代表的对象存储系统,随着云服务的兴起很多公司逐渐将数据迁移到以阿里云…

二叉树的性质和完全二叉树的性质

二叉树的性质: 在二叉树的第i层至多有 2 i 1 ( i > 1 ) 2^{i1}(i>1) 2i1(i>1) 深度为k的二叉树最多有 2 k − 1 2^k-1 2k−1个结点 对于任意一棵二叉树T,如果其终端结点数为 n 0 n_0 n0​,度为2的结点数为 n 2 n_2 n2​,则 n 0 …

【剑指 Offer 39】数组中超过一半的数字

题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 思考: 方法一:投…

5.0 Python 定义并使用函数

函数是python程序中的基本模块化单位,它是一段可重用的代码,可以被多次调用执行。函数接受一些输入参数,并且在执行时可能会产生一些输出结果。函数定义了一个功能的封装,使得代码能够模块化和组织结构化,更容易理解和…

企业有VR全景拍摄的需求吗?能带来哪些好处?

在传统图文和平面视频逐渐疲软的当下,企业商家如何做才能让远在千里之外的客户更深入、更直接的详细了解企业品牌和实力呢?千篇一律的纸质材料已经过时了,即使制作的再精美,大家也会审美疲劳;但是你让客户远隔千里&…

(MySQL经验)之MySQL单表行数最好低于2000w

作为在后端开发,是不是经常听到过,mysql 单表最好不要超过 2000w,单表超过 2000w 就要考虑数据迁移了,表数据都要到 2000w ,查询速度变得贼慢。 1、建表操作 建一张表 CREATE TABLE person( id int NOT NULL AUTO_INCREMENT PRI…

如何让ES低成本、高性能?滴滴落地ZSTD压缩算法的实践分享

前文分别介绍了滴滴自研的ES强一致性多活是如何实现的、以及如何提升ES的性能潜力。由于滴滴ES日志场景每天写入量在5PB-10PB量级,写入压力和业务成本压力大,为了提升ES的写入性能,我们让ES支持ZSTD压缩算法,本篇文章详细展开滴滴…

Python 监控 Windows 服务

Python 监控 Windows 服务 Python 在 Windows 系统上可以使用 wmi 模块来实现对 Windows 服务的监控。本文将介绍如何使用 Python 监控 Windows 服务,并实现服务状态的查询和服务启停功能。 安装依赖 在使用 wmi 模块之前,需要先安装 wmi包。可以使用…

[excel]vlookup函数对相同的ip进行关联

一、需求(由于ip不可泄漏所以简化如下) 有两个sheet: 找到sheet1在sheet2中存在的ip,也就是找到有漏洞的ip 二、实现 vlookup函数有4个参数 第一个:当前表要匹配的列,选择第一个sheet当前行需要处理的ip即可 第二个:第二个shee…