smoothPathSpline

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

描述

例子

(提出了,方向] = smoothPathSpline(refPoses,refDirections,numSmoothPoses)生成光滑的车辆路径,由numSmoothPoses离散化姿势,通过输入基准路径的姿势装配到三次样条。给定了输入参考路径方向,smoothPathSpline也返回对应于每个姿势方向。

使用这个函数来转换C1-通往C点的连续车辆路径2- 持续路径。C1-连续路径包括driving.DubinsPathSegment要么driving.ReedsSheppPathSegment可以使用a计划的路径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);

打印和放大的规划路径上。路径是由的Dubins曲线的序列组成。这些曲线包括在曲率是不适合与乘客驱动的突然变化。

持有图(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的”,“一帆风顺”)保持

输入参数

全部收缩

车辆沿路径的参考姿态,指定为M的-×3矩阵x,y,Θ)向量,M是姿势的数目。

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

数据类型:|

沿该路径的车辆中,指定为基准方向M1乘1列向量的1s(前进运动)和-1s(反向运动)。M是基准方向数。中的每个元素refDirections对应于一个姿势refPoses输入参数。

数据类型:|

光滑的姿势数在返回提出了输出参数,指定为正整数。要增加返回姿态的粒度,请增加numSmoothPoses

姿势之间的最小间距,以米为单位,指定为正实标。如果欧几里得(x,y2个姿势之间)的距离小于该值,则该函数只使用这些姿势用于内插中的一个。

输出参数

全部收缩

平滑路径的离散姿态,以a的形式返回numSmoothPoses的-×3矩阵x,y,Θ)向量。

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

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

在每个输出姿态运动方向提出了,以numSmoothPoses1乘1列向量的1s(前进运动)和-1s(反向运动)。

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

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

你可以使用cumLengths曲率输出以产生所述车辆的沿平滑的路径的速度分布。有关详细信息,请参阅自动停车员例。

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

你可以使用曲率cumLengths输出以产生所述车辆的沿平滑的路径的速度分布。有关详细信息,请参阅自动停车员例。

更多关于

全部收缩

C1连续和C2- 连续路径

路径是C1-连续的如果它的导数存在并且是连续的。只有C的路径1- 连续在自己的曲率的不连续性。例如,一个路径构成的Dubins或芦苇-绵羊路径段具有在其中段加入点的曲率的不连续性。这些不连续导致在方向上的变化没有被用于与乘客驱动足够平滑。

路径也是C2-连续的如果它的二阶导数存在并且是连续的。C2-Continuous路径具有连续的曲率,并且足够光滑用于与乘客驾驶。

提示

  • 要检查的平滑路径是无碰撞,指定光滑的姿势作为输入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®编码器™C和C ++代码。

介绍了R2019a