主要内容

平滑度

路径平滑度

描述

实例

平滑度(pathMetricsObj)评估计划路径的平滑度。值接近0指示平坦的路径。直线路径返回值为0.

平滑度(pathMetricsObj,“类型”,“部分”)返回路径上每组三个姿势之间的单独平滑度计算,格式为(N2)元向量,N是姿势的数量。

例子

全部折叠

基于一组姿势和关联的地图环境计算计划路径的平滑度、间隙和有效性。

将映射加载并分配给状态验证程序

从示例地图创建占用地图并设置地图分辨率。

负载exampleMaps.mat% simpleMapmapResolution=1;%细胞/计地图=职业地图(simpleMap,地图分辨率);

创建Dubins状态空间。

statespace = stateSpaceDubins;

基于占用率映射创建状态验证器,将参数和状态存储在Dubins状态空间中。

statevalidator = validatorOccupancyMap (statespace);

将映射分配给验证器。

statevalidator.Map=Map;

为验证器设置验证距离。

statevalidator.ValidationDistance=0.01;

将状态空间边界更新为与贴图限制相同。

statespace。statbounds = [map.XWorldLimits;map.YWorldLimits;[-pi]];

计划路径

创建RRT*路径规划器并允许进一步优化。

规划师= plannerRRTStar (statespace statevalidator);计划。ContinueAfterGoalReached = true;

减少最大迭代次数,增加最大连接距离。

计划。MaxIterations = 2500;计划。MaxConnectionDistance = 0.3;

定义路径规划器的开始和目标状态为[x、 y,θ]向量。xY是笛卡尔坐标,和西塔为方向角。

Start = [2.5, 2.5, 0];%[米,米,弧度]目标=[22.5,8.75,0];

计划从开始状态到目标状态的路径导航路径对象。

rng(100,“龙卷风”)%可重复结果[路径,解决方案信息]=计划(计划员,开始,目标);

计算和可视化路径度量

创建路径度量对象。

pathMetricsObj = pathmetrics(路径,statevalidator);

检查路径的有效性。结果是1(真正的)如果规划的路径没有障碍。0(假)无效路径。

isPathValid(pathMetricsObj)
ans=必然的1.

计算路径的最小间隙。

间隙(pathMetricsObj)
ans=1.4142

评估路径的平滑度。值接近0指示平坦的路径。直线路径返回值为0.

平滑度(PathMetricObj)
ans=1.7318

可视化路径的最小净空。

显示(pathMetricsObj)图例(“计划路径”,的最小间隙)

图形包含一个轴。该轴包含5个类型为图像、面片、线的对象。这些对象表示计划路径、最小间隙。

使用RRT*算法规划车辆通过停车场的路径。计算并可视化所规划路径的平滑度、清除度和有效性。

将映射加载并分配给状态验证程序

加载停车场的成本图。绘制成本图以查看停车场和车辆应避免的充气区域。

负载parkingLotCostmap.mat;costmap = parkingLotCostmap;情节(costmap)包含(“X(米)) ylabel (“Y”(米))

图中包含一个轴。该轴包含两个类型为image、patch的对象。该对象表示膨胀区域。

创建一个stateSpaceDubins对象,并将最小图灵半径增加到4.米。

statespace=stateSpaceDubins;statespace.MinTurningRadius=4;%仪表

创建一个汽车成本图对象使用创建的状态空间。

statevalidator=validatorVehicleCostmap(状态空间);

将停车场成本映射分配给状态验证器对象。

statevalidator。地图= costmap;

计划路径

定义车辆的起始和目标姿势为[x,Y,Θ]矢量。世界单位(x,Y)位置以米为单位。方向角的世界单位Θ以度为单位。

startPose = [5,5,90];%[米,米,度]goalPose = [40,38,180];%[米,米,度]

使用pathPlannerRRT(自动驾驶工具箱)对象和计划(自动驾驶工具箱)函数来规划车辆从起始位姿到目标位姿的路径。

规划师= pathPlannerRRT (costmap);refPath =计划(计划、startPose goalPose);

沿路径每隔一米进行插值。将方向角从度转换为弧度。

提出了= 0(大小(refPath.PathSegments, 2) + 1, 3);:提出了(1)= refPath.StartPose;对于i = 1:size(refPath.PathSegments,2) pose (i+1,:) = refPath.PathSegments(i).GoalPose;终止提出了函数(:,3)=(姿势(:,3));

创建一个导航路径使用Dubins状态空间对象和摆姿势.

路径=导航路径(状态空间、姿势);

计算和可视化路径度量

创建一个pathmetrics对象。

pathMetricsObj = pathmetrics(路径,statevalidator);

检查路径的有效性。结果是1.(真正的)如果计划路径没有障碍物。0(错误的)表示无效路径。

isPathValid(pathMetricsObj)
ans=必然的1.

计算并可视化最小值间隙的路径。

间隙(pathMetricsObj)
ans=0.5000
显示(pathMetricsObj)图例(“充气区域”,“计划路径”,的最小间隙)包含(“X(米)) ylabel (“Y”(米))

图中包含一个轴。轴包含6个类型为图像、面片、线的对象。这些对象表示充气区域、计划路径、最小间隙。

计算并可视化平滑度的路径。值接近0指示平坦的路径。直线路径返回值为0.

平滑度(PathMetricObj)
ans = 0.0842
显示(pathMetricsObj,“指标”,{“平滑度”})传奇(“充气区域”,“路径平滑度”)包含(“X(米)) ylabel (“Y”(米))

图形包含一个轴。轴包含3个类型为image、patch的对象。这些对象表示膨胀区域、路径平滑度。

可视化路径的每个状态的清除。

显示(pathMetricsObj,“指标”,{“StatesClearance”})传奇(“充气区域”,“计划路径”,“清除路径状态”)包含(“X(米)) ylabel (“Y”(米))

图形包含一个轴。轴包含29个图像、面片、线类型的对象。这些对象表示膨胀区域、计划路径、路径状态的间隙。

输入参数

全部折叠

路径度量的信息,指定为pathmetrics对象。

参考文献

Lindemann, Stephen R.和Steven M. LaValle。“简单高效的算法,在给定的细胞分解上计算平滑、无碰撞的反馈定律。”《国际机器人研究杂志》第28期,第5期2009年,第600-621页。

另见

物体

功能

在R2019b中引入