一、獲取代碼方式
獲取代碼方式1:
完整代碼已上傳我的資源:【路徑規(guī)劃】基于matlab RRT算法求解機(jī)器人避障路徑規(guī)劃問題【含Matlab源碼 319期】
點擊上面藍(lán)色字體,直接付費下載,即可。
獲取代碼方式2:
付費專欄Matlab路徑規(guī)劃(初級版)
備注:
點擊上面藍(lán)色字體付費專欄Matlab路徑規(guī)劃(初級版),掃描上面二維碼,付費29.9元訂閱海神之光博客付費專欄Matlab路徑規(guī)劃(初級版),憑支付憑證,私信博主,可免費獲得1份本博客上傳CSDN資源代碼(有效期為訂閱日起,三天內(nèi)有效);
點擊CSDN資源下載鏈接:1份本博客上傳CSDN資源代碼
二、RRT算法簡介
1 RRT定義
RRT(Rapidly-Exploring Random Tree)算法是一種基于采樣的路徑規(guī)劃算法,常用于移動機(jī)器人路徑規(guī)劃,適合解決高維空間和復(fù)雜約束下的路徑規(guī)劃問題?;舅枷胧且援a(chǎn)生隨機(jī)點的方式通過一個步長向目標(biāo)點搜索前進(jìn),有效躲避障礙物,避免路徑陷入局部極小值,收斂速度快。本文通過matlab實現(xiàn)RRT算法,解決二維平面的路徑規(guī)劃問題。
2 地圖
為了方便算法的實現(xiàn),使用離散量來表達(dá)環(huán)境地圖。其中,數(shù)值0表示無障礙物的空區(qū)域,數(shù)值1表示該區(qū)域有障礙物。
RRT算法中搜索到的頂點坐標(biāo)為連續(xù)點,在地圖中產(chǎn)生隨機(jī)點,算法將通過連續(xù)的點構(gòu)建樹。此過程中,對樹枝和頂點進(jìn)行檢測,檢測頂點所處位置是否是空區(qū)域。下載附錄中.dat文件,繪制地圖。
colormap=[1 1 1; 0 0 0; 1 0 0; 0 1 0; 0 0 1];
imshow(uint8(map),colormap)
note:數(shù)據(jù)中的列為x軸,行為y軸
3 RRT算法原理
通過matlab程序構(gòu)建從起始位置到目標(biāo)位置的樹,并生成連接兩個點的路徑。使用一顆中心點在起始點的樹,而不是兩顆樹(一個中心點在起始位置,一個中心點在目標(biāo)位置)。
編寫一個matlab函數(shù),輸入和輸出有相同的形式。
function [vertices, edges, path] = rrt(map, q_start, q_goal, k, delta_q, p)
其中:
map:.mat文件中的地圖矩陣
q_start:起點的x和y坐標(biāo)
q_goal:目標(biāo)點的x和y坐標(biāo)
k: 在目標(biāo)點無法找到是,控制產(chǎn)生搜索樹的最大迭代次數(shù)為k次
delta_q : q_new 和 q_near之間的距離
p: 將q_goal 作為q_rand 的概率,當(dāng)隨機(jī)產(chǎn)生的隨機(jī)數(shù)小于p,將目標(biāo)點作為隨機(jī)點q_rand,當(dāng)隨機(jī)產(chǎn)生的數(shù)大于p時,產(chǎn)生一個隨機(jī)點作為q_rand
vertices:頂點的x和y坐標(biāo),生成隨機(jī)樹的過程中產(chǎn)生的所有的點的坐標(biāo)都存儲在這個矩陣中,第一個點為起點,最后一個點為目標(biāo)點。是一個2行n列的矩陣
deges:生成隨機(jī)樹的所有樹枝,一共有n-1個樹枝,因此該矩陣有n-1行,每一行的兩列分別表示兩個點的索引號。一旦搜索到目標(biāo)點,最后一行將表示目標(biāo)點,沿著目標(biāo)點回溯,即可找到路徑
path: 從起始點到目標(biāo)點的索引,是一個行向量
下面用一個圖來表示上面提到的算法里的一些變量:
4 障礙物檢測
檢測樹枝(即q_near和q_new之間的edge)是否處于自由空間,可以使用增量法或者等分法,示意圖如下(假設(shè)兩點之間有10個點,左圖為為增量檢測法,右圖為等分法,從示意圖中可以看出使用等分法檢測次數(shù)更少):
在本文中,使用k=10000,delta_q=50,p=0.3, 我們將獲得如下結(jié)果:
5 路徑平滑處理
完成基本的RRT算法之后,我們獲得了一條從起點到終點的路徑,現(xiàn)在對這條路徑進(jìn)行平滑和降噪處理,處理完成之后,我們將得到一條更短的路徑。
采用貪心算法:
連接q_start和q_goal,如果檢測到兩個點之間有障礙物,則將q_goal替換為前一個點,直到兩個點能連接上(中間無障礙物)為止。一旦q_goal被連接上,
在matlab中定義平滑函數(shù):
function [path_smooth] = smooth(map, path, vertices, delta)
其中:
path: 從起始點到目標(biāo)位置的路徑索引號
vertices:樹中所有的頂點坐標(biāo)
delta:增量距離,用來檢測路徑頂點之間的直接連接是否在自由空間之內(nèi),每個edge都被delta分割成幾段
path_smooth:經(jīng)過平滑處理之后,路徑點將會減少,用path_smooth記錄平滑之后的路徑,仍然是一個行向量,記錄路徑的索引號
平滑處理之后的路徑為:
6 總結(jié)
RRT算法是一種增量式的搜索算法,基于概率的思想,它是一種概率完備的路徑優(yōu)化算法,具有求解速度上的優(yōu)勢。RRT基本算法有其自身缺陷,求解得到的路徑通常質(zhì)量不好,帶有棱角,不夠光滑。因此需要對路徑進(jìn)行平滑處理,才能得到適合機(jī)器人路徑跟蹤的路徑曲線。
三、部分源代碼
%main.m
CreateMap;
fatehr=[];
四、運行結(jié)果
五、matlab版本及參考文獻(xiàn)
1 matlab版本
2019b
2 參考文獻(xiàn)
[1] 包子陽,余繼周,楊杉.智能優(yōu)化算法及其MATLAB實例(第2版)[M].電子工業(yè)出版社,2016.
[2]張巖,吳水根.MATLAB優(yōu)化算法源代碼[M].清華大學(xué)出版社,2017.
[3]RRT路徑規(guī)劃算法文章來源:http://www.zghlxwxcb.cn/news/detail-791560.html
3 備注
簡介此部分摘自互聯(lián)網(wǎng),僅供參考,若侵權(quán),聯(lián)系刪除文章來源地址http://www.zghlxwxcb.cn/news/detail-791560.html
到了這里,關(guān)于【路徑規(guī)劃】RRT算法機(jī)器人避障路徑規(guī)劃【含Matlab源碼 319期】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!