资源简介
RRT_MATLAB程序(带中文注释),在matlab2015运行可行,中文注释自己写的

代码片段和文件信息
%% 简单的RRT算法
%% 初始化
map=im2bw(imread(‘map2.bmp‘)); % bmp无损压缩图像500x500im2bw把灰度图转换成二值图像01
source=[10 10]; % 起始点位置
goal=[490 490]; % 目标点位置
stepsize=20; % RRT每步步长
disTh=20; % 直到qnearest和目标点qgaol距离小于一个阈值
maxFailedAttempts = 10000; % 最大尝试次数
display=true; % RRT是否展示
%% %%%% 参数 %%%%%
tic; % 保存当前时间
if ~feasiblePoint(sourcemap) error(‘source lies on an obstacle or outside map‘); end
if ~feasiblePoint(goalmap) error(‘goal lies on an obstacle or outside map‘); end
if display imshow(map);rectangle(‘position‘[1 1 size(map)-1]‘edgecolor‘‘k‘); end %展示图像,并创建带有尖角的矩形边框
RRTree=double([source -1]); % RRT 从起点开始(索引为-1),经过的结点和索引
failedAttempts=0; % 已经尝试失败的次数
counter=0; % 循环计数
pathFound=false; % 是否找到路径的flag
while failedAttempts<=maxFailedAttempts % RRT循环
if rand < 0.5
sample=rand(12) .* size(map); % 50%几率随机采点
else
sample=goal; % 50%几率向目标前进
end
% 每一个分支都会继续分支
[A I]=min( distanceCost(RRTree(:1:2)sample) []1); % 发现结点和随机采样点最小距离的一行,并返回对应索引[]1可以去掉
closestNode = RRTree(I(1)1:2); %树结点最近点坐标,最近点可能多个(1)不可取
theta=atan2(sample(1)-closestNode(1)sample(2)-closestNode(2)); % 产生新结点的方向
newPoint = double(int32(closestNode(1:2) + stepsize * [sin(theta) cos(theta)])); % 产生新结点,先计算纵坐标,再计算横坐标
if ~checkPath(closestNode(1:2) newPoint map) % 检测最近结点到新结点的路径是否可行
failedAttempts=failedAttempts+1;
continue;
end
if distanceCost(newPointgoal) [A I2]=min( distanceCost(RRTree(:1:2)newPoint) []1); % 检测检点是否已经存在树结点中
if distanceCost(newPointRRTree(I2(1)1:2)) RRTree=[RRTree;newPoint I(1)]; % 将新结点介入到如结点中
failedAttempts=0;
% 每扩展一个新结点,画一条线
if display
line([closestNode(2);newPoint(2)][closestNode(1);newPoint(1)]);
counter=counter+1;M(counter)=getframe;
end
end
% 补充最后一个新结点和终点的连线
if display && pathFound
line([closestNode(2);goal(2)][closestNode(1);goal(1)]);
counter=counter+1;M(counter)=getframe;
end
if display
disp(‘click/press any key‘);
waitforbuttonpress;
end
if ~pathFound error(‘no path found. maximum attempts reached‘); end
%% 重现原轨迹
path=[goal];
prev=I(1);
while prev>0
path=[RRTree(prev1:2);path];
prev=RRTree(prev3);
end
pathLength=0;
for i=1:length(path)-1 pathLength=pathLength+distanceCost(path(i1:2)path(i+11:2)); end
fprintf(‘processing time=%d \nPath Length=%d \n\n‘ tocpathLength); % 打印运行时间toc和路径长度
imshow(map);rectangle(‘position‘[1 1 size(map)-1]‘edgecolor‘‘k‘);
line(path(:2)path(:1));
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3037 2019-01-07 20:41 RRT\RRT\astart.m
文件 620 2019-01-07 16:36 RRT\RRT\checkPath.m
文件 123 2019-01-07 15:53 RRT\RRT\distanceCost.m
文件 258 2019-01-07 15:11 RRT\RRT\feasiblePoint.m
文件 251078 2014-06-06 15:35 RRT\RRT\map1.bmp
文件 251078 2014-06-06 15:35 RRT\RRT\map2.bmp
文件 251078 2014-06-06 15:35 RRT\RRT\map3.bmp
文件 251078 2014-06-06 15:35 RRT\RRT\map4.bmp
文件 251078 2014-06-06 15:35 RRT\RRT\map5.bmp
文件 210658 2014-06-06 15:35 RRT\RRT\RRT.pdf
目录 0 2019-01-07 20:55 RRT\RRT
目录 0 2019-01-07 10:36 RRT
----------- --------- ---------- ----- ----
1470086 12
- 上一篇:牛顿——拉夫逊潮流计算的matlab程序
- 下一篇:基于Matlab实现的DES加密
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- Dstar(动态路径规划)算法62845
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
评论
共有 条评论