【无人机控制】基于鲁棒反馈线性化控制器实现无人机 (UAV) 姿态控制附matlab代码

文章介绍了基于鲁棒反馈线性化控制器设计的无人机姿态控制方法,涉及动力学模型建立、线性化、控制策略设计以及实施过程。通过动态反演和扩张状态观测器(ESO),实现了对横摇角、螺旋角和偏航角的鲁棒控制,代码示例展示了控制器的具体计算步骤。
摘要由CSDN通过智能技术生成

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

鲁棒反馈线性化控制器是一种用于处理非线性系统的控制器设计方法。它结合了反馈线性化和鲁棒控制的理念,以提高系统对参数变化和扰动的鲁棒性能。要基于鲁棒反馈线性化控制器实现无人机(U制,可以按照以下步骤进行:

  1. 建立动力学模型:根据无人机的物理特性和动力学方程,建立系统的动力学模型。这将涉及到飞行器的质量、惯性矩阵、飞行控制系统的输出等参数。

  2. 设计鲁棒线性化控制器:通过对动力学模型进行线性化,并结合鲁棒控制理论,设计姿态控制器。鲁棒控制理论可用于处理不确定性和扰动,以提高系统的稳定性和鲁棒性能。

  3. 构建误差状态变量:姿态误差状态变量,如欧拉角(俯仰角、滚转角和偏航角)或四元数等,作为控制器输入。

  4. 设计控制策略:根据姿态误差状态变量的反馈信息和鲁棒线性化控制器的设计,制定相应的控制策略。这可能包括比例-积分-微分(PID)控制、线性二次调节器(LQR)等。

  5. 实施控制器:将控制策略转化为实际的控制指令,并通过适当的接口和硬件将其传输给无人机的执行器,如电动调节表面或电动马达。

  6. 参数调整和鲁棒性测试:根据实际飞行情况,进行控制器参数的调整和优化,以实现所需的姿态控制性能。同时,通过试飞和鲁棒性测试来验证和提高控制器的鲁棒性。

需要注意的是,姿态控制设计过程中要考虑无人机的动力学限制、传感器误差和物理约束等因素。另外,导航系统和姿态传感器对正确运行控制器起着重要的作用。

​该控制器的目的是使横摇角、螺旋角和偏航角分别跟踪给定轨迹(命令)。这个设计开发使用动态反演和扩张状态观测器(ESO)。首先,动态反演用于线性化和解耦无人机态度系统为三个single-input-single-output系统的输出,然后三个比例微分(PD)对这些线性化系统控制器的设计。扩展状态观测器来估计和补偿未建模动态和干扰程度。仿真结果表明,该控制器是有效的和鲁棒性。

⛄ 部分代码

function xdot = controller2( x )alfa1=0.9; alfa2=0.3;delta=0.1;kd1=6.4;kd2=6.4;kd3=6.4;kp1=16;kp2=16;kp3=16;beta1=100; beta2=3000; beta3=5000;phi_c=10;teta_c=-10;psi_c=10;%--------------------------------------------------------------------------% Ix=12874.8;% Iy=75673.6;% Iz=85552.1;% Ixz=1331.4;Ix=22682;Iy=77095;Iz=95561;Ixz=1125;SOM=Ix*Iz-Ixz^2;c1=((Iy-Iz)*Iz-Ixz^2)/SOM;c2=((Ix-Iy+Iz)*Ixz)/SOM;c3=Iz/SOM;c4=Ixz/SOM;c5=(Iz-Ix)/Iy;c6=Ixz/Iy;c7=1/Iy;c8=(Ix*(Ix-Iy)+Ixz^2)/SOM;c9=Ix/SOM;%--------------------------------------------------------------------------phi=x(1);teta=x(4);p=x(19);r=x(20);q=x(21);%--------------------------------------------------------------------------B=[c3+c4*cosd(phi)*tand(teta),c7*sind(phi)*tand(teta),c4+c9*cosd(phi)*tand(teta);    -c4*sind(phi),c7*cosd(phi),-c9*sind(phi);    c4*cosd(phi)*(1/cosd(teta)),c7*sind(phi)*(1/cosd(teta)),c9*cosd(phi)*(1/cosd(teta))];phidot=p+tand(teta)*(q*sind(phi)+r*cosd(phi));tetadot=q*cosd(phi)-r*sind(phi);A1=((c1*r+c2*p)*q)+(tetadot/cosd(teta)^2)*(q*sind(phi)+r*cosd(phi))+tand(teta)*((c5*p*r-c6*(p^2-r^2))*sind(phi)+q*(phidot*cosd(phi))+((c8*p-c2*r)*q)*cosd(phi)-r*phidot*sind(phi));A2=(c5*p*r-c6*(p^2-r^2))*cosd(phi)-phidot*sind(phi)*q-(((c8*p-c2*r)*q)*sind(phi)+phidot*cosd(phi)*r);A3=((c5*p*r-c6*(p^2-r^2))*sind(phi)+phidot*cosd(phi)*q+((c8*p-c2*r)*q)*cosd(phi)-phidot*sind(phi)*r)*cosd(teta)/cosd(teta)^2+(tetadot*sind(teta)*(q*sind(phi)+r*cosd(phi)))/cosd(teta)^2;A=[A1;A2;A3];%--------------------------------------------------------------------------Bdot=[c4*cosd(phi)*(tand(teta)^2 + 1)*tetadot - c4*sind(phi)*tand(teta)*phidot,c7*cosd(phi)*tand(teta)*phidot + c7*sind(phi)*(tand(teta)^2 + 1)*tetadot,c9*cosd(phi)*(tand(teta)^2 + 1)*tetadot - c9*sind(phi)*tand(teta)*phidot;     -c4*cosd(phi)*phidot,-c7*sind(phi)*phidot,-c9*cosd(phi)*phidot;     (c4*cosd(phi)*sind(teta)*tetadot)/cosd(teta)^2 - (c4*sind(phi)*phidot)/cosd(teta), (c7*cosd(phi)*phidot)/cosd(teta) + (c7*sind(phi)*sind(teta)*tetadot)/cosd(teta)^2, (c9*cosd(phi)*sind(teta)*tetadot)/cosd(teta)^2 - (c9*sind(phi)*phidot)/cosd(teta)];%--------------------------------------------------------------------------pp=inv(B);L=pp(1,:)*[(kp1*phi_c-x(12))-A1;(kp2*teta_c-x(15))-A2;(kp3*psi_c-x(18))-A3];M=pp(2,:)*[(kp1*phi_c-x(12))-A1;(kp2*teta_c-x(15))-A2;(kp3*psi_c-x(18))-A3];N=pp(3,:)*[(kp1*phi_c-x(12))-A1;(kp2*teta_c-x(15))-A2;(kp3*psi_c-x(18))-A3];pdot=(c1*r+c2*p)*q+c3*L+c4*N;rdot=(c8*p-c2*r)*q+c4*L+c9*N;qdot=c5*p*r-c6*(p^2-r^2)+c7*M;phidotdot=pdot+(tetadot/cosd(teta)^2)*(q*sind(phi)+r*cosd(phi))+tand(teta)*(qdot*sind(phi)+q*(phidot*cosd(phi))+rdot*cosd(phi)-r*phidot*sind(phi));tetadotdot=qdot*cosd(phi)-phidot*sind(phi)*q-(rdot*sind(phi)+phidot*cosd(phi)*r);A1dot=(c1*rdot+c2*pdot)*q+qdot*(c1*r+c2*p)+(tetadotdot*cosd(teta)^2+2*tetadot^2*sind(teta)*cosd(teta))/cosd(teta)^4*(q*sind(phi)+r*cosd(phi))+(qdot*sind(phi)+phidot*cosd(phi)*q+rdot*cosd(phi)-phidot*sind(phi)*r)*(tetadot/cosd(teta)^2)+(tetadot/cosd(teta)^2)*((c5*p*r-c6*(p^2-r^2))*sind(phi)+q*(phidot*cosd(phi))+((c8*p-c2*r)*q)*cosd(phi)-r*phidot*sind(phi))+((c5*p*r-c6*(p^2-r^2))*phidot*cosd(phi)+(c5*(pdot*r+rdot*p)-c6*(2*p*pdot-2*r*rdot))*sind(phi)+(qdot*phidot+phidotdot*q)*cosd(phi)-phidot*sind(phi)*q*phidot+(c8*pdot-c2*rdot)*q*cosd(phi)+(qdot*cosd(phi)-phidot*sind(phi)*q)*(c8*p-c2*r)-((rdot*phidot+phidotdot*r)*sind(phi)+phidot*cosd(phi)*r*phidot))*tand(teta);A2dot=(c5*(pdot*r+rdot*p)-c6*(2*p*pdot-2*r*rdot))*cosd(phi)-phidot*sind(phi)*(c5*p*r-c6*(p^2-r^2))-((phidotdot*q+qdot*phidot)*sind(phi)+phidot*cosd(phi)*phidot*q)-(((c8*pdot-c2*rdot)*q+qdot*(c8*p-c2*r))*sind(phi)+phidot*cosd(phi)*((c8*p-c2*r)*q)+(phidotdot*r+rdot*phidot)*cosd(phi)-phidot*sind(phi)*phidot*r);A3dot=((((c5*(pdot*r+rdot*p)-c6*(2*p*pdot-2*r*rdot))*sind(phi)+phidot*cosd(phi)*(c5*p*r-c6*(p^2-r^2))+(phidotdot*cosd(phi)-phidot*sind(phi)*phidot)*q+qdot*phidot*cosd(phi)+((c8*pdot-c2*rdot)*q+qdot*(c8*p-c2*r))*cosd(phi)-phidot*sind(phi)*((c8*p-c2*r)*q)-((phidotdot*sind(phi)+phidot*cosd(phi)*phidot)*r+rdot*phidot*sind(phi)))*cosd(teta)-tetadot*sind(teta)*((c5*p*r-c6*(p^2-r^2))*sind(phi)+phidot*cosd(phi)*q+(c5*p*r-c6*(p^2-r^2))*cosd(phi)-phidot*sind(phi)*r))*cosd(teta)^2+2*tetadot*cosd(teta)*sind(teta)*((c5*p*r-c6*(p^2-r^2))*sind(phi)+phidot*cosd(phi)*q+((c8*p-c2*r)*q)*cosd(phi)-phidot*sind(phi)*r)*cosd(teta))/cosd(teta)^4+(((tetadotdot*sind(teta)+tetadot*cosd(teta)*tetadot)*(q*sind(phi)+r*cosd(phi))+(qdot*sind(phi)+phidot*cosd(phi)*q+rdot*cosd(phi)-phidot*sind(phi)*r)*tetadot*sind(teta))*cosd(teta)^2+2*tetadot*cosd(teta)*sind(teta)*(tetadot*sind(teta)*(q*sind(phi)+r*cosd(phi))))/cosd(teta)^4;Adot=[A1dot;A2dot;A3dot];%--------------------------------------------------------------------------u=[L;M;N];ppdot=[ 0, -(c4*cosd(phi)*phidot)/(c4^2*cosd(phi)^2 + c4^2*sind(phi)^2 - c3*c9*cosd(phi)^2 - c3*c9*sind(phi)^2), (cosd(teta)*(c9*cosd(phi)^2*(tand(teta)^2 + 1)*tetadot - c4*sind(phi)*phidot + c9*sind(phi)^2*(tand(teta)^2 + 1)*tetadot))/(c4^2*cosd(phi)^2 + c4^2*sind(phi)^2 - c3*c9*cosd(phi)^2 - c3*c9*sind(phi)^2) - (sind(teta)*tetadot*(c9*tand(teta)*cosd(phi)^2 + c4*cosd(phi) + c9*tand(teta)*sind(phi)^2))/(c4^2*cosd(phi)^2 + c4^2*sind(phi)^2 - c3*c9*cosd(phi)^2 - c3*c9*sind(phi)^2);        0,                                                    -(sind(phi)*phidot)/(c7*cosd(phi)^2 + c7*sind(phi)^2),                                                                                                                                                                                                                                                                                             (cosd(phi)*cosd(teta)*phidot)/(c7*cosd(phi)^2 + c7*sind(phi)^2) - (sind(phi)*sind(teta)*tetadot)/(c7*cosd(phi)^2 + c7*sind(phi)^2);        0,  (c3*cosd(phi)*phidot)/(c4^2*cosd(phi)^2 + c4^2*sind(phi)^2 - c3*c9*cosd(phi)^2 - c3*c9*sind(phi)^2), (sind(teta)*tetadot*(c4*tand(teta)*cosd(phi)^2 + c3*cosd(phi) + c4*tand(teta)*sind(phi)^2))/(c4^2*cosd(phi)^2 + c4^2*sind(phi)^2 - c3*c9*cosd(phi)^2 - c3*c9*sind(phi)^2) - (cosd(teta)*(c4*cosd(phi)^2*(tand(teta)^2 + 1)*tetadot - c3*sind(phi)*phidot + c4*sind(phi)^2*(tand(teta)^2 + 1)*tetadot))/(c4^2*cosd(phi)^2 + c4^2*sind(phi)^2 - c3*c9*cosd(phi)^2 - c3*c9*sind(phi)^2)];v=[(kp1*phi_c-x(12));(kp2*teta_c-x(15));(kp3*psi_c-x(18))];%************------************----------**************-----------------e=x(10)-x(1);                                     %y(1)=phi y(10)=Z1_phi e2=x(13)-x(4);                                      %y(4)=teta y(14)=Z1_tetae3=x(16)-x(7);                                      %y(7)=psi y(16)=Z1_PSI%************------************----------**************-----------------vdot=[beta3*fal(e,alfa2,delta);beta3*fal(e2,alfa2,delta);beta3*fal(e3,alfa2,delta)];udot=ppdot*(v-A)+pp*(vdot-Adot);%--------------------------------------------------------------------------xdot(1)=x(2);   %ydot(2)=A1+B(1,:)*[L;M;N];xdot(2)=x(3)+kp1*phi_c;%ydot(3)=A1dot+Bdot(1,:)*u+B(1,:)*udot;Delta_u1=x(12)+kp1*x(1)+kd1*x(2);xdot(3)=-kp1*x(2)-kd1*(x(3)+kp1*phi_c)-Delta_u1;%---ESO1 Z_PHI---xdot(10)=x(11)-beta1*e;                           %y(11)=Z2_phixdot(11)=x(12)-beta2*fal(e,alfa1,delta)+kp1*phi_c;%y(12)=Z3_phixdot(12)=-beta3*fal(e,alfa2,delta);%--------------------------------------------------------------------------xdot(4)=x(5);   %ydot(4)=A2+B(2,:)*[L;M;N];  xdot(5)=x(6)+kp2*teta_c;%ydot(6)=A2dot+Bdot(2,:)*u+B(2,:)*udot;Delta_u2=x(15)+kp2*x(4)+kd2*x(5);xdot(6)=-kp2*x(5)-kd1*(x(6)+kp2*teta_c)-Delta_u2;%---ESO2 Z_Teta---xdot(13)=x(14)-beta1*e2;                            %y(15)=Z2_tetaxdot(14)=x(15)-beta2*fal(e2,alfa1,delta)+kp2*teta_c;%y(16)=Z3_teta xdot(15)=-beta3*fal(e2,alfa2,delta);%--------------------------------------------------------------------------xdot(7)=x(8);   %ydot(6)=A3+B(3,:)*[L;M;N];xdot(8)=x(9)+kp3*psi_c;%ydot(9)=A3dot+Bdot(3,:)*u+B(3,:)*udot;Delta_u3=x(18)+kp3*x(7)+kd3*x(8);xdot(9)=-kp3*x(8)-kd3*(x(9)+kp3*psi_c)-Delta_u3;%---ESO3 Z_PSI---xdot(16)=x(17)-beta1*e3;                            %y(17)=Z2_PSIxdot(17)=x(18)-beta2*fal(e3,alfa1,delta)+kp3*psi_c; %y(18)=Z3_PSIxdot(18)=-beta3*fal(e3,alfa2,delta);%--------------------------------------------------------------------------xdot(19)=(c1*r+c2*p)*q+c3*L+c4*N;  %=pdotxdot(20)=(c8*p-c2*r)*q+c4*L+c9*N;  %=rdotxdot(21)=c5*p*r-c6*(p^2-r^2)+c7*M; %=qdotxdot=[xdot(1);xdot(2);xdot(3);xdot(4);xdot(5);xdot(6);xdot(7);xdot(8);xdot(9);xdot(10);xdot(11);xdot(12);xdot(13);xdot(14);xdot(15);xdot(16);xdot(17);xdot(18);xdot(19);xdot(20);xdot(21)];xdot=xdot(:);end

⛄ 运行结果

⛄ 参考文献

[1] 侯宇晨.基于实时操作系统的无人机飞控系统的位置和姿态控制器的应用与实现[D].武汉工程大学[2023-07-04].

[2] 李蒙,石泳,刘莉.基于鲁棒H_∞的无人机飞行控制系统设计及实现[J].北京理工大学学报, 2016, 36(8):6.DOI:10.15918/j.tbit1001-0645.2016.08.007.

[3] 曹宁,周映江,蒋国平,et al.一种无人机姿态的鲁棒控制方法和实现该方法的鲁棒控制器:CN201811214561.6[P].CN109188913A[2023-07-04].

[4] 李林侃,樊战旗,杨军.鲁棒动态逆控制在无人机姿态控制中的应用研究[J].弹箭与制导学报, 2008, 28(1):4.DOI:10.3969/j.issn.1673-9728.2008.01.024.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料

🍅 仿真咨询

1.卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
2.图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
3.旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划
4.无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配
5.传感器部署优化、通信协议优化、路由优化、目标定位
6.信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号
7.生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化
8.微电网优化、无功优化、配电网重构、储能配置
9.元胞自动机交通流 人群疏散 病毒扩散 晶体生长

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
鲁棒反馈线性化控制器(Robust Feedback Linearization Controller)在无人机UAV姿态控制中被广泛应用,它可以实现无人机姿态进行精确控制,并具有一定的鲁棒性能。 下面是鲁棒反馈线性化控制器无人机姿态控制中的基本原理和步骤: 1. 系统建模:首先,需要建立无人机姿态控制的动力学模型。这可以通过欧拉、四元数等方式来描述无人机姿态,并根据物理原理和运动方程建立数学模型。 2. 线性化:对系统模型进行线性化处理,以便将非线性系统转化为线性系统。可以使用泰勒级数展开或其他线性化方法来获取线性化模型。 3. 反馈线性化:应用反馈线性化技术,将线性化后的模型引入到控制器设计中。反馈线性化可以通过状态反馈或输出反馈实现,目的是使得系统输入与输出之间的关系满足线性条件。 4. 控制器设计:根据线性化后的模型设计控制器。常用的方法包括经典控制理论(如PID控制器)或现代控制理论(如状态反馈控制器、最优控制器等)。在设计控制器时,可以考虑系统的鲁棒性能,以提高控制器对参数变化、外部干扰等的抗干扰能力。 5. 参数整定:对控制器的参数进行调整和优化,以满足系统的性能要求。可以使用系统辨识方法、优化算法等进行参数整定。 6. 实施与仿真:将设计好的鲁棒反馈线性化控制器应用于无人机姿态控制中,并通过实际实验或仿真验证其控制性能和鲁棒性。 鲁棒反馈线性化控制器能够实现无人机姿态进行精确控制,并对系统的不确定性和干扰具有一定的鲁棒性能。这使得它在无人机姿态控制中得到广泛应用,能够提高无人机的稳定性和控制性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值