²é¿´: 3689  |  »Ø¸´: 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µÄ»ØÌû

YBQ´óѧ

½û³æ (ÕýʽдÊÖ)

¡ï ¡ï
lovibond(½ð±Ò+2): ²»ÊʺÏ×÷Ϊ×ÊÔ´Ìû£¬µ«ÊÇÒª¹ÄÀøÔ­´´·ÖÏí 2011-06-27 21:00:00
±¾ÌûÄÚÈݱ»ÆÁ±Î

2Â¥2010-09-03 13:26:46
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

Ïë·ÉµÄÖí

ľ³æ (ÕýʽдÊÖ)

ÒýÓûØÌû:
Originally posted by YBQ´óѧ at 2010-09-03 13:26:46:
ÔËÐв»»á±¨´í°É

ÄãÊÇÔÚÄĸöƽ̨ÉÏдµÄ

Õâ¸öÖ»ÊǼÆËãûÓÐÉæ¼°Ì«¶àµÄ½Ó¿Ú£¬Ê²Ã´Æ½Ì¨¶¼¿ÉÒÔ°É£¡¶øÇÒÎÒ²»ÖªµÀÄãµÄƽָ̨ʲô£¬ÏµÍ³»¹ÊÇ¿ª·¢Èí¼þ£¬ÎÒµÄÊÇÔÚXPÓÃVC++6.0дµÄ£¡

¸Ð¾õÄãµÄ±à³ÌÄÜÁ¦²»ÊǺÜ...£¡
ºÃºÃѧѧ°É£¡
3Â¥2010-09-04 12:48:37
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

Å£¸ûµØ

Òø³æ (³õÈëÎÄ̳)

0.8

¶¥£¡ºÃ¶«Î÷£¡
4Â¥2011-02-17 15:50:00
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

Ïë·ÉµÄÖí

ľ³æ (ÕýʽдÊÖ)

ÒýÓûØÌû:
Originally posted by Å£¸ûµØ at 2011-02-17 15:50:00:
¶¥£¡ºÃ¶«Î÷£¡

лл£¡ÒÔºó¶à½»Á÷£¡ÎÒÓÃOpenGL×öÁ˸ö¶«Î÷£¡
5Â¥2011-02-17 20:42:08
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

Å£¸ûµØ

Òø³æ (³õÈëÎÄ̳)

ºÃ£¬ÎÒ¾ÍÊÇ×öÐéÄâÈ˶¯»­µÄ£¬¶ÔÕâ¸öÒ²±È½ÏÁ˽⡣
²»¹ýÎÒûÓÐʵÏÖ¹ýIKµÄ¶«Î÷£¬ÄܰÑÄãµÄ¶«Î÷·ÖÏíÒ»ÏÂÂð£¿
ÒýÓûØÌû:
Originally posted by Ïë·ÉµÄÖí at 2011-02-17 20:42:08:



лл£¡ÒÔºó¶à½»Á÷£¡ÎÒÓÃOpenGL×öÁ˸ö¶«Î÷£¡

6Â¥2011-02-18 09:29:02
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

Ïë·ÉµÄÖí

ľ³æ (ÕýʽдÊÖ)

ÒýÓûØÌû:
Originally posted by Å£¸ûµØ at 2011-02-18 09:29:02:
ºÃ£¬ÎÒ¾ÍÊÇ×öÐéÄâÈ˶¯»­µÄ£¬¶ÔÕâ¸öÒ²±È½ÏÁ˽⡣
²»¹ýÎÒûÓÐʵÏÖ¹ýIKµÄ¶«Î÷£¬ÄܰÑÄãµÄ¶«Î÷·ÖÏíÒ»ÏÂÂð£¿


IKÊÇʲô°¡£¿
7Â¥2011-02-18 13:27:15
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

Å£¸ûµØ

Òø³æ (³õÈëÎÄ̳)

inverse kinematics

Äã¼ÆËãÑſɱȲ»ÊÇÓÃÀ´Çó½âÄæÔ˶¯Ñ§Âð£¿
ÒýÓûØÌû:
Originally posted by Ïë·ÉµÄÖí at 2011-02-18 13:27:15:


IKÊÇʲô°¡£¿

8Â¥2011-02-18 15:07:10
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

Ïë·ÉµÄÖí

ľ³æ (ÕýʽдÊÖ)

ÒýÓûØÌû:
Originally posted by Å£¸ûµØ at 2011-02-18 15:07:10:
inverse kinematics

Äã¼ÆËãÑſɱȲ»ÊÇÓÃÀ´Çó½âÄæÔ˶¯Ñ§Âð£¿


Ŷ£¡ºÇºÇ£¡
9Â¥2011-02-18 17:47:42
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

ytinghost3

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

