黨的二十大報告指出: 教育、科技、人才是全面建設社會主義現代化國家的基礎性、戰(zhàn)略性支撐。必須堅持科技是第一生產力、人才是第一資源、創(chuàng)新是第一動力,深入實施科教興國戰(zhàn)略、人才強國戰(zhàn)略、創(chuàng)新驅動發(fā)展戰(zhàn)略,這三大戰(zhàn)略共同服務于創(chuàng)新型國家的建設。高等教育與經濟社會發(fā)展緊密相連,對促進就業(yè)創(chuàng)業(yè)、助力經濟社會發(fā)展、增進人民福祉具有重要意義。
近年來,智能網聯(lián)汽車行業(yè)的商業(yè)價值不斷提高,智能網聯(lián)汽車的智能駕駛與智慧座艙受到了越來越多消費者的關注和歡迎。在這一大背景下,自動駕駛技術不可避免地成為智能網聯(lián)汽車的核心技術,逐漸成為主機廠與各級經銷商希望掌握的核心技術。而作為行業(yè)的佼佼者百度也開源了Apollo源碼,涵蓋了自動駕駛的感知、融合、預測、決策、規(guī)劃與控制的全棧算法,受到了自動駕駛算法行業(yè)從業(yè)人員的熱烈歡迎。然而,Apollo開源代碼缺少注釋和相關理論知識的講解,在閱讀
和理解時會遇到不少問題。這樣的問題,不僅對該領域的算法工程師造成了困惑,同時也使高等
院校的廣大師生缺乏教學與學習的目標和方向。
筆者從2013年接觸雷達,掌握了雷達信號處理與數據處理領域扎實的基礎知識。
隨后在2016年開始接觸汽車行業(yè)的高級輔助駕駛(ADAS),先后在公司擔任了總工、技術負責人、研發(fā)總監(jiān)等職務,不僅接觸了各類傳感器,例如毫米波雷達、激光雷達和攝像頭,也對各種傳感器的工作原理與開發(fā)過程有了深刻的理解和認知,直接在一線帶領團隊主導了各種ADAS功能的落地,涉及了各種不同的計算平臺,積累了豐富的自動駕駛全棧算法的開發(fā)與移植經驗。與此同時,筆者通過與各大主機廠的接觸,對目前行業(yè)的痛點與解決方案的可行性與落地的可操作性有了更為深入的理解和判斷。
為此,本書的重點主要是講解Lattice算法的基本流程、基礎理論、核心模塊(如橫縱向軌跡生成與碰撞檢測)的翔實分析與相關代碼的逐行解析,不僅可以幫助行業(yè)的規(guī)劃算法工程師更好、更深刻地理解Lattice的核心理論與模塊實現,也可以為高等院校的廣大師生提供不錯的教學資源或教材。與此同時,筆者
在本書的撰寫過程中,查閱了大量的資料,對Lattice算法的理解與認知也更為深刻,收獲良多。
本書主要內容
第1章介紹Lattice算法的背景、基本思想與本書的主要框架。
第2章介紹Frenet坐標系與Cartesian坐標系間的相互轉換關系,并對轉換過程詳盡地進行了推導與證明。
第3章介紹參考線的離散化與計算過程,以及如何根據參考線確定自車當前位置的參考點。
第4章介紹障礙物的描述,以及靜態(tài)障礙物與動態(tài)障礙物ST圖的構建方法。
第5章介紹Lattice算法中縱向運動軌跡的生成,根據不同的場景,例如定速巡航場景、有停止點的場景和有障礙物的場景等,
如何
選擇4次多項式和5次多項式,構造車輛的縱向運動軌跡生成模型。
第6章介紹Lattice算法中橫向運動軌跡的生成,與縱向運動軌跡生成不同的是,本章主要介紹了5次多項式和OSQP兩種模型的構建方法。
第7章介紹如何根據不同的場景構建縱向參考速度,并對各條橫縱向軌跡進行cost的計算與排序。
第8章介紹橫縱向軌跡合成與合成后軌跡點的Frenet坐標向Cartesian坐標的轉換,并對各條軌跡進行基于AABB的粗式碰撞檢測與基于OBB的細式碰撞檢測。
閱讀建議
本書是一本兼顧Lattice算法的理論性與實戰(zhàn)性的書籍,既包含Lattice算法中涉及的基礎理論知識,又有配套的代碼示例與注釋,包括詳細的理論分析,實操性強。由于Lattice算法理論性和實操性較強,內容較多,所以本書對Lattice算法涉及的基本理論、方法與概念講解得較為詳細,包括公式推導、理論分析及代碼示例。每個知識點都配有源碼解析,力求精簡,在輕松掌握基礎知識的同時對代碼的實操部分可快速進入實戰(zhàn)。
建議讀者先根據Apollo 6.0或8.0的官方安裝手冊,搭建好開發(fā)環(huán)境。
本書配套資源
素材(源碼)等資源: 掃描目錄上方的二維碼下載。
視頻等資源: 掃描封底的文泉云盤防盜碼,再掃描書中相應章節(jié)的二維碼,可以在線學習。
致謝
非常感謝我的母親及妻女,在我寫作的過程中承擔了繁重的家務勞動,使我可以全身心地投入寫作工作中。
由于時間倉促,書中難免存在不妥之處,敬請讀者見諒,并提寶貴意見。
樊勝利
2024年3月
第1章Lattice算法概述(23min)
1.1背景
1.2基本思想
1.3總體框架
第2章笛卡兒坐標系與Frenet坐標系(31min)
2.1Frenet坐標系提出的背景
2.2Frenet坐標系
2.2.1定義
2.2.2特點
2.3Frenet坐標系與笛卡兒坐標系的相互轉換
2.3.1笛卡兒坐標向Frenet坐標轉換
2.3.2Frenet坐標向Cartesian坐標轉換
2.4實例分析
2.4.1基于Python的實例分析
2.4.2基于Apollo 6.0的C 實例分析
2.5小結
2.5.1過度依賴參考線
2.5.2Cartesian坐標系與Frenet坐標系轉換的不一致性
第3章參考線的離散化與匹配點的選擇(19min)
3.1參考線的描述與計算
3.2參考線的離散化與s(t)的計算
3.2.1離散化與計算過程
3.2.2實例分析
3.3匹配點的選擇
3.3.1匹配點選擇的描述
3.3.2線性插值計算過程的描述
3.3.3實例分析
3.4小結
第4章靜態(tài)障礙物與動態(tài)障礙物ST圖的構建(26min)
4.1障礙物的描述
4.1.1障礙物與BB
4.1.2障礙物的幾何中心點與后軸中心點的變換
4.1.3障礙物與車道之間關系的描述
4.2靜態(tài)障礙物與ST圖
4.2.1靜態(tài)障礙物ST圖的構建
4.2.2靜態(tài)障礙物ST圖的代碼解析
4.3動態(tài)障礙物與ST圖
4.3.1動態(tài)障礙物位置的確定
4.3.2動態(tài)障礙物的重構及端點極值的確定
4.3.3動態(tài)障礙物ST圖的構建
4.3.4動態(tài)障礙物ST圖構建的代碼解析
4.4自車速度的限制與規(guī)劃目標的確定
4.5小結
第5章縱向運動軌跡規(guī)劃(31min)
5.1縱向運動場景的分類與描述
5.2基于定速巡航的縱向運動軌跡的生成
5.2.1可行駛區(qū)域的描述與計算
5.2.2縱向運動軌跡生成算法描述
5.2.3縱向運動軌跡的生成
5.3有障礙物條件下縱向運動軌跡的生成
5.3.1車道跟隨條件下末狀態(tài)的采樣策略
5.3.2超車條件下末狀態(tài)的采樣策略
5.3.3自車末狀態(tài)ST點的篩選
5.3.4縱向運動軌跡的生成
5.4有停車點的條件下縱向運動軌跡的生成
5.4.1自車末狀態(tài)ST采樣
5.4.2代碼解析
5.5小結
第6章橫向運動軌跡規(guī)劃(44min)
6.1基于s的5次多項式的橫向運動軌跡的生成
6.1.1橫向運動軌跡生成的算法描述
6.1.2基于s的5次多項式的描述
6.1.3代碼解析
6.2基于二次規(guī)劃的橫向運動軌跡的生成
6.2.1等間隔橫向采樣
6.2.2根據參考線更新邊界
6.2.3根據靜態(tài)障礙物更新邊界
6.2.4基于二次規(guī)劃(OSQP)的橫向運動軌跡規(guī)劃模型的構建與求解
6.3實例分析
6.4代碼解析
6.5小結
第7章橫縱向運動軌跡的評估(23min)
7.1碰撞區(qū)域的構建
7.1.1碰撞區(qū)域構建過程詳解
7.1.2代碼解析
7.2縱向運動參考速度的構建
7.2.1定速巡航場景下縱向運動參考速度的構建
7.2.2定點停車場景下縱向參考速度的構建
7.2.3代碼解析
7.3縱向運動軌跡的過濾
7.3.1停車點、當前點與軌跡規(guī)劃終點的關系約束
7.3.2縱向運動軌跡中的速度、加速度和加加速度的關系約束
7.3.3代碼解析
7.4橫縱向運動軌跡的評估與計算
7.4.1縱向運動軌跡cost的計算
7.4.2橫向運動軌跡cost的計算
7.5小結
第8章橫縱向運動軌跡的優(yōu)選(15min)
8.1障礙物運動軌跡預測環(huán)境的構建
8.1.1障礙物的過濾
8.1.2障礙物預測軌跡的生成
8.1.3代碼解析
8.2橫縱向運動軌跡的合成
8.3軌跡的檢驗與驗證
8.3.1軌跡的驗證
8.3.2代碼解析
8.4碰撞檢測與橫縱向運動軌跡的優(yōu)選
8.4.1向量點積的定義與應用
8.4.2Axis Aligned Bounding Box(AABB)碰撞檢測算法描述
8.4.3Oriented Bounding Box(OBB)碰撞檢測算法描述
8.4.4代碼解析
8.5小結