自動駕駛
自動駕駛正處在告訴發展的階段。寫篇部落格便于以後複習。因為做的是自動駕駛中的某個流程,但是和機器學習無關。是以很多都是略過略過,有時間一定會好好研讀機器學習相關的内容。講真大學大學學機器學習真是給我這個菜雞留下了心理陰影。主要是概述,連起來便于我複習,整個自動駕駛系統分為幾個主要子產品
- 定位:車必須要知道自己在哪裡,去哪裡
- 感覺:通過雷達,攝像頭等傳來的資訊,車要感覺自己周圍的障礙物,是車還是人,結合定位地圖的資訊(紅綠燈等)都會傳入規劃
- 預測:根據傳來的感覺資訊等去預測『其他』的動作,便于做決策
- 規劃:決策步驟,規劃出一條路徑。
- 控制:計算機控制車沿着規劃的路徑開。
Apollo
百度Apollo無人車主要分為四個部分
- 線控車(這是必備,由計算機支配而不是人為去開)
- 硬體(感覺,定位等都需要高精度,采集資料來讓我們完成精密計算)需要達到apollo的硬體規格
-
軟體:自動駕駛=計算機
1. ubuntu+apollo核心=RTOS實時作業系統
2. Runtime Framework(自動駕駛都是差不多這幾個子產品,差別在于算法各方面。這幾個子產品又有一個共性都是收資料,處理資料,發資料。比如規劃:收到傳感器等傳來的資料發出自己規劃的路徑資料)是以Runtime Framework Apollo用的是cyber_RT。定義了各個子產品,子產品之間的交流(資料通道),子產品之間傳遞消息的格式(message)等。這樣解耦合,便于apollo的開發。
3. 子產品(在自動駕駛部分已經介紹過了)通過架構通信,分離。
- 雲服務(通過網絡通路伺服器,不在車輛之上的服務): 仿真,資料,安全,DuerOS等
Apollo技術改進和亮點
共享記憶體:一次寫入多次讀取
去中心化:所有節點放在一個域内(域的概念:同一個域内通信,不同域内隔離,有時會根據ip配置設定域,做到隔離),從主節點和其他節點變成公共域,每個節點備份全部資訊,消除單點故障風險
資料相容:message 統一格式 protobuf接口語言
仿真環境平台:建構不同的駕駛場景,每個子產品有自己的算法上傳你自己子產品的算法,有評分标準,三維可視化實時路況,打分便于開發者調參。
仿真資料:記錄場景和虛拟場景:障礙物,交通信号燈等資料
ApolloScape資料集:對中國所有公路已完成高精度繪圖
高精度地圖:語義:交通隊燈,速度限制,左轉——重要的精度保證安全。
定位:各種資料(攝像頭+雷達等)+找地标+和地圖對比 坐标變換 資料融合 預處理(删除差的資料),便于建立感覺(地圖上的資訊,信号燈,還有找停車點 )
Apollo Runtime Framework——CyberRT
Apollo是開源項目,github上可以找到,内部有很多文檔。以下隻是個人了解,可能有誤,歡迎大家指正。
- 子產品——>component 繼承基類,自定義初始化函數和資料處理函數
- mainboard:看做是程序,加載一個或多個子產品(如果兩個子產品資料互動大,加載到同一個程序内)。cyberRT main函數入口
- 子產品之間的通信
-
通信類:Reader/Writer(通過channel通道即元件間資料總線,p2p)
Service(request/response)
Param(全局參數傳遞,C/S模式)
- Node:架構裡最基本的組成單元,子產品包含并通過Node進行通信
- Message:子產品間通信的消息格式定義
-
- DAG:把子產品抽象成點(本來也是通過Node通信),子產品之間的通信抽象成邊,加載整個架構cyber_launch會根據launch file啟動多個mainboards,根據dag file加載子產品進mainboards,
- 協程:優化線程使用資源配置設定實作的使用者級線程
- 排程
-
多路資料融合
…
直接上圖吧,根據cyber文檔寫的。想深入,看代碼
README
接下來會研讀apollo repo裡的DreamView部分,因為都是開源的,就繼續寫部落格做筆記了。
學習資料很多,最開始一頭霧水,看了大綱明白了很多。bilibili搜百度 apollo會有幾個很好的課程都是度學堂開的
以及最近一周工作跌跌撞撞學了好幾點超級重要
- 一定要問,多問(不恥下問,會發現很多事豁然開朗,别因為剛工作不好意思)
- 看文檔和代碼永遠是最好的解決方法(先看再問)