资源简介
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加密
相关资源
- Pattern Recognition and Machine Learning(高清
- MATLAB 编程 第二版 Stephen J. Chapman 著
- 均值滤波和FFT频谱分析Matlab代码
- 《MATLAB扩展编程》代码
- HDB3码、AMI码的MATLAB实现
- 3点GPS定位MATLAB仿真
- MATLAB数字信号处理85个实用案例精讲入
- matlab从入门到精通pdf94795
- 欧拉放大论文及matlab代码
- 跳一跳辅助_matlab版本
- 全面详解LTE MATLAB建模、仿真与实现
- MIMO-OFDM无线通信技术及MATLAB实现_孙锴
- MATLAB Programming for Engineers 4th - Chapman
- matlab 各种谱分析对比
- 分数阶chen混沌matlab程序
- 基于粒子群算法的非合作博弈的matl
- MATLAB车流仿真 包括跟驰、延误
- matlab空间桁架计算程序
- 基于MATLAB的图像特征点匹配和筛选
- DMA-TVP-FAVAR
- GPS信号的码捕获matlab代码.7z
- 一维光子晶体MATLAB仿真代码吸收率折
- newmark法源程序
- 传统关联成像、计算鬼成像matlab
- pri传统分选算法
- 摆动滚子推杆盘形凸轮设计
- 医学图像重建作业matlab源码
- Matlab实现混沌系统的控制
- 检测疲劳驾驶
- Matlab锁相环仿真-Phase Locked Loop.rar
评论
共有 条评论