简介:模型预测控制在机器人学的应用,涉及线性MPC、非线性MPC以及粒子群优化算法的JLT问题求解。
P7课程笔记:基于马尔可夫决策过程的运动规划-深蓝路径规划P7笔记-CSDN博客
作业代码实现:【MPC】追踪锥形螺旋:深蓝路径规划课程P8作业-CSDN博客
一、引言
1.1名词解释
模型预测控制可以分别从三个关键词来看:
模型(moodel):主要分为两个,一个是问题模型,一个是系统模型,以经典的小球运动为例,f=ma就是系统模型,最下化当前位置和目标位置的差就是问题模型。
预测(prediction):包含三个内容:输入、其他状态,参数空间,比如外力就是输入,其他状态包括速度、加速度、位置等,那参数空间是什么呢?参数空间是为了把力的未来的状态(无限个,不可解)转化为一个多项式描述,这个多项式的参数是有限个的,是可以描述的,称为参数空间。这样在后面优化问题模型就可以只优化多项式的参数即可。
参数空间的常用处理方式有:zero order hold(离散采样)、多项式(Polynomial)、贝塞尔曲线(B-spline)、基于机器学习的方法。
控制(control):在参数空间里面选择一个最优的参数组合。
1.2优化函数建模
目标函数:对一般的问题优化的目标函数主要分为final cost:关注最后tf时刻的状态和running cost:关注t0-tf期间的消耗。
约束条件分为四部分:动力学约束、不等式约束(最大速度限制、最大加速度限制、高度限制)、等式约束(起始点和终止点的参数)和障碍物避免约束(防止轨迹进入障碍物内,往往是非凸的,需要进行特殊处理)。
优化目标:通过在参数空间内找到最佳的u使得目标函数最小化。
优化方法:搜索(图搜索、随机搜索)、凸优化(二次规划)、非凸优化(SQP、Particle swarm optimization),标红的部分是采用的方案。
1.3 Tube Based MPC整体流程
在经典的Control模型中,通过优化解出u*,带入到系统里执行,然后通过观测再解出新的u*',这样的方式存在的问题是,优化的频率太低,无法跟随控制系统的频率(大概是200-1000hz)。于是引出了Tube Based MPC,实现不同频率模块的解耦:
外环:低频控制模型中的X*;
内环:高频跟踪外环优化出的轨迹。
可以选用MATLAB MPC toolbox、μAO-MPC、Acado toolkit、YANE、Multi-Parametric Toolbox 3等软件求解建模。
二、线性MPC
2.1基本模型
系统建模:一般是根据动力学模型,预测未来的4s,离散成20份,每份dt0.2s,通过矩阵可以描述预测模型PVA,以及参数空间J。每当选定有一定的参数后,就可以预测未来的PVA。
问题建模:
目标①:PVA终点都为0;
目标②:轨迹光滑,减少输入幅值。
问题求解:
可结合起来写,可以将问题转化为二次规划问题,利用MATLAB中的quadprog求解,其中Bp、Bv、Ba是和初始状态相关的函数:
2.2包含不等式约束
2.2.1常规解法
比如说对速度v和加速度a约束其范围在[-1,,1]之间,
写出矩阵形式为以下形式:
其中,
,把不等式拆开带入后写成小于等于的形式(quadprog求解器的要求):
2.2.2软约束的解法
但是在一些特定的情况,没有解:比如你要求速度从12m/s降到1m/s,但是你预测的时长只有4s,这明显是无解的。于是又两种解决手段:①是增大你的预测时间,这样会带来计算量上升,但是对系统正定是有益的;②采用软约束(soft constraints)的方法,将不等式转化为惩罚项带入目标函数中。
一般来说,对输入的不等式可以采用软约束,输出的不等式采用硬约束(避免机械损伤等)。
于是引入参数L,以速度的约束为例:
当L足够大的时候,这个式子是一定满足的;但是太大的话会导致这个式子没有含义了,于是在目标函数中加入对L的约束,限制其过大,一般会把该项惩罚系数w5设置的很大:
这个式子同样可以利用二次规划的方式进行求解,这种方法的优势是会对违反约束条件的状态更加鲁棒。
示例代码解读:
2.3线性MPC的缺陷
①要求系统模型是线性的或者是被线性化的。
②对障碍物处理不理想。障碍物通常是凸的,但是可通行区域不是凸的。需要利用许多“或”进行表示,而非凸的优化问题对初值比较敏感。
三、非线性MPC
非线性MPC最终都是要回归到线性MPC上。
3.1BSCP
3.2Jerk limited trajectory
二阶积分器模型:
这是一个二阶积分器的模型,输入不仅有加速度a,还有加加速度jerk的限制,而且还有状态上的幅值限制。最后加加速度一般是三种情况,①最大jmax②最小jmin③0。那么加速度就会是三角形或者是梯形,那么与坐标轴围成的面积就是变化速度ΔV。先然他加速到最大加速度amax度再下降到0,那么根据现有的三角形覆盖面积比较目标的V,求解是一个分类情况讨论的问题:
①面积太大了,缩小面积,让他上升一个t1后下降到0.(如左图)
②面积太小了,让它变成一个梯形,增加的是一个长方形,计算Δt2即可。 (如右图)
三阶积分器模型 :
先然他加速到最大速度Vmax度再下降到0,那么根据现有的三角形覆盖面积比较目标的德ΔP,求解是一个分类情况讨论的问题:
①面积太大了,缩小面积,让他上升一个t1后下降到0.(如左图)
②面积太小了,让它变成一个梯形,增加的是一个长方形,计算Δt2即可。 (如右图)
3.3JLT在安全走廊的应用
这是解决从A点飞到D点的问题,实时的方案可以分为以下几步:
①首先生成AB路径并执行;
②再从A→B的过程中,生成当前点到C点的轨迹 。如果在某一个点可以生成在安全走廊内部的到C点的轨迹,执行该轨迹。
③在飞往C的过程中,不断生成当前点到D点的轨迹,直到生成一条安全走廊内的轨迹,执行。
(另外一种方案从开始就生成全局轨迹的话,可以利用二分法进行查找)
JLT方案优势:可以放在算力比较低的平台上,甚至是飞控里面,而且实时性比较高。
3.4JLT解决本地MPC问题
3.4.1基本流程
全局MPC问题复杂度高,本地MPC主要是解决突发情况。
①利用传感器感知(激光雷达,视觉)进行感知EDT地图;
②用A*、JPS或者其他全局规划算法生成全局轨迹;
③利用动力学进行优化,使得轨迹可执行。在这里可以用飞机飞向拐点,当离拐点足够近,边飞向下一个拐点。这里就可以用JLP找到最优的轨迹。
3.4.2关键问题
我们的目标是找到一个快速和防撞的轨迹。
我们已知初始状态的PVA,我们要找一个Xf,我们是要找一个cost最低的Xf并执行。但是这样是由碰撞风险的,那么怎么办呢?
1防撞问题的解决:
如果实时的检测轨迹是否经过障碍物,这明显是愚蠢的,消耗十分大的,而且轨迹不够平滑。
于是要提出一种基于事件管理的MPC触发器。其中tube时刻保持对轨迹的跟踪,只有当以下事件发生时,才会重新规划:①当前轨迹已经执行完成;②全局轨迹发生变化。
2利用软约束解决防撞问题:
由于JLT天生满足动力学约束、不等式约束(最大速度限制、最大加速度限制、高度限制)、等式约束(起始点和终止点的参数),因此优化的时候只需要考虑避障即可。在这里可以用大M法对经过障碍物轨迹进行惩罚。
通过对不同的Xf进行打分,选择打分最低的那一项进行执行。
3.4.3基于粒子群优化算法JLT
上述问题是没有梯度的,会因为障碍物的原因存在断面。
粒子群优化的思想是在空间里随机撒点并打分,然后会有一个粒子群收敛到一个点。
PSO算法基本流程:
对于每个点都有一个打分,并有一个速度(下次迭代的方向)
每次迭代后会对速度进行更新,一共是三个方向的综合:①惯性方向②全局最优的方向③历史最优的方向。
然后去找下一个点,并进行循环,直到找到最优的*.
JLT执行:
每次朝着*的方向飞行Δt事件,并再次计算PSO,寻找下一个更好的点。
但是PSO算法本身是一个费时间的方案,为了省时间有基于神经网络的JLT,但是本文不打算就此展开。