add real data but testing

This commit is contained in:
cosmic_power 2024-12-15 23:47:47 +08:00
parent 6868449490
commit 5607758a41
7 changed files with 129 additions and 22 deletions

View File

@ -20,16 +20,13 @@ robot = feval(get_robot_func,theta,dtheta,ddtheta,file,opt);
get_Kinematics_func = sprintf('get_Kinematics_%s',opt.robotName); get_Kinematics_func = sprintf('get_Kinematics_%s',opt.robotName);
robot = feval(get_Kinematics_func,robot,opt); robot = feval(get_Kinematics_func,robot,opt);
R1000_Dynamics_num; % R1000_Dynamics_num;
% R1000_Dynamics; % R1000_Dynamics;
% robot = get_velocity(robot, opt); robot = get_velocity(robot, opt);
% robot = get_regressor(robot,opt); robot = get_regressor(robot,opt);
% symbol matched % symbol matched
% verify_regressor_R1000; % verify_regressor_R1000;
% robot = get_baseParams(robot, opt); robot = get_baseParams(robot, opt);
% readDataFile;
% robot.posData = posData;
% robot.currentData = currentData;
% robot = estimate_dyn(robot,opt); % robot = estimate_dyn(robot,opt);
% robot = estimate_dyn_form_data(robot,opt); % robot = estimate_dyn_form_data(robot,opt);
% robot = estimate_dyn_MLS(robot,opt); robot = estimate_dyn_MLS(robot,opt);

View File

@ -1,21 +1,29 @@
%% R1000 %% R1000
N=9; N=9;
% traj % traj
time = 0:0.01:1; time = 0:0.01:1-0.01;
f=1; f=1;
q_J = sin(2*pi*f*time); q_J = sin(2*pi*f*time);
qd_J = (2*pi*f)*cos(2*pi*f*time); qd_J = (2*pi*f)*cos(2*pi*f*time);
qdd_J = -(2*pi*f)^2*sin(2*pi*f*time); qdd_J = -(2*pi*f)^2*sin(2*pi*f*time);
zero_ = zeros(1,length(q_J)); zero_ = zeros(1,length(q_J));
q_J = 0.3*ones(1,length(q_J)); q_J = -0.3*ones(1,length(q_J));
ones_ = ones(1,length(q_J));
% Dynamics parameters % Dynamics parameters
link_mass = robot.m; link_mass = robot.m;
com_pos = robot.com; com_pos = robot.com;
link_inertia = robot.I; link_inertia = robot.I;
thetalist = [zero_;zero_;zero_;zero_;zero_;zero_;zero_;zero_;q_J]'; % thetalist = [zero_;0.4807*ones_;-0.8717*ones_;0.3466*ones_;zero_;0.6965*ones_;-0.5224*ones_;0.3473*ones_;0.05*ones_]';
dthetalist = [zero_;zero_;zero_;zero_;zero_;zero_;zero_;zero_;zero_]'; % dthetalist = [zero_;zero_;zero_;zero_;zero_;zero_;zero_;zero_;zero_]';
ddthetalist = [zero_;zero_;zero_;zero_;zero_;zero_;zero_;zero_;zero_]'; % ddthetalist = [zero_;zero_;zero_;zero_;zero_;zero_;zero_;zero_;zero_]';
%real traj
get_GCTraj_R1000_DVT;
thetalist = idntfcnTrjctry(6).q';
dthetalist = idntfcnTrjctry(6).qd';
ddthetalist = idntfcnTrjctry(6).qdd';
% Get general mass matrix % Get general mass matrix
Glist=[]; Glist=[];
@ -99,7 +107,7 @@ for i = 1:N
elseif i< 9 elseif i< 9
ct(:,i) = ct(:,i-1)-com_pos_R2(:,i-1)+com_pos_R1(:,i); ct(:,i) = ct(:,i-1)-com_pos_R2(:,i-1)+com_pos_R1(:,i);
else else
ct(:,i) = ct(:,i-1)-com_pos_R1(:,i-1)-[0;0;0.05896]+com_pos_R1(:,i); ct(:,i) = ct(:,i-1)-com_pos_R1(:,i-1)-[0.3157;0;0.05896]+com_pos_R1(:,i);
end end
robot.Home.com(:,i) = ct(:,i); robot.Home.com(:,i) = ct(:,i);
M_CG_Base = RpToTrans(robot.Home.R(:,:,i),robot.Home.com(:,i)); M_CG_Base = RpToTrans(robot.Home.R(:,:,i),robot.Home.com(:,i));

View File

