路径规划(⼀):使⽤Matlab快速绘制栅格地图
⽬录
⼀、Matlab快速绘制栅格地图
声明:本⽂是学习古⽉居~后写的笔记,好记性不如烂笔头!⽅便⾃⼰⽇后的巩固与复习,这个教程讲的很⾼,值得推荐!
1、⼏种常⽤的地图形式:
1.1、尺度地图:
具有真实的物理尺度,如:栅格地图、特征地图、点云地图,常⽤于地图构建、定位、SLAM、⼩规模路径规划。
1.2、拓扑地图:
不具备真实的物理尺度,只表⽰不同地点的连接关系和距离,如铁路⽹。
1.3、语义地图:
加标签的尺度地图,常⽤于⼈机交互。
2、栅格地图⽤于路径规划的优势:
①、可以将任意形状轮廓的地图,⽤⾜够精细的栅格进⾏绘制;
②、每⼀个栅格,可以通过不同颜⾊表⽰不同含义,如⿊⾊代表障碍物、黄⾊代表起点、红⾊代表终点;
③、基于栅格地图进⾏路径规划有横、纵、斜三个规划⽅向。对应室内低速机器⼈可以完全按照路径⾏⾛;对于中⾼速机器⼈,可以
考虑将路径进⾏平滑处理,以适⽤于⾮完全约束系统。
3、matlab绘制栅格地图的核⼼函数及思想:
3.1、colormap函数:
为栅格地图创建⾃定义颜⾊。如黄⾊栅格代表起点、红⾊为终点。
3.2、sub2ind函数:
将⾏列索引转为线性索引。对于右图栅格地图,10⾏1列,⾏从左上⾓⾃上⽽下排序,列从左上⾓⾃左向右排序。
3.3、ind2sub函数:
与sub2ind相反,是将线性索引转为⾏列索引。
3.4、为了在栅格地图呈现随机障碍物的效果,可以设置障碍物出现频率数值,根据该数据在所有栅格中⽣成随机数,从⽽确定障碍物栅格。
3.5、image函数:
利⽤colormap建⽴的颜⾊图,将数组信息显⽰为图像。
4、具体例⼦:
4.1、利⽤Matlab快速绘制栅格地图matlab代码:
clc
clear
close all
%%构建颜⾊MAP图
cmap =[111;...%1-⽩⾊-空地
000;...%2-⿊⾊-静态障碍
100;...%3-红⾊-动态障碍
110;...%4-黄⾊-起始点
101;...%5-品红-⽬标点
010;...%6-绿⾊-到⽬标点的规划路径
011];%7-青⾊-动态规划的路径
%构建颜⾊MAP图
colormap(cmap);
%%构建栅格地图场景
%栅格界⾯⼤⼩:⾏数和列数
rows =10;
matlab生成随机数
cols =10;
%定义栅格地图全域,并初始化空⽩区域
field =ones(rows, cols);
%障碍物区域
obsRate =0.3;
obsNum =floor(rows*cols*obsRate);
obsIndex =randi([1,rows*cols],obsNum,1);
field(obsIndex)=2;
%起始点和⽬标点
startPos =2;
goalPos = rows*cols-2;
field(startPos)=4;
field(goalPos)=5;
%%画栅格图
image(1.5,1.5,field);
grid on;
set(gca,'gridline','-','gridcolor','k','linewidth',2,'GridAlpha',0.5);
set(gca,'xtick',1:cols+1,'ytick',1:rows+1);
axis image;
4.2、运⾏结构:
4.3、具体分析
1、
clc
clear
close all
clc:清除命令窗⼝的内容,对⼯作环境中的全部变量⽆任何影响close:关闭当前的Figure窗⼝
close all:关闭所有的Figure窗⼝
clear:清除⼯作空间的所有变量
clear all:清除⼯作空间的所有变量,函数,和MEX⽂件
2、⾃定义构建颜⾊MAP图
%%构建颜⾊MAP图
cmap =[111;...%1-⽩⾊-空地
000;...%2-⿊⾊-静态障碍
100;...%3-红⾊-动态障碍
110;...%4-黄⾊-起始点
101;...%5-品红-⽬标点
010;...%6-绿⾊-到⽬标点的规划路径
011];%7-青⾊-动态规划的路径
运⾏后会建⽴对应变量的MAP图值
3、colormap构建颜⾊MAP图
%构建颜⾊MAP图
colormap(cmap);
4、构建栅格地图场景:⼤⼩
%%构建栅格地图场景
%栅格界⾯⼤⼩:⾏数和列数
rows =10;
cols =10;
5、定义栅格地图全域,并初始化空⽩区域
%定义栅格地图全域,并初始化空⽩区域
field =ones(rows, cols);
将栅格图全设置为⽩⾊
6、障碍物区域
%障碍物区域
obsRate =0.3;
obsNum =floor(rows*cols*obsRate);
obsIndex =randi([1,rows*cols],obsNum,1);
field(obsIndex)=2;
obsRate = 0.3;%障碍物占⽐率
obsNum = floor(rows cols obsRate);%计算障碍物个数;
obsIndex = randi([1,rows*cols],obsNum,1);%随机设置障碍物得到障碍物的区域
7、起始点和⽬标点
起始点和⽬标点要定义在障碍物后⾯,不然可能会和障碍物冲突
%起始点和⽬标点
startPos =2;
goalPos = rows*cols-2;
field(startPos)=4;
field(goalPos)=5;
startPos = 2; &起点
goalPos = rows*cols-2;%终点
field(startPos) = 4; %起点为黄⾊
field(goalPos) = 5; %终点为红⾊
8、画栅格图
%%画栅格图
image(1.5,1.5,field);
grid on;set(gca,'gridline','-','gridcolor','k','linewidth',2,'GridAlpha',0.5); set(gca,'xtick',1:cols+1,'ytick',1:rows+1);
axis image;