Dynamic-Calibration/basic_param/group.m

41 lines
1.5 KiB
Matlab

function [Rpr,Rcur] = group(Ppr,Pcur,lam,zi)
% Regroup inertial parameters
% Ppr - parameters for link i-1
% Pcur - parameters for link i
% lam - lambda matrix for link i
% zi - axis of rotation for lin i
% Return:
% Rpr - regrouped parameters for link i-1
% Rcur - regrouped parameters for link i
Rcur = Pcur;
% --------------------------------------------------------------------
% mass
% --------------------------------------------------------------------
Rpr = Ppr + Pcur(10)*lam(10,:)';
Rcur(10) = 0;
% --------------------------------------------------------------------
% mass center and inertia
% --------------------------------------------------------------------
if zi(3) == 1 % Z rotation, add mZ, combine XX and YY
sum = simplify(lam(1,:) + lam(4,:));
Rpr = Rpr + sum' * Pcur(4) + lam(9,:)' * Pcur(9);
Rcur(1) = Pcur(1) - Pcur(4);
Rcur(4) = 0;
Rcur(9) = 0;
elseif zi(2) == 1 % Y rotation, add mY, combine XX and ZZ
sum = simplify(lam(1,:) + lam(6,:));
Rpr = Rpr + sum' * Pcur(6) + lam(8,:)' * Pcur(8);
Rcur(1) = Pcur(1) - Pcur(6);
Rcur(6) = 0;
Rcur(8) = 0;
elseif zi(1) == 1 % X rotation, add mZ, combine YY and ZZ
sum = simplify(lam(4,:) + lam(6,:));
Rpr = Rpr + sum' * Pcur(6) + lam(7,:)' * Pcur(7);
Rcur(4) = Pcur(4) - Pcur(6);
Rcur(6) = 0;
Rcur(7) = 0;
else
disp("Wrong axis definition");
end
end