ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

非对称多旋翼无人机线性控制:从动力学建模到LQR控制器设计

非对称多旋翼无人机线性控制:从动力学建模到LQR控制器设计 1. 项目缘起为什么需要研究非对称多旋翼的线性控制如果你玩过或者研究过无人机尤其是多旋翼大概率接触的都是像大疆精灵、F450机架那样的“对称”布局——四个或六个电机均匀分布在中心对称的位置。这种对称性带来了一个巨大的好处数学模型相对简单控制起来也直观。X轴和Y轴的动力学特性几乎一致很多控制算法比如经典的PID可以套用同一套参数稍微调调就能飞得不错。但现实世界里的需求从来不是“对称”的。想象一下你需要设计一款用于狭长管道巡检的无人机机身必须做得又细又长才能钻进去或者你想在无人机的一侧挂载一个重型传感器或机械臂执行特定的作业任务。这时候对称布局就不适用了你必须采用非对称的构型。电机和螺旋桨不再均匀分布整机的重心也可能偏离几何中心。这就引出了我们这次要啃的硬骨头非对称多旋翼无人机。非对称带来的核心挑战是动力学耦合。在对称机上你想让飞机往前飞俯仰主要增加后部电机的转速、降低前部电机的转速就行了左右横滚运动同理两者几乎互不干扰。但在非对称机上你想让它往前倾可能不仅需要调整前后电机还会意外地引起侧向的旋转或平移因为力与力矩的杠杆臂长度在各个方向上都不一样了。这种“动一发而牵全身”的特性使得直接用对称机的控制器往往会失效甚至导致炸机。所以这个项目的目标非常明确为一种非对称布局的多旋翼无人机建立准确的数学模型设计基于该模型的线性控制器并在Matlab/Simulink环境中进行仿真验证最终为实物飞控的实现打下理论基础。这不仅仅是调参是从根源上理解并驾驭这种特殊构型的飞行器。下面我们就从最基础的建模开始一步步拆解。2. 基石非对称多旋翼的动力学建模全解析建模是控制的基石模型不准再高级的算法也是空中楼阁。对于多旋翼我们通常使用牛顿-欧拉方程在机体坐标系下建立其刚体动力学模型。对于非对称情况我们需要特别关注质量分布和几何布局带来的影响。2.1 坐标系定义与基本假设首先我们建立两个右手坐标系惯性坐标系世界坐标系{E}固定于地面通常取北东地NED或前右下FRD约定。我们这里采用前右下X轴向前Y轴向右Z轴向下这是航空航天领域的常见约定重力方向为正Z。机体坐标系 {B}固连在无人机质心上。X轴指向机头方向Y轴指向机身右侧Z轴根据右手定则指向机身下方。为了简化问题我们做出几个标准假设无人机被视为一个刚体。地面视为惯性参考系忽略地球自转。螺旋桨产生的升力与转速的平方成正比且方向始终沿机体Z轴负方向向上。忽略螺旋桨陀螺效应和空气阻力矩对于初步模型和低速飞行这是合理的。2.2 关键差异惯性矩阵与力/力矩映射对称与非对称的核心差异主要体现在两个矩阵上惯性矩阵和控制效率矩阵。2.2.1 惯性矩阵I对于对称无人机其惯性矩阵通常近似为对角阵且Ixx ≈ Iyy。这意味着绕X轴横滚和绕Y轴俯仰旋转的惯性是差不多的。 对于非对称无人机情况变了Ixx ≠ Iyy因为质量在X和Y方向上的分布不同导致绕这两个轴旋转的难易程度不同。可能出现非对角项惯性积如果质量分布不仅不均匀还不关于机体坐标轴对称那么惯性矩阵就不是对角阵。例如Ixy表示绕X轴旋转时会在Y轴方向产生耦合的角加速度。这会使动力学方程变得复杂。 在大多数实际非对称设计中我们会尽量让主结构关于XZ或YZ平面对称以消除主要的惯性积但Ixx和Iyy不相等是必然的。我们的模型必须包含这一点。2.2.2 控制效率矩阵M这是建模的重中之重。我们需要建立从四个电机的转速[ω1, ω2, ω3, ω4]^T的平方到机体所受合力和合力矩[Fz, Mx, My, Mz]^T的映射关系。对于对称“X”型四旋翼这个映射矩阵非常优美。假设每个电机产生的升力为Fi kf * ωi^2反扭矩为Mi km * ωi^2电机到质心的距离为L那么有[ Fz ] [ -kf -kf -kf -kf ] [ ω1^2 ] [ Mx ] [ -Lkf Lkf Lkf -Lkf ] * [ ω2^2 ] [ My ] [ -Lkf -Lkf Lkf Lkf ] [ ω3^2 ] [ Mz ] [ -km km -km km ] [ ω4^2 ]矩阵里的Lkf项非常规整正负号由电机位置和旋转方向决定。而对于非对称布局每个电机到机体坐标系原点的位置向量(xi, yi)各不相同。因此每个电机产生的升力Fi对三个力矩轴Mx, My, Mz的贡献需要根据其位置进行叉乘计算Mxi yi * Fi力Fi沿Z轴负方向力臂在Y方向的分量产生绕X轴的力矩Myi -xi * Fi力Fi沿Z轴负方向力臂在X方向的分量产生绕Y轴的力矩Mzi γi * km * ωi^2γi为1或-1代表电机转向因此非对称无人机的控制效率矩阵 M 变为[ Fz ] [ -kf -kf -kf -kf ] [ ω1^2 ] [ Mx ] [ -y1*kf -y2*kf -y3*kf -y4*kf ] * [ ω2^2 ] [ My ] [ x1*kf x2*kf x3*kf x4*kf ] [ ω3^2 ] [ Mz ] [ γ1*km γ2*km γ3*km γ4*km ] [ ω4^2 ]这个矩阵M是我们整个控制器的核心。它不再是那种充满对称L的规整形式而是由每个电机的具体坐标(xi, yi)填充的。这个矩阵必须是可逆的否则我们就无法通过期望的力和力矩解算出需要的电机转速。这就要求四个电机不能共线且布局能提供四个方向独立的控制能力。2.3 完整的非线性动力学方程结合牛顿第二定律和欧拉方程我们在机体坐标系下写出方程平动方程m * V_dot ω × (m * V) F_gravity F_propulsion F_drag其中m是质量。V [u, v, w]^T是机体坐标系下的速度。ω [p, q, r]^T是机体坐标系下的角速度。F_gravity R^T * [0, 0, m*g]^T是重力在机体坐标系下的分量R是从机体系到惯性系的旋转矩阵。F_propulsion [0, 0, -∑Fi]^T是螺旋桨产生的总升力沿机体Z轴负方向。F_drag是空气阻力通常简化为与速度成正比的线性阻尼-D * V。转动方程I * ω_dot ω × (I * ω) M_propulsion M_gyro M_drag其中I是前面提到的惯性矩阵。M_propulsion是螺旋桨产生的总力矩由控制效率矩阵M计算得到[Mx, My, Mz]^T M * [ω1^2, ω2^2, ω3^2, ω4^2]^T。M_gyro是螺旋桨高速旋转产生的陀螺力矩对于大机动或大桨叶情况需考虑初步线性化时常忽略。M_drag是旋转阻尼力矩。此外还需要姿态运动学方程将角速度ω与欧拉角滚转φ俯仰θ偏航ψ的变化率联系起来。通常使用以下关系[ φ_dot ] [ 1, sinφ tanθ, cosφ tanθ ] [ p ] [ θ_dot ] [ 0, cosφ, -sinφ ] * [ q ] [ ψ_dot ] [ 0, sinφ/cosθ, cosφ/cosθ ] [ r ]注意当俯仰角θ接近±90°时此方程存在奇点。对于无人机我们通常假设姿态角较小或者使用四元数来避免奇点。3. 线性化从复杂非线性到可控状态空间模型上面得到的方程是非线性的、耦合的直接用于控制器设计非常困难。线性控制理论要求我们有一个线性时不变LTI的系统模型。因此我们需要在某个平衡点通常是悬停状态附近进行线性化。3.1 平衡点的选择与悬停条件我们选择悬停作为平衡点。在悬停状态下位置和速度为零。姿态角φ, θ, ψ为零水平。角速度p, q, r为零。机体坐标系下的线速度u, v, w为零。总升力等于重力∑Fi m*g。设悬停时每个电机的转速为ω_h则有4 * kf * ω_h^2 m*g。3.2 雅可比线性化过程线性化的核心是计算系统状态方程x_dot f(x, u)在平衡点(x0, u0)处的雅可比矩阵。 我们的状态向量x通常选取为[φ, θ, ψ, p, q, r, u, v, w, x, y, z]^T12维。 我们的控制输入u是四个电机的转速平方[ω1^2, ω2^2, ω3^2, ω4^2]^T。在平衡点(x0, u0)处f(x0, u0) 0。线性化后的系统为Δx_dot A * Δx B * Δu其中Δx x - x0,Δu u - u0。A ∂f/∂x |_(x0,u0)是系统矩阵12x12。B ∂f/∂u |_(x0,u0)是输入矩阵12x4。3.2.1 系统矩阵A的推导A矩阵描述了状态之间的内在耦合关系。通过对非线性方程求偏导得到。例如平动方程中u_dot与q*w - r*v等科氏项有关在平衡点附近这些项关于速度的偏导会给出A矩阵中角速度与线速度的耦合项。转动方程中ω_dot与ω × (I ω)有关在平衡点附近该项为零但其雅可比会给出角速度之间的耦合由于惯性矩阵I非对角或Ixx≠Iyy。姿态运动学方程在平衡点小角度下可以简化为[φ_dot, θ_dot, ψ_dot]^T ≈ [p, q, r]^T。这大大简化了A矩阵中姿态角与角速度的关系。一个关键的发现是在悬停点线性化后姿态动力学滚转、俯仰、偏航和平移动力学X, Y, Z方向是解耦的可以分开设计控制器。这是多旋翼控制中“内环姿态外环位置”分层控制结构的理论基础。3.2.2 输入矩阵B的推导B矩阵描述了控制输入如何影响状态的变化率它直接来源于控制效率矩阵M和力的映射。对于角加速度p_dot, q_dot, r_dotB矩阵的对应行直接由M矩阵中与力矩相关的部分第2-4行除以对应的惯性矩Ixx, Iyy, Izz得到。对于Z轴加速度w_dotB矩阵的对应行由M矩阵中与总升力相关的部分第1行除以质量m得到。对于X和Y轴加速度u_dot, v_dot在悬停点附近它们主要来自于姿态角变化引起的重力分量。因此B矩阵中u_dot和v_dot对电机输入的直接影响为0它们是通过姿态角φ, θ这个状态间接被控制的。这体现了耦合性你想让飞机往前加速u_dot需要先让飞机低头θ0而低头是由电机差动改变My实现的。最终我们可以得到两个主要的线性化子系统姿态内环子系统状态为[φ, θ, ψ, p, q, r]^T输入为Δu电机转速平方的变化。这个子系统通过B矩阵直接受控制输入影响。水平位置外环子系统状态为[x, y, u, v]^T但其加速度[u_dot, v_dot]^T与姿态角[φ, θ]^T成正比在小角度下u_dot ≈ -g * θ,v_dot ≈ g * φ。因此位置控制器的输出是期望的姿态角指令传递给内环姿态控制器。3.3 线性模型的可控性分析得到(A, B)矩阵后必须进行可控性分析。使用Matlab的ctrb(A, B)函数计算可控性矩阵并检查其秩rank(ctrb(A, B))。如果秩等于系统状态的维数这里是12则系统是完全可控的意味着我们可以通过设计状态反馈控制器将闭环极点配置到任意期望的位置。对于非对称无人机只要控制效率矩阵M是可逆的即电机布局合理并且线性化模型准确系统通常是可控的。这一步是后续设计线性二次型调节器LQR或极点配置的前提。4. 控制器设计LQR在非对称多旋翼上的应用有了线性状态空间模型我们就可以设计控制器了。对于多旋翼系统线性二次型调节器LQR是一个非常流行和有效的方法因为它可以系统地处理多输入多输出MIMO系统并通过调节权重矩阵来平衡状态误差和控制代价。4.1 LQR问题表述LQR的目标是找到最优控制律u -K * x使得以下二次型性能指标最小化J ∫ (x^T * Q * x u^T * R * u) dt其中Q是半正定的状态权重矩阵惩罚状态偏离平衡点的程度。R是正定的控制权重矩阵惩罚控制量的大小。K是反馈增益矩阵通过求解代数黎卡提方程ARE得到。4.2 权重矩阵Q和R的调参哲学这是LQR设计中的艺术和难点。没有唯一解但有一些指导原则Q矩阵对角线元素对应各个状态的权重。权重越大控制器越努力将该状态误差减小到零。姿态角φ, θ, ψ通常赋予很高的权重因为姿态是稳定飞行的基础。俯仰和横滚的权重可能不同如果无人机在俯仰方向长轴更不稳定可以适当提高俯仰角的权重。角速度p, q, r赋予较高的权重用于提供阻尼抑制振荡。同样可以根据Ixx和Iyy的差异调整p和q的权重惯性大的轴可能需要更多的阻尼。位置x, y, z和速度u, v, w外环位置控制器通常独立设计如PID其输出作为内环的期望姿态或期望速度。在整体LQR设计中如果包含这些状态其权重通常低于姿态状态以实现内外环的带宽分离。R矩阵对角线元素对应四个电机输入的权重。权重越大越限制控制动作的幅度系统响应变慢但更平稳。对于非对称机四个电机的能力可能不同例如某个电机距离重心更远力臂长效率高。理论上可以对效率高的电机即对力矩贡献大的电机施加稍大的R权重以平衡各电机的使用避免单个电机饱和。但在初步设计中通常设为相同的值。一个实用的调试流程初始设置将Q设为对角阵所有姿态角和角速度状态权重设为1位置和速度状态权重设为0.1或更小。R设为较小的值如0.01*eye(4)。在Simulink中仿真观察响应。如果系统振荡增加角速度状态的权重增加阻尼或稍微增加R。如果收敛太慢增加姿态角状态的权重或减小R。如果非对称导致某个轴如俯仰响应明显慢于另一个轴单独提高该轴对应状态θ 和 q的权重。使用Matlab的lqr(A, B, Q, R)函数直接计算增益矩阵K。4.3 控制分配从广义力到电机指令LQR计算出的控制律u -K * x这里的u是广义力/力矩向量[Fz, Mx, My, Mz]^T的增量。我们需要将其转换为四个电机的转速指令。这就是控制分配问题。对于非对称无人机控制分配矩阵就是控制效率矩阵M的逆或伪逆。[ω1^2, ω2^2, ω3^2, ω4^2]^T ω_h^2 * [1,1,1,1]^T M^(-1) * u其中ω_h^2是悬停所需的电机转速平方基准值u是LQR控制器计算出的广义力/力矩增量。这里有一个非常重要的细节M矩阵是在悬停点线性化时计算得到的。在飞行中如果姿态角变化很大M矩阵是否会变理论上螺旋桨产生的力始终沿机体Z轴只要机体坐标系定义在质心且电机位置在机体坐标系中是固定的那么M矩阵就是常数与姿态无关。这简化了控制分配。注意在实际嵌入式代码中直接计算4x4矩阵的逆可能比较耗时。可以预先在电脑上计算好M的逆矩阵然后在飞控代码中直接使用这个常量矩阵进行乘法运算。另外要确保解算出的ω_i^2非负且不超过电机最大转速平方。如果饱和需要进行限幅和分配策略调整这属于容错控制范畴。5. Simulink仿真实现从模型到动态验证理论设计完成后必须在仿真环境中进行充分的验证。Simulink非常适合进行这种包含非线性模型和线性控制器的混合仿真。5.1 仿真模型架构搭建一个典型的仿真模型应包含以下部分非线性无人机模型模块根据第2部分的动力学方程用Matlab Function或S-Function实现。输入是四个电机的转速平方ω^2和当前状态x输出是状态的导数x_dot。使用Simulink的积分器如1/s对x_dot积分得到状态x。LQR控制器模块实现u -K * (x - x_ref)。其中x_ref是期望状态对于悬停除了Z轴高度和偏航角其他期望值均为0。控制分配模块实现ω^2 ω_h^2 inv(M) * u。输出为四个电机的转速平方。指令生成模块产生测试指令如阶跃的高度指令、滚转指令或平滑的轨迹指令。外环位置控制器可选但推荐通常采用级联PID。位置PID控制器的输出是期望的速度速度PID控制器的输出是期望的俯仰/横滚角再传递给内环的LQR姿态控制器。这样构成了完整的“位置-速度-姿态-角速度”四环控制结构。5.2 关键仿真场景与结果分析仿真不能只跑一个悬停要测试各种边界情况。场景一姿态镇定。初始给一个滚转角和俯仰角如10°观察控制器能否快速、无超调地将其稳定到0。记录调节时间、超调量。对比对称机和非对称机的响应曲线非对称机在两个轴上的响应特性会有所不同。场景二轨迹跟踪。让无人机跟踪一个水平的“8”字轨迹或上升螺旋轨迹。观察位置跟踪误差。这里主要考验外环PID和内环LQR的配合。由于非对称性在X方向和Y方向跟踪同一频率的圆形轨迹时性能可能有差异。场景三抗风扰。在仿真中加入一个阶跃或正弦形式的风扰动力作为外力/力矩加到动力学方程上观察控制器的抗干扰能力和恢复速度。场景四参数鲁棒性测试。故意在控制器中使用的模型参数如质量m、惯性矩I、力常数kf设置一个误差例如20%观察闭环系统是否仍然稳定。LQR本身具有一定的鲁棒性但这是重要的压力测试。结果分析要点时域响应关注上升时间、稳态误差、超调、振荡。使用Simulink Scope工具记录。控制量观察观察四个电机转速指令。在非对称机上即使在稳态悬停四个电机的转速也可能不完全相同因为要补偿非对称结构产生的常值力矩。在执行机动时四个电机的响应幅度和模式也会与对称机不同。状态耦合分析给一个纯俯仰指令观察是否引起了不必要的横滚或偏航运动。这能验证你的模型线性化和控制器解耦的效果。5.3 从仿真到实现的桥梁离散化与代码生成仿真是在连续时间、高精度数值环境下进行的。但实际的飞控运行在微处理器如STM32上是离散的。因此我们需要控制器离散化使用c2d函数将连续的LQR增益K或者整个状态空间控制器转换为离散形式。选择合适的离散化方法如零阶保持ZOH或双线性变换Tustin并设定飞控的主循环周期例如2ms或5ms。sys_continuous ss(A-B*K, B, C, D); % 连续闭环系统 Ts 0.005; % 5ms采样周期 sys_discrete c2d(sys_continuous, Ts, zoh); % 或者直接离散化增益K但注意离散化后的反馈律形式编写飞控算法框架在Simulink中可以使用“Matlab Function”块或“Embedded MATLAB Function”块来编写离散化的控制算法包括状态估计如用互补滤波或卡尔曼滤波融合IMU数据、LQR计算、控制分配等。硬件在环测试如果条件允许可以将Simulink模型编译成代码下载到真实的飞控硬件中连接一个实时仿真机运行无人机非线性模型进行硬件在环仿真测试代码的实际运行效率和时序。6. 实操心得与避坑指南走完整个建模、仿真流程你会遇到很多纸上谈兵时想不到的问题。这里分享几点核心心得6.1 模型精度是“天花板”你的控制器性能上限由模型精度决定。如果(xi, yi)测量不准或者kf,km参数是粗估的那么基于此模型设计的LQR性能会大打折扣。务必尽可能准确地测量电机位置、质量、惯性矩。惯性矩可以通过CAD软件估算或者通过钟摆实验测量。6.2 线性化的有效性范围LQR是基于线性模型设计的它只在平衡点附近的小范围内保证最优。当无人机做大机动姿态角超过15-20度时线性模型误差变大控制器性能会下降甚至不稳定。在实际飞控中通常采用增益调度策略根据当前姿态角或飞行模式切换多组预先设计好的LQR增益。例如设计一组大角度增益在姿态角较大时使用。6.3 控制分配中的饱和处理控制分配模块计算出的ω_i^2必须是正数且小于电机最大转速平方。在Simulink仿真中一定要在分配模块后加上饱和限幅模块。当指令过大导致饱和时简单的限幅会破坏解耦性。更高级的做法是使用加权伪逆或基于优化的分配在饱和时优先保证力矩的分配牺牲部分升力但这会显著增加计算量。6.4 Simulink仿真速度优化非线性动力学模型如果用Interpreted MATLAB Function实现在仿真复杂轨迹时可能会很慢。可以尝试使用coder.extrinsic声明将部分计算移到初始化中。将模型用S-Function Builder或C MEX S-Function实现速度会快很多。简化模型在初步控制器调试时可以先忽略空气阻力阻尼项或者使用解耦后的线性模型进行控制器设计再用完整非线性模型验证。6.5 传感器噪声与状态估计我们的仿真假设状态x全知。现实中我们需要用IMU加速度计、陀螺仪、磁力计、气压计/GPS等传感器数据来估计状态。设计一个鲁棒的状态观测器如扩展卡尔曼滤波EKF和LQR控制器同样重要。在Simulink中可以在非线性模型和控制器之间加入一个EKF模块并注入真实的传感器噪声模型测试从“传感器数据”到“控制指令”的完整链路。6.6 从仿真到实物的“最后一公里”仿真完美不代表真机就能飞。实机会有未建模的动态电机响应延迟、电调非线性、机架振动、气流扰动等。因此在真机试飞前参数辨识通过实验数据如频率响应来辨识kf,km, 阻尼系数等关键参数修正模型。安全测试先在仿真中注入更大的噪声和延迟测试控制器的鲁棒性。逐步上电真机测试时先用很低的权重保守的控制器在安全网内如系绳进行悬停测试逐步调参观察电机温度和响应。记录日志飞控必须配备完善的数据记录功能记录传感器数据、状态估计值、控制指令和电机输出。这是分析问题、迭代改进的唯一依据。非对称多旋翼的控制是一个系统工程从精确的物理建模开始经过严谨的线性化与控制器设计再通过充分的仿真验证最后谨慎地走向实物实现。这个过程充满了挑战但当你看到自己设计的无人机以独特的构型稳定翱翔时那种成就感是对所有努力最好的回报。这个项目不仅是一套Matlab代码更是一套理解、驾驭复杂系统的思维方法和工程实践。
返回列表