Ejemplo n.º 1
0
int Judge(Cube space,Piece p[8],int p_num,int x,int y,int z){
  Piece fp=FootPoint(space,p,p_num,x,y,z);
  if(space.form[x][y][z]==0&&
     space.form[fp.foot[0][0]][fp.foot[0][1]][fp.foot[0][2]]==0&&
     space.form[fp.foot[1][0]][fp.foot[1][1]][fp.foot[1][2]]==0&&
     space.form[fp.foot[2][0]][fp.foot[2][1]][fp.foot[2][2]]==0
     ){return 1;}
  else return 0;
}
Ejemplo n.º 2
0
Cube PutPiece(Cube space,Piece p[8],int p_num,int x,int y,int z){
  Piece fp=FootPoint(space,p,p_num,x,y,z);
  int f_num;
  space.form[x][y][z]=p_num;
  for(f_num=0;f_num<3;f_num++){
    space.form[fp.foot[f_num][0]][fp.foot[f_num][1]][fp.foot[f_num][2]]=p_num;
  }
  return space;
}
Ejemplo n.º 3
0
int ControlT(const float* P1, const float* P2, const float* MechPara, const float* IMUdata, const float* TensionT)
{
    float R1[9],R2[9];
    float l1[3],l2[3];
    l1[0]=l1[1]=0;
    l1[2]=MechPara[0];
    l2[0]=l1[2]=0;
    l2[2]=MechPara[1];
    if(IMUdata[0]==4||IMUdata[1]==4||IMUdata[2]==4||IMUdata[3]==4||IMUdata[4]==4||IMUdata[5]==4)//IMU数据错误
        return -1;
    EA2SO3(*(IMUdata+2),*(IMUdata+1),*(IMUdata),R1);//求矩阵R1,R2
    EA2SO3(*(IMUdata+5),*(IMUdata+4),*(IMUdata+3),R2);
    float P[3];
    SolveP(R1, R2, l1, l2, P);//求腕部轨迹P
    float d;
    float fp[3];
    d = FootPoint(P1, P2, P, fp);//求P到轨迹P1P2的距离d与垂足fp
    const float an = 1;//构造末端力的参数
    float F[3];
    MakeF(P, fp, d, an, F);//构造末端所需的力F
    float taos[3],taoe[3];
    TransformF(R1, R2, l1, l2, F, taos, taoe);//末端力转化到关节力矩
    float jacob_s[12],jacob_e[6];
    SolveJacob(MechPara, R1, R2, jacob_s, jacob_e);//求Jacob矩阵
    float ts[4];
    if(QP(jacob_s,taos,ts) == -1)//求优发散了
    {
        return -1;
    }
    else
    {
        return 1;
//		if(QP(jacob_e,taoe,te == -1))//求优发散了
//			return -1;
//		else//终于求出来最优解了
//		{
//
//		}
    }
}