主要内容

vehicleCostmap

Costmap代表规划车辆周围的空间

描述

vehicleCostmap对象创建一个costmap代表车辆周围的规划搜索空间。costmap持有关于环境的信息,如障碍或区域,车辆不能遍历。检查碰撞,costmap使用通货膨胀中指定半径膨胀的障碍CollisionChecker财产。使用costmap路径规划算法,如pathPlannerRRT,找到车辆跟随的无碰撞路径。

costmap存储为一个二维网格的细胞,通常被称为一个占用网格入住率地图。costmap中的每个网格单元有一个值在[0,1]代表浏览,网格单元的成本。每个网格单元的状态免费的,被占领的,或未知的决定的FreeThresholdOccupiedThreshold属性。

下图显示了一个costmap样品成本和网格单元的状态。

costmap示例。中间网格单元是深红色,0.9的成本。这个单元格代表一个障碍。周围的细胞障碍灯是红色,0.8的成本。这些细胞代表的区域。周围的细胞膨胀区域是灰色和成本为0.4。这些细胞有未知状态。细胞的角落costmap是白人,有一个0.2的成本。这些细胞有一个自由州。

创建

描述

costmap = vehicleCostmap (C)创建一个汽车使用成本值costmap矩阵C

costmap = vehicleCostmap (mapWidth,mapLength)创建一个车辆costmap代表的宽度mapWidth和长度mapLength在国际单位。缺省情况下,每个网格单元处于未知状态。

例子

costmap = vehicleCostmap (mapWidth,mapLength,costVal)也分配一个默认的成本,costVal网格中的每个单元格。

costmap = vehicleCostmap (occMap)创建一个车辆costmap入住率的地图occMap。使用这种语法需要导航工具箱™。

costmap = vehicleCostmap (___“MapLocation”,mapLocation)指定在mapLocationcostmap角落左下角坐标。指定MapLocation, MapLocation后的任何前输入和以任何顺序名称,值对参数。

costmap = vehicleCostmap (___,名称,值)使用名称,值对指定的参数FreeThreshold,OccupiedThreshold,CollisionChecker,CellSize属性。例如,vehicleCostmap (C ' CollisionChecker ccConfig)使用一个inflationCollisionChecker对象,ccConfig,代表车辆形状和检查碰撞。创建对象后,您可以更新除了所有这些属性CellSize

输入参数

全部展开

成本值,指定为一个矩阵的值在[0,1]。

当创建一个vehicleCostmap对象,如果不指定C或一个统一的成本价值,costVal每个网格单元,那么默认的成本价值(FreeThreshold+OccupiedThreshold)/ 2

数据类型:|

costmap宽度,在世界单位,指定为一个积极的真正的标量。

costmap的长度,在世界单位,指定为一个积极的真正的标量。

统一的成本价值应用于所有细胞costmap,指定为一个真正的标量在区间[0,1]。

当创建一个vehicleCostmap对象,如果不指定costVal或成本价值矩阵,C每个网格单元,那么默认的成本价值(FreeThreshold+OccupiedThreshold)/ 2

入住率地图,作为一个指定occupancyMap(导航工具箱)binaryOccupancyMap(导航工具箱)对象。使用这个参数需要导航的工具箱。

Costmap位置,指定为一个双元素实值向量的形式mapXmapY]。这个向量指定的坐标位置costmap左下侧的角落。

例子:“MapLocation”, [8]

属性

全部展开

阈值低于一个网格单元是免费的,指定为一个真正的标量在区间[0,1]。

一个网格单元与成本c可以有一个这样的国家:

  • 如果c<FreeThreshold网格单元的状态免费的

  • 如果cFreeThresholdcOccupiedThreshold网格单元的状态未知的

  • 如果c>OccupiedThreshold网格单元的状态被占领的

阈值以上的网格单元是占领,指定为一个真正的标量范围[0,1]。

一个网格单元与成本c可以有一个这样的国家:

  • 如果c<FreeThreshold网格单元的状态免费的

  • 如果cFreeThresholdcOccupiedThreshold网格单元的状态未知的

  • 如果c>OccupiedThreshold网格单元的状态被占领的

