智能駕駛規劃控制理論學習03-基于采樣的規劃方法

目錄

一、基于采樣的規劃方法概述

二、概率路圖(PRM)

1、核心思想?

2、實現流程

3、算法描述

4、節點連接處理

5、總結

三、快速搜索隨機樹(RRT)

1、核心思想

2、實現流程

?3、總結

4、改進RRT算法

①快速搜索隨機圖(RRG)

②基于運動學的快速搜索隨機樹(Kinematic-based RRT)


一、基于采樣的規劃方法概述

? ? ? ? 基于采樣的方法就是在狀態空間中不斷地隨機撒點,將這些節點根據一定的規則與周圍的節點進行連接,以此構造一條條局部路徑,最終找到一條從起點到終點的路徑。隨著采樣點的不斷增多,最終得到的解會不斷逼近最優解。

? ? ? ? 一般步驟:

  • 為圖表添加隨機數種子
  • 以某種策略或者給定條件采樣到起始節點
  • 選擇和哪些其他節點進行連接
  • 選擇添加或者移除哪些邊

二、概率路圖(PRM)

1、核心思想?

? ? ? ? PRM有兩個階段分別是學習階段(Learning Phase)和查詢階段(Query Phase)。

? ? ? ? 學習階段:

  • 在配置空間中隨機采樣足夠數量的點;
  • 將相互之間能夠到達的節點進行連接。

? ? ? ? 查詢階段:

  • 利用圖搜索算法尋找圖表中從起始節點到目標節點的路徑。?

2、實現流程

(a)圖中所示為一個用于采樣的配置空間,在配置空間中,自動駕駛車輛可以被近似看成一個質點,環境中的障礙物等信息都被近似為圖中的forbidden space,自動駕駛車輛在free space空間中運動,二無需考慮其幾何形狀和運動狀態;

(b)圖中通過隨機采樣的方式獲得一個坐標點,采樣的方法也要根據特定的場景做出不同的選擇,常見的采樣算法有均勻分布采樣(在未知場景中采樣)、高斯分布采樣(在自動駕駛場景中通常以車道中心線為均值)等;

?(c)圖中通過采樣大量的點來獲取地圖的形狀;

?(d)圖中對采樣點進行碰撞檢驗,刪除forbidden space中的采樣點;

?(e)圖中為刪除forbiden space中的采樣點后,在free space中保留下來的有效采樣點;

? (f)圖中每個有效采樣點會連接以當前節點為圓心,半徑r圓形范圍內的所有采樣點

?(g)圖中若采樣點之間的連線與forbiden space相交則發生碰撞,刪除發生碰撞的連線;

? (f)圖中碰撞檢測通過的連線得到保留,作為構成圖表graph的邊;

?(i)在連線得到的圖表graph中添加起始節點和目標節點;

?(j)在graph圖中利用圖搜索算法尋找最優路徑。

3、算法描述

? ? ? ? 用偽代碼的方式對PRM進行簡要描述:

V <- ?; E <- ? // 分別維護兩個集合,一個存放頂點,一個存放邊
for i = 0,...,n do //假定最大采樣點為n,進入循環x <- SampleFree;  //在freespace通過特定的采樣策略采樣得到一個節點U <- Near(G = (V,E), x, r);  //將節點半徑r范圍內要專注的鄰居節點加入集合U中V <- V ∪ {x}; //將當前采樣點x加入集合V中,更新集合Vforeach u in U, in order of increasing ||u - x||, do //對集合U中存入的節點進行處理,為了避免節點過于密集,u和x不能過于接近if x and u are not in the same connected component of G = (V,E) then  // 保證u和x之間的連線與其他連線不重合if CollisionFree(x,u) then E <- E∪{(x,u),(u,x)};  // 通過碰撞檢驗則將x和u的連線加入集合E
return G=(V,E); // 返回V和E表示的圖

? ? ? ? 上面是經典的PRM算法描述,也可以對其進行簡化:

V <- {x}∪{SampleFree}; E <- ?;
foreach v in V do U <- near(G=(V,E),v,r)\{v};foreach u in U doif CollisionFree(v,u) then E <- E∪{(v,u),(u,v)}
return G=(V,E);

? ? ? ? 主要就是減少了剔除部分節點的步驟,因此在算法實現上效率會降低。

4、節點連接處理

? ? ? ? 在PRM實現過程中,選擇那些節點相連也是需要考慮的問題,下面給出三種可行的方法:

  • k-Nearest PRM:選擇當前節點最近的k個鄰居節點

