trajectoryOptimalFrenet
描述
的trajectoryOptimalFrenet
对象是一个样本的路径规划和基于评估本地轨迹的参考路径。终端状态的计划生成一组基于路径和其他参数的对象的引用。规划师然后连接到每个终端状态使用4th或5th阶多项式。选择一个最优路径,采样轨迹运动可行性评估,碰撞,和成本。
创建
描述
trajectoryOptimalFrenet (
创建一个refPath
,验证器
)trajectoryOptimalFrenet
对象引用路径,refPath
的形式n2组(xy]
路点和一个验证器,验证器
指定为一个validatorOccupancyMap
对象。
设置附加属性按照任何顺序使用一个或多个名称-值对。规划师
= trajectoryOptimalFrenet (___,名称,值
)
输入参数
refPath
- - - - - -参考路径
n2矩阵
参考路径,指定为一个n2的矩阵(xy]
对,n锚点的数量。
例子:(100100;400400)
数据类型:双
验证器
- - - - - -状态验证器对象
validatorOccupancyMap
对象
状态验证器对象,指定为一个validatorOccupancyMap
对象。
属性
请注意
为“重量”
和“FeasibilityParameters”
属性,您不能指定整个结构。相反,他们的单独字段名称-值对集合。例如,trajectoryOptimalFrenet (refPath验证器,“偏差”,0)
设置“偏差”
场的结构“重量”
。
权重
- - - - - -权重为所有轨迹成本
结构
指定所有轨迹的重量成本,作为成本的结构包含标量乘数相应的轨迹属性。轨迹总成本是所有属性的总和乘以权重。这些字段的结构。
时间
——体重的时间成本
0
(默认)|积极的标量
总成本函数增加体重的时间到达终端状态。这个值指定为逗号分隔条“时间”
和积极的标量在几秒钟内。
数据类型:双
ArcLength
——重量为弧长成本
0
(默认)|积极的标量
增加重量的成本函数生成的轨迹的总长度。这个值指定为逗号分隔条“ArcLength”
在米和积极的标量。
数据类型:双
LateralSmoothness
——重量为横向混蛋成本
0
(默认)|积极的标量
增加重量的成本函数的积分横向混蛋的平方。这个值决定了攻击性的轨迹横向(垂直于参考路径)。这个值指定为逗号分隔条“LateralSmoothness”
和积极的标量。惩罚横向混蛋计划轨迹增加成本价值。
数据类型:双
LongitudinalSmoothness
——重量为纵向混蛋成本
0
(默认)|积极的标量
增加重量的成本函数的积分纵向混蛋的平方。这个值决定了攻击性的轨迹在纵向方向上(参考路径的方向)。这个值指定为逗号分隔条“LongitudinalSmoothness”
和积极的标量。惩罚大变化前后加速度增加这个成本价值。
数据类型:双
偏差
——体重偏离参考路径
1
(默认)|积极的标量
成本函数增加重量的垂直距离末尾的参考路径轨迹的米。这个值指定为逗号分隔条“偏差”
在米和积极的标量。
数据类型:双
数据类型:结构体
FeasibilityParameters
- - - - - -包含可行性的结构参数
结构
可行性参数,指定为一个结构,其中包含标量值检查轨迹的有效性。这些字段的结构。
MaxCurvature
最大曲率,车辆可以执行
0.1
(默认)|正真正的标量
最大曲率的车辆可以执行。这个值指定为逗号分隔条“MaxCurvature”
和积极的真正的标量1。这个值决定了运动轨迹的可行性。
数据类型:双
MaxAcceleration
——最大加速度方向的运动车
2.5
(默认)|正真正的标量
车辆的最大加速度的方向运动。这个值指定为逗号分隔条“MaxAcceleration”
和积极的真正的标量m / s2。降低限制车辆的加速度方向正向或反向降低这个值。
数据类型:双
数据类型:结构体
TimeResolution
- - - - - -轨迹离散化区间
0.1
(默认)|积极的真正的标量
之间的时间间隔的离散状态轨迹。这个值指定为逗号分隔条“TimeResolution”
和积极的真正的标量在几秒钟内。这些离散状态确定状态的有效性和成本函数。
数据类型:双
CostFunction
- - - - - -用户定义的成本函数
nullCost(默认)|函数处理
用户定义的成本函数,指定为一个函数处理。函数必须接受一个矩阵n7,TRAJSTATES
成本,对于每一个轨迹并返回一个值作为一个标量。的计划
函数的作用是:返回路径成本最低。
例如,leftLaneChangeCost = @(州)((州(,2)< refPath (, 2)) * 10)
创建一个成本函数处理优先左车道上的变化。
数据类型:函数处理
TrajectoryList
- - - - - -列出所有可能的轨迹
结构数组
这个属性是只读的。
的“TrajectoryList”
属性,作为一个结构数组返回所有的候选轨迹及其相应的参数。每个结构都有这些字段:
轨迹
——一个n7的矩阵(x,y,θ,卡巴,速度,加速度,时间]
,在那里n是轨迹路径点的数量。成本
-成本的轨迹。MaxAcceleration
-最大加速度的轨迹。MaxCurvature
-最大曲率的轨迹。可行的
——一个研制出向量(速度,加速度,曲率,碰撞]
表示轨迹的有效性。元素的值可以是,
1
——轨迹是有效的。0
——轨迹是无效的。1
——轨迹不是检查。
数据类型:结构体
TerminalStates
- - - - - -所有目标状态的结构
结构
一个结构,包含一系列目标状态相对于参考路径。这些参数定义抽样生成替代的行为轨迹段之间开始和每个目标状态。这些字段的结构。
纵向
——轨迹段的长度
30:15:90
(默认)|向量
轨迹段的长度,指定为一个向量在米。
数据类型:双
横向
——一系列偏离参考路径在垂直方向的目标状态
2:1:2
(默认)|向量
数组在垂直方向偏离参考路径的目标状态,指定为一个向量在米。
数据类型:双
速度
——速度目标状态的方向运动
10
(默认)|积极的标量
目标状态的速度运动的方向,指定为一个积极的标量m / s。
数据类型:双
加速度
——加速度在运动方向的目标状态
0
(默认)|积极的标量
目标国家的加速运动的方向,指定为一个积极的标量m / s2。
数据类型:双
时间
——数组执行轨迹段的结束时间
7
(默认)|正向量
数组执行轨迹段的结束时间,指定为一个积极的向量在几秒钟内。
数据类型:双
数据类型:结构体
路点
- - - - - -锚点的参考路径
[](默认)|n2矩阵
锚点的参考路径,指定为一个n2的矩阵(xy]
对,n锚点的数量。路点作为参考计划替代轨迹优化的计划。
数据类型:双
NumSegments
- - - - - -纵向为每个轨迹段的数量
1
(默认)|积极的标量
纵向为每个轨迹段的数量。这个值指定为逗号分隔条“NumSegments”
和积极的标量。这个属性生成中间纵向终端状态,所有侧终端结合生成更多的运动基元每个终端状态。
例如,“NumSegments”, 2
创建两个分区之间纵向终端状态。轨迹生成达到中间纵向州所有可用的侧终端状态。
数据类型:双
DeviationOffset
- - - - - -在横向方向偏差补偿的参考路径
0
(默认)|标量
偏差抵消从横向的参考路径。这个值指定为逗号分隔条“DeviationOffset”
和一个标量。一个负值抵消向右偏移,和一个积极的价值抵消偏差左边的横向方向的参考路径。将此属性设置为偏见你解决一个特定的方向在参考路径时避免障碍。
数据类型:双
对象的功能
cart2frenet |
笛卡尔状态转换为Frenet状态 |
复制 |
创建深复制对象 |
frenet2cart |
Frenet状态转换为笛卡儿 |
计划 |
计划最优轨迹 |
显示 |
想象的轨迹 |
例子
在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)在显示(规划师,“轨迹”,“所有”)
分区纵向终端状态轨迹生成
这个例子展示了如何分区的纵向终端状态最优轨迹规划使用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: numLaneOffsets为x = 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的”,“车道边界”,“线型”,“——”)
限制
Self-intersections在参考路径可能导致意想不到的行为。
计划不支持反向驱动。金宝app
初始取向计划应该在
-π/ 2
和π/ 2
参考路径。限制的数量TerminalStates实时应用程序因为计算复杂度的增长。
引用
[1]Werling,莫里茨,朱利叶斯·齐格勒,Soren Kammel, Sebastian Thrun。“最优轨迹生成动态场景Frenet框架。”2010年IEEE机器人与自动化国际会议上。2010年,页987 - 993。
扩展功能
C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。
版本历史
介绍了R2019b
MATLABコマンド
次のMATLABコマンドに対応するリンクがクリックされました。
コマンドをMATLABコマンドウィンドウに入力して実行してくださ了对いweb这类ブラウザーはMATLABコマンドをサポートしていません。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。