feature/R1000-identification #2
|
|
@ -0,0 +1,22 @@
|
||||||
|
close all;clc;clear
|
||||||
|
file = [];
|
||||||
|
opt.robot_def = 'direct';
|
||||||
|
opt.KM_method = 'SCREW';
|
||||||
|
opt.Vel_method = 'Direct';
|
||||||
|
opt.LD_method = 'Direct';
|
||||||
|
opt.debug = true;
|
||||||
|
opt.robotName = 'R1000';
|
||||||
|
opt.reGenerate = false;
|
||||||
|
opt.Isreal = true;
|
||||||
|
|
||||||
|
robot = get_robot_R1000(file,opt);
|
||||||
|
robot = get_Kinematics(robot, opt);
|
||||||
|
|
||||||
|
R1000_Dynamics_num;
|
||||||
|
% R1000_Dynamics;
|
||||||
|
% getGravityForce;
|
||||||
|
robot = get_velocity(robot, opt);
|
||||||
|
robot = get_regressor(robot,opt);
|
||||||
|
% symbol matched
|
||||||
|
% verify_regressor_R1000;
|
||||||
|
% robot = get_baseParams(robot, opt);
|
||||||
|
|
@ -13,9 +13,9 @@ 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_;zero_]';
|
thetalist = [zero_;zero_;q_J;q_J;zero_;zero_;zero_;zero_;zero_]';
|
||||||
dthetalist = [zero_;zero_;zero_;zero_;zero_;zero_;zero_;zero_;zero_]';
|
dthetalist = 1000*[q_J;q_J;q_J;q_J;q_J;q_J;q_J;q_J;q_J]';
|
||||||
ddthetalist = [q_J;q_J;q_J;q_J;q_J;q_J;q_J;q_J;q_J]';
|
ddthetalist = 1000*[q_J;q_J;q_J;q_J;q_J;q_J;q_J;q_J;q_J]';
|
||||||
|
|
||||||
% Get general mass matrix
|
% Get general mass matrix
|
||||||
Glist=[];
|
Glist=[];
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,16 @@ if(opt.Isreal)
|
||||||
M = [[1, 0, 0, 0]; [0, 1, 0, 0]; [0, 0, 1, 0]; [0, 0, 0, 1]];
|
M = [[1, 0, 0, 0]; [0, 1, 0, 0]; [0, 0, 1, 0]; [0, 0, 0, 1]];
|
||||||
Mlist_CG = cat(3, Mlist_CG, M);
|
Mlist_CG = cat(3, Mlist_CG, M);
|
||||||
robot.kine.Mlist_CG = Mlist_CG;
|
robot.kine.Mlist_CG = Mlist_CG;
|
||||||
|
|
||||||
|
% Get the end efforce transformation in each joint reference frame
|
||||||
|
Mlist_ED = [];
|
||||||
|
for i = 1:length(thetalist)
|
||||||
|
M = robot.T(:,:,i);
|
||||||
|
Mlist_ED = cat(3, Mlist_ED, M);
|
||||||
|
end
|
||||||
|
M = [[1, 0, 0, 0]; [0, 1, 0, 0]; [0, 0, 1, 0]; [0, 0, 0, 1]];
|
||||||
|
Mlist_ED = cat(3, Mlist_ED, M);
|
||||||
|
robot.kine.Mlist_ED = Mlist_ED;
|
||||||
case 'SDH'
|
case 'SDH'
|
||||||
theta = robot.theta;
|
theta = robot.theta;
|
||||||
alpha = robot.alpha;
|
alpha = robot.alpha;
|
||||||
|
|
|
||||||
|
|
@ -118,8 +118,8 @@ switch opt.robot_def
|
||||||
% ------------------------------------------------------------------------
|
% ------------------------------------------------------------------------
|
||||||
if(opt.Isreal)
|
if(opt.Isreal)
|
||||||
%FIXME: only consider the theta temply
|
%FIXME: only consider the theta temply
|
||||||
robot.dtheta = zeros([ndof,1]);
|
robot.dtheta = 1000*pi/4*ones([ndof,1]);
|
||||||
robot.ddtheta = pi/4*ones([ndof,1]);
|
robot.ddtheta = 1000*pi/4*ones([ndof,1]);
|
||||||
robot.link_type = ['R','R','R','R','R','R','R','R','P'];
|
robot.link_type = ['R','R','R','R','R','R','R','R','P'];
|
||||||
switch opt.KM_method
|
switch opt.KM_method
|
||||||
case 'SDH'
|
case 'SDH'
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ switch opt.KM_method
|
||||||
% hack: because we only know the com in the world frame
|
% hack: because we only know the com in the world frame
|
||||||
% the inv of rotation is beacause we want to the com in
|
% the inv of rotation is beacause we want to the com in
|
||||||
% our defined frame. R*com is the wrong result
|
% our defined frame. R*com is the wrong result
|
||||||
robot.pi(2:4,i) = robot.Home.R(:,:,i)'*robot.pi(2:4,i);
|
robot.pi(2:4,i) = robot.m(i)*robot.Home.R(:,:,i)'*robot.com(:,i);
|
||||||
com_vec2mat = vec2skewSymMat(robot.com(:,i)); %com
|
com_vec2mat = vec2skewSymMat(robot.com(:,i)); %com
|
||||||
% get joint inertial
|
% get joint inertial
|
||||||
robot.I(:,:,i) = robot.I(:,:,i)-link_mass(i)*com_vec2mat*com_vec2mat;
|
robot.I(:,:,i) = robot.I(:,:,i)-link_mass(i)*com_vec2mat*com_vec2mat;
|
||||||
|
|
@ -45,11 +45,12 @@ switch opt.KM_method
|
||||||
robot.vel.w = V(1:3,2:end);
|
robot.vel.w = V(1:3,2:end);
|
||||||
robot.vel.dw = Vd(1:3,2:end);
|
robot.vel.dw = Vd(1:3,2:end);
|
||||||
for i = 1:robot.ndof
|
for i = 1:robot.ndof
|
||||||
robot.vel.v(:,i) = V(4:6,i+1) - vec2skewSymMat(robot.vel.w(:,i))*robot.Home.R(:,:,i)'*robot.com(:,i);
|
robot.vel.v(:,i) = V(4:6,i+1);
|
||||||
robot.vel.dv(:,i) = Vd(4:6,i+1)- vec2skewSymMat(robot.vel.dw(:,i))*robot.Home.R(:,:,i)'*robot.com(:,i)...
|
robot.vel.dv(:,i) = Vd(4:6,i+1) - vec2skewSymMat(robot.vel.dw(:,i))*robot.Home.R(:,:,i)'*robot.com(:,i)...
|
||||||
- vec2skewSymMat(robot.vel.w(:,i))*(vec2skewSymMat(robot.vel.w(:,i))*robot.Home.R(:,:,i)'*robot.com(:,i));
|
- vec2skewSymMat(robot.vel.w(:,i))*(vec2skewSymMat(robot.vel.w(:,i))*robot.Home.R(:,:,i)'*robot.com(:,i));
|
||||||
end
|
end
|
||||||
% robot.vel.v = V(4:6,2:end);
|
% robot.vel.v = V(4:6,2:end);
|
||||||
|
% robot.vel.dv = Vd(4:6,2:end);
|
||||||
|
|
||||||
% robot.vel.dv=[zeros(2,robot.ndof);-robot.gravity(end)*ones(1,robot.ndof)];
|
% robot.vel.dv=[zeros(2,robot.ndof);-robot.gravity(end)*ones(1,robot.ndof)];
|
||||||
case 'SDH'
|
case 'SDH'
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue