Line data Source code
1 : #ifndef __ROSEE_UTILS_YAML__
2 : #define __ROSEE_UTILS_YAML__
3 :
4 : #include <yaml-cpp/yaml.h>
5 : #include <Eigen/Dense>
6 :
7 :
8 : namespace ROSEE { namespace Utils {
9 :
10 : /**
11 : * @brief given a yaml node with a structure like
12 : * - [1, 2, 3]
13 : * - [4, 5, 6]
14 : * "Convert" this structure into a eigen matrix
15 : *
16 : * @todo is there a better way to do this?
17 : */
18 0 : static Eigen::MatrixXd yamlMatrixToEigen(const YAML::Node &matrixNode) {
19 :
20 : //note: they say adding row by row to eigen is tremendously slow,
21 : // so we use vector
22 0 : std::vector<std::vector<float>> stdMat;
23 0 : stdMat = matrixNode.as<std::vector<std::vector<float>>>();
24 :
25 0 : Eigen::MatrixXd eigenMat(stdMat.size(), stdMat.at(0).size());
26 :
27 0 : for (int iRow = 0; iRow<stdMat.size(); iRow++) {
28 0 : for (int iCol = 0; iCol<stdMat.at(0).size(); iCol++) {
29 0 : eigenMat(iRow, iCol) = stdMat.at(iRow).at(iCol);
30 : }
31 : }
32 :
33 0 : return eigenMat;
34 :
35 : }
36 :
37 0 : static Eigen::VectorXd yamlVectorToEigen(const YAML::Node &vectorNode) {
38 :
39 : //note: they say adding row by row to eigen is tremendously slow,
40 : // so we use vector
41 0 : std::vector<float> stdVect;
42 0 : stdVect = vectorNode.as<std::vector<float>>();
43 :
44 0 : Eigen::VectorXd eigenVec(stdVect.size());
45 :
46 0 : for (int i = 0; i<stdVect.size(); i++) {
47 0 : eigenVec(i) = stdVect.at(i);
48 : }
49 :
50 0 : return eigenVec;
51 :
52 : }
53 :
54 : }
55 :
56 : }
57 :
58 : #endif // __ROSEE_UTILS_YAML__
|