stewart.cpp
Go to the documentation of this file.
1 /*
2 Copyright (C) 2004 Samuel Bélanger
3 
4 This library is free software; you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as
6 published by the Free Software Foundation; either version 2.1 of the
7 License, or (at your option) any later version.
8 
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU Lesser General Public License for more details.
13 
14 You should have received a copy of the GNU Lesser General Public
15 License along with this library; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 
18 
19 Report problems and direct all questions to:
20 
21 email: samuel.belanger@polymtl.ca or richard.gourdeau@polymtl.ca
22 */
23 
24 
30 static const char rcsid[] = "$Id: stewart.cpp,v 1.6 2006/05/16 19:24:26 gourdeau Exp $";
32 
33 #include "config.h"
34 #include "stewart.h"
35 
36 #ifdef use_namespace
37 namespace ROBOOP {
38 #endif
39 
40 
46 {
47  b = ColumnVector(3);
48  b = 0.0;
49  ap = ColumnVector(3);
50  ap = 0.0;
51 
52  I1aa = 0.0;
53  I1nn = 0.0;
54  I2aa = 0.0;
55  I2nn = 0.0;
56  m1 = 0.0;
57  m2 = 0.0;
58  Lenght1 = 0.0;
59  Lenght2 = 0.0;
60 
61  ColumnVector ZeroValue(3);
62  ZeroValue<<0.0<<0.0<<0.0;
63 
64  UnitV = ZeroValue;
65  aPos = ZeroValue;
66  Vu = ZeroValue;
67  Vc = ZeroValue;
68  Vv = ZeroValue;
69  da = ZeroValue;
70  dda = ZeroValue;
71  LOmega = ZeroValue;
72  LAlpha = ZeroValue;
73  ACM1 = ZeroValue;
74  N = ZeroValue;
75  gravity = ZeroValue;
76  L = 0.0;
77 }
78 
87 LinkStewart::LinkStewart (const ColumnVector & InitLink, const Matrix wRp, const ColumnVector q)
88 {
89  b = InitLink.Rows(1,3);
90  ap = InitLink.Rows(4,6);
91  I1aa = InitLink(7);
92  I1nn = InitLink(8);
93  I2aa = InitLink(9);
94  I2nn = InitLink(10);
95  m1 = InitLink(11);
96  m2 = InitLink(12);
97  Lenght1 = InitLink(13);
98  Lenght2 = InitLink(14);
99 
100  ColumnVector ZeroValue(3);
101  ZeroValue<<0.0<<0.0<<0.0;
102 
103  UnitV = ZeroValue;
104  aPos = ZeroValue;
105  Vc = ZeroValue;
106  Vv = ZeroValue;
107  da = ZeroValue;
108  dda = ZeroValue;
109  LOmega = ZeroValue;
110  LAlpha = ZeroValue;
111  ACM1 = ZeroValue;
112  N = ZeroValue;
113  gravity = ZeroValue;
114  L = 0.0;
115 
116  aPos = Find_a(wRp,q);
117  L = Find_Lenght();
118  UnitV = Find_UnitV();
119  Vu = Find_VctU();
120 }
121 
127 {
128  b = x.b;
129  ap = x.ap;
130  I1aa = x.I1aa;
131  I1nn = x.I1nn;
132  I2aa = x.I2aa;
133  I2nn = x.I2nn;
134  m1 = x.m1;
135  m2 = x.m2;
136  Lenght1 = x.Lenght1;
137  Lenght2 = x.Lenght2;
138 
139  UnitV = x.UnitV;
140  aPos = x.aPos;
141  Vu = x.Vu;
142  Vc = x.Vc;
143  Vv = x.Vv;
144  da = x.da;
145  dda = x.dda;
146  LOmega = x.LOmega;
147  LAlpha = x.LAlpha;
148  ACM1 = x.ACM1;
149  N = x.N;
150  gravity = x.gravity;
151  L = x.L;
152 }
153 
156 {
157 }
158 
160 {
162  b = x.b;
163  ap = x.ap;
164  I1aa = x.I1aa;
165  I1nn = x.I1nn;
166  I2aa = x.I2aa;
167  I2nn = x.I2nn;
168  m1 = x.m1;
169  m2 = x.m2;
170  Lenght1 = x.Lenght1;
171  Lenght2 = x.Lenght2;
172 
173  UnitV = x.UnitV;
174  aPos = x.aPos;
175  Vu = x.Vu;
176  Vc = x.Vc;
177  Vv = x.Vv;
178  da = x.da;
179  dda = x.dda;
180  LOmega = x.LOmega;
181  LAlpha = x.LAlpha;
182  ACM1 = x.ACM1;
183  N = x.N;
184  gravity = x.gravity;
185  L = x.L;
186  return *this;
187 }
188 
191 {
192  if(Newb.Nrows() == 3)
193  b = Newb;
194  else
195  cerr<< "LinkStewart::set_b: wrong size in input vector."<< endl;
196 }
197 
200 {
201  if(NewAp.Nrows()== 3)
202  ap = NewAp;
203  else
204  cerr<< "LinkStewart::set_Ap: wrong size in input vector."<< endl;
205 }
206 
207 void LinkStewart::set_I1aa(const Real NewI1aa)
208 
209 {
210  I1aa = NewI1aa;
211 }
212 
213 void LinkStewart::set_I1nn(const Real NewI1nn)
214 {
216  I1nn = NewI1nn;
217 }
218 
219 void LinkStewart::set_I2aa(const Real NewI2aa)
220 {
222  I2aa = NewI2aa;
223 }
224 
225 void LinkStewart::set_I2nn(const Real NewI2nn)
226 {
228  I2nn = NewI2nn;
229 }
230 
231 void LinkStewart::set_m1(const Real Newm1)
232 {
234  m1 = Newm1;
235 }
236 
237 void LinkStewart::set_m2(const Real Newm2)
238 {
240  m2 = Newm2;
241 }
242 
243 void LinkStewart::set_Lenght1(const Real NewLenght1)
245 {
246  Lenght1 = NewLenght1;
247 }
248 
249 void LinkStewart::set_Lenght2(const Real NewLenght2)
251 {
252  Lenght2 = NewLenght2;
253 }
254 
257 {
258  return ap;
259 }
260 
263 {
264  return b;
265 }
266 
269 {
270  return I1aa;
271 }
272 
275 {
276  return I1nn;
277 }
278 
281 {
282  return I2aa;
283 }
284 
287 {
288  return I2nn;
289 }
290 
293 {
294  return m1;
295 }
296 
299 {
300  return m2;
301 }
302 
305 {
306  return Lenght1;
307 }
308 
311 {
312  return Lenght2;
313 }
314 
321 {
322  aPos = Find_a(wRp,q);
323  L = Find_Lenght();
324  UnitV = Find_UnitV();
325  Vv = Find_VctV();
326  Vc = Find_VctC();
327 }
328 
330  const Real dl, const Real ddl)
338 {
339  Matrix AngularKin;
340 
341  da = Find_da(dq,Omega);
342  AngularKin = Find_AngularKin(dl, ddl);
343  LOmega = AngularKin.Column(1);
344  LAlpha = AngularKin.Column(2);
345 }
346 
348  const ColumnVector Alpha, const Real dl, const Real ddl)
357 {
358  Matrix AngularKin;
359 
360  dda = Find_dda(ddq,Omega,Alpha);
361  AngularKin = Find_AngularKin(dl, ddl);
362  LOmega = AngularKin.Column(1);
363  LAlpha = AngularKin.Column(2);
364 }
365 
366 void LinkStewart::tau_LTransform(const Real dl, const Real ddl,const Real Gravity)
373 {
374  ACM1 = Find_ACM1(dl,ddl);
375  N = Find_N(Gravity);
376 }
377 
396 {
397  ColumnVector a;
398  a = q.Rows(1,3) + wRp*ap;
399  a.Release();
400  return a;
401 }
402 
417 {
418  Matrix Tmp (1,3);
419  Tmp = (aPos - b)/L;
420  Tmp.Release();
421  return Tmp;
422 }
423 
439 {
440  ColumnVector da;
441 
442  da = dq.Rows(1,3) + CrossProduct(Omega,aPos);
443 
444  da.Release();
445  return da;
446 }
447 
465 {
466  ColumnVector dda;
467  dda = ddq.Rows(1,3) + CrossProduct(Alpha,aPos) +
468  CrossProduct(Omega,CrossProduct(Omega,aPos));
469 
470  dda.Release();
471  return dda;
472 }
473 
487 {
488  return sqrt(DotProduct((aPos - b),(aPos - b)));
489 }
490 
504 {
505  ColumnVector u(3);
506 
507  u(1) = -UnitV(1)/sqrt(UnitV(1)*UnitV(1) + UnitV(3)*UnitV(3));
508  u(2) = 0.0;
509  u(3) = -UnitV(3)/sqrt(UnitV(1)*UnitV(1) + UnitV(3)*UnitV(3));
510 
511  u.Release();
512  return u;
513 }
514 
528 {
529  ColumnVector v;
530  v = CrossProduct(Vu,UnitV)/(CrossProduct(Vu,UnitV).NormFrobenius());
531 
532  v.Release();
533  return v;
534 }
535 
549 {
550  return CrossProduct(Vu, Vv);
551 }
552 
586 {
587  Matrix Temp(3,2);
588  ColumnVector tmp_dda(3), omega(3), alpha(3);
589  Real wu, wv, au, av;
590 
591  wu = DotProduct(-(da-dl*UnitV),Vv/(DotProduct(L*UnitV,Vc)));
592  wv = DotProduct((da-dl*UnitV),Vu/(DotProduct(L*UnitV,Vc)));
593 
594  omega = wu*Vu + wv*Vv;
595 
596  tmp_dda = dda - wu*wv*L*CrossProduct(Vc,UnitV)-ddl*UnitV-2*dl*CrossProduct(omega,UnitV)
597  -L*CrossProduct(omega,CrossProduct(omega,UnitV));
598 
599  au = DotProduct(-tmp_dda,Vv/(L*DotProduct(UnitV,Vc)));
600  av = DotProduct(tmp_dda,Vu/(L*DotProduct(UnitV,Vc)));
601 
602  alpha = au*Vu + av*Vv + wu*wv*Vc;
603 
604  Temp.Column(1) = omega; Temp.Column(2) = alpha;
605 
606  Temp.Release(); return Temp;
607 }
608 
642 {
643  ColumnVector Accel2(3);
644  Matrix Fn(3,1), N_N(3,1), I1(3,3), I2(3,3);
645 
646  gravity = 0;
647  gravity(2) = -Gravity;
648 
649  Accel2 = Lenght2*CrossProduct(LOmega,CrossProduct(LOmega, UnitV))
650  + Lenght2*CrossProduct(LAlpha,UnitV);
651 
652  IdentityMatrix Identity(3);
653 
654  I1 = I1aa*UnitV*UnitV.t() + I1nn*(Identity - UnitV*UnitV.t());
655  I2 = I2aa*UnitV*UnitV.t() + I2nn*(Identity - UnitV*UnitV.t());
656 
657  N_N = -m1*(L-Lenght1)*CrossProduct(UnitV, gravity) - m2*Lenght2*CrossProduct(UnitV, gravity) +
658  (I1+I2)*LAlpha - (I1+I2)*CrossProduct(LOmega,LOmega)
659  + m1*(L-Lenght1)*CrossProduct(UnitV,ACM1)
660  +m2*Lenght2*CrossProduct(UnitV,Accel2);
661 
662  N_N.Release();
663  return N_N;
664 }
665 
680 {
681  Matrix M(3,1);
682  M = DotProduct(N, UnitV)/DotProduct(Vc, UnitV);
683  M.Release();
684  return M;
685 }
686 
702 {
703  Matrix Fn;
704  Fn = (CrossProduct(N, UnitV) - CrossProduct(Moment(), UnitV))/L;
705  Fn.Release();
706  return Fn;
707 }
708 
728  const int Index)
729 {
730  Matrix Fa;
731  ColumnVector tmp;
732  tmp = (J1.t()*C);
733  Fa = tmp(Index)*UnitV;
734 
735  Fa.Release();
736  return Fa;
737 }
738 
760  const int Index, const Real Gravity)
761 {
762  Real f, fa;
763 
764  ColumnVector Fa(3);
765  gravity = 0;
766  gravity(2) = -Gravity;
767 
768  Fa = AxialForce(J1, C, Index);
769 
770  if (Fa(1) != 0)
771  fa = Fa(1)/UnitV(1);
772  else if (Fa(2) != 0)
773  fa = Fa(2)/UnitV(2);
774  else if (Fa(3) != 0)
775  fa = Fa(3)/UnitV(3);
776  else
777  fa = 0;
778 
779  f = m1*DotProduct(ACM1,UnitV) - fa - m1*DotProduct(gravity, UnitV);
780 
781  return f;
782 }
803 {
804  ColumnVector Accel1;
805 
806  Accel1 = (L-Lenght1)*CrossProduct(LOmega, CrossProduct(LOmega, UnitV)) +
807  (L-Lenght1)*CrossProduct(LAlpha,UnitV) +
808  CrossProduct(2*LOmega,dl*UnitV)+ddl*UnitV;
809 
810  Accel1.Release();
811  return Accel1;
812 }
813 
814 
820 {
821  q = ColumnVector(6);
822  q = 0.0;
823  dq = ColumnVector(6);
824  dq = 0.0;
825  ddq = ColumnVector(6);
826  ddq = 0.0;
827  pR = ColumnVector(3);
828  pR = 0.0;
829  gravity = pR;
830  pIp = Matrix(3,3);
831  pIp = 0.0;
832  mp = 0.0;
833  p = 0.0;
834  n = 0.0;
835  Js = 0.0;
836  Jm = 0.0;
837  bs = 0.0;
838  bm = 0.0;
839  p = 0.0;
840  n = 0.0;
841  Kb = 0.0;
842  L = 0.0;
843  R = 0.0;
844  Kt = 0.0;
845 }
846 
853 Stewart::Stewart(const Matrix InitPlatt, bool Joint)
854 {
855  ColumnVector InitLink (14);
856  Matrix Inertia (3,3);
857 
858  pR = InitPlatt.SubMatrix(7,7,1,3).t();
859 
860  Inertia = 0.0;
861  Inertia(1,1) = InitPlatt(7,4);
862  Inertia(2,2) = InitPlatt(7,5);
863  Inertia(3,3) = InitPlatt(7,6);
864  pIp = Inertia;
865  mp = InitPlatt(7,7);
866  Js = InitPlatt(7,8);
867  Jm = InitPlatt(7,9);
868  bs = InitPlatt(7,10);
869  bm = InitPlatt(7,11);
870  p = InitPlatt(7,12);
871  n = InitPlatt(7,13);
872  Kb = InitPlatt(7,14);
873  L = InitPlatt(7,15);
874  R = InitPlatt(7,16);
875  Kt = InitPlatt(7,17);
876 
877  UJointAtBase = Joint;
878 
879  q = ColumnVector(6); q <<0.0 <<0.0 <<1.0 <<0.0 <<M_PI/2 <<0.0;
880  dq = ColumnVector(6); dq =0.0;
881  ddq = ColumnVector(6); ddq =0.0;
882 
883  wRp = Find_wRp();
884 
885  gravity = ColumnVector(3);
886  gravity = 0;
887 
888  for (int i =0; i<6; i++)
889  {
890  InitLink = InitPlatt.Row(i+1).t();
891  Links[i] = LinkStewart (InitLink,wRp,q);
892  }
893 }
894 
901 Stewart::Stewart(const string & FileName, const string & PlatFormName)
902 {
903  pR = ColumnVector(3);
904  pR = 0.0;
905  gravity = pR;
906  pIp = Matrix(3,3);
907  pIp = 0.0;
908  mp = 0.0;
909 
910  ColumnVector InitLink(14);
911 
912  Config platData;
913  ifstream inconffile(FileName.c_str(), std::ios::in);
914  if (platData.read_conf(inconffile))
915  {
916  cerr << "Stewart::Stewart: can not read input config file" << endl;
917  }
918 
919  platData.select(PlatFormName, "mp", mp);
920  platData.select(PlatFormName, "Joint", UJointAtBase);
921  platData.select(PlatFormName, "pRx", pR(1));
922  platData.select(PlatFormName, "pRy", pR(2));
923  platData.select(PlatFormName, "pRz", pR(3));
924  platData.select(PlatFormName, "Ixx", pIp(1,1));
925  platData.select(PlatFormName, "Iyy", pIp(2,2));
926  platData.select(PlatFormName, "Izz", pIp(3,3));
927  platData.select(PlatFormName, "Js", Js);
928  platData.select(PlatFormName, "Jm", Jm);
929  platData.select(PlatFormName, "bs", bs);
930  platData.select(PlatFormName, "bm", bm);
931  platData.select(PlatFormName, "p", p);
932  platData.select(PlatFormName, "n", n);
933  platData.select(PlatFormName, "Kb", Kb);
934  platData.select(PlatFormName, "L", L);
935  platData.select(PlatFormName, "R", R);
936  platData.select(PlatFormName, "Kt", Kt);
937 
938  q = ColumnVector(6); q <<0.0 <<0.0 <<1.0 <<0.0 <<M_PI/2 <<0.0;
939  dq = ColumnVector(6); dq =0.0;
940  ddq = ColumnVector(6); ddq =0.0;
941 
942  wRp = Find_wRp();
943 
944  for(int j = 1; j <= 6; j++)
945  {
946  string platformName_link;
947  ostringstream ostr;
948  ostr << PlatFormName << "_LINK" << j;
949  platformName_link = ostr.str();
950 
951  platData.select(platformName_link, "bx", InitLink(1));
952  platData.select(platformName_link, "by", InitLink(2));
953  platData.select(platformName_link, "bz", InitLink(3));
954  platData.select(platformName_link, "ax", InitLink(4));
955  platData.select(platformName_link, "ay", InitLink(5));
956  platData.select(platformName_link, "az", InitLink(6));
957  platData.select(platformName_link, "Iaa1", InitLink(7));
958  platData.select(platformName_link, "Inn1", InitLink(8));
959  platData.select(platformName_link, "Iaa2", InitLink(9));
960  platData.select(platformName_link, "Inn2", InitLink(10));
961  platData.select(platformName_link, "m1", InitLink(11));
962  platData.select(platformName_link, "m2", InitLink(12));
963  platData.select(platformName_link, "L1", InitLink(13));
964  platData.select(platformName_link, "L2", InitLink(14));
965 
966  Links[j-1] = LinkStewart(InitLink,wRp,q);
967  }
968 }
969 
975 {
976  for(int i=0;i<6;i++)
977  Links[i] = x.Links[i];
978  UJointAtBase = x.UJointAtBase;
979  q = x.q;
980  dq = x.dq;
981  ddq = x.ddq;
982  pR = x.pR;
983  pIp = x.pIp;
984  mp = x.mp;
985  p = x.p;
986  n = x.n;
987  Js = x.Js;
988  Jm = x.Jm;
989  bs = x.bs;
990  bm = x.bm;
991  Kb = x.Kb;
992  L = x.L;
993  R = x.R;
994  Kt = x.Kt;
995  gravity = x.gravity;
996 }
997 
998 
1001 {
1002 }
1003 
1005 {
1007  for (int i=0; i<6; i++)
1008  Links[i] = x.Links[i];
1009  UJointAtBase = x.UJointAtBase;
1010  q = x.q;
1011  dq = x.dq;
1012  ddq = x.ddq;
1013  pR = x.pR;
1014  pIp = x.pIp;
1015  mp = x.mp;
1016  p = x.p;
1017  n = x.n;
1018  Js = x.Js;
1019  Jm = x.Jm;
1020  bs = x.bs;
1021  bm = x.bm;
1022  Kb = x.Kb;
1023  L = x.L;
1024  R = x.R;
1025  Kt = x.Kt;
1026  gravity = x.gravity;
1027  return *this;
1028 }
1029 
1030 void Stewart::set_Joint(const bool Joint)
1031 {
1033  UJointAtBase = Joint;
1034 }
1035 
1038 {
1039  if(_q.Nrows()== 6)
1040  {
1041  q = _q;
1042  Transform();
1043  }
1044  else
1045  cerr<< "Stewart::set_q: wrong size in input vector."<< endl;
1046 }
1047 
1050 {
1051  if(dq_.Nrows()== 6)
1052  {
1053  dq = dq_;
1054 
1055  Omega = Find_Omega();
1056  dl = Find_dl();
1057  ddl = Find_ddl();
1058 
1059  for(int i =0; i<6; i++)
1060  Links[i].d_LTransform(dq,Omega, dl(i+1),ddl(i+1));
1061  }
1062  else
1063  cerr<< "Stewart::set_dq: wrong size in input vector."<< endl;
1064 }
1065 
1068 {
1069  if(_ddq.Nrows()== 6)
1070  {
1071  ddq = _ddq;
1072 
1073  Omega = Find_Omega();
1074  Alpha = Find_Alpha();
1075  ddl = Find_ddl();
1076  for(int i =0; i<6; i++)
1077  Links[i].dd_LTransform(ddq,Omega,Alpha, dl(i+1),ddl(i+1));
1078  }
1079  else
1080  cerr<< "Stewart::set_ddq: wrong size in input vector."<< endl;
1081 }
1082 
1085 {
1086  if(_pR.Nrows()== 3)
1087  pR = _pR;
1088  else
1089  cerr<< "Stewart::set_pR: wrong size in input vector."<< endl;
1090 }
1091 
1092 void Stewart::set_pIp(const Matrix _pIp)
1094 {
1095  if((_pIp.Nrows()== 3)&&(_pIp.Ncols() == 3))
1096  pIp = _pIp;
1097  else
1098  cerr<< "Stewart::set_pIp: wrong size in input vector."<< endl;
1099 }
1100 
1101 void Stewart::set_mp (const Real _mp)
1103 {
1104  mp = _mp;
1105 }
1106 
1107 bool Stewart::get_Joint () const
1109 {
1110  return UJointAtBase;
1111 }
1112 
1115 {
1116  return q;
1117 }
1118 
1121 {
1122  return dq;
1123 }
1124 
1127 {
1128  return ddq;
1129 }
1130 
1133 {
1134  return pR;
1135 }
1136 
1139 {
1140  return pIp;
1141 }
1142 
1145 {
1146  return mp;
1147 }
1148 
1161 {
1162  wRp = Find_wRp();
1163 
1164  for(int i=0; i<6; i++)
1165  Links[i].LTransform(wRp, q);
1166 
1167  IJ1 = Find_InvJacob1();
1168  IJ2 = Find_InvJacob2();
1169  Jacobian = jacobian();
1170 }
1171 
1187 {
1188  Matrix _wRp(3,3);
1189 
1190  _wRp(1,1) = cos(q(6))*cos(q(4)) - cos(q(5))*sin(q(4))*sin(q(6));
1191  _wRp(1,2) = -sin(q(6))*cos(q(4)) - cos(q(5))*sin(q(4))*cos(q(6));
1192  _wRp(1,3) = sin(q(5))*sin(q(4));
1193  _wRp(2,1) = sin(q(6))*cos(q(4)) + cos(q(5))*sin(q(4))*cos(q(6));
1194  _wRp(2,2) = -sin(q(6))*sin(q(4)) + cos(q(6))*cos(q(4))*cos(q(5));
1195  _wRp(2,3) = -sin(q(5))*cos(q(4));
1196  _wRp(3,1) = sin(q(6))*sin(q(5));
1197  _wRp(3,2) = sin(q(5))*cos(q(6));
1198  _wRp(3,3) = cos(q(5));
1199 
1200  _wRp.Release();
1201  return _wRp;
1202 }
1203 
1224 {
1225  ColumnVector w(3);
1226 
1227  w(1) = cos(q(4))*dq(5) + sin(q(4))*cos(q(5))*dq(6);
1228  w(2) = sin(q(4))*dq(5) - cos(q(4))*sin(q(5))*dq(6);
1229  w(3) = dq(4) + cos(q(5))*dq(6);
1230 
1231  w.Release();
1232  return w;
1233 }
1234 
1262 {
1263  Matrix A, Temp(3,3),Temp2(3,3);
1264 
1265  Temp = 0.0; Temp(3,1) = 1; Temp(1,2) = cos(q(4)); Temp(2,2) = sin(q(4));
1266  Temp(1,3) = sin(q(4))*cos(q(5)); Temp(2,3)=-cos(q(4))*sin(q(5)); Temp(3,3) = cos(q(5));
1267 
1268  Temp2 = 0.0; Temp2(1,2) = -dq(4)*sin(q(4)); Temp2(2,2) = dq(4)*cos(q(4));
1269  Temp2(1,3) = dq(4)*cos(q(4))*sin(q(5))+dq(5)*sin(q(4))*cos(q(5));
1270  Temp2(2,3) = dq(4)*sin(q(4))*sin(q(5))-dq(5)*cos(q(4))*cos(q(5));
1271  Temp2(3,3) = -dq(5)*sin(q(5));
1272 
1273  A = Temp*ddq.Rows(4,6) + Temp2*dq.Rows(4,6);
1274 
1275  A.Release();
1276  return A;
1277 }
1278 
1291 {
1292  Matrix _Jacobi;
1293 
1294  _Jacobi = (IJ1*IJ2).i();
1295 
1296  _Jacobi.Release();
1297  return _Jacobi;
1298 }
1299 
1317 {
1318  Matrix tmp_Jacobi1 (6,6);
1319 
1320  for(int i = 0; i<6; i++)
1321  tmp_Jacobi1.Row(i+1) = Links[i].UnitV.t() | CrossProduct(wRp*Links[i].ap,Links[i].UnitV).t();
1322 
1323  tmp_Jacobi1.Release();
1324  return tmp_Jacobi1;
1325 }
1326 
1345 {
1346  Matrix tmp_Jacobi2;
1347 
1348  tmp_Jacobi2 = IdentityMatrix(6);
1349  tmp_Jacobi2(4,4) = 0;
1350  tmp_Jacobi2(6,4) = 1;
1351  tmp_Jacobi2(4,5) = cos(q(4));
1352  tmp_Jacobi2(5,5) = sin(q(4));
1353  tmp_Jacobi2(4,6) = sin(q(4))*sin(q(5));
1354  tmp_Jacobi2(5,6) = -cos(q(4))*sin(q(5));
1355  tmp_Jacobi2(6,6) = cos(q(5));
1356 
1357  tmp_Jacobi2.Release();
1358  return tmp_Jacobi2;
1359 }
1390 {
1391  Matrix tmp_dJ2(6,6), tmp_dn(6,3), tmp_sol(6,3), tmp_dJ1(6,6), tmp_dJ(6,6);
1392  ColumnVector VctNorm, a;
1393 
1394  tmp_dJ2 = 0.0;
1395  tmp_dJ2(4,5) = -dq(4)*sin(q(4));
1396  tmp_dJ2(5,5) = dq(4)*cos(q(4));
1397  tmp_dJ2(4,6) = dq(4)*cos(q(4))*sin(q(5))+dq(5)*sin(q(4))*cos(q(5));
1398  tmp_dJ2(5,6) = dq(4)*sin(q(4))*sin(q(5))-dq(5)*cos(q(4))*cos(q(5));
1399  tmp_dJ2(6,6) = -dq(5)*sin(q(5));
1400 
1401  for (int i = 0; i<6; i++)
1402  {
1403  tmp_dn.Row(i+1) = ((Links[i].UnitV*Links[i].L -
1404  dl(i+1)*Links[i].UnitV)/Links[i].L).t();
1405  tmp_sol.Row(i+1) = (CrossProduct(CrossProduct(Omega,Links[i].aPos.t()),
1406  Links[i].UnitV.t()) +
1407  (CrossProduct(Links[i].aPos,tmp_dn.Row(i+1)))).t();
1408  }
1409 
1410  for (int j = 1; j < 7; j++)
1411  for(int k = 1; k < 4; k++)
1412  {
1413  tmp_dJ1(j,k) = tmp_dn(j,k);
1414  tmp_dJ1(j,k+3) = tmp_sol(j,k);
1415  }
1416 
1417  tmp_dJ = tmp_dJ1*IJ2 + IJ1*tmp_dJ2;
1418 
1419  tmp_dJ.Release();
1420  return tmp_dJ;
1421 }
1430 {
1431  ColumnVector Vct_L(6);
1432 
1433  for (int i = 1; i < 7; i++)
1434  Vct_L(i) = Links[i-1].L;
1435 
1436  Vct_L.Release(); return Vct_L;
1437 }
1438 
1452 {
1453  ColumnVector tmp_dl;
1454  tmp_dl = Jacobian.i()*dq;
1455 
1456  tmp_dl.Release();
1457  return tmp_dl;
1458 }
1459 
1473 {
1474  ColumnVector tmp_ddl;
1475  tmp_ddl = Jacobian.i() * ddq + jacobian_dot() * dq;
1476  tmp_ddl.Release();
1477  return tmp_ddl;
1478 }
1479 
1513 {
1514  Matrix C(6,1), I(3,3);
1515  ColumnVector Sum(3), Sum2(3), Sum3(3), ddxg(3), LNormalForce(3);
1516 
1517  gravity = 0;
1518  gravity(2) = -Gravity;
1519 
1520  ddxg = ddq.Rows(1,3) + CrossProduct(Alpha,wRp*pR) + CrossProduct(Omega,CrossProduct(Omega,wRp*pR));
1521  I = wRp*pIp*(wRp.t());
1522 
1523  Sum = 0.0;
1524  Sum2 = 0.0;
1525  Sum3 = 0.0;
1526  for (int i=0; i<6; i++)
1527  {
1528  LNormalForce = Links[i].NormalForce();
1529  Sum = Sum + LNormalForce;
1530  Sum2 = Sum2 + CrossProduct(Links[i].aPos,LNormalForce);
1531  if(!UJointAtBase)
1532  {
1533  Sum3 = Sum3 +Links[i].Moment();
1534  }
1535  }
1536 
1537  C.Rows(1,3) = mp*gravity - mp*ddxg - Sum;
1538  C.Rows(4,6) = mp*CrossProduct(wRp*pR, gravity) - mp*CrossProduct(wRp*pR,ddxg)-I*Alpha
1539  + I*CrossProduct(Omega,Omega)- Sum2 - Sum3;
1540 
1541  C.Release();
1542  return C;
1543 }
1544 
1568  const Real tolerance)
1569 {
1570  ColumnVector next_q, tmp_long(6);
1571  Real Diff = 1;
1572 
1573  q = guess_q;
1574  while (Diff>tolerance)
1575  {
1576  for(int i=0; i<6; i++)
1577  tmp_long(i+1) = Links[i].L - l_given(i+1);
1578 
1579  next_q = q - Jacobian*(tmp_long);
1580  Diff = (next_q - q).MaximumAbsoluteValue();
1581 
1582  set_q(next_q);
1583  }
1584  next_q.Release();
1585  return next_q;
1586 }
1587 
1596 {
1597  Matrix F(6,1), C, IJ1(6,6);
1598 
1599  IJ1 = Find_InvJacob1();
1600  C = Find_C(Gravity);
1601 
1602  for (int i =0; i<6; i++)
1603  {
1604  F(i+1,1) = Links[i].ActuationForce(IJ1, C, i+1, Gravity);
1605  }
1606 
1607  F.Release();
1608  return F;
1609 }
1610 
1626 {
1627  Matrix T;
1628 
1629  for(int i=0;i<6;i++)
1630  Links[i].tau_LTransform(dl(i+1), ddl(i+1), Gravity);
1631 
1632  T = Jacobian.i().t()*JointSpaceForceVct(Gravity);
1633 
1634  T.Release();
1635  return T;
1636 }
1647 {
1648  ColumnVector _ddq(6);
1649  _ddq = 0.0;
1650  set_ddq(_ddq);
1651  return Torque(Gravity);
1652 }
1653 
1664 {
1665  Matrix M(6,6);
1666  ColumnVector _ddq(6), _dq(6), tmpdq(6);
1667 
1668  tmpdq = dq;
1669  _dq = 0.0;
1670 
1671  set_dq(_dq);
1672 
1673  for (int i = 1; i < 7; i++)
1674  {
1675  _ddq = 0.0;
1676  _ddq(i) = 1.0;
1677  set_ddq(_ddq);
1678  M.Column(i) = Torque (0.0);
1679  }
1680  set_dq(tmpdq);
1681 
1682  M.Release();
1683  return M;
1684 }
1685 
1702 {
1703  ColumnVector _ddq;
1704 
1705  _ddq = Find_M().i()*(T - Find_h(Gravity));
1706 
1707  _ddq.Release();
1708  return _ddq;
1709 }
1710 
1737 {
1738  Matrix G, Ka(6,6), Ma(6,6), Va(6,6), dJacobian(6,6);
1739  dJacobian = jacobian_dot();
1740 
1741  Ka = p/(2*M_PI*n)*IdentityMatrix(6);
1742  Ma = (2*M_PI/(n*p))*(Js + n*n*Jm)*IdentityMatrix(6);
1743  Va = (2*M_PI/(n*p))*(bs + n*n*bm)*IdentityMatrix(6);
1744 
1745  Mc = Ka*Jacobian.t() * Find_M() + Ma*Jacobian.i();
1746 
1747  Nc = Ka*Jacobian.t()*Find_h(0.0) + (Va*Jacobian.i()+Ma*dJacobian)*dq;
1748 
1749  ColumnVector _dq(6), _tmpdq(6);
1750  _dq = 0.0;
1751  _tmpdq = dq;
1752  set_dq(_dq);
1753 
1754  Gc = Ka *Jacobian.t()*Find_h();
1755  set_dq(_tmpdq);
1756 }
1757 
1793 {
1794  Matrix _ddq;
1795  Matrix Nc,Gc,Mc, tmp1,tmp2;
1796 
1797  Find_Mc_Nc_Gc(Mc,Nc,Gc);
1798 
1799  tmp1 = (Command - (Jacobian.i()*dq*(2*M_PI/p)*Kb));
1800  tmp2 = (IdentityMatrix(6)*Kt/L*exp(-R*t/L))*tmp1;
1801 
1802  _ddq = Mc.i()*(tmp2 - Nc - Gc);
1803 
1804  _ddq.Release();
1805  return _ddq;
1806 }
1807 
1808 #ifdef use_namespace
1809 }
1810 #endif
1811 
void set_I2nn(const Real NewI2nn)
Set the value of inertia along the tangent axis of part 2.
Definition: stewart.cpp:225
void set_Lenght1(const Real NewLenght1)
Set the lenght between platform attachment point and center of mass of part 1.
Definition: stewart.cpp:243
ColumnVector b
Base coordinates of the link int the global frame.
Definition: stewart.h:56
ReturnMatrix Find_VctV()
Return the unit vector of the universal joint along the second axis of the fixed revolute joint...
Definition: stewart.cpp:527
ReturnMatrix get_q() const
Return the position of the platform.
Definition: stewart.cpp:1113
ReturnMatrix get_dq() const
Return the speed of the platform.
Definition: stewart.cpp:1119
Real bs
Viscous damping coefficient of the ballscrew.
Definition: stewart.h:153
void Release()
Definition: newmat.h:514
ColumnVector ACM1
Acceleration of the first center of mass.
Definition: stewart.h:68
Real Sum(const BaseMatrix &B)
Definition: newmat.h:2107
void set_I1nn(const Real NewI1nn)
Set the value of inertia along the tangent axis of part 1.
Definition: stewart.cpp:213
Real L
Lenght of the link.
Definition: stewart.h:81
Real mp
Platform mass.
Definition: stewart.h:153
void set_dq(const ColumnVector _dq)
Set the platform&#39;s speed.
Definition: stewart.cpp:1048
void set_Lenght2(const Real NewLenght2)
Set the lenght between base attachment point and center of mass of part 2.
Definition: stewart.cpp:249
short read_conf(std::ifstream &inconffile)
Read a configuration file.
Definition: config.cpp:72
Real get_Lenght1() const
Return the lenght between platform attachment point and center of mass of part 1. ...
Definition: stewart.cpp:303
Real n
Gear ratio (links motor)
Definition: stewart.h:153
void set_ddq(const ColumnVector _ddq)
Set the platform&#39;s acceleration.
Definition: stewart.cpp:1066
ReturnMatrix ForwardDyn(const ColumnVector Torque, const Real Gravity=GRAVITY)
Return the acceleration vector of the platform (ddq)
Definition: stewart.cpp:1701
LinkStewart definitions.
Definition: stewart.h:53
void set_mp(const Real _mp)
Set the mass of the platform.
Definition: stewart.cpp:1101
void set_Joint(const bool _Joint)
Set the position of the universal joint on the links.
Definition: stewart.cpp:1030
Real R
Motor armature resistance.
Definition: stewart.h:153
ReturnMatrix jacobian_dot()
Return time deriative of the inverse jacobian matrix of the platform.
Definition: stewart.cpp:1389
ReturnMatrix Find_Alpha()
Return the angular acceleration of the platform.
Definition: stewart.cpp:1261
void set_pIp(const Matrix _pIp)
Set the inertia matrix of the platform.
Definition: stewart.cpp:1092
Real DotProduct(const Matrix &A, const Matrix &B)
Definition: newmat.h:2060
Real p
Pitch of the ballscrew (links)
Definition: stewart.h:153
void tau_LTransform(const Real dl, const Real ddl, const Real Gravity)
Recalculate the link&#39;s parameters related to the platform dynamics.
Definition: stewart.cpp:366
Header file for Config class definitions.
Real bm
Viscous damping coefficient of the motor.
Definition: stewart.h:153
ReturnMatrix Find_C(const Real Gravity=GRAVITY)
Return intermediate matrix C for the dynamics calculations.
Definition: stewart.cpp:1512
Real get_m1() const
Return the mass of part 1.
Definition: stewart.cpp:291
bool get_Joint() const
Return the position of the universal joint (true if at base, false if at platform) ...
Definition: stewart.cpp:1107
void d_LTransform(const ColumnVector dq, const ColumnVector Omega, const Real dl, const Real ddl)
Recalculate the link&#39;s parameters related to the platform speed.
Definition: stewart.cpp:329
double Real
Definition: include.h:307
Real Js
Moment of inertia (ballscrew)
Definition: stewart.h:153
Real I2nn
Inertia along the tangent axis for part 2.
Definition: stewart.h:58
ReturnMatrix Moment()
Return the moment component transmitted to the link from the base or the platform (depending where is...
Definition: stewart.cpp:666
LinkStewart()
Default Constructor.
Definition: stewart.cpp:45
ReturnMatrix NormalForce()
Return the normal component of the reaction force of the platform acting on the link.
Definition: stewart.cpp:687
ColumnVector ap
Platform coordinates of the link in the local frame.
Definition: stewart.h:56
bool select(const std::string &section, const std::string &parameter, T &value) const
Get a parameter data, of a certain section, into the string value.
Definition: config.h:109
void set_m1(const Real Newm1)
Set the mass of part 1.
Definition: stewart.cpp:231
ReturnMatrix Find_ddl()
Return the extension acceleration of the links in a vector.
Definition: stewart.cpp:1472
Handle configuration files.
Definition: config.h:97
int Nrows() const
Definition: newmat.h:494
void set_I1aa(const Real NewI1aa)
Set the value of inertia along the coaxial axis of part 1.
Definition: stewart.cpp:207
Real get_I1aa() const
Return the value of inertia along the coaxial axis of part 1.
Definition: stewart.cpp:267
ColumnVector dda
Acceleration of the platform attachment point.
Definition: stewart.h:68
ReturnMatrix Find_M()
Return the intermediate matrix corresponding to the inertia matrix of the machine.
Definition: stewart.cpp:1663
Real m1
Mass of part 1.
Definition: stewart.h:58
ReturnMatrix Find_dda(const ColumnVector ddq, const ColumnVector Omega, const ColumnVector Alpha)
Return the acceleration of the attachment point of the link on the platform.
Definition: stewart.cpp:464
void set_m2(const Real Newm2)
Set the mass of part 2.
Definition: stewart.cpp:237
Real I2aa
Inertia along the coaxial axis for part 2.
Definition: stewart.h:58
ColumnVector N
Intermediate vector for dynamics calculations .
Definition: stewart.h:68
~LinkStewart()
Destructor.
Definition: stewart.cpp:154
static const char rcsid[]
RCS/CVS version.
Definition: stewart.cpp:31
ReturnMatrix ForwardKine(const ColumnVector guess_q, const ColumnVector l_given, const Real tolerance=0.001)
Return the position vector of the platform (vector q)
Definition: stewart.cpp:1567
ReturnMatrix get_ddq() const
Return the acceleration of the platform.
Definition: stewart.cpp:1125
GetSubMatrix Column(int f) const
Definition: newmat.h:2152
ReturnMatrix AxialForce(const Matrix J1, const ColumnVector C, const int Index)
Return the axial component of the reaction force of the platform acting on the link.
Definition: stewart.cpp:727
ColumnVector gravity
Gravity vector.
Definition: stewart.h:68
ReturnMatrix Find_a(const Matrix _wRp, const ColumnVector _q)
Return the position of the attachment point on the platform.
Definition: stewart.cpp:378
const LinkStewart & operator=(const LinkStewart &x)
Definition: stewart.cpp:159
TransposedMatrix t() const
Definition: newmat6.cpp:320
Real get_m2() const
Return the mass of part 2.
Definition: stewart.cpp:297
ColumnVector q
Platform position (xyz + euler angles)
Definition: stewart.h:147
void set_q(const ColumnVector _q)
Set the position of the platform.
Definition: stewart.cpp:1036
Real MaximumAbsoluteValue(const BaseMatrix &B)
Definition: newmat.h:2111
Real I1aa
Inertia along the coaxial axis for part 1.
Definition: stewart.h:58
Real NormFrobenius() const
Definition: newmat.h:349
Real get_Lenght2() const
Return the lenght between base attachment point and center of mass of part 2.
Definition: stewart.cpp:309
Matrix CrossProduct(const Matrix &A, const Matrix &B)
Definition: newmat.h:2062
ReturnMatrix Find_InvJacob2()
Return the second intermediate jacobian matrix (reverse) of the platform.
Definition: stewart.cpp:1344
ReturnMatrix Find_VctC()
Return the unit vector of the universal joint along the third axis of the fixed revolute joint...
Definition: stewart.cpp:548
The usual rectangular matrix.
Definition: newmat.h:625
InvertedMatrix i() const
Definition: newmat6.cpp:329
ReturnMatrix Find_InvJacob1()
Return the first intermediate jacobian matrix (reverse) of the platform.
Definition: stewart.cpp:1316
ColumnVector Vc
Unit Vector of the universal joint (Rotational).
Definition: stewart.h:68
bool UJointAtBase
Gives the position of the universal joint (true if at base, false if at platform) ...
Definition: stewart.h:146
ReturnMatrix Find_UnitV()
Return the unit vector of the link direction.
Definition: stewart.cpp:416
FloatVector FloatVector * a
void LTransform(const Matrix wRp, const ColumnVector q)
Recalculate the link&#39;s parameters related to the platform position.
Definition: stewart.cpp:315
int Ncols() const
Definition: newmat.h:495
void set_ap(const ColumnVector NewAp)
Set the position vector of platform attachment point.
Definition: stewart.cpp:198
ReturnMatrix Torque(const Real Gravity=GRAVITY)
Return the torque vector of the platform.
Definition: stewart.cpp:1625
ReturnMatrix Find_dl()
Return the extension rate of the links in a vector.
Definition: stewart.cpp:1451
Stewart()
Default Constructor.
Definition: stewart.cpp:819
ReturnMatrix Find_ACM1(const Real dl, const Real ddl)
Return the acceleration of the center of mass of the first part of the link.
Definition: stewart.cpp:802
Real I1nn
Inertia along the tangent axis for part 1.
Definition: stewart.h:58
ColumnVector aPos
Position of the platform attachment point.
Definition: stewart.h:68
GetSubMatrix Row(int f) const
Definition: newmat.h:2150
GetSubMatrix SubMatrix(int fr, int lr, int fc, int lc) const
Definition: newmat.h:2146
ReturnMatrix Find_wRp()
Return the rotation matrix wRp.
Definition: stewart.cpp:1186
FloatVector FloatVector FloatVector * alpha
ReturnMatrix get_pR() const
Return the postion of the center of mass of the platfom.
Definition: stewart.cpp:1131
Matrix pIp
Platform Inertia (local ref.)
Definition: stewart.h:152
ReturnMatrix Find_da(const ColumnVector dq, const ColumnVector Omega)
Return the speed of the attachment point of the link on the platform.
Definition: stewart.cpp:438
const Stewart & operator=(const Stewart &x)
Definition: stewart.cpp:1004
Real Jm
Moment of inertia (motor)
Definition: stewart.h:153
ReturnMatrix JointSpaceForceVct(const Real Gravity=GRAVITY)
Return a vector containing the six actuation force components.
Definition: stewart.cpp:1595
Real get_I2aa() const
Return the value of inertia along the coaxial axis of part 2.
Definition: stewart.cpp:279
ReturnMatrix get_ap() const
Return the position vector of platform attachement point.
Definition: stewart.cpp:255
void Transform()
Call the functions corresponding to the basic parameters when q changes.
Definition: stewart.cpp:1160
ColumnVector LAlpha
Angular acceleration of the link.
Definition: stewart.h:68
ColumnVector Vu
Unit Vector of the universal joint (Rotational).
Definition: stewart.h:68
Real Find_Lenght()
Return the lenght of the link.
Definition: stewart.cpp:486
ReturnMatrix InvPosKine()
Return the lenght of the links in a vector.
Definition: stewart.cpp:1429
Real get_mp() const
Return the mass of the platform.
Definition: stewart.cpp:1143
ReturnMatrix Find_VctU()
Return the unit vector of the universal joint along the first axis of the fixed revolute joint...
Definition: stewart.cpp:503
Real get_I2nn() const
Return the value of inertia along the tangent axis of part 2.
Definition: stewart.cpp:285
ReturnMatrix Find_N(const Real Gravity=GRAVITY)
Return the intermediate matrix N for force calculation.
Definition: stewart.cpp:641
ReturnMatrix Find_Omega()
Return the angular speed of the platform.
Definition: stewart.cpp:1223
Stewart definitions.
Definition: stewart.h:143
void set_I2aa(const Real NewI2aa)
Set the value of inertia along the coaxial axis of part 2.
Definition: stewart.cpp:219
Real Lenght2
Lenght between the mass center (part 2) and the base attachment.
Definition: stewart.h:58
Stewart class definitions.
Real ActuationForce(const Matrix J1, const ColumnVector C, const int Index, const Real Gravity=GRAVITY)
Return the actuation force that power the prismatic joint.
Definition: stewart.cpp:759
ReturnMatrix get_pIp() const
Return the inertia matrix of the platform.
Definition: stewart.cpp:1137
ColumnVector gravity
Gravity vector.
Definition: stewart.h:147
ColumnVector dq
Platform speed.
Definition: stewart.h:147
ReturnMatrix Find_h(const Real Gravity=GRAVITY)
Return the intermediate matrix corresponding to the Coriolis and centrifugal + gravity force/torque c...
Definition: stewart.cpp:1646
Real Lenght1
Lenght between the mass center (part 1) and the platform attachment.
Definition: stewart.h:58
~Stewart()
Destructor.
Definition: stewart.cpp:999
Column vector.
Definition: newmat.h:1008
Real m2
Mass of part 2.
Definition: stewart.h:58
ColumnVector Vv
Unit Vector of the universal joint (Rotational).
Definition: stewart.h:68
Real Kb
Motor back EMF.
Definition: stewart.h:153
ReturnMatrix ForwardDyn_AD(const ColumnVector Command, const Real t)
Return the acceleration of the platform (Stewart platform mechanism dynamics including actuator dynam...
Definition: stewart.cpp:1792
ColumnVector pR
Platform center of mass (in its own referential)
Definition: stewart.h:147
void dd_LTransform(const ColumnVector ddq, const ColumnVector Omega, const ColumnVector Alpha, const Real dl, const Real ddl)
Recalculate the link&#39;s parameters related to the platform acceleration.
Definition: stewart.cpp:347
Real Kt
Motor torque.
Definition: stewart.h:153
void set_b(const ColumnVector Newb)
Set the position vector of the base attachment point.
Definition: stewart.cpp:189
Real L
Motor Inductance.
Definition: stewart.h:153
ColumnVector UnitV
Unit Vector of the link.
Definition: stewart.h:68
Real get_I1nn() const
Return the value of inertia along the tangent axis of part 1.
Definition: stewart.cpp:273
ColumnVector ddq
Platform acceleration.
Definition: stewart.h:147
GetSubMatrix Rows(int f, int l) const
Definition: newmat.h:2151
ReturnMatrix Find_AngularKin(const Real dl, const Real ddl)
Return the angular speed (Column 1) and angular acceleration (Column 2) of the link.
Definition: stewart.cpp:585
void set_pR(const ColumnVector _pR)
Set the position of the center of mass of the platform.
Definition: stewart.cpp:1083
Identity matrix.
Definition: newmat.h:1350
ReturnMatrix Omega(const Quaternion &q, const Quaternion &q_dot)
Return angular velocity from a quaternion and it&#39;s time derivative.
Definition: quaternion.cpp:560
ReturnMatrix get_b() const
Return the position vector of base attachement point.
Definition: stewart.cpp:261
ColumnVector LOmega
Angular speed of the link.
Definition: stewart.h:68
ReturnMatrix jacobian()
Return the jacobian matrix of the platform.
Definition: stewart.cpp:1290
void Find_Mc_Nc_Gc(Matrix &Mc, Matrix &Nc, Matrix &Gc)
Return(!) the intermediates matrix for forward dynamics with actuator dynamics.
Definition: stewart.cpp:1736
ColumnVector da
Speed of the platform attachment point .
Definition: stewart.h:68
LinkStewart Links[6]
Platform links.
Definition: stewart.h:164


kni
Author(s): Martin Günther
autogenerated on Fri Jun 7 2019 22:06:45