吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RRT算法Matlab實現 主函數部分

麥辣雞腿堡 ? 來源:古月居 ? 作者:FlyingKonan ? 2023-11-24 16:25 ? 次閱讀

初始化隨機樹

初始化隨機樹,定義樹結構體tree以保存新節(jié)點及其父節(jié)點,便于后續(xù)從目標點回推規(guī)劃的路徑。

%% 初始化隨機樹
tree.child = [];               % 定義樹結構體,保存新節(jié)點及其父節(jié)點
tree.parent = [];
tree.child = x_start;          % 起點作為第一個節(jié)點
flag = 1;                      % 標志位
new_node_x = x_start(1,1);     % 將起點作為第一個生成點
new_node_y = x_start(1,2);
new_node = [new_node_x, new_node_y];

主函數部分

主函數中首先生成隨機點,并判斷是否在地圖范圍內,若超出范圍則將標志位置為0。

rd_x = 30 * rand() - 15;    % 生成隨機點
rd_y = 30 * rand() - 15;    
if (rd_x >= x_right_limit || rd_x <= x_left_limit ||... % 判斷隨機點是否在地圖邊界范圍內
    rd_y >= y_right_limit || rd_y <= y_left_limit)
    flag = 0;
end

調用函數cal_distance計算tree中距離隨機點最近的節(jié)點的索引,并計算該節(jié)點與隨機點連線和x正向的夾角。

[angle, min_idx] = cal_distance(rd_x, rd_y, tree);    % 返回tree中最短距離節(jié)點索引及對應的和x正向夾角

cal_distance函數定義如下:

function [angle, min_idx] = cal_distance(rd_x, rd_y, tree)
    distance = [];
    i = 1;
    while i<=size(tree.child,1)
        dx = rd_x - tree.child(i,1);
        dy = rd_y - tree.child(i,2);
        d = sqrt(dx^2 + dy^2);
        distance(i) = d;
        i = i+1;
    end
    [~, min_idx] = min(distance);
    angle = atan2(rd_y - tree.child(min_idx,2),rd_x - tree.child(min_idx,1));
end

隨后生成新節(jié)點。

new_node_x = tree.child(min_idx,1)+grow_distance*cos(angle);% 生成新的節(jié)點
new_node_y = tree.child(min_idx,2)+grow_distance*sin(angle);
new_node = [new_node_x, new_node_y];

接下來需要對該節(jié)點進行判斷:

① 新節(jié)點是否在障礙物范圍內;

② 新節(jié)點和父節(jié)點的連線線段是否和障礙物有重合部分。

若任意一點不滿足,則將標志位置為0。實際上可以將兩個判斷結合,即判斷新節(jié)點和父節(jié)點的連線線段上的點是否在障礙物范圍內。

for k=1:1:size(ob,1) 
    for i=min(tree.child(min_idx,1),new_node_x):0.01:max(tree.child(min_idx,1),new_node_x)    % 判斷生長之后路徑與障礙物有無交叉部分
        j = (tree.child(min_idx,2) - new_node_y)/(tree.child(min_idx,1) - new_node_x) *(i - new_node_x) + new_node_y;
        if(i >=ob(k,1)-resolution && i <= ob(k,1)+ob(k,3) && j >= ob(k,2)-resolution && j <= ob(k,2)+ob(k,4))
            flag = 0;
            break
        end
    end
end

在這我采用的方法是寫出新節(jié)點和父節(jié)點連線的直線方程,然后將x變化范圍限制在min(tree.child(min_idx,1),new_node_x)max(tree.child(min_idx,1),new_node_x)內,0.01即坐標變換的步長,步長越小判斷的越精確,但同時會增加計算量;

步長越大計算速度快但是很可能出現誤判,如下圖所式。

判斷標志位若為1,則可以將該新節(jié)點加入到tree中,注意保存新節(jié)點和它的父節(jié)點,同時顯示在figure中,之后重置標志位。

if (flag == true)           % 若標志位為1,則可以將該新節(jié)點加入tree中
    tree.child(end+1,:) = new_node;
    tree.parent(end+1,:) = [tree.child(min_idx,1), tree.child(min_idx,2)];
    plot(rd_x, rd_y, '.r');hold on
    plot(new_node_x, new_node_y,'.g');hold on
    plot([tree.child(min_idx,1),new_node_x], [tree.child(min_idx,2),new_node_y],'-b');