U ← kNearest(G=(V,E),v,k)

  • Bounded-degree PRM:對半徑范圍內添加的最近節點添加一個邊界值k

U ← Near(G,x,r) ∩?kNearest(G=(V,E),v,k)

  • Variable-radius PRM:讓連接半徑稱為對應節點個數的函數,而不是固定的參數

5、總結

? ? ? ? PRM優點:具有概率完備性,只要采樣點足夠多,并且生成的圖表有解那么一定可以結合圖搜索算法找到一條最優解路徑;

? ? ? ? 缺點:

  • 如果是連接特定起點和終點,那么通過PRM的兩個階段先建圖在搜索是比較浪費資源的;
  • 搜索得到的路徑是節點之間通過直線連接的,不符合車輛的運動學約束。

三、快速搜索隨機樹(RRT)

1、核心思想

? ? ? ? 與PRM有學習和查詢兩個階段,并且在學習階段構造的是一個圖不同,RRT只有一個階段,在采樣結束的同時就能確定路徑,RRT在采樣的過程中維護的是一個樹結構。相比圖描述的網絡關系,樹結構描述的是一種層次關系。

? ? ? ? 在RRT算法中,通常將起始節點作為樹的根節點,在采樣搜索到目標節點時通過回溯就可以確定路徑。

2、實現流程

? ? ? ? 依然使用偽代碼對實現流程進行簡要描述:

V <- {root}; E <- ?; // 維護集合V和E,分別存放節點和邊,在V中先將初始節點作為根節點放入
for i = 1,...,n doxrand ← SampleFree; // 在freespcace中得到采樣點xrandxnearest ← Nearest(G=(V,E),xrand); // 設置離xrand距離最近的樹節點為xnearestxnew ← steer(xnearest,xrand); // 通過特定的方式將xnearest與xrand進行連接,此處直接設置了一個中間節點,比較經典的方式設置一段弧長if ObtacleFree(xnearest,xrand) then  // 進行連線障礙物檢測V ← V∪{xnew}; E ← E∪{xnearest,xnew};  // 檢測通過將邊保存到集合E中
return G={V,E};

?3、總結

? ? ? ? 優點:如果是找尋找兩個特定節點間的路徑,RRT的效率會顯著地優于PRM;

? ? ? ? 缺點:RRT不具備概率完備性,因為它每次都是樹的最近節點連接,如下圖紅色區域中搜索得到的路徑顯然不是最優解。

4、改進RRT算法

? ? ? ? 為了解決RRT算法不具備概率完備性的缺陷,后來又提出了多種改進的RRT算法。