@ -2,14 +2,16 @@ function robot = estimate_dyn_MLS(robot,opt)
% ------------------------------------------------------------------- % -------------------------------------------------------------------
% Get datas % Get datas
% ------------------------------------------------------------------------ % ------------------------------------------------------------------------
get_GCTraj_R1000_EVT; get_GCTraj_func = sprintf('get_GCTraj_%s',opt.robotName);
feval(get_GCTraj_func);
% ------------------------------------------------------------------- % -------------------------------------------------------------------
% Generate Regressors based on data % Generate Regressors based on data
% ------------------------------------------------------------------------ % ------------------------------------------------------------------------
drvGains = []; drvGains = [];
baseQR = robot.baseQR; baseQR = robot.baseQR;
for i = 1:1:robot.ndof for i = 2:1:robot.ndof
% for i = robot.ndof
q = idntfcnTrjctry(i).q; q = idntfcnTrjctry(i).q;
qd = idntfcnTrjctry(i).qd; qd = idntfcnTrjctry(i).qd;
qdd = idntfcnTrjctry(i).qdd; qdd = idntfcnTrjctry(i).qdd;
@ -37,7 +39,8 @@ end
% Estimate parameters % Estimate parameters
% --------------------------------------------------------------------- % ---------------------------------------------------------------------
sol = struct; sol = struct;
for i = robot.ndof:-1:1 for i = robot.ndof:-1:2
% for i = robot.ndof
Wb = observationMatrix(i).Wb; Wb = observationMatrix(i).Wb;
Tau = observationMatrix(i).Tau; Tau = observationMatrix(i).Tau;
if i == robot.ndof if i == robot.ndof

99
get_GCTraj_R1000_DVT.m Normal file
View File

@ -0,0 +1,99 @@
%temp get DVT traj
gearRatio = [100,100,120,100,100,80,50,100,1/(0.012/(2*pi))];
motorConstant = [0.21*2.5,0.21*2.5,0.128,0.119,0.094,0.094,0.094,0.099,0.031];
sensorDir = [-1,1,-1,-1,-1,1,1,1,1];
load("G:\123pan\Downloads\重力补偿参数解析\matlab.mat");
posDir = [1,1,1,1,1,1,1,-1,1];
% J9 traj
i = 9;
fileData=eval(strcat('fileData', num2str(i)));
data = fileData.data;
dataLength = length(data);
d1Length = floor(length(data) / 2);
% idntfcnTrjctry(i).tau = (data(1:d1Length,i+1+11*2)*gearRatio(i)*motorConstant(i)+...
% data(d1Length+1:end,i+1+11*2)*gearRatio(i)*motorConstant(i))/2;
idntfcnTrjctry(i).tau = data(:,i+1+11*2)*gearRatio(i)*motorConstant(i);
idntfcnTrjctry(i).tau = idntfcnTrjctry(i).tau';
q=zeros(robot.ndof,dataLength);qd=q;qdd=qd;
for j=1:robot.ndof
if(j==i||j==i-1)
q(j,:)=data(:,j+1+11);
continue;
end
% if(j==8) %hack
% q(j,:)=-data(:,j+1+11);
% continue;
% end
q(j,:) = mean(data(:,j+1+11),1);
end
idntfcnTrjctry(i).q = q;
idntfcnTrjctry(i).qd = qd;
idntfcnTrjctry(i).qdd = qdd;
% J8 to J2 traj
for i=8:-1:2
fileData=eval(strcat('fileData', num2str(i)));
data = fileData.data;
dataLength = length(data);
d1Length = floor(length(data) / 2);
idntfcnTrjctry(i).tau = data(:,6*(i+1)+11*3)*sensorDir(i);
idntfcnTrjctry(i).tau = idntfcnTrjctry(i).tau';
q=zeros(robot.ndof,dataLength);qd=q;qdd=qd;
for j=1:robot.ndof
if((j==i||j==i-1)&&i~=2) %hack i=2
q(j,:)=data(:,j+1+11);
continue;
end
if((i==2&&j==6)||(i==2&&j==2))
q(j,:)=data(:,j+1+11);
continue;
end
q(j,:) = mean(data(:,j+1+11),1);
end
idntfcnTrjctry(i).q = q;
idntfcnTrjctry(i).qd = qd;
idntfcnTrjctry(i).qdd = qdd;
end
% Reduce data size
for i=robot.ndof:-1:2
if i == 9 || i == 8 || i==2
dataLength = length(idntfcnTrjctry(i).tau);
idntfcnTrjctry(i).tau = idntfcnTrjctry(i).tau(mod(1:dataLength, 4000) == 0);
idntfcnTrjctry(i).q = idntfcnTrjctry(i).q(:,mod(1:dataLength, 4000) == 0);
idntfcnTrjctry(i).qd = idntfcnTrjctry(i).qd(:,mod(1:dataLength, 4000) == 0);
idntfcnTrjctry(i).qdd = idntfcnTrjctry(i).qdd(:,mod(1:dataLength, 4000) == 0);
continue;
end
dataLength = length(idntfcnTrjctry(i).tau);
idntfcnTrjctry(i).tau = idntfcnTrjctry(i).tau(mod(1:dataLength, 400) == 0);
idntfcnTrjctry(i).q = idntfcnTrjctry(i).q(:,mod(1:dataLength, 400) == 0);
idntfcnTrjctry(i).qd = idntfcnTrjctry(i).qd(:,mod(1:dataLength, 400) == 0);
idntfcnTrjctry(i).qdd = idntfcnTrjctry(i).qdd(:,mod(1:dataLength, 400) == 0);
end
%hack
for i=robot.ndof:-1:2
idntfcnTrjctry(i).q(8,:) = - idntfcnTrjctry(i).q(8,:);
end
% pi -> [m;mc;I] 10 element
% [nLnkPrms, nLnks] = size(robot.pi);
% robot_pi = reshape(robot.pi, [nLnkPrms*nLnks, 1]);
% for i=2:robot.ndof
% q = idntfcnTrjctry(i).q;
% qd = idntfcnTrjctry(i).qd;
% qdd = idntfcnTrjctry(i).qdd;
% [nRow,nCol] = size(idntfcnTrjctry(i).qd);
% for j = 1:nRow/robot.ndof
% for k = 1:nCol
% standard_regressor_func = sprintf('standard_regressor_%s',opt.robotName);
% regressor = feval(standard_regressor_func,q(robot.ndof*(j-1)+1:robot.ndof*j,k),...
% qd(robot.ndof*(j-1)+1:robot.ndof*j,k),qdd(robot.ndof*(j-1)+1:robot.ndof*j,k));
% tau_Full=regressor*robot_pi;
% tau(j,k) = tau_Full(i);
% end
% end
% Trjctry(i).tau = tau;
% end

