1. 项目概述
双自由度直升机控制一直是控制工程领域极具挑战性的课题。这种系统具有强非线性、强耦合和欠驱动的特性,传统PID控制往往难以取得理想效果。最近我在实验室搭建了一套基于Quansar平台的双自由度直升机实验装置,尝试采用离散时间控制策略来解决这个经典问题。
这套系统由底座、万向节、电机和螺旋桨组成,可以模拟直升机俯仰和偏航两个自由度的运动。与常见的单自由度直升机模型相比,双自由度系统需要考虑两个轴向运动的动态耦合,这使得控制器设计更加复杂。通过Quansar提供的实时控制接口,我们可以方便地采集姿态数据并发送控制指令。
2. 系统建模与特性分析
2.1 动力学方程推导
双自由度直升机的动力学模型可以通过拉格朗日方程建立。系统动能包括螺旋桨旋转动能和直升机本体运动动能,势能主要来自重力。经过推导,可以得到如下非线性微分方程:
code复制J_θθ̈ + J_φφ̈sinθcosθ - J_φφ̇²sinθ = τ_θ - b_θθ̇
J_φφ̈cos²θ + 2J_φφ̇θ̇sinθcosθ = τ_φ - b_φφ̇
其中J_θ和J_φ分别是俯仰和偏航轴的转动惯量,b_θ和b_φ是阻尼系数,τ_θ和τ_φ是控制力矩。
2.2 系统特性分析
这个模型显示出几个关键特性:
- 强非线性:方程中包含三角函数和速度平方项
- 强耦合:俯仰和偏航运动相互影响
- 欠驱动:只有两个控制输入却要同时控制四个状态变量(θ, φ, θ̇, φ̇)
这些特性使得传统的线性控制方法难以奏效,必须采用更先进的控制策略。
3. 离散时间控制器设计
3.1 离散化处理
由于采用数字控制器实现,需要将连续时间模型离散化。采用零阶保持器法,采样周期选择为T=0.01s。离散化后的状态空间方程为:
code复制x[k+1] = A_d x[k] + B_d u[k]
y[k] = C_d x[k]
其中x=[θ, φ, θ̇, φ̇]^T是状态向量,u=[τ_θ, τ_φ]^T是控制输入。
3.2 离散时间LQR设计
采用离散时间线性二次型调节器(DLQR)作为基础控制器。代价函数设计为:
code复制J = Σ (x^T Q x + u^T R u)
经过多次调试,最终选择的权重矩阵为:
code复制Q = diag([10, 10, 1, 1])
R = diag([0.1, 0.1])
3.3 非线性补偿
为处理模型非线性,在DLQR基础上增加了前馈补偿项:
code复制u_ff = f(x_d)
其中f(·)是根据模型逆动力学计算的前馈力矩,x_d是期望状态。
4. Quansar平台实现
4.1 硬件配置
实验平台采用Quansar QLabs直升机模块,主要硬件包括:
- 直流电机×2(驱动螺旋桨)
- 光电编码器×2(测量角度)
- 陀螺仪(测量角速度)
- Quansar Q2-USB实时控制器
4.2 软件实现
控制算法在Quansar QIDE中实现,主要程序结构如下:
c复制void main_control()
{
// 数据采集
read_sensors();
// 状态估计
kalman_filter();
// 控制计算
dlqr_control();
feedforward_compensation();
// 输出
set_motor_pwm();
}
采样周期严格保持10ms,通过硬件定时器中断实现。
5. 实验调试与优化
5.1 参数整定
控制器性能对Q、R矩阵的选择非常敏感。通过以下步骤进行参数整定:
- 先调整俯仰通道权重,稳定俯仰角
- 再调整偏航通道权重,注意耦合影响
- 最后微调速度项权重,改善动态响应
5.2 抗饱和处理
实际系统中电机存在输出限制,需要增加抗饱和措施:
- 积分分离:当误差较大时暂停积分
- 指令限幅:限制控制量变化率
- 扰动观测:估计并补偿未建模动态
5.3 性能指标
最终实现的控制器性能:
- 阶跃响应调节时间:<2s
- 稳态误差:<0.5°
- 抗扰能力:能抵抗0.2Nm的外部力矩扰动
6. 常见问题与解决方案
6.1 振荡问题
现象:系统出现持续小幅振荡
原因:采样频率过高导致数值问题
解决:适当降低采样频率至100Hz,增加速度阻尼
6.2 耦合问题
现象:调节俯仰角影响偏航角
原因:模型耦合项补偿不足
解决:增加交叉项前馈补偿
6.3 实时性问题
现象:控制周期不稳定
原因:程序执行时间超过采样周期
解决:优化代码结构,使用查表法代替实时计算
7. 扩展应用
这套控制方案经过适当修改可以应用于:
- 无人机姿态控制
- 机器人关节控制
- 稳定平台控制
- 其他欠驱动系统控制
在实际调试中发现,对于不同尺寸的直升机模型,需要重新辨识惯性参数。一个实用的技巧是通过阶跃响应实验粗略估计系统惯量,这比精确计算更方便。另外,在Quansar平台上实现时,要注意ADC采样噪声会影响控制性能,建议增加软件滤波。