主要内容

trajectoryOptimalFrenet

找到最优轨迹沿着参考路径

自从R2019b

描述

trajectoryOptimalFrenet对象是一个样本的路径规划和基于评估本地轨迹的参考路径。终端状态的计划生成一组基于路径和其他参数的对象的引用。规划师然后连接到每个终端状态使用4th或5th阶多项式。选择一个最优路径,采样轨迹运动可行性评估,碰撞,和成本。

创建

描述

trajectoryOptimalFrenet (refPath,验证器)创建一个trajectoryOptimalFrenet对象引用路径,refPath的形式n2组(xy]路点和一个验证器,验证器指定为一个validatorOccupancyMap对象。

例子

规划师= trajectoryOptimalFrenet (___,名称,值)设置附加属性按照任何顺序使用一个或多个名称-值对。

输入参数

全部展开

参考路径,指定为一个n2的矩阵(xy]对,n锚点的数量。

例子:(100100;400400)

数据类型:

状态验证器对象,指定为一个validatorOccupancyMap对象。

属性

全部展开

请注意

“重量”“FeasibilityParameters”属性,您不能指定整个结构。相反,他们的单独字段名称-值对集合。例如,trajectoryOptimalFrenet (refPath验证器,“偏差”,0)设置“偏差”场的结构“重量”

指定所有轨迹的重量成本,作为成本的结构包含标量乘数相应的轨迹属性。轨迹总成本是所有属性的总和乘以权重。这些字段的结构。

总成本函数增加体重的时间到达终端状态。这个值指定为逗号分隔条“时间”和积极的标量在几秒钟内。

数据类型:

增加重量的成本函数生成的轨迹的总长度。这个值指定为逗号分隔条“ArcLength”在米和积极的标量。

数据类型:

增加重量的成本函数的积分横向混蛋的平方。这个值决定了攻击性的轨迹横向(垂直于参考路径)。这个值指定为逗号分隔条“LateralSmoothness”和积极的标量。惩罚横向混蛋计划轨迹增加成本价值。

数据类型:

增加重量的成本函数的积分纵向混蛋的平方。这个值决定了攻击性的轨迹在纵向方向上(参考路径的方向)。这个值指定为逗号分隔条“LongitudinalSmoothness”和积极的标量。惩罚大变化前后加速度增加这个成本价值。

数据类型:

成本函数增加重量的垂直距离末尾的参考路径轨迹的米。这个值指定为逗号分隔条“偏差”在米和积极的标量。

数据类型:

数据类型:结构体

可行性参数,指定为一个结构,其中包含标量值检查轨迹的有效性。这些字段的结构。

最大曲率的车辆可以执行。这个值指定为逗号分隔条“MaxCurvature”和积极的真正的标量1。这个值决定了运动轨迹的可行性。

数据类型:

车辆的最大加速度的方向运动。这个值指定为逗号分隔条“MaxAcceleration”和积极的真正的标量m / s2。降低限制车辆的加速度方向正向或反向降低这个值。

数据类型:

数据类型:结构体

之间的时间间隔的离散状态轨迹。这个值指定为逗号分隔条“TimeResolution”和积极的真正的标量在几秒钟内。这些离散状态确定状态的有效性和成本函数。

数据类型:

用户定义的成本函数,指定为一个函数处理。函数必须接受一个矩阵n7,TRAJSTATES成本,对于每一个轨迹并返回一个值作为一个标量。的计划函数的作用是:返回路径成本最低。

例如,leftLaneChangeCost = @(州)((州(,2)< refPath (, 2)) * 10)创建一个成本函数处理优先左车道上的变化。

数据类型:函数处理

这个属性是只读的。

“TrajectoryList”属性,作为一个结构数组返回所有的候选轨迹及其相应的参数。每个结构都有这些字段:

  • 轨迹——一个n7的矩阵(x,y,θ,卡巴,速度,加速度,时间],在那里n是轨迹路径点的数量。

  • 成本-成本的轨迹。

  • MaxAcceleration-最大加速度的轨迹。

  • MaxCurvature-最大曲率的轨迹。

  • 可行的——一个研制出向量(速度,加速度,曲率,碰撞]表示轨迹的有效性。

    元素的值可以是,

    • 1——轨迹是有效的。

    • 0——轨迹是无效的。

    • 1——轨迹不是检查。

数据类型:结构体

一个结构,包含一系列目标状态相对于参考路径。这些参数定义抽样生成替代的行为轨迹段之间开始和每个目标状态。这些字段的结构。

轨迹段的长度,指定为一个向量在米。

数据类型:

数组在垂直方向偏离参考路径的目标状态,指定为一个向量在米。

数据类型:

目标状态的速度运动的方向,指定为一个积极的标量m / s。

数据类型:

目标国家的加速运动的方向,指定为一个积极的标量m / s2

数据类型:

数组执行轨迹段的结束时间,指定为一个积极的向量在几秒钟内。

数据类型:

数据类型:结构体

锚点的参考路径,指定为一个n2的矩阵(xy]对,n锚点的数量。路点作为参考计划替代轨迹优化的计划。

数据类型:

纵向为每个轨迹段的数量。这个值指定为逗号分隔条“NumSegments”和积极的标量。这个属性生成中间纵向终端状态,所有侧终端结合生成更多的运动基元每个终端状态。

例如,“NumSegments”, 2创建两个分区之间纵向终端状态。轨迹生成达到中间纵向州所有可用的侧终端状态。

数据类型:

偏差抵消从横向的参考路径。这个值指定为逗号分隔条“DeviationOffset”和一个标量。一个负值抵消向右偏移,和一个积极的价值抵消偏差左边的横向方向的参考路径。将此属性设置为偏见你解决一个特定的方向在参考路径时避免障碍。

