【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.rhkb.cn/news/88204.html

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

相关文章

途乐证券-新股行情持续火爆,哪些因素影响首日表现?

全面注册制以来,参加打新的投资者数量全体呈现下降。打新收益下降,破发频出的布景下,投资者打新策略从逢新必打逐步向优选个股改变。 经过很多历史数据,从商场定价、参加者热度以及机构重视度维度揭秘了上市后股价体现优秀的个股具…

时序预测 | Python实现LSTM长短期记忆网络时间序列预测(电力负荷预测)

时序预测 | Python实现LSTM长短期记忆网络时间序列预测(电力负荷预测) 目录 时序预测 | Python实现LSTM长短期记忆网络时间序列预测(电力负荷预测)效果一览基本描述模型结构程序设计参考资料效果一览

记录一下关于word存放代码出现的问题

如下图所示,从 Word 中复制代码并粘贴到其他地方,例如文本编辑器或代码编辑器中,有时会出现额外的连字符或破折号。这是因为 Word 使用了特定的字符编码和格式,而这些字符在代码中可能不被支持或解析为特殊字符。   可见有时从…

拓扑布局和建立小型网络

练习 2.6.1:拓扑布局和建立小型网络 地址表 本实验不包括地址表。 拓扑图 学习目标 正确识别网络中使用的电缆物理连接点对点交换网络验证每个网络的基本连通性 简介: 许多网络问题都可以在网络的物理层解决。因此,必须清楚了解网络连接…

13-把矩阵看作是对系统的描述

探索矩阵乘法:更深刻的理解与应用视角 🧩🔍 引言 📖 在我们进一步探讨矩阵乘法之前,让我们从不同的角度来理解什么是矩阵,以及如何将矩阵视为一个系统。我们之前已经介绍了矩阵的基本概念和运算&#xff…

【QT】 QSS样式表设计一文了解

很高兴在雪易的CSDN遇见你 ,给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文分享QT界面设计中的QSS样式技术,主要从**、**和**方面展开,希望对各位小伙伴有所帮助!学会了QSS样式设计,就可以开动你的审美&#…

Zookeeper集群 + Kafka集群

文章目录 Zookeeper集群 Kafka集群一.Zookeeper 概述1.Zookeeper 定义2.Zookeeper 工作机制2.1 Zookeeper 工作机制图示 3.Zookeeper 特点4.Zookeeper 数据结构5.Zookeeper 应用场景5.1 统一命名服务5.2 统一配置管理5.3 统一集群管理5.4 服务器动态上下线5.5 软负载均衡 6.Zo…

JMeter启动时常见的错误

很多小伙伴在学工具这一块时,安装也是很吃力的一个问题,之前记得有说过怎么安装jmeter这个工具。那么你要启动jmeter的时候,一些粉丝就会碰到如下几个问题。 1.解压下载好的jmeter安装,Windows 平台,双击 jmeter/bin …

35岁职业危机?不存在!体能断崖?不担心

概述 90年,硕士毕业,干了快8年的Java开发工作。现年33岁,再过2年就要35岁。 工作这些年,断断续续也看过不少35岁找不到工作,转行,降薪入职的传闻、案例。 35岁,甚至30岁之后,体能…

使用gewe框架进行微信群组管理(一)

友情链接:geweapi.com 点击访问即可。 管理员操作 小提示: 添加、删除、转让多个wxid时仅限于添加/删除管理员,1添加 2删除 3转让 请求URL: http://域名地址/api/group/admin 请求方式: POST 请求头&#xff1a…

Expo项目 使用Native base UI库

装包: yarn add native-base expo install react-native-svg12.1.1 Index.js: import React from react import { View, Text } from react-native import useList from ./useList import { NativeBaseProvider, Button, Box } from native-base import styles f…

Python中搭建IP代理池的妙招

在Python的爬虫世界里,你是否也想搭建一个功能强大的IP代理池,让你的爬虫无忧无虑地畅游各大网站?今天,我就来教你使用Scrapy框架搭建IP代理池,让你的爬虫更加智能、高效!跟着我一步一步来,轻松…

NGINX负载均衡及LVS-DR负载均衡集群

目录 LVS-DR原理搭建过程nginx 负载均衡 LVS-DR原理 原理: 1. 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 2. PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP&#xff…

Android JNI实现锅炉压力显示系统详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 第一步创建GuoLu.c文件 // // Created by DELL on 2023/8/13. // #include <stdio.h…

vue3使用pinia和pinia-plugin-persist做持久化存储

插件和版本 1、安装依赖 npm i pinia // 安装 pinia npm i pinia-plugin-persist // 安装持久化存储插件2、main.js引入 import App from ./App.vue const app createApp(App)//pinia import { createPinia } from pinia import piniaPersist from pinia-plugin-persist //持…

2023深圳杯A题完整代码模型

已更新深圳杯A题全部版本&#xff0c;文末获取&#xff01; 摘要 现代社会&#xff0c;随着生活方式的变化和工作压力的增大&#xff0c;慢性非传染性疾病日益成为威胁公众健康的主要问题。心脑血管疾病、糖尿病、恶性肿瘤及慢性阻塞性肺病等慢性病的发病率呈现出上升趋势。为…

缓存 基础

在项目里面缓存是怎么用的? 项目中缓存是如何使用的&#xff1f;为什么要用缓存&#xff1f;缓存使用不当会造成什么后果? 这个问题&#xff0c;互联网公司必问&#xff0c;要是一个人连缓存都不太清楚&#xff0c;那确实比较尴尬。 只要问到缓存&#xff0c;上来第一个问题…

六种不同的CRM系统类型分别有哪些特点?

企业想要管理销售&#xff0c;可以选择CRM系统&#xff1b;企业想要优化业务流程&#xff0c;可以选择CRM系统&#xff1b;企业想要提高收入&#xff0c;可以选择CRM系统。下面来说说&#xff0c;CRM是什么&#xff1f;六种常见CRM系统类型对比。 什么是CRM&#xff1f; CRM是…

wpf控件上移下移,调整子集控件显示顺序

页面代码: <!-- 导出A2,自定义导出设置列,添加时间:2023-8-9 14:14:18,作者:whl; --><Window x:Class="WpfSnqkGasAnalysis.WindowGasExportA2"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http:/…

natapp内网穿透

下载 参考 https://natapp.cn/article/natapp_newbie 注册免费通道 启动 ./natapp -authtoken9ab6b9040a624f40