①快速搜索隨機圖(RRG)
V <- {root}; E <- ?; 
for i = 1,...,n doxrand ← SampleFree; xnearest ← Nearest(G=(V,E),xrand); xnew ← steer(xnearest,xrand);if ObtacleFree(xnearest,xrand) then Xnear ← Near(G=(V,E),xnew,min{γRRG(log(card(V))/card(V)^(1/d),η); // 將xnew附近給定半徑內的所有節點都存入Xnear集合中V ← V∪{xnew}; E ← E∪{xnearest,xnew};foreach xnear in Xnear doif CollisionFree(xnear,xnew) then E ← E∪{xnearest,xnew};  // 將通過碰撞檢測的所有Xnear集合中的節點與xnew的連線都存入集合E中return G={V,E};

? ? ? ? 核心思想:不僅僅只是連接xnew和xnearest,將xnew半徑范圍內的所有符合非碰撞條件的節點都連接。

? ? ? ? 雖然RRG使得算法具有概率完備性,但是卻違背了RRT算法提高效率的初衷,因為RRG算法在實現過程中并沒有在維護樹結構,輸出的依然是一個圖,相當于是PRM的學習階段,還要再利用搜索算法進行最優路徑確定。

②基于運動學的快速搜索隨機樹(Kinematic-based RRT)

? ? ? ? 核心思想:利用車輛運動學方法在兩個節點之間進行轉向,主要在于RRT偽代碼中xnew獲取步驟的優化。

? ? ? ? 上圖所示是基于杜賓斯規劃(dubins_path_planning)得到的路徑,可以看出在引入車輛運動學方法后,得到的最終路徑是一條較為平滑的曲線。dubins_path_planning的具體介紹在后面會具體介紹。

四、優化的快速搜索隨機數(RRT*)

1、核心思想

  • 與RRG算法相比,RRT*算法維護的是一個樹結構,而不是一個圖,也就是說會在RRG得的圖中刪除掉多余的邊界;
  • 與原來的RRT算法相比,RRT*增加了重連的步驟以確保各個節點取得的是最小代價值。

2、實現流程

V <- {root}; E <- ?; 
for i = 1,...,n doxrand ← SampleFree; xnearest ← Nearest(G=(V,E),xrand); xnew ← steer(xnearest,xrand);if ObtacleFree(xnearest,xrand) then // 延續RRG的思想先搜索附近的鄰居節點Xnear ← Near(G=(V,E),xnew,min{γRRG(log(card(V))/card(V)^(1/d),η); V ← V∪{xnew};xmin ← xnear; cmin ← Cost(xnearest) + c(Line(xnearest,xnew));// 獲取代價值最小節點foreach xnear in Xnear do if CollisionFree(xnear,xnew) && Cost(xnew) + c(Line(xnearest,xnew)) < c(min) thenxmin ← xnear; cmin ← Cost(xnear) + c(Line(xnearest,xnew))// 對節點進行重連,通過xnew更新總代價值值和路徑foreach xnear in Xnear do if CollisionFree(xnew,xnear) && Cost(xnew) + c(Line(xnew,xnearest)) < Cost(xnear)then xparent ← Parent(xnear);E ← (E\{xparent,xnear}∪{xnew,xnear}) // 在邊集合中刪除xnear到其原父節點xparent的連線,重新加入xnew到xnear的連線
return G = {V,E};

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714888.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714888.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714888.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【計算機網絡實踐】在windows上配置Xshell和Xftp連接Ubuntu系統

hebut的課下作業&#xff0c;學習使用Xshell和Xftp連接Linux系統 1. 軟件需求 Windows10/11、已安裝VM虛擬機的ubuntu系統、Xshell、Xftp。 Xshell和Xftp在家庭/學校免費 - NetSarang Website (xshell.com)里面可以下載到&#xff0c;上面需要的兩個軟件都在&#xff0c;官網免…

運籌學_1.1.2 線性規劃問題-圖解法

1.1.2 線性規劃問題-圖解法 一、圖解法求解步驟&#xff08;只適用于兩個決策變量問題&#xff09;二、圖解法作圖實例三、圖解法分析線性規劃幾種解的情況1、唯一最優解2、無窮多最優解3、無界解4、無解或無可行解 四、圖解法的幾點啟示 一、圖解法求解步驟&#xff08;只適用…

C++sort排序

前言&#xff1a; C語言的sort函數是一類用于數組排序的函數以下是其簡單的使用&#xff1a; 1.頭文件&#xff1a; #include<algorithm> 2.使用命名空間&#xff1a; using namespace std; 3.函數形式&#xff1a; sort(數組名,數組名元素個數,排序函數); 默認排…

深入淺出Redis(一):對象與數據結構

引言 Redis是一款基于鍵值對的數據結構存儲系統&#xff0c;它的特點是基于內存操作、單線程處理命令、IO多路復用模型處理網絡請求、鍵值對存儲與簡單豐富的數據結構等等 這篇文章主要圍繞Redis中的對象與數據結構來詳細說明鍵值對存儲與簡單豐富的數據結構這兩大特點 Redi…

運籌學_1.1.4 線性規劃問題-解的概念

1.1.4 線性規劃問題-解的概念 一、可行解與最優解二、基的概念三、基變量、基向量&#xff1b;非基變量、非基向量&#xff1b;基解、基可行解&#xff1b;四、最優解與可行解、基可行解的關系五、用例題&#xff08;枚舉法&#xff09;鞏固基解、基可行解、最優解三個概念1、例…

flyway實戰

flyway是一款用來管理數據庫版本的工具框架 一, 添加依賴 <dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId> </dependency> <dependency><groupId>org.springframework</groupId>&l…

第十一屆藍橋杯省賽第一場C++ A組 / B組《網絡分析》(c++)

1.題目說明 小明正在做一個網絡實驗。 他設置了 n 臺電腦&#xff0c;稱為節點&#xff0c;用于收發和存儲數據。 初始時&#xff0c;所有節點都是獨立的&#xff0c;不存在任何連接。 小明可以通過網線將兩個節點連接起來&#xff0c;連接后兩個節點就可以互相通信了。 兩…

代碼隨想錄算法訓練營第二十五天 | 216.組合總和III 17.電話號碼的字母組合

216.組合總和III https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:result [] # 存放結果集sel…

實現一個移動端焦點輪播圖

HTML結構&#xff1a; 創建一個輪播圖的容器&#xff0c;并在其中放置輪播圖片。 <div id"carousel"> <div class"carousel-item active"> <img src"image1.jpg" alt"Image 1"> </div> <div class&q…

Docker部署ZooKeeper

在分布式系統中,ZooKeeper是一個關鍵的組件,用于協調和管理多個節點之間的狀態。本文將詳細介紹如何使用Docker安裝和部署ZooKeeper,包括非集群部署和集群部署兩種情況。 非集群部署 前期準備 在開始之前,請確保你已經安裝了Docker,并且擁有sudo權限。 關閉防火墻和SEL…

5、DVWA代碼審計(2)

一、csrf 1、csrf(low) 限制 復現 GET /vulnerabilities/csrf/?password_new123456&password_conf123456&ChangeChange HTTP/1.1 Host: ddd.com Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,…

電子電器架構 —— DoIP協議相關的介紹

電子電器架構 —— DoIP協議相關的介紹 我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 沒有人關注你。也無需有人關注你。你必須承認自己的價值,你不能站在他人的角度來反對自己。人生在世,最怕…

監聽者的力量:探索觀察者模式和spring使用

觀察者模式是一種對象行為型設計模式&#xff0c;它定義了對象之間的一對多依賴關系。 觀察者模式通常用于實現分布式事件處理系統、新聞代理或MVC框架的一部分。在這種模式中&#xff0c;一個對象&#xff08;稱為“主題”或“可觀察對象”&#xff09;維護一系列依賴于它的對…

vue3編寫H5適配橫豎屏

具體思路如下&#xff1a; 1、監聽瀏覽器屏幕變化&#xff0c;通過監聽屏幕寬高&#xff0c;辨別出是橫屏&#xff0c;還是豎屏狀態 在項目的起始根頁面進行監聽&#xff0c;我就是在App.vue文件下進行監聽 代碼如下&#xff1a; <template><RouterView /> <…

【Spring IoC】實驗四:特殊值處理

個人名片&#xff1a; &#x1f43c;作者簡介&#xff1a;一名大三在校生&#xff0c;喜歡AI編程&#x1f38b; &#x1f43b;???個人主頁&#x1f947;&#xff1a;落798. &#x1f43c;個人WeChat&#xff1a;hmmwx53 &#x1f54a;?系列專欄&#xff1a;&#x1f5bc;?…

Java4種創建線程方式

目錄 一&#xff1a;繼承Thread 二&#xff1a;重新Runnable接口 三&#xff1a;Callable 四&#xff1a;lambda 一&#xff1a;繼承Thread public static void main(String[] args) {Thread1 t1new Thread1();t1.start(); } class Thread1 extends Thread {Overridepublic…

C++ //練習 10.16 使用lambda編寫你自己版本的biggies。

C Primer&#xff08;第5版&#xff09; 練習 10.16 練習 10.16 使用lambda編寫你自己版本的biggies。 環境&#xff1a;Linux Ubuntu&#xff08;云服務器&#xff09; 工具&#xff1a;vim 代碼塊 /*******************************************************************…

BERTopic安裝最全教程及報錯處理

BERTopic安裝 BERTopic的安裝比較復雜,直接安裝會報錯 安裝方法1,.whl文件安裝 ERROR: Could not build wheels for hdbscan, which is required to install pyproject.toml-based projects正確安裝流程 查看python能安裝whl的版本pip debug --verbose Compatible tags: 2…

圖表背后的智慧:辦公場景中的數據可視化革新

在現代辦公場景中&#xff0c;數據可視化的應用已經成為提高效率、推動創新的得力工具。無論是管理層還是普通員工&#xff0c;都能從數據可視化中受益匪淺。下面我就以可視化從業者的角度&#xff0c;簡單聊聊這個話題。 首先&#xff0c;數據可視化提升了數據的易讀性與理解性…

docker安裝最新版lastest

docker pull mysql 報missing signature key錯誤問題原因&#xff1a;如果安裝docker用的是yum install docker命令的話&#xff0c;下載下來的docker版本為舊版本&#xff0c;所以會有數字簽名有問題 最新版docker安裝方法&#xff1a; 卸載舊版本 Docker&#xff08;如果已安…