MFAC 算法基本原理是在每个工作点处,建立非线性系统等价的动态线性数据模型,利用受控系统的I/O数据在线估计系统的伪偏导数,然后设计加权一步向前的控制器,进而实现非线性系统数据驱动的无模型自适应控制。MFAC 有三种不同动态线性化方法的算法设计,即基于紧格式动态线性化的无模型自适应控制(Compact Form Dynamic Linearization based MFAC,CFDL-MFAC),基于偏格式动态线性化的无模型自适应控制(Partial  Form  Dynamic  Linearization  based MFAC,PFDL-MFAC)以及基于全格式动态线性化的无模型自适应控制(Full  Form Dynamic Linearization based MFAC,FFDL-MFAC)。

本文控制方法使用紧格式动态线性化的无模型自适应控制。

参考文献:《无人艇重定义无模型自适应艏向控制方法与试验》

控制律:

控制原理:

MATLAB 实现:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 使用CFDL-MFAC(紧格式动态线性化方法)进行无人艇航向控制
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all;
clear;
%% 算法参数设定
%仿真时间步长
ts=0.5;
%非线性KT方程参数k,t,α
Kit=0.701;
Tit=0.332;
afa=0.001;
% Kit=0.18;
% Tit=4.65;
% afa=1.07;
% Kit=2.36;
% Tit=5.489;
% afa=0.000094;%风浪流干扰参数
Wn=0.958;
yip=0.9;%风流浪干扰
%浪干扰
langrr=wgn(1,800,(0.1/0.1),'linear');%4级海况
w0=0.808;                               %波浪频率
tw=6;                               %波浪周期
kw=0.255;                               %增益常数
citam=0.527;                            %波浪强度系数
yipp=0.3;                              %阻尼系数%MFAC算法参数设置
nata=0.5;                %λ
miu=1;                   %μ
yita=0.1;                %η
ru=1;                    %ρ
Kz=8;                    %K1
yipsl=0.0000001;         %εPI=3.1415926;
%% 参数初始化
num=[kw 0];
den=[1 (2*yipp*w0) (w0*w0)];
hs=tf(num,den);tt=0.1:0.1:80;[langr,xr]=lsim(hs,langrr,tt);Y0 = [0;0];%初值
t = 0.1:ts:80;
t0=0;
Y = cell(1,length(t));
z = zeros(2,length(t));Y0_m=[0;0];   %参考模型
Y_m = cell(1,length(t));
z_m = zeros(2,length(t));
kp=1;
kd=1;
% kp=0.98;
% kd=0.95;
ki=0.0;
error_1=0;error_2=0;
u_1=0;u_2=0;
y_1=0;y_2=0;
r_1=0;r_2=0;
sf_1=0.1;%% 循环
for k=1:200
%     d=(langr(k,1)+0.5)*PI/180;d=0;time(k)=k*ts;M=0;if M==1rin(k)=30;fai_r=30;if time(k)>=20&&time(k)<40rin(k)=0;fai_r=0;elseif time(k)>=40&&time(k)<60rin(k)=30;fai_r=30;elseif time(k)>=60&&time(k)<80rin(k)=0;fai_r=0;endendendelserin(k)=PI/3;fai_r=PI/3;endY_m{k}=rkfa_m( ts,t0,Y0_m,Wn,yip,fai_r);                                    %龙格库塔法解航向一阶非线性方程z_m(1,k) = Y_m{k}(1);                                                     %参考faiz_m(2,k) = Y_m{k}(2);yrout(k)=z_m(1,k);
%    yr(1,k)=z_m(2,k);                                                       %参考r
%    yr(2,k)=(yr(1,k)-dyr_1)/ts;                                             %参考r'
%    u_m(k)=(Tit*yr(2,k)+yr(1,k)+afa*yr(1,k)*yr(1,k)*yr(1,k))/Kit;   Y{k}=rkfa_GR( ts,t0,Y0,Kit,Tit,u_1,afa,d);                                    %龙格库塔法解航向一阶非线性方程z(1,k) = Y{k}(1);                                                        %faiz(2,k) = Y{k}(2);                                                        %ryout(k)=z(1,k);r(k)=z(2,k);error(k)=rin(k)-z(1,k);M2=1;                   %0:PD控制 1:MFAC控制if M2==0%PD控制部分z_error(k)=yrout(k)-z(1,k);m=1;if m==1%位置式pidu(k)=kp*error(k)+kd*(error(k)-error_1)/ts;else%增量式pidxc(1)=error(k)-error_1;             %Calculating Pxc(2)=error(k)-2*error_1+error_2;   %Calculating Dxc(3)=error(k);                     %Calculating Idu(k)=kp*xc(1)+kd*xc(2)/ts+ki*xc(3)*ts;if du(k)>PI/6du(k)=PI/6;end   if du(k)<-PI/6du(k)=-PI/6;end  u(k)=u_1+du(k);endelse
%MFAC方法sf(k)=sf_1+((yita*(u_1-u_2))*((yout(k)-y_1+(Kz*r(k)-(Kz*r_1)))-(sf_1*(u_1-u_2))))/(miu+(u_1-u_2)*(u_1-u_2));if ((abs(sf(k))<yipsl)||(abs(u_1-u_2)<yipsl))sf(k)=sf_1;endu(k)=u_1+((ru*sf(k))*(rin(k)-(yout(k)+Kz*r(k))))/(nata+(sf(k)*sf(k)));sf_2=sf_1;sf_1=sf(k);end  if u(k)>PI/6u(k)=PI/6;end   if u(k)<-PI/6u(k)=-PI/6;end%舵速控制
%     if (((u(k)-u_1)/ts)>10)
%         u(k)=10*ts+u_1;
%     else
%         if(((u(k)-u_1)/ts)<-10)
%             u(k)=-10*ts+u_1;
%         end
%     end
error_2=error_1;
error_1=error(k);
u_2=u_1;u_1=u(k);
y_2=y_1;y_1=yout(k);
r_2=r_1;r_1=r(k);Y0=Y{k};
z_1=z(2,k);Y0_m=Y_m{k};
end%% 结果可视化
kk=1:199;
figure;
plot(kk*ts,yout(1:199)*180/PI,'r-',kk*ts,rin(1:199)*180/PI,'--');
title('船舶实际航向与设定航向');
xlabel('时间 \fontname{Times New Roman}t/s');
legend('实际航向','设定航向')
ylabel('角度 \fontname{Times New Roman}/° ');figure;
plot(kk*ts,u(1:199)*180/PI,'r-');
title('舵角');
xlabel('时间 \fontname{Times New Roman}t/s');
ylabel('角度 \fontname{Times New Roman}/° ');figure
plot(kk*ts,error(1:199)*180/PI,'r');
title('航向误差');
xlabel('时间 \fontname{Times New Roman}t/s');
ylabel('角度 \fontname{Times New Roman}/° ');% figure
% plot(kk*ts,rin(1:199),'--',kk*ts,yrout(1:199),'b',kk*ts,yout(1:199),'r-',kk*ts,u(1:199),'g');
% title('船舶航向角与舵角');
% axis([0 80 -20 40])
% xlabel('时间 \fontname{Times New Roman}t/s');
% legend('设定航向角','参考航向角','实际航向角','实际舵角')
% ylabel('角度 \fontname{Times New Roman}/° ');
function Y = rkfa_GR( h,t0,Y0,K,T,u,alfa,d )
k1 = fai_GR(t0,Y0,K,T,u,alfa,d);
k2 = fai_GR(t0+h/2,Y0+h/2*k1,K,T,u,alfa,d);
k3 = fai_GR(t0+h/2,Y0+h/2*k2,K,T,u,alfa,d);
k4 = fai_GR(t0+h,Y0+h*k3,K,T,u,alfa,d);
Y = Y0+h*(k1+2*k2+2*k3+k4)/6;
end
function Y = fai_GR( ~,Y0,K,T,u,alfa,d )
% 此处Y0为一个列向量,因为时间t未显含在一阶方程组中
% 所以ode函数的第一个参数为空,要根据具体情况而定。
Y = [Y0(2);(K*(u+d)-Y0(2)-alfa*(Y0(2))^3)/T;];
end

