那曲檬骨新材料有限公司

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次閱讀
    美高美国际娱乐| 百家乐翻天qvod粤语| 百家乐官网赌博娱乐| 百家乐官网赌场凯时娱乐| 最好的百家乐官网好评平台都有哪些 | 百家乐官网微笑心法搜索| 百家乐官网隔一数打法| 百家乐官网最新首存优惠| 百家乐官网烫金筹码| 百家乐官网庄家必赢诀窍| 百家乐官网五湖四海娱乐场| 真人百家乐官网蓝盾娱乐网| 百家乐官网试玩1000元| 百家乐官网线路图分析| 百家乐庄闲机率分析| 玩百家乐平台| 百家乐拍照看| 葡京百家乐的玩法技巧和规则 | 大发888娱乐场zb8| 真人百家乐游戏软件| 百家乐如何骗人| 澳门百家乐博| 535娱乐城下载| 百家乐官网赢钱皇冠网| 澳门百家乐官网门路| 百家乐官网庄比闲多多少| 百家乐官网游戏模拟| 百家乐如何写路| 百家乐星级游戏| 蒙特卡罗娱乐场| 网上赌百家乐官网可信吗| 乐九百家乐游戏| 黄金百家乐的玩法技巧和规则| 德州扑克网上平台| 宝格丽百家乐官网娱乐城| 洛克百家乐官网的玩法技巧和规则| 澳门百家乐破解| 威尼斯人娱乐城代理合作| 澳门顶级赌场国际| 百家乐官网娱乐城怎么样| 百家乐线上代理网站|