Ejemplo n.º 1
0
std::pair<fcl::Vec3f, fcl::Matrix3f> Kinematics::getPoseOfLinkN(const std::vector<double> &joint_angles, const int &n) const {    
   Eigen::MatrixXd res = Eigen::MatrixXd::Identity(4, 4);
   Eigen::MatrixXd init_trans(4, 4);   
   init_trans << 1.0, 0.0, 0.0, joint_origins_[0][0], 
		         0.0, 1.0, 0.0, joint_origins_[0][1],
				 0.0, 0.0, 1.0, joint_origins_[0][2],
				 0.0, 0.0, 0.0, 1.0;
   std::vector<Eigen::MatrixXd> transformations;
   transformations.push_back(init_trans);
   
   for (unsigned int i = 0; i < n; i++) {	   
       transformations.push_back(getTransformationMatr(joint_angles[i], 0.0, links_[i][0], joint_origins_[i + 1][3]));	      
   } 
      
   if (n != 0) {
   	   transformations.push_back(getTransformationMatr(joint_angles[n], 0.0, 0.0, 0.0));
   }
   else {
       transformations.push_back(getTransformationMatr(joint_angles[0], 0.0, 0.0, 0.0));
   }
      
   for (int i = transformations.size() - 1; i >= 0; i--) {	   
   	   res = transformations[i] * res;	  
   }
   
   fcl::Vec3f r_vec = fcl::Vec3f(res(0, 3), res(1, 3), res(2, 3));
   fcl::Matrix3f r_matr = fcl::Matrix3f(res(0, 0), res(0, 1), res(0, 2), 
                                        res(1, 0), res(1, 1), res(1, 2), 
                                        res(2, 0), res(2, 1), res(2, 2));   
   auto p = std::make_pair(r_vec, r_matr);   
   return p;
}
Ejemplo n.º 2
0
/*@ requires \true;
  @ behavior a :
  @  ensures 0<=\result<=1;
*/
int main(){
  cpt=3;
  status=0;
  /*@ loop invariant i : 
    @      0<=status<=1
    @   && 0<=cpt<=3
    @   && (cpt==0 ==> status==0);
   */
  while (cpt>0) {
    status=init_trans();
    if (status && (status=commit_trans())) goto label_ok;
    cpt--;
  }
  return 0;

 label_ok: 
  return 1;
}