自动驾驶 RRT算法原理解析

发布者:CrystalDawn最新更新时间:2023-08-03 来源: elecfans关键字:自动驾驶  RRT算法  RRT 手机看文章 扫描二维码
随时随地手机看文章

1 RRT算法的简介

天下武功唯快不破,快是 RRT 的最大优势。RRT 的思想是快速扩张一群像树一样的路径以探索空间的大部分区域,找到可行的路径。


RRT 算法是一种对状态空间随机采样的算法,通过对采样点进行碰撞检测,避免了对空间的精确建模带来的大计算量,能够有效地解决高维空间和复杂约束的路径规划问题。


与PRM类似,该方法是概率完备且非最优的。可以轻松处理障碍物和差分约束(非完整和动力学)的问题,并被广泛应用于机器人路径规划。


2 RRT算法原理

2.1 算法流程

(1)设定初始点  与目标点 ,自行设定状态采样空间 

(2)进行随机采样得到采样点 ,如果采样点  在障碍物内,则重新随机采样

(3)若不在障碍物内,计算该采样点  与集合  (已经生成的节点) 中的所有节点之间的距离,得到离得最近的节点 ,再从节点  以步长  走向节点  ,生成一个新的节点 ,若  与  的连线  经过障碍物,则重新随机采样

(4)经过反复迭代,生成一个随机扩展树,当随机扩展树中的子节点进入了我们规定的目标区域,便可以在随机扩展树中找到一条由从初始点到目标点的路径。


2.2 算法伪代码

可以将伪代码与上述算法流程对照起来看

9e9b9f9e-29ff-11ee-a368-dac502259ad0.png

2.3 算法流程图

9f12c132-29ff-11ee-a368-dac502259ad0.png

3 RRT算法matlab实现


3.1 测试地图


%随机生成障碍物

function [f,n1]=ob(n)

f=[];%储存障碍物信息

n1=n;%返回障碍物个数

p=0;

for i=1:n

    k=1;

    while(k)

        D=[rand(1,2)*60+15,rand(1,1)*1+3];%随机生成障碍物的坐标与半径,自行调整

        if(distance(D(1),D(2),90,90)>(D(3)+5)) %与目标点距离一定长度,防止过多阻碍机器人到达目标点

            k=0;

        end

        for t=1:p  %障碍物之间的距离不能过窄,可自行调整去测试

            if(distance(D(1),D(2),f(3*t-2),f(3*t-1))<=(D(3)+f(3*t)+5))

                k=1;

            end

        end

    end

    %画出障碍物

    aplha=0:pi/40:2*pi;

    r=D(3);

    x=D(1)+r*cos(aplha);

    y=D(2)+r*sin(aplha);

    fill(x,y,'k');

    axis equal;

    hold on;

    xlim([0,100]);ylim([0,100]);

    f=[f,D];

    p=p+1;%目前生成的障碍物个数

end

hold all;

9f203c4a-29ff-11ee-a368-dac502259ad0.png

3.2 distance函数


function f=distance(x,y,x1,y1)

   f=sqrt((x-x1)^2+(y-y1)^2);

3.3 RRT算法


clc

clear all

[f,n1]=ob(10);%随机生成障碍物

Xinit=[1,1];%定义初始点

Xgoal=[90,90];%定义目标点

plot(Xinit(1),Xinit(2),'ro');

plot(Xgoal(1),Xgoal(2),'ko');

T=[Xinit(1),Xinit(2)];%已生成节点集合用顺序表的数据结构存储

Xnew=Xinit;

D(1)=0;%初始节点的父节点指向0

while distance(Xnew(1),Xnew(2),Xgoal(1),Xgoal(2))>3  %进入目标区域

    Xrand=round(rand(1,2)*100)+1;%状态采样空间:横纵坐标均为整数,范围1~100

    k=1;%进入循环

    while k==1

        k=0;%初始化采样成功

        for i=1:n1

            if distance(Xrand(1),Xrand(2),f(i*3-2),f(i*3-1))<(f(i*3)+1)%判断随机采样点是否在障碍物内

                k=1;%采样不成功

                break;

            end

        end

        Xrand=round(rand(1,2)*100);%重新采样

    end

    min=10000;

    for i=1:size(T,2)/2 %遍历已生成节点集合

        if distance(T(2*i-1),T(2*i),Xrand(1),Xrand(2))Xnew(1)

        caiyang=-0.001;

    else

        caiyang=0.001;

    end

    for i=Xnear(1)Xnew(1)%均匀采样进行碰撞检测

        for j=1:n1

            if distance(f(3*j-2),f(3*j-1),i,Xnear(2)+(i-Xnear(1))/(Xnew(1)-Xnear(1))*(Xnew(2)-Xnear(2)))<=(f(3*j)+1)

                t=1;%代表碰撞

                break;

            end

        end

        if t==1

            break;

        end

    end

    if t==0

        T=[T,Xnew(1),Xnew(2)];

        for i=1:size(T,2)/2 %遍历已生成节点集合

            if (T(i*2-1)==Xnear(1))&&(T(i*2)==Xnear(2))  %得到最近的节点的索引

                D(size(T,2)/2)=i;%记录父节点

                break;

            end

        end

        plot([Xnew(1),Xnear(1)],[Xnew(2),Xnear(2)],'b-');hold on;pause(0.005);

        plot(Xnew(1),Xnew(2),'r.');xlim([0,100]);ylim([0,100]);

    end

