Ejemplo n.º 1
0
IqWampSubscription::IqWampSubscription(int id, const QString &topic) :
<<<<<<< HEAD
    m_topic(topic),
    m_id(id)
=======
    m_id(id),
    m_topic(topic)
>>>>>>> 47d4c027f824f401bb90eb267e7b023187f9e899
{
}

QString IqWampSubscription::topic() const
{
    return m_topic;
}

int IqWampSubscription::id() const
{
    return m_id;
}
Ejemplo n.º 2
0
int main(void){
  
  std::cout  << " ---- Programa de Tests de la pseudoinverse de Mansard ----" << std::endl;

  unsigned int nq = 10;  
  unsigned int nx1 = 7;

  Eigen::MatrixXd H1(Eigen::MatrixXd::Zero(nx1,nx1));
  H1(0,0) = 0;
  H1(1,1) = 0.2;
  H1(2,2) = 0;  
  H1(3,3) = 0.5;
  H1(4,4) = 0;
  H1(5,5) = 0;
  H1(6,6) = 0.7;
  
  std::vector<unsigned int> active_joints;
  for (unsigned int i=0; i<nx1; ++i)  if (H1(i,i))    active_joints.push_back(i);
  unsigned int n_active_joints = active_joints.size();
  std::cout << "n_active_joints: " << n_active_joints << std::endl;
  
  // Initialize pseudoinverse to zero
  Eigen::MatrixXd pJ1(Eigen::MatrixXd::Zero(nq,nx1));
  
//  // Per cada grup de 'i' elements
//  for (unsigned int i=1; i<=n_active_joints; ++i){
  
//    std::vector<bool> v(n_active_joints);
//    std::fill(v.begin(), v.begin() + i, true);

//    do {

//      Eigen::MatrixXd J_sum(Eigen::MatrixXd::Zero(nx1,nq));
      
//      double h_prod = 1.0;
      
//      for (int j = 0; j < n_active_joints; ++j) {
//	unsigned int qi = active_joints[j];
	
//	if (v[j]) {
//// 	  std::cout << j << " ";
//	  std::cout << qi << " ";
	  
// 	  J_sum(qi,qi+3) = 1.0;
//	  h_prod *= H1(qi,qi);
//	}
//	else	h_prod *= 1.0 - H1(qi,qi);
//      }
//      std::cout << "\n";
////       std::cout << "  -  P h: " << h_prod << "\n";
      
//      std::cout << " J_sum: " << "\n" << J_sum << "\n";

//      Eigen::MatrixXd pJ_sum(pinv(J_sum,0.00001));
//      std::cout << " h_prod * pJ_sum: " << "\n" << h_prod * pJ_sum << "\n";
      
//      pJ1 = pJ1 + h_prod * pJ_sum;
//      std::cout << " pJ1: " << "\n" << pJ1 << "\n";
      
//    } while (std::prev_permutation(v.begin(), v.end()));
    
//     std::cout << "-----\n";
//  }
//  std::cout << " pJ1: " << "\n" << pJ1 << "\n";
  
  
 // Per cada grup de 'i' elements
  pJ1 = Eigen::MatrixXd::Zero(nq,nx1);
  for (unsigned int i=1; i<=n_active_joints; ++i){
  
    std::vector<bool> v(n_active_joints);
    std::fill(v.begin(), v.begin() + i, true);

    do {
      Eigen::MatrixXd J_sum(Eigen::MatrixXd::Zero(nx1,nq));
      double h_prod = 1.0;
      for (unsigned int j = 0; j < n_active_joints; ++j) {
    unsigned int qi = active_joints[j];
	
    if (v[j]) {
      J_sum(qi,qi+3) = 1.0;
      h_prod *= H1(qi,qi);
    }
    else
      h_prod *= 1.0 - H1(qi,qi);
      }
      pJ1 = pJ1 + h_prod * pinv(J_sum,0.00001);
      
    } while (std::prev_permutation(v.begin(), v.end()));

  }
  std::cout << " pJ1: " << "\n" << pJ1 << "\n";
  


//    Eigen::MatrixXd m_id(Eigen::MatrixXd::Identity(6,6));
//    m_id(1,1) = 0.2;
//    m_id(4,4) = -3;

//    Eigen::VectorXi TS(3);
//    TS(0) = 2;
//    TS(1) = 3;
//    TS(2) = 1;

//    Eigen::VectorXd H(3);
//    H(0) = 0.1;
//    H(1) = 0.6;
//    H(2) = 0.4;

//    std::cout << " cinv: " << "\n" << cinv(m_id,TS,H) << "\n";

    double tol = 0.0000001;

    Eigen::MatrixXd m_id(Eigen::MatrixXd::Identity(nx1,nx1));

    Eigen::VectorXi TS(nx1);
    for (unsigned int i=0; i<nx1; ++i)  TS(i) = 1.0;

    Eigen::VectorXd H(nx1);
    H(0) = 0;
    H(1) = 0.2;
    H(2) = 0;
    H(3) = 0.5;
    H(4) = 0;
    H(5) = 0;
    H(6) = 0.7;

    std::cout << "cinv: " << "\n" << cinv(m_id,TS,H) << "\n";

    Eigen::MatrixXd lH(nx1,nx1);
    lH(0,0) = 0;
    lH(1,1) = 0.2;
    lH(2,2) = 0;
    lH(3,3) = 0.5;
    lH(4,4) = 0;
    lH(5,5) = 0;
    lH(6,6) = 0.7;

    std::cout << "cinv: " << "\n" << cinv(m_id,TS,lH) << "\n";
    std::cout << "left cinv: " << "\n" << left_cinv(m_id,TS,lH) << "\n";
    std::cout << "right cinv: " << "\n" << right_cinv(m_id,TS,lH) << "\n";

    return 0;
}