目录
DFBC
定义:对一些存在平坦输出的非线性系统,如果可以找到一组系统输出,使得所有状态变量和输入变量都可以由这组输出及其有限阶微分进行表示,那么该系统即为微分平坦系统。
微分平坦使用系统的输出和其导数对状态变量和输入变量进行表示,通过选择合理的输出变量可以对系统进行有效的降维。这使得最优控制问题的维数降低到能在实际应用中实时计算的数目。
【https://blog.csdn.net/qq_40870689/article/details/100878240】
判定方法:1.简而言之,如果一个系统能够找到平坦输出,使得系统的状态与输入都可以用平坦输出及其有限阶导数表示,这样的系统统称为平坦系统。这即是平坦系统的定义也是判定系统是否平坦的-个充分条件。
[基于微分平坦理论的四旋翼无人机轨迹规划的研究_黄敏]
学长经验:意义就是有利于轨迹跟踪,跟踪性能更好;因为在该方法中,考虑了轨迹三阶和四阶导数的影响。有一点微分预测的感觉(?)
当前2022最先进的非预测方法:基于微分平面度的控制器(DFBC)相比,NMPC的计算要求极高。
该方法在自动精确跟踪敏捷轨迹方面也有很大的潜力。
虽然目前最先进的DFBC还没有实现像NMPC在[4]中那样快速的敏捷飞行,但其较高的计算效率和跟踪精度使得将NMPC应用于敏捷轨迹跟踪的必要性受到质疑。
在一些计算预算有限的微型飞行器(如crazyfly[45])上运行NMPC不切实际。相比之下,我们可以将DFBC部署在具有低端处理器的轻型无人机上,并以超过20米/秒的速度进行敏捷飞行,只要平台有足够的推重比。
NMPC的另一个缺点是它可能存在数值收敛问题。不同于DFBC已经证明了每个子模块的稳定性或收敛性,本次比较中使用的非线性NMPC依赖于非线性优化算法的数值收敛性。
NMPC对旋转模型失配也表现出更高的鲁棒性。在真实的实验中,我们也进行了没有INDI低级控制器的测试以进行比较。因此,两种方法都受到旋转动力学模型不确定性的影响。在这种情况下,NMPC仍然能够跟踪所有的轨迹,而DFBC经历了几次崩溃,跟踪RMSE比NMPC高得多。
高达20米/秒的真实飞行结果证明了在NMPC和DFBC方法上应用INDI内环的必要性。
【A Comparative Study of Nonlinear MPC and Differential-Flatness-based Control for Quadrotor Agile Flight 2022IEEE】
【A Comparative Study of Nonlinear MPC and Differential-Flatness-based Control for Quadrotor Agile Flight】
四旋翼所有的状态和输入都可以写成平面输出及其导数的代数函数。这允许从平面输出(位置ξ和航向ψ)直接映射到角速率和角加速度,DFBC利用它们作为前馈项来提高跟踪精度。
在接下来的文章中,我们介绍了DFBC方法,该方法是在之前的工作[25]的基础上改进的,将原有的几何姿态控制器替换为倾斜优先的方法[31]。
我们还使用基于二次编程的控制分配[14]来解决输入约束。这些修改有利于跟踪动态不可行的轨迹,这将在第VI-D节中讨论。图4给出了该方法的概述。
【Minimum Snap Trajectory Generation and Control for Quadrotors】
摘要-我们解决了四旋翼飞行器在严格约束的室内环境中进行三维机动的控制器设计和轨迹生成。在这种情况下,必须允许姿态从悬停状态的显著偏移,而小角度近似不能用于滚转和俯仰。我们开发了一种算法,能够通过一系列三维位置和偏航角度实时生成最佳轨迹,同时确保安全通过指定走廊,并满足速度、加速度和输入的约束。非线性控制器保证了这些轨迹的忠实跟踪。实验结果说明了该方法在三维障碍赛中快速运动(5-10个体长/秒)的应用。
1.介绍
这一领域的大部分工作使用的控制器是由模型在悬停条件下的线性化派生出来的,并且只有在合理的小滚倾角和俯仰角[5]下才稳定。使用可达性算法[6]、增量搜索技术[7]或基于lqr树的搜索[8]来探索全状态空间对于具有六自由度的动态系统是不切实际的。在这方面的一些工作已经解决了特技飞行机动[3,6,9,10]。然而,当旋翼飞行器的姿态严重偏离水平悬停条件时,没有稳定性和收敛性保证。虽然机器学习技术已经成功地使用人类飞行员[9]的数据学习模型,并使用强化学习[3]提高性能,但这些方法似乎并不适合在有障碍的环境中进行运动规划或轨迹生成。类似的问题已经通过模型预测控制(MPC)得到解决[11,12]。
使用这些方法,只有当线性化模型完全可控[12]或控制李雅普诺夫函数可以合成[13]时,才能保证收敛。
因此,似乎很难直接将这种技术应用于四旋翼飞行器的轨迹生成。
在这篇论文中,我们解决了控制器设计和轨迹生成四旋翼机动在三维严格约束设置典型的室内环境。在这种情况下,有必要制定利用系统动力学的飞行计划,而不是简单地将动力学视为对系统的约束。有必要放松小角度假设,并允许从悬停状态的显著偏移。我们开发了一种算法,能够通过一系列关键帧或路径点在一组位置和方向中生成最佳轨迹,同时确保安全通过指定的走廊,并满足对可实现的速度、加速度和输入的约束。
四旋翼微分平坦证明:见【四旋翼微分平坦特性 - 知乎 (zhihu.com)】
【原文:D. Mellinger and V. Kumar, "Minimum snap trajectory generation and control for quadrotors," 2011 IEEE International Conference on Robotics and Automation, 2011, pp. 2520-2525.】
MPC
特点、优点
MPC是一种多变量控制策略,其中涉及了:
过程内环动态模型;控制量的历史数值;在预测区间上的一个最优值方程J。最优控制量可由以上各量求出。
MPC最大的特点在于,相对于LQR控制而言,MPC可以考虑空间状态变量的各种约束,而LQR,PID等控制只能够考虑输入输出变量的各种约束。
MPC可应用于线性和非线性系统。
其主要特点:处理约束和多变量系统。
MPC发展到现在,时间算是比较长了。其在处理模型复杂,带约束的优化控制时效果显著,代价是计算量有点大。计算能力受限!
计算机上能不能实现,是关键。也是很多做线性MPC的,无论连续,还是离散的,都会遇到的问题。投期刊时,计算量最好可以讨论下。在遇到计算机求解时,能不能及时得到解,是一个重要的因素。
所以,连续时间非线性模型的MPC和连续时间线性模型的MPC,在遇到计算机时,基本都是离散化后加以处理。而目前,只要遇到计算机,基本都是0和1的形式。也即,连续MPC必须离散化。具体操作是,将控制过程稠密采样,也即连续系统在某个优化时域内的状态轨迹以一组稠密数据来显示,实际就是离散化过程,而要求就是采样周期足够小,远远小于优化与控制时域。
INDI
--NDI
非线性动态逆控制(Nonlinear dynamic inversion control)是通过动态系统的‘逆’的概念来研究一般非线性控制系统反馈线性化设计的一种方法。应用研究表明,动态逆是非线性控制中的一种较为有效的方法,对非线性刚体航天器系统具有很好的跟踪性能。但是动态逆方法对建模误差较为敏感,如何提高控制器的鲁棒性一直是难以解决的问题。
反馈线性化的基本思想就是利用全状态反馈抵消原系统中的非线性特性,得到输入输出之间具有线性行为的新系统(称之为伪线性系统),从而可以应用线性方法对新系统进行综合。反馈线性化方法与其它方法相比,其主要特点是不依赖于非线性系统的求解或稳定性分析,而只需讨论系统的反馈变换,因而它具有一定的普遍性。
逆系统方法是反馈线性化方法中一种比较直观且易于理解的方法,其利用被控对象的逆系统,将被控对象补偿成为具有线性传递关系的系统;然后,再用线性系统理论来完成系统的综合,实现解耦的目标。
算法推导
学长总结
其他非线性控制方法通过小角度假设来解耦、简化系统,不适用于大机动情况。
动态逆能完全解耦的同时线性化系统。
--增量动态逆INDI
基本思想
NDI(非线性动态逆)有一个很大的缺点:要应用它,必须相当准确地知道系统的模型。然而,飞机模型可能非常复杂,尤其是当非线性开始出现时。增量NDI(INDI)提供了一种可能的解决方案。这种技术不提供控制系统所需的输入。它给出了输入中所需的变化。(例如,它不是告诉电梯偏6度,而是偏(例如)多1度或少2度。) INDI的一大优势是只需要模型的一小部分。
此外,INDI能够更好地处理模型不准确性,例如,错误的系数。因此,INDI比NDI更健壮。
算法推导
应用案例 [NMPC与DFBC对比文章中]
应用indi作为内环控制器,主要为弥补前文建模忽略的 机体扭矩引起的 未建模动态dτ(涉及角加速度的测量控制)
二次规划
在最优化问题中,如果目标函数是二次函数,约束函数是线性函数时,这就是一个二次规划问题。
一般形式可以表示为:
其中G是Hessian矩阵,τ是有限指标集,c,x和,都是R中的向量。
如果Hessian矩阵是半正定的,则我们说该式 是一个凸二次规划,在这种情况下该问题的困难程度类似于线性规划。如果有至少一个向量满足约束并且在可行域有下界,则凸二次规划问题就有一个全局最小值。如果是正定的,则这类二次规划为严格的凸二次规划,那么全局最小值就是唯一的。如果是一个不定矩阵,则为非凸二次规划,这类二次规划更有挑战性,因为它们有多个平稳点和局部极小值点。
matlab求解 详见quadprog
代码例子:
options = optimoptions('quadprog','Algorithm','active-set');
u=quadprog(H,f,[],[],[],[],[0;0;0;0],[8.5;8.5;8.5;8.5],[0;0;0;0],options);