航迹规划 matlab,Matlab航迹规划仿真——Grid栅格详解

Matlab航迹规划仿真——OBG栅格详解

文章目录

章节简介

OBG地图导入

Robotics BOG map构建

构建空白BOG地图

填充栅格

方式1:“小”栅格

方式2:“大”栅格

方式3:从导入图片生成BOG地图

获取地图数据

方式1:判断“word”栅格是否被占用

方式2:判断“row,cols”栅格是否被占用

其他文献

章节简介

本章介绍在Matlab ROS仿真中如何建造**BOG(Binary Occupancy Grid)**地图,之前有用过其他栅格地图,但是直接导入到simulation中总是报错,而simulation中仅仅提供了几个简单的Map:'simpleMap' (default), 'emptyMap', 'borderMap', or 'complexMap',由于想自己测试程序在多种地图下的运行情况(纯属闲的蛋疼)。在百度搜了下貌似没有相关的内容,那我就义不容辞的来填坑咯~~~

OBG地图导入

地图导入使用函数ExampleHelperRobotSimulator,同时该函数也是开始仿真的开始,一旦调用该函数,记得调用完使用命令‘rosshutdown’来关闭仿真,要不再次运行时会出错,有提示要运行‘rosshutdown’。该函数可以导入指定的地图**‘simpleMap’ (default), ‘emptyMap’, ‘borderMap’, or ‘complexMap’**,也可以导入自己的BOG地图,先来看下函数的使用方法:

OBJ = ExampleHelperRobotSimulator(MAPNAME)

MAPNAME指导入地图的名字,一定要是字符串,可选则:‘simpleMap’ (default), ‘emptyMap’, ‘borderMap’, or ‘complexMap’

OBJ = ExampleHelperRobotSimulator(MAPNAME,MAPRESOLUTION)

MAPNAME指导入地图的名字,一定要是字符串,可选则:‘simpleMap’ (default), ‘emptyMap’, ‘borderMap’, or ‘complexMap’,MAPRESOLUTION指地图的分辨率,默认分辨率为2栅格/米,就是一个栅格0.5m。

OBJ = ExampleHelperRobotSimulator(BOG)

BOG指需要导入的自己设计的BOG地图,一定要是这个格式的地图,要不报错,下面会详细讲解如何构建BOG地图。

如果想看更多更详细的介绍,直接在Matlab中输入help ExampleHelperRobotSimulator,自己懒得看的可以继续看我吹水~

Robotics BOG map构建

主要思想就是创建一个空白栅格地图,然后往地图里面填充障碍物。

构建空白BOG地图

map = robotics.BinaryOccupancyGrid(10,10,10);`

前两个参数是栅格地图的长和宽,第三个参数是地图的分辨率,即将小栅格又分成多个小格子。感兴趣的可以看下Matlab的官方文档,里面有更详细的解释说明。

填充栅格

填充栅格主要用setOccupancy函数,为了区分两种填充方式的区别,我将分辨率设置为10,也就是每一个栅格又分为10个小栅格。

方式1:“小”栅格

setOccupancy(MAP, XY, VAL),MAP是上面生成的地图,XY是需要填充的栅格位置,需要与方式2中的IJ区别,IJ指的是生成地图中的行和列。该方法显示出来的点只占一个栅格的1/100,看起来障碍物就比较“小”

% set point as obstacle

occval = fix(1+9*rand(5,2));

setOccupancy(map occval)

grid = map

show(map)

效果图如下:

%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20201112165446.png

方式2:“大”栅格

setOccupancy(MAP, IJ, VAL, 'grid')

借助meshgrid函数填充栅格,meshgrid函数的用法就不再说了,想了解的自己去查查。这种方法生成的栅格比较“大”。IJ指的是生成地图中的行和列,这里的行列指的是按分辨率来算的行列,从左上角开始,I代表行,J代表列。

% set block as obstacle ,rows,cols

[x,y] = meshgrid(1:5,1:10)

setOccupancy(map, [x(:) y(:)], 1, "grid")

grid = map

show(map)

效果图如下:

%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20201112165530.png

方式3:从导入图片生成BOG地图

%% Robotics BOG map

% Generate map from a photo

% Import Image

image = imread(x);

image = imresize(image,[50,50]);

% Convert to grayscale and then black and white image based on arbitrary

% threshold.

grayimage = rgb2gray(image);

bwimage = grayimage < 0.5;

% Use black and white image as matrix input for binary occupancy grid

grid = robotics.BinaryOccupancyGrid(bwimage);

show(grid)

效果图如下:

%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20201112165556.png

获取地图数据

使用函数getOccupancy来判断栅格是否被占用

方式1:判断“word”栅格是否被占用

occval = getOccupancy(map,xy)

返回世界坐标输入数组xy的占用值数组。 xy的每一行都是地图上的一个点,表示为[x y]坐标。occval与xy和单列数组的长度相同。 栅格被占用表示为真(1),空闲表示为假(0)。

方式2:判断“row,cols”栅格是否被占用

occval = getOccupancy(map,ij,"grid")

基于行列坐标,输入数组ij的占用值数组。ij指的是生成地图中的行和列,这里的行列指的是按分辨率来算的行列,从左上角开始,i代表行,j代表列。函数返回值为栅格的占用值。栅格被占用表示为真(1),空闲表示为假(0)。

其他文献

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值