matlab练习程序(快速搜索随机树RRT)
RRT快速搜索随机树英文全称Rapid-exploration Random Tree,和PRM类似,也是一种路径规划算法。
和PRM类似,算法也需要随机撒点,不过不同的是,该算法不是全局随机撒点,而是一次撒一个点,然后判断当前搜索树与随机点距离,然后找到搜索树距离随机点最近的节点,向该随机点方向扩展。这里随机点有一定的概率是终点,所以搜索树最终是能够到达终点的。
算法流程如下:
1. 首先确定地图与起始结束点位置,设置搜索树,这里定义了一个随机点列表和一个随机点索引前驱列表代表搜索树。
2. 随机撒一个点,该点有可能是最终点,也有可能是全局中的一个随机点,设为nextp。
3. 找到搜索树中距离nextp最近的节点,从该节点向nextp方向扩展step距离,生成新的路径。
4. 判断新生成的路径是否通过障碍物或者该路径已经被搜索过,如果都没有则该路径加入到搜索树中,否则重新生成随机点。
5. 不断循环直到搜索树最终节点距离终点小于一定阈值,搜索结束,根据前驱列表画出搜索路径。
matlab代码如下:
main.m:
clear all;
close all;
clc; img = imread('map.png'); %空间地图
imshow(img);
hold on; [h,w]=size(img);
p=ginput(); %选取起始与结束位置
plot(p(:,),p(:,),'r.'); pc = p(,:); %随机节点列表
step = ; %随机扩展步长
parent = ; %所有节点前驱,初始节点前驱为自己 while norm(pc(end,:)-p(,:))>step %搜索到距离结束节点一定距离停止 if rand()<0.3 %按30%概率随机搜索,%概率朝着结束位置搜索
nextp = [rand()*h rand()*w];
else
nextp = p(,:);
end diff = repmat(nextp,length(pc(:,)),)-pc; %计算节点树与待搜索节点距离
[~,ind] = min(sqrt(diff(:,).^+diff(:,).^)); %找到距离带搜索节点最小的节点树节点 direct = atan2(nextp()-pc(ind,),nextp()-pc(ind,));
sin_dir = sin(direct);
cos_dir = cos(direct); newp = pc(ind,:) + step*[sin_dir cos_dir]; %向着待搜索节点方向扩展节点树 isobs = check_obs(img,newp,pc(ind,:)); %判断该路径是否有障碍物 if isobs== %有障碍物重新搜索
continue;
end diff = repmat(newp,length(pc(:,)),)-pc; %判断该路径是否已搜索过,如果已搜索过,则重新搜索
if min(sqrt(diff(:,).^+diff(:,).^))<sqrt(step)
continue;
end pc=[pc;newp]; %将新节点加入节点树
parent = [parent;ind]; %设置新节点的前驱 line([pc(ind,) pc(parent(ind),)],[pc(ind,) pc(parent(ind),)]);
end line([pc(ind,) p(,)],[pc(ind,) p(,)],'color','r');
ind = length(pc);
while ind~=
ind = parent(ind); %不断搜索当前节点的父节点
line([pc(ind,) pc(parent(ind),)],[pc(ind,) pc(parent(ind),)],'color','r');
end
check_obs.m:
function isobs = check_obs(img,p1,p2)
[h w]=size(img);
d = norm(p1-p2);
direct = atan2(p1()-p2(),p1()-p2());
sin_dir = sin(direct);
cos_dir = cos(direct);
for r=:d
p = floor(p2 + r*[sin_dir cos_dir]); y = p();
x = p();
if y>= && y<=h && x>= && x<=w
if img(y,x) ==
isobs = ;
return;
end
end
end
isobs = ;
end
结果如下:
原图:

算法结果:

