这个例子展示了如何调整一个模糊推理系统(FIS)的自主停车应用与非完整约束。gydF4y2Ba
自动停车是智能汽车的一项重要功能。非完整运动学对自动停车施加了额外的约束,汽车不能横向移动,而是使用弯曲运动。gydF4y2Ba
下图显示了带有标准阿克曼转向机构的非完整汽车的运动学。gydF4y2Ba
该运动学模型具有以下参数:gydF4y2Ba
是汽车相对于全局参考系的当前方向。gydF4y2Ba
是相对于汽车方向的转向角度。gydF4y2Ba
是前轮的中心gydF4y2Ba .gydF4y2Ba
是后轮的中心gydF4y2Ba .gydF4y2Ba
是轴距的长度。gydF4y2Ba
是汽车的曲率中心。gydF4y2Ba
是汽车的曲率半径。gydF4y2Ba
在这个模型中,后轮方向是固定的,并与车身平行。也就是说,后轮与汽车的方向相同,gydF4y2Ba .前轮相互平行,并随转向角度旋转gydF4y2Ba .转向角度被限制在gydF4y2Ba 和gydF4y2Ba .对于这个示例,gydF4y2Ba 是30度。gydF4y2Ba
前后轮中心有以下关系。gydF4y2Ba
前轮中心速度和汽车方向速度的运动学方程为gydF4y2Ba 是汽车的速度。gydF4y2Ba
最小曲率半径(gydF4y2Ba ),这取决于轴距长度(gydF4y2Ba ).这个最小半径限制了汽车在停车机动期间的运动。gydF4y2Ba
当人类司机停车时,他们往往不能保持所需的车速和方向时,接近一个空的停车位。为了在不发生碰撞的情况下成功停车,他们必须通过在前进和后退运动之间切换,同时调整车速和转向角度来进行补偿。gydF4y2Ba
人类驾驶员不会有意识地根据汽车的运动学模型进行几何计算。相反,根据他们自己的反复试验经验,他们使用自然规则和推理来理解他们的车在停车情况下的约束条件。您可以使用模糊系统对这种基于规则的推理进行建模。gydF4y2Ba
这个例子使用下面的环境来模拟一辆非完整汽车的正面停车。gydF4y2Ba
在这里:gydF4y2Ba
模拟环境是一个45 × 15英尺的停车场。gydF4y2Ba
孵化区显示有人占用停车位。gydF4y2Ba
这个空的停车位有6英尺长,7英尺宽。gydF4y2Ba
该车为5乘3英尺,轴距(gydF4y2Ba )是3英尺,提供一个1英尺的偏移从轴距到汽车的前和后。gydF4y2Ba
本示例假设如下。gydF4y2Ba
这款车配备了智能系统,可以检测到空车位,然后将车停在停车位的起始边缘附近。gydF4y2Ba
自动停车系统会在停车后控制汽车。理想情况下,在起始位置,汽车几乎垂直居中于道路,并与道路平行(gydF4y2Ba 度或gydF4y2Ba 度)。gydF4y2Ba
由于停车场的不断变化的性质,运动学运动的约束,和汽车的物理属性,汽车确实停止在准确的期望的位置和方向。因此,停车系统假设汽车停在空车位前面的某个地方gydF4y2Ba 或gydF4y2Ba 在车的两边有不相等的空间。gydF4y2Ba
为了避免碰撞,汽车配备了距离传感器,为汽车的前部、后部、左侧和右侧提供距离数据。下图显示了在仿真环境中从传感器获得的距离数据示例。gydF4y2Ba
最大传感器范围假定为gydF4y2Ba ,它涵盖了整个仿真环境。gydF4y2Ba
停车的人类推理gydF4y2Ba
一般情况下,如图所示,人类驾驶员在接近一个空车位时,保持适当的速度和转向角度。在这种情况下,它们可以在没有任何前后振动的情况下停车。gydF4y2Ba
然而,有时司机不能保持理想的速度和方向盘角度无振荡停车。如下面的例子所示,驾驶员必须使用前后运动进行补偿。gydF4y2Ba
在这种情况下,司机:gydF4y2Ba
向右转,向前移动。gydF4y2Ba
未能进入车位,因为车的前部接近已占用车位的车辆。gydF4y2Ba
左转并后退,以腾出足够的空间进入停车位gydF4y2Ba
向前移动进入停车位,同时调整汽车方向使其与停车方向一致。gydF4y2Ba
当汽车的前面距离停车位的末端是一个安全的最小距离,并且车辆与停车位对齐(模拟环境中的90度方向)时停止。gydF4y2Ba
下面的章节将使用这些运动模式来构建自动停车的模糊系统。gydF4y2Ba
为了调整模糊系统,本示例使用汽车的运动学模型和前一节描述的运动模式人工生成训练数据。数据生成过程使用如下离散形式的运动学模型,其中gydF4y2Ba 是0.1秒。gydF4y2Ba
转向角(gydF4y2Ba )及速度(gydF4y2Ba )值是根据前面讨论的典型人类驾驶模式生成的。转向角度和速度受以下限制。gydF4y2Ba
为了给安全转弯留出空间,倒车时车速越接近被占用的空间就越快。或者,汽车可以在倒车时使用相同的速度更长的时间,以便为安全转弯留出足够的空间。gydF4y2Ba
加载训练数据结构。gydF4y2Ba
trainingData =负载(gydF4y2Ba“trainingData”gydF4y2Ba);gydF4y2Ba
每个训练数据点包括五个输入。gydF4y2Ba
角度偏差(gydF4y2Ba )在汽车方向和停车位方向之间gydF4y2Ba
最短距离(gydF4y2Ba ),左(gydF4y2Ba )、后(gydF4y2Ba ),正确(gydF4y2Ba )汽车的gydF4y2Ba
每个训练数据点包含两个输出。gydF4y2Ba
转向角(gydF4y2Ba )gydF4y2Ba
速度(gydF4y2Ba )汽车的gydF4y2Ba
由于角度偏差和距离值具有不同的单位和尺度,因此将训练数据归一化到范围[0 1]。这样做可以消除成本函数对较大输入误差的敏感性。训练数据结构包含原始输入值和输出值(gydF4y2BaxgydF4y2Ba
和gydF4y2BaygydF4y2Ba
)和它们的标准化值(gydF4y2BaxngydF4y2Ba
和gydF4y2BayngydF4y2Ba
).gydF4y2Ba
在数据生成过程中,当车辆到达停车位末端的最小安全距离并与停车方向对齐时,即达到成功停车条件。gydF4y2Ba
本例使用FIS树作为模糊停车系统。调优过程的第一阶段是构造和训练初始FIS,稍后将其组装到FIS树中。然后通过对整个FIS树的参数进行微调来提高性能。gydF4y2Ba
为了构造和调整初始模糊系统,本例使用ANFIS,它提供了比其他调整方法更快的收敛速度。gydF4y2Ba
FIS树及其组件模糊系统的设计解决了以下问题。gydF4y2Ba
FIS树有5个输入和2个输出,它们与训练数据集中的值相匹配。gydF4y2Ba
由于ANFIS支持单一输万博1manbetx出,为转向角度构建独立的模糊子系统(gydF4y2Ba )及速度(gydF4y2Ba ).gydF4y2Ba
为了获得更好的性能,每个子系统都使用独立的fis进行前后运动。gydF4y2Ba
使用额外的FIS组合每个子系统的向前和向后运动控制器。gydF4y2Ba
训练前进运动控制器转向,gydF4y2BaforwardPhiFISgydF4y2Ba
,使用培训输入和输出数据。为此,首先提取归一化的转向角训练数据。gydF4y2Ba
forwardPhi = trainingData.yn (: 1);gydF4y2Ba
然后,由于这个系统只用于前进运动,将转向角输出值设置为0为负速度值。gydF4y2Ba
negSpeedId = trainingData.y(:,2) < 0;forwardPhi (negSpeedId) = 0;gydF4y2Ba
创建ANFIS训练选项,并配置显示,只显示最终的训练结果。gydF4y2Ba
aoptions = anfisOptions;aoptions。DisplayANFISInformation = false;aoptions。DisplayErrorValues = false;aoptions。DisplayStepSize = false;gydF4y2Ba
使用三个mf作为第一个输入(gydF4y2Ba ),因为它既有正数也有负数。使用两个mf作为距离输入。gydF4y2Ba
aoptions。InitialFIS = [3 2 2 2 2];gydF4y2Ba
火车gydF4y2BaforwardPhiFISgydF4y2Ba
.gydF4y2Ba
forwardPhiFIS =简称anfis ([trainingData。xn forwardPhi], aoptions);gydF4y2Ba
最小训练RMSE = 0.100129gydF4y2Ba
以类似的方式训练前进速度控制器,gydF4y2BaforwardSpeedFISgydF4y2Ba
.gydF4y2Ba
forwardSpeed = trainingData.yn (:, 2);forwardSpeed (negSpeedId) = 0;forwardSpeedFIS =简称anfis ([trainingData。xn forwardSpeed], aoptions);gydF4y2Ba
最小训练RMSE = 0.161479gydF4y2Ba
接下来,调整向后运动控制器的转向角度和速度,gydF4y2BabackwardPhiFISgydF4y2Ba
和gydF4y2BabackwardSpeedFISgydF4y2Ba
,分别。在本例中,将正速度值的输出值设置为0。gydF4y2Ba
火车gydF4y2BabackwardPhiFISgydF4y2Ba
.gydF4y2Ba
backwardPhi = trainingData.yn (: 1);backwardPhi (~ negSpeedId) = 0;backwardPhiFIS =简称anfis ([trainingData。xn backwardPhi], aoptions);gydF4y2Ba
最小训练RMSE = 0.112362gydF4y2Ba
火车gydF4y2BabackwardSpeedFISgydF4y2Ba
.gydF4y2Ba
backwardSpeed = trainingData.yn (:, 2);backwardSpeed (~ negSpeedId) = 0;backwardSpeedFIS =简称anfis ([trainingData。xn backwardSpeed], aoptions);gydF4y2Ba
最小训练RMSE = 0.0642125gydF4y2Ba
对于每个FIS,指定相应的FIS名称。gydF4y2Ba
forwardPhiFIS。Name =gydF4y2Ba“forwardPhiFIS”gydF4y2Ba;forwardSpeedFIS。Name =gydF4y2Ba“forwardSpeedFIS”gydF4y2Ba;backwardPhiFIS。Name =gydF4y2Ba“backwardPhiFIS”gydF4y2Ba;backwardSpeedFIS。Name =gydF4y2Ba“backwardSpeedFIS”gydF4y2Ba;gydF4y2Ba
接下来,火车gydF4y2BaphiFISgydF4y2Ba
,它结合了由gydF4y2BaforwardPhiFISgydF4y2Ba
和gydF4y2BabackwardPhiFISgydF4y2Ba
.为…生成输入训练数据gydF4y2BaphiFISgydF4y2Ba
、评估gydF4y2BaforwardPhiFISgydF4y2Ba
和gydF4y2BabackwardPhiFISgydF4y2Ba
使用标准化的输入训练数据。gydF4y2Ba
eoptions = evalfisOptions;eoptions。EmptyOutputFuzzySetMessage =gydF4y2Ba“没有”gydF4y2Ba;eoptions。NoRuleFiredMessage =gydF4y2Ba“没有”gydF4y2Ba;eoptions。OutOfRangeInputValueMessage =“没有”gydF4y2Ba;forwardPhi = evalfis (forwardPhiFIS trainingData.xn eoptions);backwardPhi = evalfis (backwardPhiFIS trainingData.xn eoptions);gydF4y2Ba
每个输入使用五个mf。在这种情况下,您可以使用更多的mf,因为gydF4y2BaphiFISgydF4y2Ba
只有两个输入。gydF4y2Ba
aoptions。InitialFIS = 5;gydF4y2Ba
火车gydF4y2BaphiFISgydF4y2Ba
使用生成的输入数据和归一化的输出训练数据。gydF4y2Ba
phiFIS = anfis([forwardPhi backwardPhi trainingData.yn(:,1)],aoptions);gydF4y2Ba
最小训练RMSE = 0.120349gydF4y2Ba
phiFIS。Name =gydF4y2Ba“phiFIS”gydF4y2Ba;gydF4y2Ba
同样,火车gydF4y2BaspeedFISgydF4y2Ba
,将生成的前进和后退速度值组合起来gydF4y2BaforwardSpeedFISgydF4y2Ba
和gydF4y2BabackwardSpeedFISgydF4y2Ba
,分别。为…生成输入训练数据gydF4y2BaspeedFISgydF4y2Ba
、评估gydF4y2BaforwardSpeedFISgydF4y2Ba
和gydF4y2BabackwardSpeedFISgydF4y2Ba
使用标准化的输入训练数据。gydF4y2Ba
forwardSpeed = evalfis (forwardSpeedFIS trainingData.xn eoptions);backwardSpeed = evalfis (backwardSpeedFIS trainingData.xn eoptions);speedFIS = anfis([forward - speed backwardSpeed trainingData.yn(:,2)],aoptions);gydF4y2Ba
最小训练RMSE = 0.0969036gydF4y2Ba
speedFIS。Name =gydF4y2Ba“speedFIS”gydF4y2Ba;gydF4y2Ba
调优过程的下一个阶段是使用之前调优的组件FISs构造和调优模糊树。要创建FIS树,首先根据FIS树的总体设计定义组件FIS之间的连接。gydF4y2Ba
连接= [gydF4y2Ba...gydF4y2Ba“forwardPhiFIS /输出”gydF4y2Ba“phiFIS / input1”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“backwardPhiFIS /输出”gydF4y2Ba“phiFIS / input2”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardSpeedFIS /输出”gydF4y2Ba“speedFIS / input1”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“backwardSpeedFIS /输出”gydF4y2Ba“speedFIS / input2”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input1”gydF4y2Ba“backwardPhiFIS / input1”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input1”gydF4y2Ba“forwardSpeedFIS / input1”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input1”gydF4y2Ba“backwardSpeedFIS / input1”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input2”gydF4y2Ba“backwardPhiFIS / input2”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input2”gydF4y2Ba“forwardSpeedFIS / input2”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input2”gydF4y2Ba“backwardSpeedFIS / input2”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input3”gydF4y2Ba“backwardPhiFIS / input3”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input3”gydF4y2Ba“forwardSpeedFIS / input3”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input3”gydF4y2Ba“backwardSpeedFIS / input3”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input4”gydF4y2Ba“backwardPhiFIS / input4”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input4”gydF4y2Ba“forwardSpeedFIS / input4”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input4”gydF4y2Ba“backwardSpeedFIS / input4”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input5”gydF4y2Ba“backwardPhiFIS / input5”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input5”gydF4y2Ba“forwardSpeedFIS / input5”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba“forwardPhiFIS / input5”gydF4y2Ba“backwardSpeedFIS / input5”gydF4y2Ba;gydF4y2Ba...gydF4y2Ba];gydF4y2Ba
构建FIS树。gydF4y2Ba
fuzzySystems = [gydF4y2Ba...gydF4y2BaforwardPhiFIS backwardPhiFISgydF4y2Ba...gydF4y2BaforwardSpeedFIS backwardSpeedFISgydF4y2Ba...gydF4y2BaphiFIS speedFIS];拳头= fistree (fuzzySystems、连接);gydF4y2Ba
接下来,对的MF和规则参数值进行微调gydF4y2Ba拳头gydF4y2Ba
.为了获得更好的性能,调整单个输出的模糊系统参数。gydF4y2Ba
首先,调整FIS参数的转向角度。gydF4y2Ba
其次,调整FIS参数以提高速度。gydF4y2Ba
要为一个输出调优FIS树参数而不考虑其他输出值,可以临时从FIS树中删除其他输出。gydF4y2Ba
为了调整FIS树的转向角度输出,删除第二个输出gydF4y2Ba拳头gydF4y2Ba
获取可调设置gydF4y2BaforwardPhiFISgydF4y2Ba
,gydF4y2BabackwardPhiFISgydF4y2Ba
,gydF4y2BaphiFISgydF4y2Ba
.gydF4y2Ba
fisTin1 =拳头;fisTin1.Outputs (2) = [];[,,规则]= getTunableSettings (fisTin1,gydF4y2Ba“金融中间人”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba[gydF4y2Ba“forwardPhiFIS”gydF4y2Ba“backwardPhiFIS”gydF4y2Ba“phiFIS”gydF4y2Ba]);gydF4y2Ba
创建一个调优选项集。gydF4y2Ba
toptions = tunefisOptions;gydF4y2Ba
使用gydF4y2BapatternsearchgydF4y2Ba
方法进行微调,并将最大迭代数设置为10。如果您有Parallel Computing Toolbox™软件,您可以通过设置来提高调优过程的速度gydF4y2Batoptions。UseParallelgydF4y2Ba
来gydF4y2Ba真正的gydF4y2Ba
.如果您没有“并行计算工具箱”软件,请设置gydF4y2Ba选项。UseParallelgydF4y2Ba
来gydF4y2Ba假gydF4y2Ba
,为默认值。gydF4y2Ba
toptions。方法=gydF4y2Ba“patternsearch”gydF4y2Ba;toptions.MethodOptions.MaxIterations = 10;gydF4y2Ba
为了改善模式搜索结果,设置方法选项gydF4y2BaUseCompletePollgydF4y2Ba
来gydF4y2Ba真正的gydF4y2Ba
.gydF4y2Ba
toptions.MethodOptions.UseCompletePoll = true;gydF4y2Ba
为了重现性,将随机数生成器种子设置为默认。gydF4y2Ba
rng (gydF4y2Ba“默认”gydF4y2Ba)gydF4y2Ba
培训可能需要密集的计算,需要几个小时才能完成。为了节省时间,通过设置加载预先训练好的FIS树gydF4y2BaruntunefisgydF4y2Ba
来gydF4y2Ba假gydF4y2Ba
.要运行调优,可以设置gydF4y2BaruntunefisgydF4y2Ba
来gydF4y2Ba真正的gydF4y2Ba
.gydF4y2Ba
runtunefis = false;gydF4y2Ba
调整FIS树。gydF4y2Ba
如果gydF4y2Baruntunefis fisTin1 = tunefis(fisTin1,[in;out;rule],gydF4y2Ba...gydF4y2BatrainingData.xn trainingData.yn (: 1) toptions);gydF4y2Ba其他的gydF4y2BapreTunedFIST =负载(gydF4y2Ba“tunedFIST”gydF4y2Ba);fisTout1 = preTunedFIST.fisTout1;gydF4y2Ba结束gydF4y2Ba
接下来,调整其他FIS树输出首先删除速度输出和添加转向角度输出。然后,获取可调设置gydF4y2BaforwardSpeedFISgydF4y2Ba
,gydF4y2BabackwardSpeedFISgydF4y2Ba
,gydF4y2BaspeedFISgydF4y2Ba
.gydF4y2Ba
fisTin2 = fisTout1;fisTin2.Outputs (1) =gydF4y2Ba“speedFIS /输出”gydF4y2Ba;[,,规则]= getTunableSettings (fisTin2,gydF4y2Ba“金融中间人”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba[gydF4y2Ba“forwardSpeedFIS”gydF4y2Ba“backwardSpeedFIS”gydF4y2Ba“speedFIS”gydF4y2Ba]);gydF4y2Ba
调整FIS树。训练完成后,重置FIS树的输出。gydF4y2Ba
如果gydF4y2Baruntunefis rng (gydF4y2Ba“默认”gydF4y2Ba) / /输入/输出gydF4y2Ba...gydF4y2BatrainingData.xn trainingData.yn (:, 2), toptions);fisTout.Outputs (1) =gydF4y2Ba“phiFIS /输出”gydF4y2Ba;fisTout.Outputs (2) =gydF4y2Ba“speedFIS /输出”gydF4y2Ba;gydF4y2Ba其他的gydF4y2BafisTout = preTunedFIST.fisTout;gydF4y2Ba结束gydF4y2Ba
检查输出的个体训练误差(均方根误差)。gydF4y2Ba
呃= trainingData。yn-evalfis(fisTout,trainingData.xn,eoptions); err = err.*err; rmsePhi = sqrt(mean(err(:,1)))
rmsePhi = 0.1186gydF4y2Ba
rmseSpeed =√意味着犯错(:,2)))gydF4y2Ba
rmseSpeed = 0.0967gydF4y2Ba
与anfi训练的模糊系统相比,性能并没有明显的改善。gydF4y2Ba
训练数据包含有限的初始条件集。因此,调整后的FIS树在以下情况下是有效的。gydF4y2Ba
汽车的前面必须首先设在前面的停车位gydF4y2Ba .gydF4y2Ba
汽车必须与道路方向紧密对齐,即汽车初始方向必须为gydF4y2Ba 或gydF4y2Ba 度。gydF4y2Ba
汽车最初必须至少是gydF4y2Ba 距离道路两边的距离。也就是说,gydF4y2Ba 英国《金融时报》和gydF4y2Ba 英国《金融时报》。gydF4y2Ba
从右侧停车gydF4y2Ba
调整后的FIS接受了从右侧正面停车的训练(gydF4y2Ba Deg)道路。gydF4y2Ba
的正面停车仿真结果如下所示gydF4y2Ba 英国《金融时报》,gydF4y2Ba 英国《金融时报》,gydF4y2Ba 度。gydF4y2Ba
parkFromRight = true;xf = 24;yf = 4.5;θ= 180;图simulateParking (parkFromRight fisTout、trainingData xf, yf,θ)gydF4y2Ba
停gydF4y2Ba
在不同的初始条件下模拟停车gydF4y2Ba 英国《金融时报》,gydF4y2Ba 英国《金融时报》,gydF4y2Ba 度。gydF4y2Ba
parkFromRight = true;xf = 22;yf = 5;θ= 170;图simulateParking (parkFromRight fisTout、trainingData xf, yf,θ)gydF4y2Ba
停gydF4y2Ba
在这两种情况下,汽车都可以使用前后运动模式自动停车。然而,汽车在停车位的左右两边并不保持相等的距离值。这种行为在人类司机中很常见,他们通常不会把车停在停车位的正中间。相反,它们使用与两边的安全距离。gydF4y2Ba
从左侧停车gydF4y2Ba
你可以使用相同的模糊系统从左侧进行正面停车(gydF4y2Ba
度)。为此,设置gydF4y2BaparkFromRightgydF4y2Ba
为假,其原因gydF4y2BasimulateParkinggydF4y2Ba
修改输入值的方法如下:gydF4y2Ba
切换角度偏差输入的符号gydF4y2Ba .gydF4y2Ba
切换左边的距离输入(gydF4y2Ba )和正确(gydF4y2Ba )。gydF4y2Ba
从左侧模拟自动停车gydF4y2Ba 英国《金融时报》,gydF4y2Ba 5英尺,gydF4y2Ba 度。gydF4y2Ba
parkFromRight = false;xf = 22;yf = 5;θ= 0;图simulateParking (parkFromRight fisTout、trainingData xf, yf,θ)gydF4y2Ba
停gydF4y2Ba
模拟停车的另一个初始条件gydF4y2Ba 英国《金融时报》,gydF4y2Ba 5英尺,gydF4y2Ba 度。gydF4y2Ba
parkFromRight = false;xf = 23.8;yf = 5.2;θ= 7;图simulateParking (parkFromRight fisTout、trainingData xf, yf,θ)gydF4y2Ba
停gydF4y2Ba
在这种情况下,类似于右侧停车的结果,汽车遵循前后运动来安全停车。gydF4y2Ba
目前的模糊系统设计存在以下不足:gydF4y2Ba
生成的数据只考虑了自动停车的两种运动模式。因此,自动停车系统的健壮性有限,并不能代表人类驾驶员的所有普通技能。例如,下图展示了另一种常见的场景,司机后退并向右转,以从已占用的空间腾出右侧的空间。gydF4y2Ba
生成的数据使用gydF4y2Ba 转向角度的限制。由此产生的大曲率半径增加了无振荡停车的难度。gydF4y2Ba
本例中使用的传感器模型是一个普通的占用检测模型,其中距离值是从汽车的中心径向检测的。此外,当汽车各个角落的距离数据相似时,模糊系统可以在仿真中产生意想不到的结果和局部最优。一个更好的选择是模型范围数据正常的每一边的汽车,如下图所示。在这种情况下,从汽车两边测量的距离是相互独立的。gydF4y2Ba
ANFIS只万博1manbetx支持Sugeno fis,这可能并不总是产生平滑的控制表面。gydF4y2Ba
要更新FIS树设计,您可以考虑以下潜在的更改。gydF4y2Ba
使用Mamdani fis,它支持ANFIS之外万博1manbetx的其他调优方法。gydF4y2Ba
利用人的推理设计模糊推理系统的初始规则库,并根据训练数据进行调整。gydF4y2Ba
使用自定义成本函数自动生成数据,并使用基于奖励的停车模拟优化停车轨迹。例如,请参见gydF4y2Ba用自定义代价函数优化模糊机器人避障系统gydF4y2Ba.gydF4y2Ba
tunefisgydF4y2Ba
|gydF4y2BagetTunableSettingsgydF4y2Ba
|gydF4y2BafistreegydF4y2Ba