ocra-recipes
Doxygen documentation for the ocra-recipes repository
EigenUtilities.h
Go to the documentation of this file.
1 #ifndef OCRA_UTIL_EIGEN_UTILITIES_H
2 #define OCRA_UTIL_EIGEN_UTILITIES_H
3 
4 #include <Eigen/Dense>
5 #include <Eigen/Lgsm>
6 #include <vector>
7 
8 namespace ocra {
9  namespace util {
10 
11 
12 inline Eigen::Displacementd eigenVectorToDisplacementd(const Eigen::VectorXd& eigenVector)
13 {
14  Eigen::VectorXd tmpVector = Eigen::VectorXd::Zero(7);
15  tmpVector(3) = 1.0;
16 
17  if (eigenVector.rows()<=3) {
18  for (auto i = 0; i < eigenVector.rows(); ++i) {
19  tmpVector(i) = eigenVector(i);
20  }
21  }
22  else if (eigenVector.rows()==7) {
23  tmpVector = eigenVector;
24  }
25 
26  return Eigen::Displacementd(tmpVector(0), tmpVector(1), tmpVector(2), tmpVector(3), tmpVector(4), tmpVector(5), tmpVector(6));
27 }
28 
29 inline std::vector<Eigen::Displacementd> eigenVectorToDisplacementd(const std::vector<Eigen::VectorXd>& eigenVector)
30 {
31  std::vector<Eigen::Displacementd> dispVec;
32  for(int i=0; i<eigenVector.size(); i++)
33  {
34  dispVec.push_back(eigenVectorToDisplacementd(eigenVector[i]));
35  }
36  return dispVec;
37 }
38 
39 inline Eigen::Twistd eigenVectorToTwistd(const Eigen::VectorXd& eigenVector, bool linearOnly=true, bool angularOnly=false)
40 {
41  if (eigenVector.size()==6) {
42  return Eigen::Twistd(eigenVector);
43  } else if (eigenVector.size()==3) {
44  if (linearOnly) {
45  return Eigen::Twistd(0,0,0,eigenVector(0),eigenVector(1),eigenVector(2));
46  }
47  if (angularOnly) {
48  return Eigen::Twistd(eigenVector(0),eigenVector(1),eigenVector(2),0,0,0);
49  }
50  }
51  return Eigen::Twistd::Zero();
52 }
53 
54 inline Eigen::Wrenchd eigenVectorToWrenchd(const Eigen::VectorXd& eigenVector, bool linearOnly=true, bool angularOnly=false)
55 {
56  if (eigenVector.size()==6) {
57  return Eigen::Wrenchd(eigenVector);
58  } else if (eigenVector.size()==3) {
59  if (linearOnly) {
60  return Eigen::Wrenchd(0,0,0,eigenVector(0),eigenVector(1),eigenVector(2));
61  }
62  if (angularOnly) {
63  return Eigen::Wrenchd(eigenVector(0),eigenVector(1),eigenVector(2),0,0,0);
64  }
65  }
66  return Eigen::Wrenchd::Zero();
67 }
68 
69 
70 
71 
72  } // namespace util
73 } // namespace ocra
74 #endif // OCRA_UTIL_EIGEN_UTILITIES_H
Eigen::Twistd eigenVectorToTwistd(const Eigen::VectorXd &eigenVector, bool linearOnly=true, bool angularOnly=false)
Optimization-based Robot Controller namespace. a library of classes to write and solve optimization p...
Eigen::Displacementd eigenVectorToDisplacementd(const Eigen::VectorXd &eigenVector)
Eigen::Wrenchd eigenVectorToWrenchd(const Eigen::VectorXd &eigenVector, bool linearOnly=true, bool angularOnly=false)