仿真结果分析:

PID:

MFAC:

PID参数手动调优的效果比MFAC的最优效果要好。

当加上干扰后:

PID:

MFAC:

加上干扰后,PID在稳定后依然有误差,且无法真正稳定,MFAC则不需要调整参数也能保证优秀的控制效果。

但是MFAC在调整时间上始终比PID控制慢,需要进一步研究解决。

基于MFAC无模型自适应控制的无人艇航向控制相关推荐

  1. 【MFAC】基于偏格式动态线性化的无模型自适应控制

    来源:侯忠生教授的<无模型自适应控制:理论与应用>(2013年科学出版社).

  2. 【MFAC】基于全格式动态线性化的无模型自适应控制

    来源:侯忠生教授的<无模型自适应控制:理论与应用>(2013年科学出版社).

  3. 无模型自适应迭代学习控制原理和matlab代码仿真学习记录

    无模型自适应ILC原理及代码实现 这里学习的是很老的一篇论文<基于无模型自适应控制的反馈-前馈迭代学习控制系统收敛性研究>,作者是晏静文和侯忠生,大家有兴趣可以找来看看.这里主要介绍的无模 ...

  4. 无人船/无人艇路径跟踪控制 mmg模型matlab simulink效果

    无人船/无人艇路径跟踪控制 mmg模型matlab simulink效果 基于观测器的LOS制导结合反步法控制 ELOS+backstepping ID:69188660989622243

  5. [论文]基于强化学习的无模型水下机器人深度控制

    基于强化学习的无模型水下机器人深度控制 摘要 介绍 问题公式 A.水下机器人的坐标框架 B.深度控制问题 马尔科夫模型 A.马尔科夫决策 B.恒定深度控制MDP C.弯曲深度控制MDP D.海底追踪的 ...

  6. 基于模型的强化学习比无模型的强化学习更好?错!

    作者 | Carles Gelada and Jacob Buckman 编辑 | DeepRL 来源 | 深度强化学习实验室(ID:Deep-RL) [导读]许多研究人员认为,基于模型的强化学习(M ...

  7. 基于深度强化学习的机器人运动控制研究进展 | 无模型强化学习 | 元学习

    1.基于深度强化学习的机器人运动控制研究进展 1.1 深度强化学习 1.1.1 强化学习简介: 强化学习(Reinforcement Learning, RL)利用试错机制与环境进行交互,旨在通过最大 ...

  8. 【神经网络】基于RBF神经网络的六关节机械臂无模型控制

    前言:最近在搞神经网络,看到有用神经网络逼近未建模动态的,也有用神经网络来逼近整个模型的,后者即是无模型控制.无模型控制它不需要知道系统的名义模型,直接用神经网络来逼近整个系统,感觉这个方法还蛮厉害的 ...

  9. 水面无人艇局部危险避障算法研究 第1章 绪论

    水面无人艇局部危险避障算法研究 Local Risk Obstacle Avoidance Algorithm of USV 博主 的硕士毕业论文 第1章 绪论 1.1 引言 随着世界人口的不断增长以 ...

  10. 第2章 无人艇局部危险避障算法研究

    水面无人艇局部危险避障算法研究 Local Risk Obstacle Avoidance Algorithm of USV 博主 的硕士毕业论文 第2章 无人艇局部危险避障算法研究 2.1 无人艇局 ...

最新文章

  1. 太牛逼了!项目中用了Disruptor之后,性能提升了2.5倍
  2. 使用舵机PWM信号控制直流电机的转动
  3. 晚安科大20211130
  4. 除掉字符串里面相同的字符
  5. ssm使用全注解实现增删改查案例——IEmpService
  6. ML《决策树(三)CART》
  7. hadoop mapreduce开发实践之本地文件分发by streaming
  8. Amazon Lambda支持以简单队列服务作为事件源了
  9. Silverlight提示“Load 操作失败。远程服务器返回了错误: NotFound”
  10. 九存:重新定义存储矿机
  11. html 给一个无限宽,html – CSS div与其内容一样宽
  12. ArcGIS的ArcMap的Mxd格式符号转换为Geoserver style的sld格式
  13. 截止失真放大电路_Multisim基本放大电路仿真实验
  14. mysql 整除取整,MySQL小数位取整
  15. IDEA download sources 报Cannot reconnect错误解决方法
  16. 小的以及大的Typhon IDE
  17. 数据分析--数据分析是什么?
  18. spring boot 引用 shiro 认证AD域
  19. Unity3d学习笔记 var 关键字
  20. 遇到class path resource [applicationcontext.xml] cannot be opened becaus的问题该怎么解决??

热门文章

  1. 一个电商网站设计方案
  2. 基于IPv6的5G专网终端身份认证技术与应用
  3. 计算机视觉与机械专业相关吗,计算机视觉在早期森林火灾探测中的应用研究-精密仪器及机械专业论文.docx...
  4. 手把手教你:个人信贷违约预测模型
  5. CSS基础教程 -- 媒体查询屏幕适配
  6. 精彩回顾 | NDBC 2021华为参会回顾
  7. Selenium WebDriver 数据驱动测试框架
  8. USB转I2C芯片操作EEPROM--CH347应用
  9. 【图论·习题】同余最短路:跳楼机
  10. 从0到1,数据治理一周年大纪实