end

i=size(T,2)/2;

jg=[i];

while D(i)

    i=D(i); %通过链表回溯

    if D(i)~=0

        jg=[D(i),jg];%存储最短路径通过的节点

    end

end

Fx=T(jg(1)*2-1);Fy=T(jg(1)*2);

i=2;

while jg(i)~=size(T,2)/2

    x=T(jg(i)*2-1);

    y=T(jg(i)*2);

    plot([x,Fx],[y,Fy],'g-');hold on;pause(0.05);

    Fx=x;Fy=y;

    i=i+1;

end

 plot([T(jg(i)*2-1),Fx],[T(jg(i)*2),Fy],'g-');hold on;pause(0.05);

3.4 动画效果

9f4378b8-29ff-11ee-a368-dac502259ad0.png

9f5b8bce-29ff-11ee-a368-dac502259ad0.png

4 RRT的缺陷


(1)很明显RRT算法得到的路径不是最优的


(2)RRT算法未考虑运动学模型


(3)RRT算法对于狭小的通道的探索性能不好,如下图的对比,有可能探索不到出口


9f89d682-29ff-11ee-a368-dac502259ad0.png

(4)没有启发信息的RRT像无头苍蝇,探索空间完全靠运气,如下图

9fbe560a-29ff-11ee-a368-dac502259ad0.png

针对上述缺陷,又出现了很多RRT算法的变种,以后的文章中会介绍。


关键字:自动驾驶  RRT算法  RRT 引用地址:自动驾驶 RRT算法原理解析

上一篇:车辆端目标ECU的OTA实现方案
下一篇:纯电动车辆的结构及其原理

推荐阅读最新更新时间:2024-11-01 18:01

资本“钟爱”的24家国内自动驾驶初创企业,都是哪些?
随着人工智能的加速渗透, 自动驾驶 技术无疑成为当下最热门的领域,除了传统车企、互联网巨头纷纷入局外,一大批科技型初创企业也相继涌现。据不完全统计,在自动驾驶技术研发领域,全世界已经涌现出了超过240多家初创企业,而作为全球最大的单一汽车消费市场,中国亦有不少初创企业迎风而上。   盖世汽车通过搜集整理企业工商信息,选取了24家最受资本市场“钟爱”的较有代表性的国内自动驾驶初创企业,分别从其融资进程、技术路线、核心产品及商业模式几个维度进行梳理,供业界参考。     政策引导:催生初创企业数量增加 通过对以上较有代表性的24家初创企业整理分析,盖世汽车发现,从成立时间上,早在2011年,我国就有与自动驾驶技术相关的初创企业萌出,
[嵌入式]
消息称三星停止自动驾驶研究,开发人员转到机器人领域
5 月 11 日消息,BusinessKorea 网站援引业内人士消息,三星电子已停止自动驾驶汽车研究,负责三星中长期发展的三星先进技术研究院(SAIT),已经将自动驾驶排除在研究项目之外,将开发人员转移到机器人领域,作为三星中长期发展的一部分。 报道称,自三星电子去年成功完成 200 公里路段的“无人驾驶”以来,业界的反应喜忧参半。由于开发困难大于预期和缺乏业务盈利能力,全球公司一再放弃全自动驾驶,这影响了三星的决定。一位业内人士表示,“三星电子跟随苹果停止自动驾驶汽车研究,似乎是由于技术实现困难,以及与投资相比缺乏可观的回报。” 此前有报道称,SAIT 自 2017 年获得韩国监管机构颁发的自动驾驶临时许可之后,在过去几年
[汽车电子]
消息称三星停止<font color='red'>自动驾驶</font>研究,开发人员转到机器人领域
AR智能眼镜有望成为自动驾驶汽车的标准配件
  想象一下这个场景:你来到一个陌生城市甚至是国家,租了一辆车自驾,租车公司递给你一副AR眼镜,它会根据交通状况开启汽车的 自动驾驶 模式,并且告诉你身处何处、大概还有多久会到达目的地。   这不是痴人说梦,事实上, AR智能眼镜 很有可能成为未来自动驾驶汽车的必备配件。      现阶段,人们对于自动驾驶汽车最大的怀疑是什么?自然是安全性和可靠性。更深层地解释,是对未知的恐惧,因为我们并不能了解自动驾驶汽车的电脑是怎么运行的。一块简单的车载屏幕或是语音系统,并不能真正让人们放心,但AR(增强现实)则完全可以提升人机交互体验。AR智能眼镜之于自动驾驶汽车,相对于一种更好的人机交互形式,让乘客直观地了解自动驾驶汽车究竟在想什么、准备
