首页 > 编程语言 >基于PRM(probabilistic roadmaps)算法的机器人路线规划算法matlab仿真

基于PRM(probabilistic roadmaps)算法的机器人路线规划算法matlab仿真

时间:2022-10-20 13:44:04浏览次数:78  
标签:roadmaps end PRM kj S1 S3 算法 jj S2

目录

一、理论基础

二、MATLAB仿真程序

三、仿真结果

一、理论基础

地图和机器人的模型如下:

 

 

 

1.使用一个2*2的网格大小(gridsize)和5度的角分辨率(angular resolution),创建机器人的构型空间(Configurationspace)。请简单说明,并输出构型空间的视图。
机器人的初始状态:坐标(0,45),90度

2.使用谈心搜索算法计算从(50,50)到(750, 250)的最短路径。请在图中标明并且输出最短路径的长度。

3.使用中轴变换计算最安全的路径(最安全的路径是指离墙最远的路径)。请在图中标明并且输出最短路径的长度。

4.使用PRM(probabilistic roadmaps)算法计算从(50,50)到(750, 250)的最短路径。分别使用50、100、500个样本点。请在图中标明并输出这些路径的长度。

使用一个2*2的网格大小(grid size)和5度的角分辨率(angular resolution),创建机器人的构型空间(Configuration space)。请简单说明,并输出构型空间的视图。

机器人的初始状态:坐标(0,45),90度

 

 

 

这里,如果按1*1的方格,算法将及其复杂,数据量极大,我们这里将网格进行分割。300*800的空间,分割为10*10一个方格。

PRM算法是通过对空间进行大量采样来构建路线图,用于后续的特定查询。路线图是无向连接图,车辆或机器人可以路线图上由任意一点移动到其他点。点与点连接线最简单的就是直线。路线图构建好之后可以采用经典的A*算法来搜索路径。PRM算法构建路线图过程如下所示。

 

 

 

二、MATLAB仿真程序

clc;
clear;
close all;
warning off;
addpath 'func\'
%转弯分辨率
ang = 5/180*pi;
W = 800;
H = 300;
K = 10;
Scale = max(W,H)/K;
[MAPs,Start,Ends,cc,MAPpoint] = func_wall(Scale,K);
%显示方格场景图
func_Map2fig(MAPs,Start,Ends,H/K,W,H,K);

S1 = Start;
S2 = 0;
S3 = inf;
S4 = [];
S5 = [];
Paths = ['R','L','D','U'];

%开始贪心算法搜索,
while ~max(ismember(S1,Ends))&&~isempty(S1)
[temp,kj] = min(S2+S3);
%搜索路径值用来判断往哪走
[path1,path2,path3] = func_search(S1(kj),S2(kj),MAPs,Ends);
S4 = [S4;S1(kj)];
S5 = [S5;S2(kj)];
%判决
if kj>1&&kj<length(S1)
S1=[S1(1:kj-1);S1(kj+1:end)];
S2=[S2(1:kj-1);S2(kj+1:end)];
S3=[S3(1:kj-1);S3(kj+1:end)];
else
S1=[S1(kj+1:end)];
S2=[S2(kj+1:end)];
S3=[S3(kj+1:end)];
end

for jj=1:length(path3)
if ~isinf(path1(jj))
if ~max([S1;S4]==path3(jj))
MAPpoint{path3(jj)}=Paths(jj);
S1 = [S1; path3(jj)];
S2 = [S2; path1(jj)];
S3 = [S3; path2(jj)];
elseif max(S1==path3(jj))
i=find(S1==path3(jj));
if S2(i)>path1(jj)
S2(i)=path1(jj);
S3(i)=path2(jj);
MAPpoint{S1(i)}=Paths(jj);
end
else i=find(S4==path3(jj));
if S5(i)>path1(jj)
S5(i)=path1(jj);
MAPpoint{S4(i)}=Paths(jj);
end
end
end
end
if isempty(S1)
break;
end
end

Pathss=func_check(Ends,MAPpoint);

figure(1);
plot(Pathss(:,1)+0.5,Pathss(:,2)+0.5-(W-H)/K,'color',[0 1 0],'LineWidth',2);
title('贪婪算法');
X=Pathss(:,1)+0.5;
Y=Pathss(:,2)+0.5-(W-H)/K;
%输出长度
d=0;
for i = 1:length(X)-1
d = d+K*sqrt((X(i)-X(i+1))^2 + (Y(i)-Y(i+1))^2);
end
d

三、仿真结果

 

 

 

 

 

 A16-73 

 

标签:roadmaps,end,PRM,kj,S1,S3,算法,jj,S2
From: https://www.cnblogs.com/matlabfpga/p/16809573.html

相关文章

  • 基于SIFT特征提取的图像拼接算法matlab仿真
    目录一、理论基础二、核心MATLAB程序三、MATLAB仿真测试结果一、理论基础SIFT算法得到了图像中的特征点以及相应的特征描述,如何把两张图像中的特征点匹配起来呢?一般的......
  • 数据驱动的算法工程落地!
    导读:随着科技浪潮的演进,数据已然成为第五大生产要素,越来越多的企业开启数字化转型,然而目前企业的现状却是数据人才的储备远远不足,学生却求职内卷,所学与企业具体生产环境匹配......
  • 图像去模糊算法代码实践!
    作者:陈信达,上海科技大学,Datawhale成员1.起源:GAN结构与原理在介绍DeblurGANv2之前,我们需要大概了解一下GAN,GAN最初的应用是图片生成,即根据训练集生成图片,如生成手写数字图像......
  • 代码随想录算法训练营第八天 | 344.反转字符串 541. 反转字符串II 剑指Offer 05.替
    344.反转字符串对字符串的基本操作。双指针一个指头一个指尾,交换后向中间移动即可。对于考察基本操作的题目,不要使用库函数。交换操作,如果需要自己实现,有两种办法,一是使......
  • 都是推荐系统,广告算法和推荐算法有啥区别?
     Datawhale干货 作者:知乎KingJames,伦敦国王大学导读:广告和推荐算法的技术框架比较相似,却在很多公司中分属两个团队,两者的区别在哪里?这里从两者在实际业务中运用的角度,聊......
  • 通俗易懂谈强化学习之Q-Learning算法实战
     Datawhale干货 作者:KingJames,伦敦国王大学前言:上篇介绍了什么是强化学习,应大家需求,本篇实战讲解强化学习,所有的实战代码可以自行下载运行。本篇使用强化学习领域经典的P......
  • #1369 : 网络流一·Ford-Fulkerson算法 模板题
    ​​http://hihocoder.com/problemset/problem/1369?sid=1108721​​别人都说先学网络流再学二分图,但是我先学了二分图的,感觉网络流好高端啊。首先对于原图,e[u][v],找到一条......
  • 算法 - 线段树学习笔记
    前言:此文章为线段树基础知识可供学习参考咳咳,进入正题:我们在做题的时候可能会遇到给定一个数组同时给出一个值进行修改或是区间性的操作这里以单点修改和区间查询......
  • 排序算法
    排序算法一、简介sort排序是计算机中重要的一种操作,作用是讲一个数据元素重新排列成一个有序的序列。排序算法在数据结构中相当重要。二、算法复杂度1.时间复杂度时间......
  • 优化算法|MOAVOA:一种新的多目标人工秃鹰优化算法(Matlab代码实现)
    ......