Collision-checking配置,指定为一个InflationCollisionChecker对象。创建这个对象,使用inflationCollisionChecker函数。使用的属性InflationCollisionChecker对象,您可以配置:

  • 通货膨胀半径costmap用于增加障碍

  • 圈的数量用于将车辆在计算通货膨胀半径

  • 每个圆的位置沿纵轴的车辆

  • 汽车的尺寸

默认情况下,CollisionChecker使用默认的InflationCollisionChecker对象,该对象使用语法创建的inflationCollisionChecker ()。这个collision-checking配置包含车辆在一个循环。

这个属性是只读的。

costmap程度在指定的车辆,研制出,非负整数向量的形式xminxmaxyminymax]。

  • xminxmax描述的长度在世界地图坐标。

  • yminymax描述在世界地图坐标的宽度。

边长的平方细胞,在世界单位,指定为一个积极的真正的标量。例如,一个边的长度1意味着一个网格,每个细胞都是一个平方的大小1×1米。搜索空间的较小值提高分辨率增加内存消耗的成本。

您可以指定CellSize当您创建的vehicleCostmap对象。然而,在您创建对象,CellSize成为只读的。

这个属性是只读的。

costmap网格大小,指定为一个双元素,正整数向量的形式nrowsncols]。

  • nrows是网格单元的数量在costmap行。

  • ncols是网格单元的数量在costmap列。

对象的功能

checkFree 检查车辆costmap无碰撞的姿势或点
checkOccupied 检查车辆costmap占领姿势或点
getCosts 细胞的车辆costmap获得成本的价值
setcost 细胞的车辆costmap设置成本值
情节 情节车辆costmap

例子

全部折叠

创建一个10到20米costmap分为方形细胞大小0.5 - 0.5米。指定一个默认的成本价值0.5的所有细胞。

mapWidth = 10;mapLength = 20;costVal = 0.5;cellSize = 0.5;costmap = vehicleCostmap (mapWidth mapLength costVal,“CellSize”cellSize)
costmap = vehicleCostmap属性:FreeThreshold: 0.2000 OccupiedThreshold: 0.6500 CollisionChecker: [1 x1 driving.costmap。InflationCollisionChecker] CellSize: 0.5000 MapSize: 40 [20] MapExtent: [0 10 0 20]

马克costmap上的障碍。显示costmap。

occupiedVal = 0.9;xyPoint = (2、4);setcost (costmap xyPoint occupiedVal)情节(costmap)

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含2对象类型的形象,补丁。该对象代表的地区。

标志着costmap无障碍区。再次显示costmap。

freeVal = 0.15;(X, Y) = meshgrid (0.5: 3.5: cellSize: 5日cellSize: 1.5);setcost (costmap [X (:), Y (:)), freeVal)情节(costmap)

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含2对象类型的形象,补丁。该对象代表的地区。

计划路径最短的车辆停车位使用*网格算法。然后对车辆非完整约束,再计划使用混合A *算法的路径。

创建Occpancy映射

加载一个costmap停车场。创建一个occupancyMap(导航工具箱)使用costmap对象的属性对象。可视化入住率地图。

data =负载(“parkingLotCostmapReducedInflation.mat”);costmapObj = data.parkingLotCostmapReducedInflation;分辨率= 1 / costmapObj.CellSize;oMap = occupancyMap (costmapObj.Costmap,决议);的核心。FreeThreshold = costmapObj.FreeThreshold;的核心。OccupiedThreshold = costmapObj.OccupiedThreshold;显示(oMap)

图包含一个坐标轴对象。坐标轴对象与标题占用网格,包含X [m], ylabel Y(米)包含一个类型的对象的形象。

计划使用*电网规划路径

创建一个使用入住率地图plannerAStarGrid(导航工具箱)对象。

gridPlanner = plannerAStarGrid (oMap);

定义启动和在世界坐标系中目标位置。这个坐标系的原点是地图左下角的角落。