View File

@ -41,7 +41,7 @@ if(opt.Isreal)
ct(:,i) = ct(:,i-1)-com_pos_R2(:,i-1)+com_pos_R1(:,i); ct(:,i) = ct(:,i-1)-com_pos_R2(:,i-1)+com_pos_R1(:,i);
else else
% HACK % HACK
ct(:,i) = ct(:,i-1)-com_pos_R1(:,i-1)-[0;0;0.05896]+com_pos_R1(:,i); ct(:,i) = ct(:,i-1)-com_pos_R1(:,i-1)-[0.3157;0;0.05896]+com_pos_R1(:,i);
end end
robot.Home.com(:,i) = ct(:,i); robot.Home.com(:,i) = ct(:,i);
M_CG_Base = RpToTrans(robot.Home.R(:,:,i),robot.Home.com(:,i)); M_CG_Base = RpToTrans(robot.Home.R(:,:,i),robot.Home.com(:,i));
@ -160,7 +160,7 @@ else
ct(:,i) = ct(:,i-1)-com_pos_R2(:,i-1)+com_pos_R1(:,i); ct(:,i) = ct(:,i-1)-com_pos_R2(:,i-1)+com_pos_R1(:,i);
else else
% HACK % HACK
ct(:,i) = ct(:,i-1)-com_pos_R1(:,i-1)-[0;0;0.05896]+com_pos_R1(:,i); ct(:,i) = ct(:,i-1)-com_pos_R1(:,i-1)-[0.3157;0;0.05896]+com_pos_R1(:,i);
end end
robot.Home.com(:,i) = ct(:,i); robot.Home.com(:,i) = ct(:,i);
M_CG_Base = RpToTrans(robot.Home.R(:,:,i),robot.Home.com(:,i)); M_CG_Base = RpToTrans(robot.Home.R(:,:,i),robot.Home.com(:,i));

View File

@ -49,7 +49,7 @@ switch opt.robot_def
co(:,i) = co(:,i-1)+com_pos_R1(:,i)-com_pos_R2(:,i); co(:,i) = co(:,i-1)+com_pos_R1(:,i)-com_pos_R2(:,i);
else else
%From base to ISA Origin %From base to ISA Origin
co(:,i) = co(:,i-1)-[0;0;0.05896]; co(:,i) = co(:,i-1)-[0.3157;0;0.05896];
end end
end end
co = [zeros(3,1),co]; co = [zeros(3,1),co];

View File

@ -49,7 +49,7 @@ for i = 1:9
elseif i< 9 elseif i< 9
ct(:,i) = ct(:,i-1)-com_pos_R2(:,i-1)+com_pos_R1(:,i); ct(:,i) = ct(:,i-1)-com_pos_R2(:,i-1)+com_pos_R1(:,i);
else else
ct(:,i) = ct(:,i-1)-com_pos_R1(:,i-1)-[0;0;0.05896]+com_pos_R1(:,i); ct(:,i) = ct(:,i-1)-com_pos_R1(:,i-1)-[0.3;0;0.05896]+com_pos_R1(:,i);
end end
end end
plot3(ct(1,:),ct(2,:),ct(3,:),'o','Color','r') plot3(ct(1,:),ct(2,:),ct(3,:),'o','Color','r')
@ -65,7 +65,7 @@ for i = 1:8
co(:,i) = co(:,i-1)+com_pos_R1(:,i)-com_pos_R2(:,i); co(:,i) = co(:,i-1)+com_pos_R1(:,i)-com_pos_R2(:,i);
else else
%From base to ISA Origin %From base to ISA Origin
co(:,i) = co(:,i-1)-[0;0;0.05896]; co(:,i) = co(:,i-1)-[0.3;0;0.05896];
end end
end end
co = [zeros(3,1),co]; co = [zeros(3,1),co];