😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
這篇文章主要介紹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 軟件的主要組成部分和特點:
-
感知模塊:Apollo 提供了多種傳感器數據融合的算法和技術,包括攝像頭、激光雷達和毫米波雷達等,以實時感知車輛周圍的環境,并對障礙物、行人、交通標志等進行識別和跟蹤。
-
定位模塊:Apollo 借助高精度地圖和多種定位技術(如 GPS、慣性測量單元等),能夠實現準確的車輛定位和導航功能,為自動駕駛系統提供必要的位置信息。
-
規劃和決策模塊:Apollo 集成了先進的路徑規劃和決策算法,能夠根據感知數據和行車情況生成最佳的駕駛路徑,并做出智能的駕駛決策,例如車道保持、避障、超車等。
-
控制模塊:Apollo 利用先進的車輛控制算法和硬件設備,能夠實現精確的車輛控制,包括油門、剎車和轉向等,以保持穩定的行駛狀態和響應緊急情況。
-
數據錄制和回放:Apollo 提供了數據錄制和回放功能,可以記錄車輛傳感器數據、位置信息和控制指令等,用于測試和驗證自動駕駛系統的性能和安全性。
-
開發工具和平臺:Apollo 提供了豐富的開發工具和平臺,包括模擬器、調試器、仿真環境和數據管理工具,幫助開發人員進行自動駕駛系統的設計、測試和改進。
-
安全性和可靠性: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模塊提供了常用的各類工具,如標定、診斷、配置、畫圖、包錄制等。
以上。