数据类型:

对象的功能

cart2frenet 笛卡尔状态转换为Frenet状态
复制 创建深复制对象
frenet2cart Frenet状态转换为笛卡儿
计划 计划最优轨迹
显示 想象的轨迹

例子

全部折叠

这个例子展示了如何使用最优轨迹规划trajectoryOptimalFrenet对象。

创建和分配映射到状态验证器

创建一个状态验证器对象的碰撞检查。

stateValidator = validatorOccupancyMap;

创建一个障碍网格地图。

网格= 0 (50100);网格(24:26 48:53)= 1;

创建一个binaryOccupancyMap网格地图。

地图= binaryOccupancyMap(网格);

分配和国家边界映射到状态验证器。

stateValidator。地图=地图;:stateValidator.StateSpace.StateBounds (1:2) = [map.XWorldLimits;map.YWorldLimits];

计划和设想的轨迹

创建一个参考路径规划。

refPath =[0, 25岁,100年,25);

初始化规划对象的引用路径,验证器。

规划师= trajectoryOptimalFrenet (refPath stateValidator);

分配纵向终端状态、横向偏差和最大加速度值。

planner.TerminalStates。纵向= 100;planner.TerminalStates。横向= 10:5:10;planner.FeasibilityParameters。MaxAcceleration = 10;

指定偏移补偿值接近左边侧终端状态优先左车道上的变化。

计划。DeviationOffset = 5;

轨迹规划

最初的笛卡尔的车辆状态。

initCartState =(0 25π/ 9 0 0 0);

笛卡儿的车辆状态转换为Frenet状态。

initFrenetState = cart2frenet(规划师,initCartState);

计划一个轨迹从最初Frenet状态。

计划(计划、initFrenetState);

轨迹可视化

可视化的地图和轨迹。

显示(map)显示(规划师,“轨迹”,“所有”)

图包含一个坐标轴对象。坐标轴对象与标题二进制占用网格,包含X [m], ylabel Y(米)包含5类型的对象形象,线,补丁。一个或多个行显示的值只使用这些对象标记代表锚点,参考路径,最优轨迹。

这个例子展示了如何分区的纵向终端状态最优轨迹规划使用trajectoryOptimalFrenet对象。

创建和分配映射到状态验证器

创建一个状态验证器对象的碰撞检查。

stateValidator = validatorOccupancyMap;

创建一个障碍网格地图。

网格= 0 (50100);网格(25:27 28:33)= 1;网格(16:18,37:42)= 1;网格(29:31 72:77)= 1;

创建一个binaryOccupancyMap网格地图。

地图= binaryOccupancyMap(网格);

分配和国家边界映射到状态验证器。

stateValidator。地图=地图;:stateValidator.StateSpace.StateBounds (1:2) = [map.XWorldLimits;map.YWorldLimits];

计划和设想的轨迹

创建一个参考路径规划。

refPath =[0, 25岁,30岁,30岁,75年,20,100,25);

初始化规划对象的引用路径,验证器。

规划师= trajectoryOptimalFrenet (refPath stateValidator);

分配纵向终端状态、横向偏差和最大加速度值。

planner.TerminalStates。纵向= 100;planner.TerminalStates。横向= 5:5:5;planner.FeasibilityParameters。MaxAcceleration = 10;

指定分区的数量的纵向终端状态。

计划。NumSegments = 3;

轨迹规划

初始Frenet车辆的状态。

initFrenetState = 0 (1,6);

计划一个轨迹从最初Frenet状态。

计划(计划、initFrenetState);

轨迹可视化

可视化的地图和轨迹。

显示(map)显示(规划师,“轨迹”,“所有”)举行

生成车道边界

计算参考路径Frenet状态的结束。

refPathEnd = cart2frenet(规划师,[planner.Waypoints(最终,:)0 0 0 0]);

计算车道偏移两边的侧终端州一半车道宽度值。

laneOffsets =独特([planner.TerminalStates.Lateral planner.TerminalStates.Lateral + 2.5 - 2.5]);

计算车道在笛卡尔的位置状态。

numLaneOffsets =元素个数(laneOffsets);xRefPathEnd =装天花板(refPathEnd (1));laneXY = 0 ((numLaneOffsets * xRefPathEnd) + numLaneOffsets, 2);xIndex = 0;laneID = 1: numLaneOffsetsx = 1: xRefPathEnd laneCart = frenet2cart(规划师,[x 0 0 laneOffsets (laneID) 0 0]);xIndex = xIndex + 1;laneXY (xIndex:) = laneCart (1:2);结束xIndex = xIndex + 1;laneXY (xIndex:) =南(1、2);结束

情节车道边界。

情节(laneXY (: 1) laneXY (:, 2),“线宽”,0.5,“颜色”(0.5 0.5 0.5),“DisplayName的”,“车道边界”,“线型”,“——”)

图包含一个坐标轴对象。坐标轴对象与标题二进制占用网格,包含X [m], ylabel Y [m]包含6类型的对象形象,线,补丁。一个或多个行显示的值只使用这些对象标记代表锚点,参考路径,最优轨迹,车道边界。

限制

  • Self-intersections在参考路径可能导致意想不到的行为。

  • 计划不支持反向驱动。金宝app

  • 初始取向计划应该在-π/ 2π/ 2参考路径。

  • 限制的数量TerminalStates实时应用程序因为计算复杂度的增长。

引用

[1]Werling,莫里茨,朱利叶斯·齐格勒,Soren Kammel, Sebastian Thrun。“最优轨迹生成动态场景Frenet框架。”2010年IEEE机器人与自动化国际会议上。2010年,页987 - 993。

扩展功能

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

版本历史

介绍了R2019b