本篇文章基于MATLAB导航工具箱的官方文档,详情参考A* 网格地图路径规划器 - MATLAB - MathWorks 中国
目录
1 状态验证器的意义
状态验证器是来验证状态空间中的某个位置是否被占用,也就是平常我们所说的这个点是不是在空区域,在障碍物外。
2 validatorOccupancyMap
validator=validatorOccupancyMap;%第一种
validator=validatorOccupancyMap(stateSpace);%第二种
validator=validatorOccupancyMap(stateSpace,Name,Value);%第三种
这是基于二维网格图的验证器,还有其他类型的验证器,本篇文章就以这个验证器为例,其他的验证器的操作都是类似的
第一种默认使用SE2状态空间
第二种自己选择预定义的状态空间或自定义空间
第三种进行属性的设置
StateSpace:可以设置为stateSpaceSE2(默认),stateSpaceDubins,stateSpaceReedsShepp
Map:默认是宽度和高度都是10m的网格地图,每米一个网格
ValidationDistance:代表状态空间下采样的间隔
对象函数
isStateValid:输入状态验证器和状态值组成的矩阵,得到每个状态的布尔值
path = [2 2 pi/2; 10 15 0; 17 8 -pi/2];
validator = validatorOccupancyMap;
isValid = isStateValid(validator,path)
isMotionValid:输入状态验证器和初始状态值组成的矩阵和末状态值组成的矩阵,得到初末状态之间的离散路径是否有效,若无效返回最后一个有效点
startStates=[1,1,pi];endStates=[5,5,-pi];
validator = validatorOccupancyMap;
[isPathValid, lastValid] = isMotionValid(validator,startStates(1,:),endStates(1,:));
3 举例
load exampleMaps.mat
map = occupancyMap(simpleMap);
show(map)
path = [2 2 pi/2; 10 15 0; 17 8 -pi/2];
hold on
plot(path(:,1),path(:,2),"--o");
validator = validatorOccupancyMap(stateSpaceSE2);
validator.Map = map;
validator.ValidationDistance = 0.1;
startStates = [path(1,:);path(2,:)];
endStates = [path(2,:);path(3,:)];
for i = 1:2
[isPathValid, lastValid] = isMotionValid(validator,startStates(i,:),endStates(i,:));
if ~isPathValid
plot(lastValid(1),lastValid(2),'or')
end
end
hold off