matlab练习程序(快速搜索随机树RRT)的更多相关文章
- [matlab] 7.快速搜索随机树(RRT---Rapidly-exploring Random Trees) 路径规划
RRT是一种多维空间中有效率的规划方法.它以一个初始点作为根节点,通过随机采样增加叶子节点的方式,生成一个随机扩展树,当随机树中的叶子节点包含了目标点或进入了目标区域,便可以在随机树中找到一条由从初始 ...
- [python] RRT快速拓展随机树
""" version1.1,2018-05-09 <基于智能优化与RRT算法的无人机任务规划方法研究>博士论文 <基于改进人工势场法的路径规划算法研究 ...
- 「干货」面试官问我如何快速搜索10万个矩形?——我说RBush
「干货」面试官问我如何快速搜索10万个矩形?--我说RBUSH 前言 亲爱的coder们,我又来了,一个喜欢图形的程序员,前几篇文章一直都在教大家怎么画地图.画折线图.画烟花,难道图形就是这样嘛,当 ...
- 011.Adding Search to an ASP.NET Core MVC app --【给程序添加搜索功能】
Adding Search to an ASP.NET Core MVC app 给程序添加搜索功能 2017-3-7 7 分钟阅读时长 作者 本文内容 1.Adding Search by genr ...
- python 全栈开发,Day115(urlencode,批量操作,快速搜索,保留原搜索条件,自定义分页,拆分代码)
今日内容前戏 静态字段和字段 先来看下面一段代码 class Foo: x = 1 # 类变量.静态字段.静态属性 def __init__(self): y = 6 # 实例变量.字段.对象属性 # ...
- 微信小程序快速开发
微信小程序快速开发 一.注册小程序账号,下载IDE 1.官网注册https://mp.weixin.qq.com/,并下载IDE. 2.官方文档一向都是最好的学习资料. 注意:1)注册账号之后会有一个 ...
- WOX快速搜索
WOX wox和mac上的Aflred类似,虽然在功能上稍有逊色,但是还是可以给我们使用windows电脑带来很多福利.首先你不需要在桌面放一堆应用软件的快捷方式,桌面可以非常干净整洁,想要打开某个应 ...
- vue+uni-app商城实战 | 第一篇:【有来小店】微信小程序快速开发接入Spring Cloud OAuth2认证中心完成授权登录
一. 前言 本篇通过实战来讲述如何使用uni-app快速进行商城微信小程序的开发以及小程序如何接入后台Spring Cloud微服务. 有来商城 youlai-mall 项目是一套全栈商城系统,技术栈 ...
- 借助Mac自带的强大的搜索功能,如何快速搜索打开Tuxera Disk Manager
现在很多小伙伴们在遇到Mac读写NTFS格式硬盘问题的时候,都会选择使用Tuxera NTFS这个磁盘读写工具.因为这款读写工具不仅可以帮助我们进行读写工作,还具有一个磁盘管理工具Disk Manag ...
随机推荐
- vim功能之替换和查找
vim有着强大的替换和查找功能,若能进行熟练的运用,可以让工作效率得到一个很大程度的提高. 替换 语法:[addr]s/源字符串/目的字符串/[option] [addr]表示检索范围,如: &quo ...
- elk单机安装部署
es 下载地址:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.0-linux-x86_64.t ...
- GO 空白标识符 _
空白标识符 _ 也被用于抛弃值,如值 5 在:_, b = 5, 7 中被抛弃. _ 实际上是一个只写变量,你不能得到它的值.这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用 ...
- 十 Spring的AOP的底层实现:JDK动态代理和Cglib动态代理
SpringAOP底层的实现原理: JDK动态代理:只能对实现了接口的类产生代理.(实现接口默认JDK动态代理,底层自动切换) Cglib动态代理(类似Javassist第三方的代理技术):对没有实现 ...
- ubuntu---CUDA 安装注意点总结
安装CUDA前的基础准备: 1.查看内核.gcc版本并记住. 最好 禁止内核更新,以防止以后工作中意外的系统更新使内核自动更新了,与驱动版本不兼容了. 2.禁用 nouveau驱动. 3.多下 ...
- 五、linux基础-shell机制
5.1 shell机制1.Linux命令程序员可以看懂,但是操作系统是不懂这句话的含义的.因为所有的命令必须重新被解释然后传递给Linux内核才可以执行.这一被解释的机制就是shell. Linux命 ...
- nacos 日志问题 ERR-CODE: [NACOS-0002], Type: [环境问题]
nacos配置中心配置后,项目启动正常,运行项目也正常,但是总是打印如下日志: 2019-10-11 15:44:09.792 [com.alibaba.nacos.client.Worker.lon ...
- 浅谈PHP组件、框架以及Composer
本篇文章主要介绍了PHP组件.框架以及Composer,具有一定的学习价值,感兴趣的朋友可以了解一下. 什么是组件 组件是一组打包的代码,是一系列相关的类.接口和Trait,用于帮助我们解决PHP应用 ...
- 使用 JvisualVM 监控 spark executor
使用 JvisualVM,需要先配置 java 的启动参数 jmx 正常情况下,如下配置 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmx ...
- c++ char* 与LPCTSTR相互转化
] = "wo shi ni baba"; , , ch, -, NULL, ); wchar_t *wide = new wchar_t[num]; MultiByteToWid ...