Znn3bq.jpeg
²é¿´: 3428  |  »Ø¸´: 13
µ±Ç°Ö»ÏÔʾÂú×ãÖ¸¶¨Ìõ¼þµÄ»ØÌû£¬µã»÷ÕâÀï²é¿´±¾»°ÌâµÄËùÓлØÌû

Ïë·ÉµÄÖí

ľ³æ (ÕýʽдÊÖ)

[½»Á÷] ¡¾Ô­´´¡¿Áù×ÔÓɶȻúÆ÷ÈËJacobian(Ñſ˱È)¾ØÕó¼ÆËãÀà ÒÑÓÐ1È˲ÎÓë

×÷ÕߣºÏë·ÉµÄÖí

˵Ã÷£ºMLGetIdentityMatΪ»ñµÃµ¥Î»¾ØÕóº¯Êý

MLMatMultiΪ¾ØÕóÏà³Ëº¯Êý

ºÍOpenCVÇóÄæ¾ØÕóº¯ÊýcvInvertûÓиø³öÇë´ó¼Ò×Ô¼ºÐ´Ò»Ï£¡ºÜ¼òµ¥µÄ£¡

typedef struct RobotJacobian6
{
//±äÁ¿!
//¸÷¹Ø½Ú´«µÝ¾ØÕó!
union
{
  struct
  {
   double AMat[6][4][4];
  };
  double A0to1[4][4];
  double A1to2[4][4];
  double A2to3[4][4];
  double A3to4[4][4];
  double A4to5[4][4];
  double A5to6[4][4];
};


union
{
  struct
  {
   double TMat[6][4][4];
  };
  struct
  {
   double T0to6[4][4];
   double T1to6[4][4];
   double T2to6[4][4];
   double T3to6[4][4];
   double T4to6[4][4];
   double T5to6[4][4];
  };
};

//Ä©¶Ëλ×Ë!
double EndPose[4][4];

//D-H²ÎÊý±í!
double DHParam[6][4];//˳ÐòΪ£ºAngle d_L a_L a_A!

//Ñſ˱ȾØÕó!
double EndJacobian[6][6];
//ÄæÑſ˱ȾØÕó!
double EndInvJacobian[6][6];

//»ù×ø±êµÄµÑ¿¨¶û΢·ÖÔ˶¯µ½Ä©¶Ë×ø±êµÄ´«µÝ¾ØÕó!
double JBasetoEnd[6][6];
double T_1to6[4][4];//¸Ã¾ØÕóµÄ×Ë̬Óë»ù×ø±êÒ»Ö£¬Î»ÖÃÓëÄ©¶Ë×ø±êÒ»ÖÂ!
                     //ÒÔ±ã¿ÉÒÔ°´ÕÕ»ù×ø±ê½øÐÐÆ½¶¯ºÍÈÆ»ù×ø±êÖá·½Ïòת¶¯!

double mInput[6]; //ÊäÈë!
double mOutput[6];//Êä³ö!
int    mMode;


void GetAMat()
{
  for (int i=0;i<6;i++)
  {
   MLGetDHTransMat(AMat,DHParam[0],DHParam[1],DHParam[2],DHParam[3]);
  }
}

void GetTMat()
{
  MLGetIdentityMat(T5to6);

  MLMatMulti(AMat[5],T5to6);
  MLMatMulti(AMat[4],T5to6,T4to6);
  MLMatMulti(AMat[3],T4to6,T3to6);
  MLMatMulti(AMat[2],T3to6,T2to6);
  MLMatMulti(AMat[1],T2to6,T1to6);
  MLMatMulti(AMat[0],T1to6,T0to6);
}

void UpdateAngle(double Angles[6])//AnglesΪ»¡¶È!
{
  for (int i=0;i<6;i++)
  {
   DHParam[0]=Angles;
  }
  GetAMat();
  GetEndPose();
  GetTMat();
  GetEndJacobian();
  GetEndInvJacobian();

  GetJBasetoEnd();
}

void Inti(double DHparameter[6][4])
{
  for (int i=0;i<6;i++)
  {
   for (int j=0;j<4;j++)
   {
    DHParam[j]=DHparameter[j];
   }
  }
  GetAMat();
  GetEndPose();
  GetTMat();
  GetEndJacobian();
  GetEndInvJacobian();

  GetJBasetoEnd();
  
  for (i=0;i<6;i++)
  {
   mInput=0;
   mOutput=0;
  }

  mMode=BASE;
}

void GetEndPose()
{
  MLGetIdentityMat(EndPose);
  for (int i=0;i<6;i++)
  {
   MLMatMulti(AMat[5-i],EndPose);
  }
}

void GetEndJacobian()
{
  for (int i=0;i<6;i++)
  {
   EndJacobian[0]=-1*TMat[Xx][Nn]*TMat[Yy][Pp]+TMat[Yy][Nn]*TMat[Xx][Pp];
   EndJacobian[1]=-1*TMat[Xx][Oo]*TMat[Yy][Pp]+TMat[Yy][Oo]*TMat[Xx][Pp];
   EndJacobian[2]=-1*TMat[Xx][Aa]*TMat[Yy][Pp]+TMat[Yy][Aa]*TMat[Xx][Pp];

   EndJacobian[3]=TMat[Zz][Nn];
   EndJacobian[4]=TMat[Zz][Oo];
   EndJacobian[5]=TMat[Zz][Aa];
  }
}

void GetEndInvJacobian()
{
  double Data1[36];
  CvMat Mat1 = cvMat( 6,6,CV_64FC1,Data1);

  double Data2[36];
  CvMat Mat2 = cvMat( 6,6,CV_64FC1,Data2);

  for (int i=0;i<6;i++)
  {
   for (int j=0;j<6;j++)
   {
    cvmSet(&Mat1,i,j,EndJacobian[j]);
   }
  }

  cvInvert(&Mat1,&Mat2,CV_SVD);

     for (i=0;i<6;i++)
  {
   for (int j=0;j<6;j++)
   {
    EndInvJacobian[j]=cvmGet(&Mat2,i,j);
   }
  }
}

void EndOutput(double Input[6], double Output[6])//OutputΪ½ÇËÙ¶È!
{
  MLMatMulti_3(EndInvJacobian,Input,Output);
}

void GetJBasetoEnd()
{
  double TransMat[4][4];
  MLGetIdentityMat(TransMat);
  TransMat[0][3]=-1*EndPose[0][3];
  TransMat[1][3]=-1*EndPose[1][3];
  TransMat[2][3]=-1*EndPose[2][3];

  MLMatMulti(TransMat,EndPose,T_1to6);

  JBasetoEnd[0][0]=T_1to6[Xx][Nn]; JBasetoEnd[0][1]=T_1to6[Yy][Nn]; JBasetoEnd[0][2]=T_1to6[Zz][Nn];
  JBasetoEnd[1][0]=T_1to6[Xx][Oo]; JBasetoEnd[1][1]=T_1to6[Yy][Oo]; JBasetoEnd[1][2]=T_1to6[Zz][Oo];
  JBasetoEnd[2][0]=T_1to6[Xx][Aa]; JBasetoEnd[2][1]=T_1to6[Yy][Aa]; JBasetoEnd[2][2]=T_1to6[Zz][Aa];

  for (int i=3;i<6;i++)
  {
   for (int j=0;j<3;j++)
   {
    JBasetoEnd[j]=0;
   }
  }

  JBasetoEnd[3][3]=T_1to6[Xx][Nn]; JBasetoEnd[3][4]=T_1to6[Yy][Nn]; JBasetoEnd[3][5]=T_1to6[Zz][Nn];
  JBasetoEnd[4][3]=T_1to6[Xx][Oo]; JBasetoEnd[4][4]=T_1to6[Yy][Oo]; JBasetoEnd[4][5]=T_1to6[Zz][Oo];
  JBasetoEnd[5][3]=T_1to6[Xx][Aa]; JBasetoEnd[5][4]=T_1to6[Yy][Aa]; JBasetoEnd[5][5]=T_1to6[Zz][Aa];

  
  JBasetoEnd[0][3]=T_1to6[Yy][Pp]*T_1to6[Zz][Nn]-T_1to6[Zz][Pp]*T_1to6[Yy][Nn];//(P¡ÁN)x
  JBasetoEnd[0][4]=T_1to6[Zz][Pp]*T_1to6[Xx][Nn]-T_1to6[Xx][Pp]*T_1to6[Zz][Nn];//(P¡ÁN)y
  JBasetoEnd[0][5]=T_1to6[Xx][Pp]*T_1to6[Yy][Nn]-T_1to6[Yy][Pp]*T_1to6[Xx][Nn];//(P¡ÁN)z
  
  JBasetoEnd[1][3]=T_1to6[Yy][Pp]*T_1to6[Zz][Oo]-T_1to6[Zz][Pp]*T_1to6[Yy][Oo];//(P¡ÁO)x
  JBasetoEnd[1][4]=T_1to6[Zz][Pp]*T_1to6[Xx][Oo]-T_1to6[Xx][Pp]*T_1to6[Zz][Oo];//(P¡ÁO)y
  JBasetoEnd[1][5]=T_1to6[Xx][Pp]*T_1to6[Yy][Oo]-T_1to6[Yy][Pp]*T_1to6[Xx][Oo];//(P¡ÁO)z

  JBasetoEnd[2][3]=T_1to6[Yy][Pp]*T_1to6[Zz][Aa]-T_1to6[Zz][Pp]*T_1to6[Yy][Aa];//(P¡ÁA)x
  JBasetoEnd[2][4]=T_1to6[Zz][Pp]*T_1to6[Xx][Aa]-T_1to6[Xx][Pp]*T_1to6[Zz][Aa];//(P¡ÁA)y
  JBasetoEnd[2][5]=T_1to6[Xx][Pp]*T_1to6[Yy][Aa]-T_1to6[Yy][Pp]*T_1to6[Xx][Aa];//(P¡ÁA)z
}

void BaseOutput(double BaseInput[6], double Output[6])//OutputΪ½ÇËÙ¶È!
{
  double EndInput[6];
  MLMatMulti_3(JBasetoEnd,BaseInput,EndInput);

  EndOutput(EndInput,Output);
}

void SetInput(double Input[6])
{
  for (int i=0;i<6;i++)
  {
   mInput=Input;
  }
}

void SetMode(int mode)
{
  mMode=mode;
}

void GetOutput(int mode=BASE)
{
  int i=0;
  int j=0;
  switch(mode)
  {
  case eND:
   EndOutput(mInput,mOutput);
   break;
   
  case BASE:
   BaseOutput(mInput,mOutput);
   break;
  }
}

RobotJacobian6()
{
  
}

RobotJacobian6(double DHparameter[6][4])
{
  Inti(DHparameter);
}

}MLJacobian;
»Ø¸´´ËÂ¥

