本書以Apollo 6.0自動駕駛算法為背景,以Lattice運動規(guī)劃算法為主線,以線性插值、frenet坐標與笛卡兒坐標轉(zhuǎn)換、4次多項式與5次多項式、二次規(guī)劃等為算法的理論基礎(chǔ),引導(dǎo)讀者由淺入深的了解Frenet坐標系提出的背景、Frennet坐標與笛卡兒坐標系之間的相互轉(zhuǎn)化關(guān)系、靜態(tài)障礙物與動態(tài)障礙物S-T圖的生成、橫縱向運動軌跡的生成與優(yōu)化等內(nèi)容,講解注重理論與代碼的結(jié)合,既可以有效加深讀者對算法的進一步理解與認知,也可以提升讀者算法工程化的實操能力。
本書共8章,從Apollo 6.0代碼入手,按照代碼的實現(xiàn)流程,詳細講述了Lattice規(guī)劃算法在不同階段的處理過程,例如Frenet坐標系與Cartesian坐標系之間的轉(zhuǎn)化關(guān)系與各個公式的推導(dǎo)過程、參考線的離散化、靜態(tài)障礙物與動態(tài)障礙物的生成、橫縱向軌跡與多項式的運用,碰撞檢測與軌跡的優(yōu)化等內(nèi)容,從零起步,系統(tǒng)深入地剖析了Lattice算法的核心原理與知識點。本書示例代碼豐富,實際性和系統(tǒng)性較強,關(guān)鍵章節(jié)配有詳細的視頻講解,助力讀者透徹理解書中的重點與難點。
本書不僅適合初學者入門,算法公式的推導(dǎo)過程與代碼的對比分析對于工作多年的開發(fā)者也有參考價值,并可作為高等院校和培訓機構(gòu)自動駕駛專業(yè)的教學參考書。
本書是一本兼顧Lattice算法的理論性與實戰(zhàn)性的書籍,既包含Lattice算法中設(shè)計的基礎(chǔ)理論知識,又有配套的代碼示例與注釋,包括詳細的理論分析,實操性強。
每個知識點都配有源碼解析,力求精簡,在輕松掌握基礎(chǔ)知識的同時對代碼的實操部分可快速進入實戰(zhàn)。
黨的二十大報告指出: 教育、科技、人才是全面建設(shè)社會主義現(xiàn)代化國家的基礎(chǔ)性、戰(zhàn)略性支撐。必須堅持科技是第一生產(chǎn)力、人才是第一資源、創(chuàng)新是第一動力,深入實施科教興國戰(zhàn)略、人才強國戰(zhàn)略、創(chuàng)新驅(qū)動發(fā)展戰(zhàn)略,這三大戰(zhàn)略共同服務(wù)于創(chuàng)新型國家的建設(shè)。高等教育與經(jīng)濟社會發(fā)展緊密相連,對促進就業(yè)創(chuàng)業(yè)、助力經(jīng)濟社會發(fā)展、增進人民福祉具有重要意義。
近年來,智能網(wǎng)聯(lián)汽車行業(yè)的商業(yè)價值不斷提高,智能網(wǎng)聯(lián)汽車的智能駕駛與智慧座艙受到了越來越多消費者的關(guān)注和歡迎。在這一大背景下,自動駕駛技術(shù)不可避免地成為智能網(wǎng)聯(lián)汽車的核心技術(shù),逐漸成為主機廠與各級經(jīng)銷商希望掌握的核心技術(shù)。而作為行業(yè)的佼佼者百度也開源了Apollo源碼,涵蓋了自動駕駛的感知、融合、預(yù)測、決策、規(guī)劃與控制的全棧算法,受到了自動駕駛算法行業(yè)從業(yè)人員的熱烈歡迎。然而,Apollo開源代碼缺少注釋和相關(guān)理論知識的講解,在閱讀
和理解時會遇到不少問題。這樣的問題,不僅對該領(lǐng)域的算法工程師造成了困惑,同時也使高等
院校的廣大師生缺乏教學與學習的目標和方向。
筆者從2013年接觸雷達,掌握了雷達信號處理與數(shù)據(jù)處理領(lǐng)域扎實的基礎(chǔ)知識。
隨后在2016年開始接觸汽車行業(yè)的高級輔助駕駛(ADAS),先后在公司擔任了總工、技術(shù)負責人、研發(fā)總監(jiān)等職務(wù),不僅接觸了各類傳感器,例如毫米波雷達、激光雷達和攝像頭,也對各種傳感器的工作原理與開發(fā)過程有了深刻的理解和認知,直接在一線帶領(lǐng)團隊主導(dǎo)了各種ADAS功能的落地,涉及了各種不同的計算平臺,積累了豐富的自動駕駛?cè)珬K惴ǖ拈_發(fā)與移植經(jīng)驗。與此同時,筆者通過與各大主機廠的接觸,對目前行業(yè)的痛點與解決方案的可行性與落地的可操作性有了更為深入的理解和判斷。
為此,本書的重點主要是講解Lattice算法的基本流程、基礎(chǔ)理論、核心模塊(如橫縱向軌跡生成與碰撞檢測)的翔實分析與相關(guān)代碼的逐行解析,不僅可以幫助行業(yè)的規(guī)劃算法工程師更好、更深刻地理解Lattice的核心理論與模塊實現(xiàn),也可以為高等院校的廣大師生提供不錯的教學資源或教材。與此同時,筆者
在本書的撰寫過程中,查閱了大量的資料,對Lattice算法的理解與認知也更為深刻,收獲良多。
本書主要內(nèi)容
第1章介紹Lattice算法的背景、基本思想與本書的主要框架。
第2章介紹Frenet坐標系與Cartesian坐標系間的相互轉(zhuǎn)換關(guān)系,并對轉(zhuǎn)換過程詳盡地進行了推導(dǎo)與證明。
第3章介紹參考線的離散化與計算過程,以及如何根據(jù)參考線確定自車當前位置的參考點。
第4章介紹障礙物的描述,以及靜態(tài)障礙物與動態(tài)障礙物ST圖的構(gòu)建方法。
第5章介紹Lattice算法中縱向運動軌跡的生成,根據(jù)不同的場景,例如定速巡航場景、有停止點的場景和有障礙物的場景等,
如何
選擇4次多項式和5次多項式,構(gòu)造車輛的縱向運動軌跡生成模型。
第6章介紹Lattice算法中橫向運動軌跡的生成,與縱向運動軌跡生成不同的是,本章主要介紹了5次多項式和OSQP兩種模型的構(gòu)建方法。
第7章介紹如何根據(jù)不同的場景構(gòu)建縱向參考速度,并對各條橫縱向軌跡進行cost的計算與排序。
第8章介紹橫縱向軌跡合成與合成后軌跡點的Frenet坐標向Cartesian坐標的轉(zhuǎn)換,并對各條軌跡進行基于AABB的粗式碰撞檢測與基于OBB的細式碰撞檢測。
閱讀建議
本書是一本兼顧Lattice算法的理論性與實戰(zhàn)性的書籍,既包含Lattice算法中涉及的基礎(chǔ)理論知識,又有配套的代碼示例與注釋,包括詳細的理論分析,實操性強。由于Lattice算法理論性和實操性較強,內(nèi)容較多,所以本書對Lattice算法涉及的基本理論、方法與概念講解得較為詳細,包括公式推導(dǎo)、理論分析及代碼示例。每個知識點都配有源碼解析,力求精簡,在輕松掌握基礎(chǔ)知識的同時對代碼的實操部分可快速進入實戰(zhàn)。
建議讀者先根據(jù)Apollo 6.0或8.0的官方安裝手冊,搭建好開發(fā)環(huán)境。
本書配套資源
素材(源碼)等資源: 掃描目錄上方的二維碼下載。
視頻等資源: 掃描封底的文泉云盤防盜碼,再掃描書中相應(yīng)章節(jié)的二維碼,可以在線學習。
致謝
非常感謝我的母親及妻女,在我寫作的過程中承擔了繁重的家務(wù)勞動,使我可以全身心地投入寫作工作中。
由于時間倉促,書中難免存在不妥之處,敬請讀者見諒,并提寶貴意見。
樊勝利
2024年3月
樊勝利,博士,智能網(wǎng)聯(lián)汽車技術(shù)方向副教授,總裝備部優(yōu)秀博士論文與全軍優(yōu)秀博士論文百篇提名獲得者,在《系統(tǒng)工程與運籌》、《裝備學院學報》、《mobile information systems》和《裝備指揮學院學報》等核心期刊與SCI期刊發(fā)表論文30余篇,出版專著一部。曾歷任森思泰克河北有限公司總工,北京亮道智能汽車技術(shù)有限公司技術(shù)部負責人,國汽智控(北京)有限公司算法實現(xiàn)總監(jiān),專注于環(huán)境感知、多傳感器信息融合、軌跡預(yù)測、規(guī)劃與控制等全棧算法,在多種計算平臺,例如TDA4、MDC300、MDC610,進行算法的移植與開發(fā),積累了豐富的嵌入式系統(tǒng)開發(fā)經(jīng)驗,與比亞迪、宇通、華為等主機廠和互聯(lián)網(wǎng)公司進行了深入合作,F(xiàn)任河北工業(yè)職業(yè)技術(shù)大學汽車工程系副教授。
盧盛榮,教授,龍巖學院數(shù)學與信息工程學院常務(wù)副院長。福州大學數(shù)學本科、計算機應(yīng)用技術(shù)領(lǐng)域工程碩士。主要研究方向包括模式識別、大數(shù)據(jù)與軟件工程、機器學習。從事高校教科研及管理工作,承擔多門課程教學任務(wù),發(fā)表論文10余篇,主持省級課題2項,橫向課題30多項,獲1項發(fā)明專利。
第1章Lattice算法概述(23min)
1.1背景
1.2基本思想
1.3總體框架
第2章笛卡兒坐標系與Frenet坐標系(31min)
2.1Frenet坐標系提出的背景
2.2Frenet坐標系
2.2.1定義
2.2.2特點
2.3Frenet坐標系與笛卡兒坐標系的相互轉(zhuǎn)換
2.3.1笛卡兒坐標向Frenet坐標轉(zhuǎn)換
2.3.2Frenet坐標向Cartesian坐標轉(zhuǎn)換
2.4實例分析
2.4.1基于Python的實例分析
2.4.2基于Apollo 6.0的C 實例分析
2.5小結(jié)
2.5.1過度依賴參考線
2.5.2Cartesian坐標系與Frenet坐標系轉(zhuǎn)換的不一致性
第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小結(jié)
第4章靜態(tài)障礙物與動態(tài)障礙物ST圖的構(gòu)建(26min)
4.1障礙物的描述
4.1.1障礙物與BB
4.1.2障礙物的幾何中心點與后軸中心點的變換
4.1.3障礙物與車道之間關(guān)系的描述
4.2靜態(tài)障礙物與ST圖
4.2.1靜態(tài)障礙物ST圖的構(gòu)建
4.2.2靜態(tài)障礙物ST圖的代碼解析
4.3動態(tài)障礙物與ST圖
4.3.1動態(tài)障礙物位置的確定
4.3.2動態(tài)障礙物的重構(gòu)及端點極值的確定
4.3.3動態(tài)障礙物ST圖的構(gòu)建
4.3.4動態(tài)障礙物ST圖構(gòu)建的代碼解析
4.4自車速度的限制與規(guī)劃目標的確定
4.5小結(jié)
第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小結(jié)
第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根據(jù)參考線更新邊界
6.2.3根據(jù)靜態(tài)障礙物更新邊界
6.2.4基于二次規(guī)劃(OSQP)的橫向運動軌跡規(guī)劃模型的構(gòu)建與求解
6.3實例分析
6.4代碼解析
6.5小結(jié)
第7章橫縱向運動軌跡的評估(23min)
7.1碰撞區(qū)域的構(gòu)建
7.1.1碰撞區(qū)域構(gòu)建過程詳解
7.1.2代碼解析
7.2縱向運動參考速度的構(gòu)建
7.2.1定速巡航場景下縱向運動參考速度的構(gòu)建
7.2.2定點停車場景下縱向參考速度的構(gòu)建
7.2.3代碼解析
7.3縱向運動軌跡的過濾
7.3.1停車點、當前點與軌跡規(guī)劃終點的關(guān)系約束
7.3.2縱向運動軌跡中的速度、加速度和加加速度的關(guān)系約束
7.3.3代碼解析
7.4橫縱向運動軌跡的評估與計算
7.4.1縱向運動軌跡cost的計算
7.4.2橫向運動軌跡cost的計算
7.5小結(jié)
第8章橫縱向運動軌跡的優(yōu)選(15min)
8.1障礙物運動軌跡預(yù)測環(huán)境的構(gòu)建
8.1.1障礙物的過濾
8.1.2障礙物預(yù)測軌跡的生成
8.1.3代碼解析
8.2橫縱向運動軌跡的合成
8.3軌跡的檢驗與驗證
8.3.1軌跡的驗證
8.3.2代碼解析
8.4碰撞檢測與橫縱向運動軌跡的優(yōu)選
8.4.1向量點積的定義與應(yīng)用
8.4.2Axis Aligned Bounding Box(AABB)碰撞檢測算法描述
8.4.3Oriented Bounding Box(OBB)碰撞檢測算法描述
8.4.4代碼解析
8.5小結(jié)