Ìû×ÓÕæ¾«²Ê!
ÒѾ­ÊÕ¼µ½ÌÔÌùר¼­¡¶»úÆ÷È˼¼Êõר¼­¡·
»ÑÑÔÓëÊÄÑÔµÄÇø±ðÔÚÓÚ£ºÒ»¸öÊÇÌýµÄÈ˵±ÕæÁË£¬Ò»¸öÊÇ˵µÄÈ˵±ÕæÁË¡£
10Â¥2011-09-01 22:14:38
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ Ïë·ÉµÄÖí µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[»ù½ðÉêÇë] ¹ú×ÔÈ»ÆÀÉóÒâ¼û +7 wangmingqi 2026-08-28 8/400 2026-08-28 18:42 by zhuzg0628
[»ù½ðÉêÇë] ¹ú×ÔÈ»ÃæÉϸ´ÅÌ~»¶Ó­ÌÖÂÛ (½ð±Ò+15) +13 ÇçÌì¼ÓÓÍ 2026-08-26 14/700 2026-08-28 18:36 by huagongfeihu
[½Ìʦ֮¼Ò] µ¼Ê¦Í²ۣºÎÒÔõô̯ÉÏÁËÕâô¸ö¼«Æ·Ñо¿Éú£¡ +8 ËÕ¶«ÆÂ¶þÊÀ 2026-08-23 8/400 2026-08-28 14:41 by lkforward
[»ù½ðÉêÇë] »ù½ð²»ÖУ¬¹²Ãã +11 eulota 2026-08-26 11/550 2026-08-28 14:22 by »ðÐdz¬ÈËxi
[»ù½ðÉêÇë] ÄÄλ¸ßÈËÖÐÁË£¬°Ñ²éѯµ½µÄ½ØÍ¼Ìù³öÀ´ÈÃÎÒ¿´¿´£¬ÈÃÎÒ³¤³¤¼ûʶ +5 yuleib84 2026-08-26 6/300 2026-08-28 00:02 by yudaoqian88
[»ù½ðÉêÇë] ÉêÇëɾ³ý±¾Ìû +6 lyz123lyz 2026-08-27 7/350 2026-08-27 17:31 by Äþ¾²ÖÂÔ¶sy
[»ù½ðÉêÇë] Ôõô¿´Çà»ùÖÐÁËûÓа¡ +5 Ò¶¾Å΢ 2026-08-26 5/250 2026-08-27 10:35 by l_zh2008
[ÎÄѧ·¼²ÝÔ°] ÃÎÏë +3 myrtle 2026-08-26 3/150 2026-08-27 10:01 by angelyueyi
[»ù½ðÉêÇë] 2026ÄêµÄ¹ú¼ÒÉç¿Æ»ù½ðÏîĿͨѶÆÀÉóµÄйæÔòÓëж¯Ïò¡¢ÐÂÌôÕ½ +7 process2012 2026-08-23 10/500 2026-08-26 19:23 by hmhminy
[»ù½ðÉêÇë] ·¶½øÖоÙÒ»ÎĵÄÖÐÐÄ˼Ïë +9 Ñ׻ƹóëÐ 2026-08-22 10/500 2026-08-26 15:40 by semaglutide
[»ù½ðÉêÇë] ³öÀ´ÁË +9 trojank 2026-08-26 9/450 2026-08-26 14:25 by ±¦±´³æ×Ó
[»ù½ðÉêÇë] ¹úºÏÀïÃæÄÜ¿´µ½ÁË +7 Ò»»³Ü°Çï 2026-08-26 7/350 2026-08-26 11:23 by zhaosm1982
[»ù½ðÉêÇë] ϵͳ½ø²»È¥ +4 yanglien 2026-08-26 5/250 2026-08-26 11:10 by wenfengw83
[»ù½ðÉêÇë] ½ñÌìÎñί»á¿ªÍêÁË£¬Ã÷Ìì³ö½á¹ûÂð +19 angus9576 2026-08-25 23/1150 2026-08-26 10:03 by zp519
[Ö°³¡ÈËÉú] ѧÉúײ¼û¸¨µ¼Ô±ËÍÍâÂô£¬µÚ¶þÌìÈ«°à¶¼³ÁĬÁË +3 ¾¨ÓãÈÚ½ð_Õã½­_É 2026-08-22 3/150 2026-08-26 09:01 by zzuzxg
[»ù½ðÉêÇë] Å£À´£¡Ã×À´£¡ÃæÀ´£¡ +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
[»ù½ðÉêÇë] ÔÚ¼á±ù»¹¸Ç×ű±º£µÄʱºò£¬ÎÒ¿´µ½ÁËÅ­·ÅµÄ÷»¨¡£ (½ð±Ò+10) +6 ziyangfang 2026-08-25 9/450 2026-08-25 20:26 by huagongfeihu
[»ù½ðÉêÇë] Ã÷ÌìÓ¦¸Ã¿É²éÁË£¡£¿ +6 chengyan1220 2026-08-23 6/300 2026-08-25 19:45 by zfd97
[»ù½ðÉêÇë] Èç¹û´Ë¿ÌÄãÕýÔÚΪ¹ú»ù¸Ðµ½½¹ÂÇ£¬²»·ÁÀ´ÌýÌýÕâÊס¶»ù½ðÖ®Íâ¡· +8 scalable 2026-08-24 8/400 2026-08-25 12:52 by jnhyjjm
[»ù½ðÉêÇë] ûÓÐÈκÎÏûÏ¢-ÊDz»ÊǾÍÁ¹ÁË +9 ͼÀ²Í¼À² 2026-08-24 10/500 2026-08-25 11:59 by ÄϺ£Ð¡¸ç
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û