²é¿´: 3687  |  »Ø¸´: 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µÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ Ïë·ÉµÄÖí µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[»ù½ðÉêÇë] 2026ÄêÒ¶ÆóËï»ù½ð +3 bud_bud 2026-08-27 6/300 2026-08-28 11:53 by bud_bud
[»ù½ðÉêÇë] ¹ú×ÔÈ»ÃæÉϸ´ÅÌ~»¶Ó­ÌÖÂÛ (½ð±Ò+5) +12 ÇçÌì¼ÓÓÍ 2026-08-26 13/650 2026-08-28 11:32 by skyjudy
[»ù½ðÉêÇë] »ù½ðϵͳʲôÄÚÈÝҲûÓÐ 30+4 winsaint 2026-08-27 9/450 2026-08-28 11:06 by maolC
[»ù½ðÉêÇë] Ϊʲô×ÊÖúÊý¸÷´ó¸ßУ¶¼´´Ð¸ߣ¬×Ô¼ºÉêÇëÔõô¾ÍÕâôÄÑ +10 Kittylucky 2026-08-27 11/550 2026-08-28 10:45 by Kittylucky
[»ù½ðÉêÇë] ÄÄλ¸ßÈËÖÐÁË£¬°Ñ²éѯµ½µÄ½ØÍ¼Ìù³öÀ´ÈÃÎÒ¿´¿´£¬ÈÃÎÒ³¤³¤¼ûʶ +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
[»ù½ðÉêÇë] ¿´°åÉÏÕâô¶àÖеģ¬ÓеãÏñ50ÈËȺÀï49¸öÈ˶¼ÊÇÆ­×ÓµÄÄÇÖָоõ¡­¡­ +5 a089 2026-08-26 6/300 2026-08-27 14:05 by jonewore
[ÎÄѧ·¼²ÝÔ°] ÃÎÏë +3 myrtle 2026-08-26 3/150 2026-08-27 10:01 by angelyueyi
[»ù½ðÉêÇë] ÎÒ²»Àí½â£¡ +15 Edward_pc 2026-08-26 23/1150 2026-08-26 20:34 by zzuzxg
[»ù½ðÉêÇë] ·¶½øÖоÙÒ»ÎĵÄÖÐÐÄ˼Ïë +9 Ñ׻ƹóëÐ 2026-08-22 10/500 2026-08-26 15:40 by semaglutide
[»ù½ðÉêÇë] 2026¹ú×ÔÈ»º¯ÆÀ·Ñµ½ÕË +22 ÑòÑü°å 2026-08-21 25/1250 2026-08-26 15:00 by zuocuiping
[»ù½ðÉêÇë] ÄÜ·ñÍ˳ö²ÎÓëµÄÃæÉÏÏîÄ¿½â³ýÏÞÏî +23 koalala 2026-08-24 26/1300 2026-08-26 14:29 by ±¦±´³æ×Ó
[»ù½ðÉêÇë] Ϊʲô¹ú×ÔÈ»²»ÄÜÖ±½Ó¹«²¼ +4 bjdxyxy 2026-08-26 4/200 2026-08-26 13:12 by qingmu1201
[»ù½ðÉêÇë] ¹ú¼ÊºÏ×÷¿É²éÁË£¬ÖÐÁËÃæÉÏ (EPI+1)(½ð±Ò+50) +18 Ldrop2023 2026-08-26 18/900 2026-08-26 11:15 by cmrandy
[»ù½ðÉêÇë] ϵͳ½ø²»È¥ +4 yanglien 2026-08-26 5/250 2026-08-26 11:10 by wenfengw83
[Ö°³¡ÈËÉú] ѧÉúײ¼û¸¨µ¼Ô±ËÍÍâÂô£¬µÚ¶þÌìÈ«°à¶¼³ÁĬÁË +3 ¾¨ÓãÈÚ½ð_Õã½­_É 2026-08-22 3/150 2026-08-26 09:01 by zzuzxg
[»ù½ðÉêÇë] ÔÚ¼á±ù»¹¸Ç×ű±º£µÄʱºò£¬ÎÒ¿´µ½ÁËÅ­·ÅµÄ÷»¨¡£ (½ð±Ò+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
[»ù½ðÉêÇë] ûÓÐÈκÎÏûÏ¢-ÊDz»ÊǾÍÁ¹ÁË +9 ͼÀ²Í¼À² 2026-08-24 10/500 2026-08-25 11:59 by ÄϺ£Ð¡¸ç
[»ù½ðÉêÇë] ½¨Òé»ù½ð·¢²¼Ìáǰ¸ø³öÃ÷È·µÄʱ¼äµã +13 kulium 2026-08-21 16/800 2026-08-24 16:27 by superceng
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û