[嵌入式]
机器人出租车意外撞上自行车!你信得过如今的自动驾驶吗?
前不久,一辆Waymo无人驾驶出租车和一名骑自行车的人在旧金山发生了一起事故,事故发生在当地时间下午3点左右,事故发生后,自行车驾驶员并未受到重伤,无需送往医院,仍能自行离开现场。 Waymo是谷歌母公司Alphabet的自动驾驶部门,有数据统计,目前该公司在加州道路上的自动驾驶汽车有438辆,其中包括了不提供乘车服务的测试车辆。2023年全年度中,该公司的车辆在加州行驶了超过480万英里,超过360万英里是由安全驾驶员驾驶的,超过110万英里是完全无人驾驶的。 Waymo在事件发生后发表了完整声明:“2月6日,在旧金山第 17 街和密西西比街交叉口,我们的一辆车辆与一名骑自行车的人相撞。Waymo 车辆在一个四向交叉路口完全停了
[机器人]
制造成本降低,自动驾驶商业化提速破局在即
自动驾驶技术的发展迭代加速,成本高昂是制约其商业化落地的重要原因之一。近日,百度与禾赛科技合作,将Apollo Moon制造成本压缩到每辆48万元,较行业平均成本减少2/3,有望推动无人车商业化发展。 同时,以特斯拉、小鹏汽车为代表的车企自动驾驶系统商业化步伐不断加速。业内人士认为,除了整车硬件销售外,智能系统的商业化变现有望成为造车新势力未来持续性收入和利润的来源。 制造成本降低 6月17日,百度Apollo与极狐汽车共同发布了新一代共享无人车Apollo Moon。对于新车的定价虽然尚未公布,但百度副总裁、自动驾驶技术部总经理王云鹏表示,由于技术成熟以及可批量化生产的能力,Apollo Moon的整车成本约48万元/辆
[嵌入式]
特斯拉又双叒叕出车祸,这次撞警车!
有美国加州地方政府称一辆开启了 自动驾驶 系统Autopilot的 特斯拉 轿车撞上了一辆停着的巡警车,事发地点在美国南加州地区。   警官吉姆·科塔(Jim Cota)称,该起事故发生在加州拉古纳海滩地区,当时停着的巡警车内并没有警员,特斯拉司机受了轻伤。   该被撞警车是一辆SUV,其两个侧轮被撞到了人行旁道上,车体呈倾斜状。   特斯拉的半自动驾驶系统Autopilot在经过最近的几次事故后正在接受仔细审查。特斯拉表示,该Autopilot系统并不能避免撞车,并警告司机们不要完全依赖于这个自动驾驶系统。  
[嵌入式]
IBM要造无人驾驶巴士?“野心”即将上路
今夏,住在华盛顿的居民将会看到一种全新的交通工具——由 3D 打印的无人驾驶 巴士 。   近日, IBM  与美国亚利桑那一家名为 Local Motors 的汽车制造商合作,打造了一款搭载 IBM Waston(沃森)物联网技术的 自动驾驶 巴士Olli。   Olli 是一种可以部分回收的无人驾驶电动车,它由 Local Motors 开发,后者利用 IBM 沃森(Watson)认知学习软件来驱动汽车,这款软件的全名为「Watson Internet of Things for Automotive(沃森汽车物联网)」。     Olli 可搭载 12 人,是一辆小型公交车,该车搭载 30 多个传
[嵌入式]
一文看懂2017年自动驾驶,这份成绩单及格吗?
让我们一起来回顾自动驾驶车辆在2017年的几个重要发展… 随着越来越多自动驾驶车辆在今年上路,也有更多人开始注意这些车子,可以确定的是,它们不再是新鲜产物。 但这些自驾车在进行公开驾驶测试时也暴露了一些基本弱点,最重要的是,尽管它们具备严格遵守道路交通规则的能力,在理解与它们分享道路的人类驾驶行为方面,这些自驾车展现的天赋不高。或许如同Linley Group资深分析师Mike Demler所言:“你如何能把一个机器人编程为具备人类的常识?” 毋庸置疑,我们在2017年看到了几起被大肆宣传的、非致命的自动驾驶车辆事故。 在2016年由美国麻省理工学院(MIT) AgeLab与新英格兰汽车记者协会(New England M
[嵌入式]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved