Apollo學習筆記(一)概述+大綱

自動駕駛

在這裏插入圖片描述

自動駕駛正處在告訴發展的階段。寫篇博客便於以後複習。因爲做的是自動駕駛中的某個流程,但是和機器學習無關。所以很多都是略過略過,有時間一定會好好研讀機器學習相關的內容。講真大學本科學機器學習真是給我這個菜雞留下了心理陰影。主要是概述,連起來便於我複習,整個自動駕駛系統分爲幾個主要模塊

  • 定位:車必須要知道自己在哪裏,去哪裏
  • 感知:通過雷達,攝像頭等傳來的信息,車要感知自己周圍的障礙物,是車還是人,結合定位地圖的信息(紅綠燈等)都會傳入規劃
  • 預測:根據傳來的感知信息等去預測『其他』的動作,便於做決策
  • 規劃:決策步驟,規劃出一條路徑。
  • 控制:計算機控制車沿着規劃的路徑開。

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會有幾個很好的課程都是度學堂開的
以及最近一週工作跌跌撞撞學了好幾點超級重要

  • 一定要問,多問(不恥下問,會發現很多事豁然開朗,別因爲剛工作不好意思)
  • 看文檔和代碼永遠是最好的解決方法(先看再問)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章