smoothPathSpline

使用三次样条插值平滑车辆路径

描述

例子

(提出了,方向)= smoothPathSpline (refPoses,refDirections,numSmoothPoses)生成一个平滑的车辆路径,包括numSmoothPoses离散位姿,通过拟合输入参考路径位姿到一个三次样条。给定输入参考路径方向,smoothPathSpline还返回与每个姿态对应的方向。

使用这个函数来转换C1-通往C点的连续车辆路径2连续的路径。C1-连续路径包括driving.DubinsPathSegmentdriving.ReedsSheppPathSegment路径,可以使用pathPlannerRRT对象。有关这些路径类型的详细信息,请参阅c1 -连续路径和c2 -连续路径

您可以使用返回的姿态和方向与车辆控制器,如lateralControllerStanley函数。

(提出了,方向)= smoothPathSpline (refPoses,refDirections,numSmoothPoses,minSeparation)指定姿态之间的最小间隔阈值。如果两个姿势之间的距离小于minSeparation,该函数仅使用其中一个位姿进行插值。

(___,cumLengths,曲率)= smoothPathSpline (___)还使用前面的任何语法返回每个返回姿态的累积路径长度和有符号路径曲率。使用这些值来生成沿路径的速度剖面。

例子

全部折叠

平滑由RRT*路径规划器规划的路径。

加载并绘制一个停车场的成本地图。

data =负载(“parkingLotCostmap.mat”);costmap = data.parkingLotCostmap;情节(costmap)

将车辆的起始和目标姿态定义为[x,y,Θ)向量。世界单位(x,y)地点以米为单位。世界单位为Θ取向角的单位是度。

startPose = (4, 90);%[米,米,度]goalPose =[0] 30日13日;

使用一个pathPlannerRRT对象,以规划从起始姿态到目标姿态的路径。

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

绘制并放大计划的路径。该路径由一系列dubin曲线组成。这些曲线包括曲率的突然变化,不适合与乘客一起开车。

持有情节(refPath“汽车”,“关闭”,“DisplayName的”,参考路径的) xlim([3 31]) ylim([3 18])

插入路径的过渡位姿。使用这些位姿作为插值平滑路径的参考位姿。还返回每个姿态的运动方向。

[refPoses, refDirections] =插入(refPath);

指定在平滑路径中返回的姿态数。回程姿势间隔约0.1米,沿整个路径。

approxSeparation = 0.1;%米numSmoothPoses =圆(refPath。长度/ approxSeparation);

通过拟合三次样条到参考位姿生成平滑路径。smoothPathSpline沿着平滑路径返回指定数目的离散姿态。

(姿势,方向)= smoothPathSpline (refPoses、refDirections numSmoothPoses);

绘制平滑的路径。参考路径中出现的更突然的曲率变化现在被消除了。

情节(姿势(:1),姿势(:,2),“线宽”2,“DisplayName的”,“一帆风顺”)举行

输入参数

全部折叠

车辆沿路径的参考姿态,指定为矩阵[x,y,Θ)向量,是姿态的个数。

xy指定车辆的位置(以米为单位)。Θ指定车辆的方向角(以度为单位)。

数据类型:|

车辆沿路径的参考方向,指定为1乘1列向量的1s(向前运动)和-1s(反向运动)。是参考方向的个数。的每个元素refDirections中的一个位姿refPoses输入参数。

数据类型:|

若干个平稳的姿势返回提出了输出参数,指定为正整数。要增加返回姿态的粒度,请增加numSmoothPoses

位姿之间的最小间隔,以米为单位,指定为正实标量。如果欧几里得(x,y)两个位姿之间的距离小于此值,则该函数仅使用其中一个位姿进行插值。

输出参数

全部折叠

平滑路径的离散姿态,返回为anumSmoothPoses矩阵[x,y,Θ)向量。

xy指定车辆的位置(以米为单位)。Θ指定车辆的方向角(以度为单位)。

中的值提出了的值是否具有相同的数据类型refPoses输入参数。

运动方向在每个输出位姿提出了,作为一个numSmoothPoses1乘1列向量的1s(向前运动)和-1s(反向运动)。

中的值方向的值是否具有相同的数据类型refDirections输入参数。

每个输出位姿的累积路径长度提出了,作为一个numSmoothPoses-乘1实值列向量。单位是米。

你可以使用cumLengths曲率输出以生成车辆沿平滑路径的速度剖面。有关详细信息,请参见自动停车员的例子。

在每个输出位姿处的有符号路径曲率提出了,作为一个numSmoothPoses-乘1实值列向量。单位是弧度每米。

你可以使用曲率cumLengths输出以生成车辆沿平滑路径的速度剖面。有关详细信息,请参见自动停车员的例子。

更多关于

全部折叠

C1连续和C2连续的路径

路径是C1-连续的如果它的导数存在并且是连续的。只有C的路径1-连续的在它们的曲率上有不连续。例如,由Dubins或reed - sheep路径片段组成的路径在片段连接的点上具有曲率不连续性。这些不连续会导致方向的变化,这对于与乘客一起驾驶来说不够平滑。

路径也是C2-连续的如果它的二阶导数存在并且是连续的。C2-连续路径具有连续曲率,且足够平滑,可以与乘客一起驾驶。

提示

  • 若要检查平滑路径是否无碰撞,请指定平滑位姿作为输入checkPathValidity函数。

算法

  • 路径平滑算法插值参数三次样条通过所有输入参考位姿点。样条的参数是这些点的累积弦长。[1]

  • 平滑输出路径的切线方向大致与车辆在起始和目标位姿时的方向角相匹配。

参考文献

[1]浮子,迈克尔S。参数三次样条插值与数据多边形的偏差计算机辅助几何设计。第25卷,第3期,2008年,第148-156页。

[2] Lepetic, Marko, Gregor Klancar, Igor Skrjanc, Drago Matko和Bostjan Potocnik。考虑加速度限制的时间最优路径规划。机器人和自动系统。第45卷,第3-4期,2003年,第199-210页。

扩展功能

C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。

介绍了R2019a