避障使用自适应预测控制模型
这个例子展示了如何使一辆汽车(自我)遵循参考速度,避免障碍巷使用适应性政策委员会。这样做,你们更新植物模型和线性混合输入/输出约束在运行时。
避障
车辆避障(或通过援助)有一个传感器,如激光雷达测量距离的障碍在前面的车辆和在同一车道上。障碍可以是静态的,比如一个大罐子洞,或移动,如一个缓慢移动的车辆。最常见的操作从司机暂时搬到另一个车道,开车过去的障碍,回到原来的车道。
作为自主驾驶体验的一部分,一个避障系统可以执行的操作而无需人工干预。在本例中,您设计一个避障系统,将自我的车在一个静态障碍巷使用油门和转向角。该系统使用了一个自适应模型预测控制器,更新预测模型和混合输入/输出限制在每个控制间隔。
汽车模型
自我的车有一个矩形的长度5米,宽2米。该模型有四个州:
——全球汽车中心的X位置
——全球汽车中心的Y位置
汽车的航向角(
0
当朝东,逆时针积极)汽车的速度(正面)
有两个操纵变量:
节流(减速时正加速时,负)
转向角(0与汽车时,逆时针积极)
使用一个简单的非线性模型来描述自我的动力汽车:
分析雅克比用于构造线性状态空间模型的非线性预测模型的名义操作点。
在哪里汽车的长度。
假设所有的州是可衡量的。在名义操作点,自我汽车驱动东以恒定的速度20.
米每秒。
V = 20;x0 = [0;0;0;V];情况= [0;0);
离散化的连续时间模型使用零持有人方法obstacleVehicleModelDT
函数。
t = 0.02;(广告、Bd、Cd, Dd, U, Y, X, DX) = obstacleVehicleModelDT (Ts, x0,情况);dsys = ss(广告、Bd、Cd、弟弟、“t”、Ts);dsys。InputName = {“节流”,“δ”};dsys。StateName = {“X”,“Y”,“θ”,“V”};dsys。OutputName = dsys.StateName;
道路和障碍物信息
在这个例子中,假定:
路是直的,并且有三个车道。
每个车道宽四米。
自我中心的车开在中间车道时不通过。
不失一般性,自我汽车通过一个障碍只有从左边车道(快)。
车道= 3;巷宽= 4;
本例中的障碍是不移动的对象在中间车道中心的大小相同的自我的车。
障碍=结构;障碍。长度= 5;障碍。宽度= 2;
把障碍50
米。
障碍。X = 50;障碍。Y = 0;
创建一个虚拟的安全区域周围的障碍,以便自我车不太接近障碍时传递它。安全区域集中的障碍有:
长度等于两辆汽车的长度
宽度等于两个车道宽度
障碍。safeDistanceX = obstacle.Length;障碍。safeDistanceY =巷宽;障碍= obstacleGenerateObstacleGeometryInfo(障碍);
在这个例子中,假定激光雷达装置可以检测一个障碍30.
米在汽车前面。
障碍。DetectionDistance = 30;
情节在名义条件如下:
自我的车,绿点黑色的边界
横向车道——冲蓝线
障碍- - - - - -红色
x
黑色的边界安全地带——冲红边界。
f = obstaclePlotInitialCondition (x0,障碍、巷宽车道);
MPC设计名义操作点
设计一个模型预测控制器,可以使自我汽车维护所需的速度和保持车道中间的中心。
状态= mpcverbosity (“关闭”);mpcobj = mpc (dsys);
预测地平线是25
步骤,相当于0.5秒。
mpcobj。PredictionHorizon = 60;% 25;mpcobj。ControlHorizon = 2;% 5;
防止自我汽车加速或减速太快,添加一个硬约束的0.2 (m / s ^ 2)节流变化率。
mpcobj.ManipulatedVariables (1)。杀鼠灵= -0.2 * Ts;mpcobj.ManipulatedVariables (1)。RateMax = 0.2 * Ts;
同样,加硬约束6度每秒的转向角的变化。
mpcobj.ManipulatedVariables (2)。杀鼠灵= -π/ 30 * Ts;mpcobj.ManipulatedVariables (2)。RateMax =π/ 30 * Ts;
规模的油门和转向角各自的操作范围。
mpcobj.ManipulatedVariables (1)。ScaleFactor = 2;mpcobj.ManipulatedVariables (2)。ScaleFactor = 0.2;
因为只有两个操纵变量,实现零稳态抵消时,你可以只选择两个输出完美的跟踪。在本例中,选择Y位置和速度通过设置权重的其他两个输出(X和θ)为零。这样做可以让这些其他的值输出浮动。
mpcobj.Weights。OutputVariables = (30 0 0 1);
更新控制器的名义操作条件。一个离散时间工厂:
U =情况
X = x0
Y = Cd * x0 + Dd *情况
DX =广告* X0 + Bd *情况——X0
mpcobj.Model。名义=结构(“U”U“Y”,Y,“X”,X,“DX”,DX);
为避障策略指定混合I / O限制
有不同的策略,使自我汽车避免路上的一个障碍。例如,实时路径规划可以计算一个新的路径检测到障碍物后,控制器遵循这条道路。
在这个例子中,使用不同的方法,利用了MPC显式地处理约束的能力。当检测到一个障碍,它定义了一个区域在路上(约束)的自我在预测地平线汽车不得进入。在下次控制区间,该地区是重新定义了基于自我的新职位的车和障碍,直到完成。
为了避免定义区域,使用下面的混合输入/输出约束:
E * u + F * y < = G
在哪里u
被控变量向量和吗y
是输出变量向量。你可以更新约束矩阵E
,F
,G
当控制器运行。
第一个约束是一个上限(在这三车道公路)。
E1 = [0 0];F1 = [0 1 0 0];G1 / 2 =巷宽*车道;
第二个约束是一个下界(在这三车道公路)。
E2 = [0 0];F2 = [0 1 0 0];G2 =巷宽*车道/ 2;
第三个限制是避障。即使没有检测到障碍的名义操作条件,您必须添加一个“假”约束在这里,因为你不能改变在运行时的尺寸约束矩阵。假的约束,使用相同的约束形式作为第二个约束。
E3 = [0 0];F3 = [0 1 0 0];G3 / 2 =巷宽*车道;
指定混合输入/输出约束控制器使用setconstraint
函数。
setconstraint (mpcobj [E1, E2、E3], [F1, F2, F3], [G1、G2、G3], [1; 1; 0.1]);
模拟控制器
在本例中,您使用一个适应性MPC控制器,因为它更有效地处理非线性车辆动力学比传统MPC控制器。传统的MPC控制器使用一个常数工厂模型。然而,自适应MPC允许您提供一个新的植物模型在每个控制区间。因为新模型更准确地描述了植物动力学新操作条件,一种自适应MPC控制器执行比传统的MPC控制器。
同时,使控制器能够避免周围的安全区域障碍,你更新第三混合约束在每个时间间隔的控制。基本上,自我汽车必须高于线形成的自我汽车安全区域的左上角。更多细节,开放obstacleComputeCustomConstraint
。
使用一个恒定的参考信号。
refSignal = [0 0 0 V];
初始化装置和控制器。
x = x0;u =情况;egoStates = mpcstate (mpcobj);
仿真时间4
秒。
T = 0: Ts: 4;
日志为绘制仿真数据。
saveSlope = 0(长度(T), 1);saveIntercept = 0(长度(T), 1);ympc = 0(长度(T)大小(Cd, 1));umpc = 0(长度(T)大小(Bd, 2));
运行仿真。
为k = 1:长度(T)%获得新工厂模型和输出测量间隔k | |。(广告、Bd、Cd, Dd, U, Y, X, DX) = obstacleVehicleModelDT (Ts, X, U);测量= Cd * x + Dd * u;:ympc (k) =测量”;%确定车辆是否看到了障碍,并更新混合当检测到障碍% I / O限制。检测= obstacleDetect (x,障碍,巷宽);[E, F, G, saveSlope (k), saveIntercept (k)] =…obstacleComputeCustomConstraint (x,检测、障碍、巷宽车道);%准备新工厂模型和名义条件适应性政策委员会。newPlant = ss(广告、Bd、Cd、弟弟、“t”、Ts);newNominal =结构(“U”U“Y”,Y,“X”,X,“DX”,DX);%准备新的混合I / O限制。选择= mpcmoveopt;选项。CustomConstraint =结构(“E”,E,“F”F‘G’G);%计算最优移动使用更新后的植物,名义上的条件,%和约束。(u,信息)= mpcmoveAdaptive (mpcobj、egoStates newPlant, newNominal,…测量,refSignal,[],选项);:umpc (k) = u ';%更新植物状态为下一次迭代k + 1 | |。x =广告* x + Bd * u;结束mpcverbosity(状态);
分析结果
情节自我的轨道车(黑线)和第三混合I / O限制(冲绿线)在避障策略。
图(f)为k = 1:长度(saveSlope) X = (0, 50, 100);* X + Y = saveSlope (k) saveIntercept (k);线(X, Y,“线型”,“——”,“颜色”,‘g’)结束情节(ympc (: 1) ympc (:, 2),“- k”);轴([0 ympc(结束,1)巷宽*车道/ 2巷宽*车道/ 2))%重置轴
MPC控制器成功地完成了任务而无需人工干预。
在仿真软件模拟控制器金宝app
打开仿真软件模型。金宝app避障系统包含多个组件:
工厂模式发生器:产生新的植物模型和名义值。
障碍检测:检测障碍(不包括激光雷达传感器)。
混合约束发生器:产生新的I / O限制。
自适应MPC:控制避障策略。
mdl =“mpc_ObstacleAvoidance”;open_system (mdl) sim (mdl)
仿真结果是相同的命令行结果。支持快金宝app速原型工作流,您可以生成C / c++代码块的避障系统。
bdclose (mdl)