» ÊÕ¼±¾ÌûµÄÌÔÌûר¼­ÍƼö

»úÆ÷È˼¼Êõר¼­ À¶´ü »úÆ÷ÈËѧ

» ²ÂÄãϲ»¶

» ±¾Ö÷ÌâÏà¹Ø¼ÛÖµÌùÍÆ¼ö£¬¶ÔÄúͬÑùÓаïÖú:

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

ytinghost3

Ìú¸Ëľ³æ (ÖøÃûдÊÖ)

Ìû×ÓÕæ¾«²Ê!
ÒѾ­ÊÕ¼µ½ÌÔÌùר¼­¡¶»úÆ÷È˼¼Êõר¼­¡·
»ÑÑÔÓëÊÄÑÔµÄÇø±ðÔÚÓÚ£ºÒ»¸öÊÇÌýµÄÈ˵±ÕæÁË£¬Ò»¸öÊÇ˵µÄÈ˵±ÕæÁË¡£
10Â¥2011-09-01 22:14:38
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ Ïë·ÉµÄÖí µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] ±¾¿ÆÎ÷¹¤´ó 324Çóµ÷¼Á +4 wysyjs25 2026-04-10 4/200 2026-04-10 20:00 by À´¿´Á÷ÐÇÓê10
[¿¼ÑÐ] Çൺ¿Æ¼¼´óѧ²ÄÁÏѧԺ£¬»·¾³Ñ§Ôºµ÷¼Á²¹Â¼4ÔÂ10ÈÕÒÔǰ¶¼¿ÉÒÔ +3 1Çà¿Æ´ó¡£ 2026-04-09 5/250 2026-04-10 09:58 by ôæôæÒ»ÊéÉú
[¿¼ÑÐ] ²ÄÁϵ÷¼Á +11 Ò»ÑùYWY 2026-04-05 11/550 2026-04-10 09:32 by ÖÓÖÞ2011
[¿¼ÑÐ] ±¾¿ÆÎ÷¹¤´ó 0856 324Çóµ÷¼Á +10 wysyjs25 2026-04-09 11/550 2026-04-10 08:37 by 5268321
[¿¼ÑÐ] ²ÄÁÏר˶µ÷¼Á +16 ¹þ¹þ¹þºðºðºð¹þ 2026-04-07 17/850 2026-04-09 21:16 by wutongshun
[¿¼ÑÐ] 278Çóµ÷¼Á +27 ·¶æÃÄÈ 2026-04-07 31/1550 2026-04-09 20:49 by zhouxiaoyu
[¿¼ÑÐ] »¯¹¤Çóµ÷¼Á£¡ +34 RichLi_ 2026-04-06 34/1700 2026-04-09 20:39 by zhouxiaoyu
[¿¼ÑÐ] 0703»¯Ñ§Çóµ÷¼Á +21 ²»ÖªÃûµÄСئ 2026-04-08 21/1050 2026-04-09 18:55 by l_paradox
[¿¼ÑÐ] ²ÄÁϹ¤³Ìµ÷¼Á +12 СÁõͬѧ߹߹ 2026-04-06 13/650 2026-04-09 17:07 by luoyongfeng
[¿¼ÑÐ] 291Çóµ÷¼Á +7 ¹ØÒä±±. 2026-04-09 8/400 2026-04-09 15:17 by ̽123
[¿¼ÑÐ] 070300»¯Ñ§Ñ§Ë¶311·ÖÇóµ÷¼Á +18 Áº¸»¹óÏÕÖÐÇó 2026-04-04 20/1000 2026-04-09 11:18 by ßÕßÕßÕßÉßÉßÉ
[¿¼ÑÐ] 353Çóµ÷¼Á +8 Çç¿ÕÍòÀïair 2026-04-07 8/400 2026-04-09 00:18 by GouQ
[¿¼ÑÐ] ÉúÎïѧ328·ÖÇóµ÷¼Á +9 ÉÁµçkkl 2026-04-08 10/500 2026-04-08 21:42 by liuhuiying09
[¿¼ÑÐ] 312Çóµ÷¼Á +4 Say Never 2026-04-04 4/200 2026-04-08 08:41 by barlinike
[¿¼ÑÐ] 338Çóµ÷¼Á +8 wxygxsaaaaa 2026-04-06 8/400 2026-04-08 06:58 by Î޼ʵIJÝÔ­
[¿¼ÑÐ] 11408 325·Ö +3 jgtxuxgkx 2026-04-07 3/150 2026-04-07 23:10 by lbsjt
[¿¼ÑÐ] 319·Ö085702°²È«¹¤³ÌÇóµ÷¼Á +6 rious 2026-04-05 6/300 2026-04-07 09:42 by jp9609
[¿¼ÑÐ] Çóµ÷¼Áµ½²ÄÁÏ +5 ³Ì9915 2026-04-06 5/250 2026-04-06 15:21 by yulian1987
[¿¼ÑÐ] ¹¤¿Æ370Çóµ÷¼Á +3 äçÐļ弦µ° 2026-04-05 3/150 2026-04-06 10:55 by ÕâÊÇÒ»¸öÎÞÁĵÄê
[¿¼ÑÐ] 308Çóµ÷¼Á +3 ÖÕ²»ËÆ´Óǰ 2026-04-05 3/150 2026-04-05 22:23 by hemengdong
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û