end
    
flag = 1;                   % 標志位歸位

最后就是把障礙物、起點終點等顯示在figure中,并判斷新節(jié)點到目標點距離。若小于閾值則停止搜索,并將目標點加入到node中,否則重復該過程直至找到目標點。

%% 顯示
for i=1:1:size(ob,1)        % 繪制障礙物
    fill([ob(i,1)-resolution, ob(i,1)+ob(i,3),ob(i,1)+ob(i,3),ob(i,1)-resolution],...
         [ob(i,2)-resolution,ob(i,2)-resolution,ob(i,2)+ob(i,4),ob(i,2)+ob(i,4)],'k');
end
hold on

plot(x_start(1,1)-0.5*resolution, x_start(1,2)-0.5*resolution,'b^','MarkerFaceColor','b','MarkerSize',4*resolution); % 起點
plot(goal(1,1)-0.5*resolution, goal(1,2)-0.5*resolution,'m^','MarkerFaceColor','m','MarkerSize',4*resolution); % 終點
set(gca,'XLim',[x_left_limit x_right_limit]); % X軸的數據顯示范圍
set(gca,'XTick',[x_left_limit:resolution:x_right_limit]); % 設置要顯示坐標刻度
set(gca,'YLim',[y_left_limit y_right_limit]); % Y軸的數據顯示范圍
set(gca,'YTick',[y_left_limit:resolution:y_right_limit]); % 設置要顯示坐標刻度
grid on
title('D-RRT');
xlabel('橫坐標 x'); 
ylabel('縱坐標 y');
pause(0.05);
if (sqrt((new_node_x - goal(1,1))^2 + (new_node_y- goal(1,2))^2) <= goal_radius) % 若新節(jié)點到目標點距離小于閾值,則停止搜索,并將目標點加入到node中
    tree.child(end+1,:) = goal;         % 把終點加入到樹中
    tree.parent(end+1,:) = new_node;
    disp('find goal!');
    break
end
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • matlab
    +關注

    關注

    185

    文章

    2981

    瀏覽量

    231013
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62977
  • 路徑規(guī)劃

    關注

    0

    文章

    78

    瀏覽量

    15347
  • RRT
    RRT
    +關注

    關注

    0

    文章

    12

    瀏覽量

    1124
