# Autoware架構基本介紹 ## Overview * Autoware 運作機制主要分成以下階段: Sensing, Computing 及 Actuation,其中 Computing 包含了核心演算法 Perception, Decision, Planning。 * 本文章將以 Sensing, Perception, Decision, Planning 等四個核心階段做介紹。 ![](https://i.imgur.com/E9CED88.png) * 總體控制流程為: * (**Sensing**) 從各式 Sensor 接收訊息。 * (**Computing**) 透過 Sensor 資料來進行控制邏輯的判斷。 * (*Perception*) 感知自駕車周遭環境及狀態(e.g 定位處理、障礙物偵測),以利後續決策。 * (*Decision*) 以感知資訊決定自駕車狀態(e.g 按照路徑前進、緊急迴避、煞車等等) * (*Planning*) 規劃路徑分為以下兩種: * Mission Planner:以特定演算法(e.g.最短路徑演算法)決定起點到終點的參考路徑。 * Motion Planner:以當前狀態去動態計算一段距離內的行走軌跡,主要用來控制自駕車沿著 Mission Planner 之路徑行走或迴避障礙物。 * (**Actuation**) 取得自駕車狀態下達控制指令。 * [Autoware官方文件](https://gitlab.com/autowarefoundation/autoware.ai/autoware/wikis/home)提供功能與 API 的對應與介紹,可以更詳細地了解 Autoware 中的功能 ## 資料流程圖 ![](https://i.imgur.com/W4cxOuZ.png) ## Sensing 本段將列出自駕車常見之感測器,及其運作機制。 ### Camera * 透過影像偵測物體,Autoware 即是使用 [Yolo3](https://www.youtube.com/watch?v=pO4vM4ehI98) 來辨識物體。 ![](https://i.imgur.com/fUWBhYM.png) ### LiDAR (光達/雷射雷達) / RADAR (雷達) ![](https://i.imgur.com/UeBL3hk.png) * LiDAR: 環繞式地發射**雷射脈衝**,並透過接收反射來得知周遭物體位置。 ![](https://i.imgur.com/VbDQOJ3.jpg) ![](https://i.imgur.com/3a99K9F.png) * RADAR: 發射**無線電波**並且透過反射來得知物體的位置,目前 Autoware 並未採用 RADAR 的設計,目前特斯拉的駕駛輔助系統便是以 RADAR 為主。 ![](https://i.imgur.com/rt4LY6W.png) ### IMU * 測量物體慣性(加速度/角速度),用於取得當前車輛姿態及輔助自駕車定位。 ### GPS & RTK * GPS:衛星定位,誤差較大。 * RTK (Real Time Kinematic):GPS 的改良版,GPS 訊號除了會傳到自駕車上,同時也會傳到鄰近的站台上(站台為固定地標,因此已知座標),此站台將會再次通知 RTK,以修正誤差。 ## Map file * 地圖檔案為自駕車運作時的已知資訊,因此必須在事前採集,而 Autoware 主要使用下列幾種格式,而這些為非必要性,例如少了 Vector Map 仍然可以使用 Waypoint 來運作,少了 PCD file 仍可以只靠 GPS 訊號運作,主要差在準確度。 > 資料越多,準確度越高。(有效資料的前提下) > [name=ShaoHua Wang] ### PCD (Point Cloud Data) Map * LiDAR 使用 **Normal Distributions Transform (NDT)** 來進行定位,也可透過該演算法,在定位同時以點雲 (Point Cloud) 的形式記錄場景物件,產生對應的 pcd map。 * PCD map 可使用 Autoware 中 [ndt_mapping](https://www.youtube.com/watch?v=ss6Blrz23h8) 的功能來製作,車子必須開啟 LiDAR 環繞場景一圈(目前實驗都是先手動開一圈蒐集資料),NDT_mapping 會根據車子 gps 位置以及 LiDAR 掃到的點雲來生成一張pcd地圖檔案。 ![](https://i.imgur.com/QGW9i2n.png) ### Vector Map * Vector Map 透過向量的形式來儲存地理資訊,其中便包含道路的走勢及方向,產生此地圖需要專業的測量手法及儀器,因此精度相當高。 ![](https://i.imgur.com/ApsTLoa.jpg) [(來源)](https://www.youtube.com/watch?v=xTtdLlferxQ) ### HD Map * 近似於 Vector Map,為另外一套開源軟體 Baidu Apollo 所使用的地圖格式。 * 這個名詞定義目前還很模糊,也有可能是指 Vector map + PCD 的統稱。 ### Waypoint * 為自駕車行走過的路徑格式,路徑上的點記錄了速度資訊及方向。 * 相較於 Waypoint,Vector map 類似於參考用路徑,因此自駕車在運作時,會以 Vector map 為基礎,動態地產生 Waypoint 來進行迴避的動作。 * 使用者將前次駕駛時的移動軌跡紀錄成 Waypoint,下一次載入Waypoint 便可重現上次的行走軌跡。 ![](https://i.imgur.com/gB7hJXD.png) ![](https://i.imgur.com/TCjwQFq.png) ### How to get these data? * PCD file:[ndt_mapping](https://gitlab.com/autowarefoundation/autoware.ai/core_perception/-/tree/master/lidar_localizer/nodes/ndt_mapping)(Autoware) * Vector/HD Map:外部工具(例如 LG simulator 等)繪製而成 * Waypoint:[waypoint_maker](https://gitlab.com/autowarefoundation/autoware.ai/core_planning/-/tree/master/waypoint_maker)(Autoware) ## Perception ### Localization (定位) #### gnss_localizer * 利用 GPS 定位,可與 lidar_localizer 協作。 #### lidar_localizer * 使用 Normal Distributions Transform (NDT) 演算法。 * Input:PCD map、起始位置點、LiDAR 即時訊號。 * Output:根據 PCD map,運算目前自駕車位置。 * 原理: 利用 LiDAR 的即時點雲資料,比對 PCD map 上已經紀錄好的點雲,以機率分佈算出自駕車位置。 * [實做影片](https://www.youtube.com/watch?v=ODlxMzGTJzw) ![](https://i.imgur.com/3a99K9F.png) ### Detection * lidar_detector:透過 LiDAR 偵測物體的存在(例如點雲密的地方可能就是有物體) * vision_detector:透過 Camera 偵測物體的存在(例如點雲密的地方可能就是有物體) * 可利用 sensor fusion,將上述兩個 detector 合併使用,以強化準確度。 ## Decision > 其實目前在 Autoware 的實作中,Decision 與 Planning 並沒有很清晰地區分,甚至是實坐在一塊,但為了方便講解還是會將兩者抽離。 在 Decision Phase 中自駕車透過狀態機來決定加速,煞車,迴避障礙物,緊急迴避等功能的運作,並根據目前狀態來選擇要使用 Planner 的對應功能 ## Planning ### Mission Planner * 透過 vector map 導航:Mission Planner 會根據 vector map 規劃從資訊系館到安平的路徑,類似 google map 導航。 * 透過 waypoint 導航:假如你已經有一組從資訊系管到安平的 waypoint 資料,你可以手動載入並且車子會以此資料為主去前進 ### Motion Planner * Motion Planner 負責規劃短程路徑(約 10-30m 之間),並控制車子的轉彎角度及速度去貼合 mission planner 所規劃出來的路徑。 * 裡面有不同的 planner 演算法,例如 A* planner 適合用於自由空間(例如停車場),lattice planner 適合用於車道變換。 * 通常用來配合避障、紅綠燈偵測、停止線偵測等功能。