startPos = (11、10);goalPos = (31.5, 18);

计划一条从起始点到目标点在世界坐标系中。

路径=计划(gridPlanner startPos goalPos,“世界”);

可视化路径和探索节点使用显示对象的功能。

显示(gridPlanner)

图包含一个坐标轴对象。坐标轴对象标题斯达,包含X [m], ylabel Y [m]包含8图像类型的对象,线。一个或多个行显示的值只使用这些对象标记代表路径,首先,目标,GridsExplored。

对非完整约束和使用混合*规划师再计划

为验证计划创建一个状态验证器对象路径使用碰撞检查。分配入住率validator对象映射到状态。

验证器= validatorOccupancyMap;验证器。地图= oMap;

初始化一个plannerHybridAStar(导航工具箱)对象的状态验证器对象。实施的非完整约束最小转弯半径和运动通过指定原始长度MinTurningRadiusMotionPrimitiveLength规划师的属性。

hybridPlanner = plannerHybridAStar(验证器,MinTurningRadius = 4, MotionPrimitiveLength = 6);

启动和目标提出了车辆定义为(x, y,θ)向量。xy指定位置的米,θ指定的定向角弧度。

startPose =(4 4π/ 2);%(米,米,弧度)goalPose =(45 27 -π/ 2);

计划从一开始就对道路目标构成。

refpath =计划(hybridPlanner startPose goalPose);

可视化使用的路径显示对象的功能。

显示(hybridPlanner)

图包含一个坐标轴对象。坐标轴对象标题混合*路径规划,包含X [m], ylabel Y [m]包含8图像类型的对象,线,散射。这些对象代表前进运动原语,反向运动原语,转发路径,路径点,定位,首先,目标。

算法

为了简化检查车辆是否构成碰撞,vehicleCostmap充气障碍的大小。collision-checking算法遵循这些步骤:

  1. 计算通货膨胀半径,在世界单位,从车辆尺寸。默认的通货膨胀半径等于最小的组重叠的圆圈的半径必须完全封闭。圆的中心点谎言沿着纵轴的车辆。增加圈的数量降低了通货膨胀半径,使更精确的碰撞检查。

    通货膨胀半径,一个中心 通货膨胀半径,三个中心

    汽车与一个中心和大型通货膨胀半径中心

    车有三个中心和三个小通货膨胀半径围绕这些中心

  2. 通货膨胀半径转换为一个网格单元的数量,R。围捕noninteger值R下一个最大的整数。

  3. 充气障碍使用的大小R。标签中的所有细胞膨胀区域。

    图显示了深红色的细胞。细胞膨胀区域根据红色标注。扎实的黑线表示原来的通货膨胀半径。在左边的图,R是3。在右边的图,R是2。

    膨胀的网状细胞,一个中心 膨胀的网格单元,三个中心

    车辆用一个圆和相应的膨胀costmap网格细胞。通胀的面积大。

    车有三个中心和相应的小膨胀costmap网格细胞。通货膨胀面积小。

  4. 检查车辆的中心点是否躺在充气网格细胞。

    • 如果任何中心位于一个充气的网格单元,然后车辆构成被占领的。的checkOccupied函数返回真正的。一个被占领的姿势并不一定意味着一个碰撞。例如,车辆可能会躺在一个充气的网格单元而不是实际占领的网格单元。

    • 如果没有中心点躺在充气网格细胞,和每个单元包含一个中心的成本价值小于FreeThreshold,那么车辆构成免费的。的checkFree函数返回真正的

    • 如果没有中心点躺在充气网格细胞,和成本的价值包含一个中心点大于任何细胞FreeThreshold,那么车辆构成未知的。这两个checkFreecheckOccupied返回

下面的姿势被认为是在碰撞,因为至少有一个中心点的膨胀区域。

造成碰撞,一个中心 在冲突中,三个中心

汽车与一个中心costmap覆盖。车辆碰撞造成。

车有三个中心costmap覆盖。车辆碰撞造成。

扩展功能

版本历史

介绍了R2018a

全部展开