机器人路径规划之栅格地图(一)

什么是栅格地图

栅格地图:即以机器人出生点为中心,x轴和y轴的分辨率为单个格子大小,当x轴分辨率=y轴分辨率时,则每个格子为一个正方形,分辨率越小则表示地图精度越高,比如一个格子大小为1cm × 1cm,那么机器人定位精度就是1cm。可以想象成一个巨大的网把一个地面罩住,网面碰到东西则认为是障碍物/墙,没有碰到障碍物则可以认为是空地。

那么每个格子如何区分自己的状态是障碍物/墙,还是空地呢?这里可以赋予每个格子不同的值,比如0代表空地,1代表墙。这个值的内容也可以扩展,比如2代表已经走过,3代表未被走过等等。

基于matlab构建栅格地图

% MATLAB 绘制栅格地图的核心函数和思想
% colormap:为栅格地图创建自定义颜色。如黄色栅格代表的起点,红色栅格代表的终点,黑色栅格代表的障碍物
% sub2ind:将行列索引转为线性索引  ind2sub:将线性索引转为行列索引
% image:利用colormap建立的颜色图,将数组信息显示为图像

clc
clear
close all

cmap = [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 = 20;

% 定义栅格地图的全域,并初始化空白地图
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;

这样生成出来的栅格地图是10*20随机障碍物的,满足我们在这个地图上验证路径规划算法

在这里插入图片描述
在C语言中验证算法时,可以用二维数组承接这个field矩阵中的数据

/*
 *	1-白色-空地
 *	2-黑色-静态障碍
 *	3-红色-动态障碍
 *	4-黄色-起始点
 *	5-品红-目标点
 *	6-绿色-到达目标点的规划路径
 *	7-青色-动态规划的路径
 */
const int kRows = 10;
const int kCols = 20;
uint8_t mymap[kRows][kCols] = {
{1,	1	,1,	1,	1	,1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	2,	2,	1,	1,	2},
{4,	1	,1,	2,	1	,1,	1,	1,	1,	1,	1,	1,	1,	2,	2,	2,	1,	1,	2,	2},
{1,	1	,1,	2,	1	,1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	2,	1,	2,	2},
{1,	1	,2,	1,	1	,1,	2,	1,	1,	1,	1,	1,	1,	1,	1,	2,	1,	1,	2,	1},
{1,	1	,1,	2,	2	,1,	1,	1,	2,	1,	1,	1,	1,	1,	1,	1,	2,	1,	1,	2},
{1,	1	,2,	1,	1	,2,	1,	1,	1,	1,	1,	1,	1,	2,	1,	1,	1,	1,	1,	1},
{2,	1	,1,	1,	1	,1,	1,	2,	1,	1,	1,	1,	2,	1,	1,	1,	1,	1,	2,	1},
{2,	1	,1,	2,	1	,1,	1,	1,	2,	2,	1,	2,	1,	1,	1,	1,	1,	1,	1,	5},
{1,	1	,2,	1,	1	,1,	2,	2,	1,	1,	1,	1,	1,	2,	2,	2,	1,	1,	1,	1},
{2, 2	,1,	1,	1	,1,	1,	1,	2,	2,	2,	1,	2,	1,	1,	2,	2,	1,	1,	1},
};
  • 13
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值