From 057c2af8ba2a1dec1e3cdb242cdf1bd4ac5db2c9 Mon Sep 17 00:00:00 2001 From: cosmic_power Date: Mon, 23 Sep 2024 02:45:58 +0800 Subject: [PATCH] dynamics match with simpack --- R1000_Dynamics_num.m | 18 ++++++++++-------- simpack_data/R1000-DVT-statics.sbr | Bin 0 -> 74232 bytes 2 files changed, 10 insertions(+), 8 deletions(-) create mode 100644 simpack_data/R1000-DVT-statics.sbr diff --git a/R1000_Dynamics_num.m b/R1000_Dynamics_num.m index 810105b..87eb2d6 100644 --- a/R1000_Dynamics_num.m +++ b/R1000_Dynamics_num.m @@ -12,9 +12,9 @@ link_mass = robot.m; com_pos = robot.com; link_inertia = robot.I; -thetalist = [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_]'; +thetalist = [q_J;zero_;zero_;zero_;zero_;q_J;zero_;zero_;zero_]'; +dthetalist = [qd_J;zero_;zero_;zero_;zero_;qd_J;zero_;zero_;zero_]'; +ddthetalist = [qdd_J;zero_;zero_;zero_;zero_;qdd_J;zero_;zero_;zero_]'; % Get general mass matrix Glist=[]; @@ -24,17 +24,17 @@ for i = 1:N end % Get the com pos transformation in each joint reference frame -Mlist_GC = []; +Mlist_CG = []; for i = 0:N-1 if i == 0 M = robot.T(:,:,i+1)*transl(com_pos(:,i+1)); else M = TransInv(transl(com_pos(:,i)))*robot.T(:,:,i+1)*transl(com_pos(:,i+1)); end - Mlist_GC = cat(3, Mlist_GC, M); + Mlist_CG = cat(3, Mlist_CG, M); end M = [[1, 0, 0, 0]; [0, 1, 0, 0]; [0, 0, 1, 0]; [0, 0, 0, 1]]; -Mlist_GC = cat(3, Mlist_GC, M); +Mlist_CG = cat(3, Mlist_CG, M); % Get the end efforce transformation in each joint reference frame Mlist_ED = []; @@ -64,9 +64,10 @@ exf=[0;0;0;0;0;0]; for i = 1:length(q_J) [V1(:,:, i),Vd1(:,:, i),Adgab_mat(:,:,:,i),Fmat(:,:,i)] ... = InverseDynamics_debug(thetalist(i,:)', dthetalist(i,:)', ddthetalist(i,:)', ... - [0;0;-9.8], exf, Mlist_GC, Glist, Slist); - G(:,:,:,i) = FKinSpaceExpand(Mlist_GC, Slist, thetalist(i,:)'); + [0;0;-9.8], exf, Mlist_CG, Glist, Slist); + G(:,:,:,i) = FKinSpaceExpand(Mlist_CG, Slist, thetalist(i,:)'); T(:,:,:,i)=FKinSpaceExpand(Mlist_ED, Slist, thetalist(i,:)'); + %Want to get the result from TC_delta, which means F at CG represent under frame at the last origin F_Simpack(:,:,i) = getSimpackF(G(:,:,:,i),T(:,:,:,i),Mlist_ED,Fmat(:,:,i)); end % plot Torque @@ -75,6 +76,7 @@ figure(1) for i = 1:3 subplot(3,1,i); hold on; + %added minus, so should be the same as simpack plot(time,-reshape(F_Simpack(1,i,:),[1,length(F_Simpack)])) % plot(SPCK_Result.Crv(i+4).x,SPCK_Result.Crv(i+4).y) end diff --git a/simpack_data/R1000-DVT-statics.sbr b/simpack_data/R1000-DVT-statics.sbr new file mode 100644 index 0000000000000000000000000000000000000000..29d5072906fd0327b332bb9bcec8d48fd2dcf9a1 GIT binary patch literal 74232 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