【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.pswp.cn/news/34963.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/34963.shtml
英文地址,請注明出處:http://en.pswp.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…