CRP六关节机械臂神经网络控制仿真

This commit is contained in:
iHoney725
2021-01-04 10:35:55 +08:00
committed by GitHub
parent 8b0e81678d
commit 8dda25c41b
6 changed files with 984 additions and 0 deletions
Binary file not shown.
+682
View File
File diff suppressed because it is too large Load Diff
+88
View File
@@ -0,0 +1,88 @@
function [sys,x0,str,ts] = CRP_S(t,x,u,flag)
switch flag
case 0
[sys,x0,str,ts]=mdlInitializeSizes;
case {1,2,4,9}
sys=[];
case 3
sys=mdlOutputs(t,x,u);
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 6;
sizes.NumInputs = 30;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 0;
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [];
function sys=mdlOutputs(t,x,u)
global xite
% ½Çȸú×ÙÖ¸Áî
qd1 = u(1);
qd2 = u(2);
qd3 = u(3);
qd4 = u(4);
qd5 = u(5);
qd6 = u(6);
% ½ÇËÙȸú×ÙÖ¸Áî
dqd1 = u(7);
dqd2 = u(8);
dqd3 = u(9);
dqd4 = u(10);
dqd5 = u(11);
dqd6 = u(12);
% ½Ç¼ÓËÙȸú×ÙÖ¸Áî
ddqd1 = u(13);
ddqd2 = u(14);
ddqd3 = u(15);
ddqd4 = u(16);
ddqd5 = u(17);
ddqd6 = u(18);
q1 = u(19);
q2 = u(20);
q3 = u(21);
q4 = u(22);
q5 = u(23);
q6 = u(24);
dq1 = u(25);
dq2 = u(26);
dq3 = u(27);
dq4 = u(28);
dq5 = u(29);
dq6 = u(30);
e1 = qd1 - q1; % e = qd - q
e2 = qd2 - q2;
e3 = qd3 - q3; % e = qd - q
e4 = qd4 - q4;
e5 = qd5 - q5; % e = qd - q
e6 = qd6 - q6;
de1 = dqd1 - dq1;
de2 = dqd2 - dq2;
de3 = dqd3 - dq3;
de4 = dqd4 - dq4;
de5 = dqd5 - dq5;
de6 = dqd6 - dq6;
e = [e1; e2; e3; e4; e5; e6];
de = [de1; de2; de3; de4; de5; de6];
s = xite * e + de;
sys(1:6) = s;
+90
View File
@@ -0,0 +1,90 @@
function [sys,x0,str,ts] = CRP_i(t,x,u,flag)
switch flag
case 0
[sys,x0,str,ts]=mdlInitializeSizes;
case 3
sys=mdlOutputs(t,x,u);
case {2,4,9}
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1;
sizes.NumInputs = 24;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 0;
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [];
function sys=mdlOutputs(t,x,u)
% 角速度跟踪指令
dqd1 = 0.1*pi*cos(pi*t);
dqd2 = 0.1*pi*cos(pi*t);
dqd3 = 0.1*pi*cos(pi*t);
dqd4 = 0.1*pi*cos(pi*t);
dqd5 = 0.1*pi*cos(pi*t);
dqd6 = 0.1*pi*cos(pi*t);
% 角加速度跟踪指令
ddqd1 = -0.1*pi*pi*sin(pi*t);
ddqd2 = -0.1*pi*pi*sin(pi*t);
ddqd3 = -0.1*pi*pi*sin(pi*t);
ddqd4 = -0.1*pi*pi*sin(pi*t);
ddqd5 = -0.1*pi*pi*sin(pi*t);
ddqd6 = -0.1*pi*pi*sin(pi*t);
qd1 = u(1);
qd2 = u(2);
qd3 = u(3);
qd4 = u(4);
qd5 = u(5);
qd6 = u(6);
q1 = u(7);
q2 = u(8);
q3 = u(9);
q4 = u(10);
q5 = u(11);
q6 = u(12);
dq1 = u(13);
dq2 = u(14);
dq3 = u(15);
dq4 = u(16);
dq5 = u(17);
dq6 = u(18);
e1 = qd1 - q1; % e = qd - q
e2 = qd2 - q2;
e3 = qd3 - q3; % e = qd - q
e4 = qd4 - q4;
e5 = qd5 - q5; % e = qd - q
e6 = qd6 - q6;
de1 = dqd1 - dq1;
de2 = dqd2 - dq2;
de3 = dqd3 - dq3;
de4 = dqd4 - dq4;
de5 = dqd5 - dq5;
de6 = dqd6 - dq6;
e = [e1; e2; e3; e4; e5; e6];
de = [de1; de2; de3; de4; de5; de6];
dq = [dq1; dq2; dq3; dq4; dq5; dq6];
q = [q1; q2; q3; q4; q5; q6];
dqd = [dqd1; dqd2; dqd3; dqd4; dqd5; dqd6;];
ddqd = [ddqd1; ddqd2; ddqd3; ddqd4; ddqd5; ddqd6];
% 参数的定义
xite = 5.0*eye(6); % xite>0
s = xite * e + de;
sys(1) = s(1);
+72
View File
@@ -0,0 +1,72 @@
function [sys,x0,str,ts] = CRP_input(t,x,u,flag)
switch flag
case 0
[sys,x0,str,ts]=mdlInitializeSizes;
case 1
sys=mdlDerivatives(t,x,u);
case 3
sys=mdlOutputs(t,x,u);
case {2,4,9}
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 18;
sizes.NumInputs = 0;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 0;
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [];
function sys=mdlOutputs(t,x,u)
global xite
% ½Çȸú×ÙÖ¸Áî
qd1 = 0.1*cos(2*pi*t);
qd2 = 0.1*cos(pi*t);
qd3 = 0.1*cos(pi*t);
qd4 = 0.1*cos(pi*t);
qd5 = 0.1*cos(pi*t);
qd6 = 0.1*cos(pi*t);
% ½ÇËÙȸú×ÙÖ¸Áî
dqd1 = -0.1*2*pi*sin(2*pi*t);
dqd2 = -0.1*pi*sin(pi*t);
dqd3 = -0.1*pi*sin(pi*t);
dqd4 = -0.1*pi*sin(pi*t);
dqd5 = -0.1*pi*sin(pi*t);
dqd6 = -0.1*pi*sin(pi*t);
% ½Ç¼ÓËÙȸú×ÙÖ¸Áî
ddqd1 = -0.1*2*2*pi*pi*cos(2*pi*t);
ddqd2 = -0.1*pi*pi*cos(pi*t);
ddqd3 = -0.1*pi*pi*cos(pi*t);
ddqd4 = -0.1*pi*pi*cos(pi*t);
ddqd5 = -0.1*pi*pi*cos(pi*t);
ddqd6 = -0.1*pi*pi*cos(pi*t);
sys(1) = qd1;
sys(2) = qd2;
sys(3) = qd3;
sys(4) = qd4;
sys(5) = qd5;
sys(6) = qd6;
sys(7) = dqd1;
sys(8) = dqd2;
sys(9) = dqd3;
sys(10) = dqd4;
sys(11) = dqd5;
sys(12) = dqd6;
sys(13) = ddqd1;
sys(14) = ddqd2;
sys(15) = ddqd3;
sys(16) = ddqd4;
sys(17) = ddqd5;
sys(18) = ddqd6;
+52
View File
@@ -0,0 +1,52 @@
function [sys,x0,str,ts] = CRProbotJoint(t,x,u,flag)
switch flag
case 0
[sys,x0,str,ts]=mdlInitializeSizes;
case 1
sys=mdlDerivatives(t,x,u);
case {2,4,9}
sys=[];
case 3
sys=mdlOutputs(t,x,u);
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化
sizes = simsizes;
sizes.NumContStates = 0; %设置系统连续状态的变量
sizes.NumDiscStates = 0; %设置系统离散状态的变量
sizes.NumOutputs = 6; %设置系统输出的变量
sizes.NumInputs = 0; %设置系统输入的变量
sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1
sizes.NumSampleTimes = 0; % 模块采样周期的个数
% 需要的样本时间,一般为1.
% 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态
sys = simsizes(sizes);
x0 = []; % 系统初始状态变量
str = []; % 保留变量,保持为空
ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0
function sys=mdlOutputs(t,x,u) %产生(传递)系统输出
% R1 = (0.2693)*sin((0.2519)*t + (-0.2811)) + (0.08634)*sin((0.5401)*t + (2.424)) + (0.008846)*sin((1.175)*t + (1.882)) + (0.004509)*sin((1.749)*t + (1.906)) + (0.001863)*sin((2.389)*t + (2.173)) + (0.001096)*sin((3.001)*t + (2.104)) + (0.0006325)*sin((3.686)*t + (1.908));
% R2 = (0.3132)*sin((0.2725)*t + (2.859)) + (0.0973)*sin((0.5103)*t + (-0.6751)) + (0.01545)*sin((1.175)*t + (-1.24)) + (0.006022)*sin((1.72)*t + (-1.014)) + (0.002018)*sin((2.423)*t + (-1.143)) + (0.001371)*sin((3.004)*t + (-1.004)) + (0.0007587)*sin((3.689)*t + (-1.204));
% R3 = (0.5944)*sin((0.25)*t + (-0.0491)) + (0.2337)*sin((0.4144)*t + (3.144)) + (0.01604)*sin((1.171)*t + (1.843)) + (0.00728)*sin((1.754)*t + (1.81)) + (0.002588)*sin((2.357)*t + (2.304)) + (0.001568)*sin((2.978)*t + (2.203)) + (0.0008342)*sin((3.678)*t + (1.939));
% R4 = (1.095)*sin((0.284)*t + (-0.299)) + (0.3042)*sin((0.5665)*t + (1.304)) + (0.06447)*sin((1.358)*t + (0.999)) + (0.05748)*sin((1.452)*t + (3.85)) + (0.005996)*sin((2.295)*t + (3.25)) + (0.00376)*sin((3.028)*t + (2.512)) + (0.002784)*sin((3.687)*t + (2.177));
% R5 = (0.3831)*sin((0.2474)*t + (2.992)) + (0.1344)*sin((0.4627)*t + (-0.2944)) + (0.00835)*sin((1.175)*t + (-1.363)) + (0.004525)*sin((1.748)*t + (-1.374)) + (0.001669)*sin((2.401)*t + (-1.041)) + (0.001098)*sin((3.006)*t + (-1.08)) + (0.0006398)*sin((3.691)*t + (-1.248));
% R6 = (1.056)*sin((0.2844)*t + (2.851)) + (0.2907)*sin((0.5716)*t + (-1.896)) + (0.1078)*sin((1.35)*t + (-2.024)) + (0.09987)*sin((1.404)*t + (0.9588)) + (0.005609)*sin((2.314)*t + (0.03832)) + (0.003715)*sin((3.008)*t + (-0.5013)) + (0.002569)*sin((3.694)*t + (-0.9631));
%路径规划 x-0.2 y0.2 z-0.2
R1 = 1.306e-05 * t^5 - 0.0003628 * t^4 + 0.002629 * t^3 -0.0002011 * t^2 + 0.001278 *t - 0.0004736;
R2 = 1.04e-05 * t^5 - 0.0001797 *t^4 - 0.0002723 *t^3 + 0.01482 *t^2 - 0.01434 *t + 0.003022;
R3 = -1.682e-05*t^5 + 0.0003065 *t^4 + 0.0003115 *t^3 - 0.02495 *t^2 + 0.02353 *t - 0.004826;
R4 = 1.264e-19 * t^5 - 3.305e-18 *t^4 + 3.235e-17 *t^3 - 1.414e-16 *t^2 + 2.391e-16 *t - 6.501e-17;
R5 = -6.422e-06 *t^5 + 0.0001268 *t^4 + 3.923e-05 *t^3 - 0.01013 *t^2 + 0.009188 *t - 0.001804;
R6 = 1.306e-05 *t^5 - 0.0003628 *t^4 + 0.002629 *t^3 - 0.0002011 *t^2 + 0.001278 *t - 0.0004736;
sys(1) = R1;
sys(2) = R2;
sys(3) = R3;
sys(4) = R4;
sys(5) = R5;
sys(6) = R6;