3 控制器设计
原文鏈接
控制器設計
基于roll, pitch, yaw的傳遞函數表達的系統的線性數學模型
使用Matlab仿真工具設計了一個閉環控制器。
首先,在Matlab腳本里面定義系統模型的常量。
%% Constants d = 0.45; % diameter quadrocopter l = sqrt(d^2/8); % distance between one rotor and center of mass m = 1.0024; % mass of quadrocopter g = 9.81; % gravitational acceleration kPWM = 7.8502; % proportional constant omega/PWMJxx = 0.01046412; % mass moment of inertia xb Jyy = 0.010746965; % mass moment of inertia yb Jzz = 0.020576095; % mass moment of inertia zbbT = 7.90261e-06; % proportional coefficient blade thrust/(omega^2) bH = 1.66057e-7; % proportional coefficient blade torque/(omega^2)% system gains k_phi = l*bT*kPWM*sqrt(m*g*bT)/Jxx; k_theta = l*bT*kPWM*sqrt(m*g*bT)/Jyy; k_psi = bH*kPWM*sqrt(m*g*bT)/Jzz;Z變換
在設計控制器之前,考慮到要控制的系統是離散的,所以需要變換到z域。傳感器MPU-9150的測量頻率是50Hz,是整個系統中最慢的部分,所以由它來定義控制系統的采樣頻率。
%% Z-transform % sample time T_sample = 1/50;% LTI-System of quadcopters phi (roll) Gs_phi_s = tf(k_phi,[1 0 0]);% transfer function continuous to discrete Gs_phi_z = c2d(Gs_phi_s, T_sample);PD極點配置
第一步,通過離散z域的極點配置,設計了控制器中四旋翼的roll變化部分。在復z平面實軸上的0.83處有3個穩定極點,用它們來設計閉環控制系統。在下面的Matlab腳本里面還做了關于控制器傳遞函數中的多項式的計算。
%% Pole-placement % desired poles d_phi = [0.83 0.83 0.83];[Gs_phi_z_num, Gs_phi_z_den] = tfdata(Gs_phi_z,'v'); Gs_phi_z_num = Gs_phi_z_num(2:end); [Gc_phi_z_num, Gc_phi_z_den] = placepole(Gs_phi_z_num, Gs_phi_z_den, d_phi);% controller Gc_phi_z = tf(Gc_phi_z_num,Gc_phi_z_den,T_sample);閉環控制系統的復極點-零點映射圖(pole-zero map)表明,所有的極點的實部,都是指定的0.83。
這樣的閉環系統,用matlab仿真結果如下,是一個建立時間大約為1s的階梯響應。
設計的控制器
和一個一般傳函形式的離散PD控制器是等價的
上式可以寫成
為了能在飛行測試中常規調整控制器參數,控制器設計成PD參數形式。
比較上面幾個式子,可以找到轉換關系
這些參數可以輕易地在測試飛行器的過程中調整。
%% PID controller % Controller coefficients a_phi = fliplr(Gc_phi_z_den(2:end)); b_phi = fliplr(Gc_phi_z_num);% PD-Parameters P_phi = (b_phi(1)+b_phi(2))/(a_phi(1)+1); N_phi = (a_phi(1)+1)/T_sample; D_phi = (b_phi(2)-(b_phi(1)+b_phi(2))/(a_phi(1)+1))*T_sample/(a_phi(1)+1);同樣的流程用于pitch和yaw。值得注意的是,對于yaw,要控制的是角速度,而不是角度。所以,在相應的極點配置下,最終模型就是一個簡單的P控制器。
控制器輸出
As the controller outputs for controlling the quadcopter’s attitude are summarized by
控制飛行器姿態的飛控輸出可以總結為以下形式
每個PWM信號代表一個電機,計算的時候,要考慮懸停所需要的PWM信號部分。
仿真
閉環控制系統在Matlab的仿真器里面仿真,仿真模型包括AttitudeControl描述控制器,以及MM代表四旋翼的非線性數學模型。考慮到控制系統的離散形式,零階極點元素也輸入了模型中。
子系統AttitudeControl包含3個PID控制器,利用輸出來精確計算輸入。
閉環控制系統中每個角度的階躍響應如下所示。第三個圖看起來不太一箱,是因為它控制的是角速度,而不是角度。
拓展成PID控制器
第一次飛行測試發現,由于飛機的質心和幾何中心不重合,導致飛機側翻。所以,控制器需要一個額外積分部分加以擴展。離散的PID控制器模型如下表示:
轉換分數形式,得到
這就得到了分子和分母的多項式形式。這些多項式以數組的形式,送給控制算法。
積分增益I通過實驗確定。
Implementation
數字控制器在Infineon XMC-4500上面實現了,在AttitudeController.c 和 AttitudeController.h兩個文件中。
控制器代碼的實現細節,可以在5. Software找到。
總結
- 上一篇: java移位简介
- 下一篇: ROS入门教程(一)