收藏 人收藏

    評論

    相關推薦

    matlab部分圖像處理函數

    matlab部分圖像處理函數
    發(fā)表于 03-04 19:11

    基于二維圖像的FFT算法實現matlab程序

    基于二維圖像的FFT算法實現matlab程序,FFT函數源代碼
    發(fā)表于 05-15 14:22

    果蠅優(yōu)化算法MATLAB實現

    果蠅優(yōu)化算法MATLAB實現發(fā)布時間:2018-10-12 23:28,瀏覽次數:1183, 標簽:MATLAB果蠅優(yōu)化算法--
    發(fā)表于 08-17 07:28

    Matlab遺傳算法工具箱的應用

    Matlab遺傳算法(GA)優(yōu)4~-r-具箱是基于基本操作及終止條件、二進制和十進制相互轉換等操作的綜合函數庫。其實現步驟包括:通過輸入及輸出函數
    發(fā)表于 11-13 17:57 ?60次下載

    matlab牛逼函數總結

    matlab牛逼函數總結,想大家會因為MATLAB函數不懂吧!自己看看吧!
    發(fā)表于 11-06 17:18 ?0次下載

    模糊推理的Mamdani算法及其Matlab實現

    模糊濾波的mamdani算法及其Matlab實現
    發(fā)表于 11-17 18:23 ?40次下載

    MATLAB常用函數總結(表格)

    MATLAB常用函數總結,MATLAB函數速查手冊,方便應用MATLAB函數
    發(fā)表于 01-21 14:31 ?0次下載

    matlab函數資料

    matlab 函數 matlab的一些基本的界面設計的函數
    發(fā)表于 03-23 17:13 ?0次下載

    BP算法及其matlab實現

    高級自動控制算法:BP算法及其matlab實現
    發(fā)表于 12-02 11:45 ?2次下載

    matlab怎樣編寫函數并調用函數

    MATLAB和Mathematica、Maple并稱為三大數學軟件。它在數學類科技應用軟件中在數值計算方面首屈一指。MATLAB可以進行矩陣運算、繪制函數和數據、實現
    發(fā)表于 12-04 14:33 ?2.6w次閱讀
    <b class='flag-5'>matlab</b>怎樣編寫<b class='flag-5'>函數</b>并調用<b class='flag-5'>函數</b>

    《圖論算法及其MATLAB實現》電子教材和函數函數功能列表概述

    ,同時也給出了可達矩陣的計算,以及關聯矩陣和鄰接矩陣的相互轉換等重要算法及其MATLAB實現;第2~8章分別介紹最短路、連通圖、樹。 Euler圖和Hamilon圖、匹配、網絡中的流、最小費用流等相關問題,而且均給出了有關問題的
    發(fā)表于 10-22 08:00 ?0次下載

    MATLAB的簡單函數優(yōu)化的遺傳算法程序免費下載

    本文檔的主要內容詳細介紹的是MATLAB的簡單函數優(yōu)化的遺傳算法程序免費下載。
    發(fā)表于 10-24 08:00 ?2次下載
    <b class='flag-5'>MATLAB</b>的簡單<b class='flag-5'>函數</b>優(yōu)化的遺傳<b class='flag-5'>算法</b>程序免費下載

    MATLAB實現PCA算法

    MATLAB實現PCA算法 PCA(Principal Component Analysis)是一種經典的線性降維方法,其基本思想是將高維數據映射到低維空間中,使得映射后的數據具有更好的可解釋
    的頭像 發(fā)表于 06-16 17:10 ?2343次閱讀

    自動駕駛 RRT算法原理解析

    RRT 算法是一種對狀態(tài)空間隨機采樣的算法,通過對采樣點進行碰撞檢測,避免了對空間的精確建模帶來的大計算量,能夠有效地解決高維空間和復雜約束的路徑規(guī)劃問題。 與PRM類似,該方法是概率完備且非最優(yōu)的。可以輕松處理障礙物和差
    發(fā)表于 07-28 15:45 ?2168次閱讀
    自動駕駛 <b class='flag-5'>RRT</b><b class='flag-5'>算法</b>原理解析

    利用Matlab函數實現深度學習算法

    Matlab實現深度學習算法是一個復雜但強大的過程,可以應用于各種領域,如圖像識別、自然語言處理、時間序列預測等。這里,我將概述一個基本的流程,包括環(huán)境設置、數據準備、模型設計、訓練過程、以及測試和評估,并提供一個基于
    的頭像 發(fā)表于 07-14 14:21 ?2447次閱讀
    百家乐统计软件| 百家乐智能投注系统| 百家乐游戏平台架设| 贵族百家乐的玩法技巧和规则| 998棋牌游戏中心| 百家乐官网怎么对冲打| E世博百家乐官网的玩法技巧和规则 | 日博365| 亚洲百家乐官网博彩的玩法技巧和规则| TT百家乐现金网| 大发888官方我的爱好| 百家乐官网平台信誉排名| 百家乐如何视频| 大发888官方888| 百家乐官网技巧看路| 真人百家乐软件博彩吧| 网上娱乐城注册送彩金| 任我赢百家乐官网自动投注系统| 百家乐稳定打法| 上游棋牌大厅下载| 百家乐官网大路小路三珠路| 赢家百家乐的玩法技巧和规则| 武邑县| 真人百家乐是骗局| 博彩老头排列三| 香港百家乐官网的玩法技巧和规则 | 博久网| 澳门美高梅娱乐| KK百家乐官网的玩法技巧和规则| 威尼斯人娱乐城安全吗| 百家乐官网游戏规则玩法| 现金百家乐技巧| 涿州市| 真人百家乐攻略| 佳木斯市| 百家乐自动算牌软件| 百家乐官网下载游戏| 百家乐赢家打法| 百家乐官网视频多开| 百家乐英皇娱乐网| 百家乐官网必学技巧|