首页 > 其他分享 > 使用Matlab构建二维栅格地图

使用Matlab构建二维栅格地图

时间:2023-01-23 23:44:07浏览次数:35  
标签:10 障碍物 地图 cols 栅格 二维 Matlab ...

常使用的地图一般有以下几种:

  • 尺度地图:具有真实的物理尺寸,如栅格地图、特征地图、点云地图、常用于地图构建、定位、SLAM、小规模路径规划
  • 拓扑地图:不具备真实的物理尺寸,只表示不同地点的连通关系和举例,如铁路网
  • 语义地图:加标签的尺度地图,常用于人机交互

我们在进行一些算法研究的时候通常使用的都是栅格地图:

栅格地图用于路径规划的优势:

  • 可以将任意形状轮廓的地图,用足够精细的栅格进行绘制;
  • 每一个栅格,可以通过不同颜色表征不同含义,如黑色代表障碍物、黄色代表起点、红色代表终点。
  • 基于栅格地图进行路径规划有横、纵、斜三个规划方向,对于室内低速机器人可以完全按照规划路径行走;对于中高速机器人,可以考虑将规划路径进行平滑处理,以适用于非完全约束系统。

使用Matlab绘制栅格地图的几个常用函数及思想:

为了在栅格地图呈现随机障碍物的效果,可以设障碍物出现频率数值,根据该数据在所有栅格中生成随机数,从而确定障碍物栅格。

  • colormap:为栅格地图创建自定义颜色。如黄色栅格代表起点、红色栅格代表终点、黑色栅格代表障碍物。

  • sub2id:将行列索引转为线性索引。对于右图栅格地图,10行10列,行从左上角自上而下排序,列从左上角自左而右排序。相反ind2sub则将线性索引转为行列索引。

  • image:利用colormap建立的颜色图,将数组信息显示为图像。

    image(x,y,C) 指定图像位置。使用 x 和 y 可指定与 C(1,1) 和 C(m,n) 对应的边角的位置。要同时指定两个边角,请将 x 和 y 设置为二元素向量。要指定第一个边角并让 image 确定另一个,请将 x 和 y 设为标量值。图像将根据需要进行拉伸和定向。

  • randi: X = randi([imin,imax],n,m) 生成一个值在imin和imax之间的n行m列的均匀分布的整数矩阵

    >> randi([1,10], 5,5)
    
    ans =
    
         8    10     9     4     4
         3     6     3     2     9
         6     2     9     3     6
         7     2     3     7     6
         9     3    10     5    10
    
    >> 
    

源代码:

clc;
clear;
close all;


%% 构建颜色MAP图
% n行3列,3列表示颜色
% 构建地图的过程中需要多少中颜色就定义多少行
cmap = [1 1 1; ...       % 1-白色-空地: 白色的代表数字是1,我们让它表示空地
    0 0 0; ...           % 2-黑色-静态障碍
    1 0 0; ...           % 3-红色-动态障碍
    1 1 0;...            % 4-黄色-起始点 
    1 0 1;...            % 5-品红-目标点
    0 1 0; ...           % 6-绿色-到目标点的规划路径   
    0 1 1];              % 7-青色-动态规划的路径

% 构建颜色MAP图
colormap(cmap);

%% 构建栅格地图场景
rows = 10;  % 行数
cols = 15;  % 列数

% 定义栅格地图全域,并初始化空白区域, 因为数字全部都是1(我们定义了白色表示空地)
field = ones(rows,cols);

% 障碍物
obsRate = 0.3; % 障碍物出现的频率
obsNum = floor(rows*cols*obsRate);  % 障碍物的个数
obsIndex = randi([1,rows*cols],obsNum,1); % 生成所有障碍物的索引(注意是一维索引)
field(obsIndex) = 2;  % 将生成的位置的值设为2表示静态障碍

% 定义起点和终点(之所以放在生成障碍物后面,是为了防止随机生成的障碍物把起点或者终点覆盖)
startPos = 3;
goalPos = rows*cols - 3;
field(startPos) = 4;  % 将起始点设置为4,黄色
field(goalPos) = 5;   % 将终点设置为5,品红色

%% 根据cmap和field矩阵绘制栅格图
image(1.5,1.5,field);  % 如果我们之前没有构建颜色map图,那么1个数值就直接表示1个像素的颜色值
grid on;  % 开启网格线
set(gca,'gridline','-','gridcolor','k','linewidth',2,'GridAlpha',0.5); % 将网格改成实线,颜色改成黑色,线宽为2,透明度为0.5
set(gca,'xtick',1:cols+1,'ytick',1:rows+1);  % 设置坐标的刻度
axis image; % 	沿每个坐标区使用相同的数据单位长度,并使坐标区框紧密围绕数据。

运行结果:

标签:10,障碍物,地图,cols,栅格,二维,Matlab,...
From: https://www.cnblogs.com/junlin623/p/17065665.html

相关文章