30 #include <Eigen/Geometry>
36 #include <RobotAPI/interface/aron.h>
62 static Eigen::Quaternion<T>
66 return ConvertToQuaternion<T>(*nav);
70 static Eigen::Quaternion<T>
73 checkDimensions(nav, {1, 4,
sizeof(
T)},
"ConvertToQuaternion");
76 Eigen::Map<Eigen::Quaternion<T>>
ret(
reinterpret_cast<T*
>(nav.
getData()));
80 template <
typename T,
int Size>
85 return ConvertToVector<T, Size>(*nav);
88 template <
typename T,
int Size>
92 checkDimensions(nav, {Size, 1,
sizeof(
T)},
"ConvertToVector");
95 Eigen::Map<Eigen::Matrix<T, Size, 1>>
ret(
reinterpret_cast<T*
>(nav.
getData()));
99 template <
typename T,
int Rows,
int Cols>
104 return ConvertToMatrix<T, Rows, Cols>(*nav);
107 template <
typename T>
116 Eigen::Map<MatrixT> map(
reinterpret_cast<T*
>(nav.
getData()), dims.at(0), dims.at(1));
120 template <
typename T,
int Rows = Eigen::Dynamic,
int Cols = Eigen::Dynamic>
124 if constexpr (Rows == Eigen::Dynamic and Cols == Eigen::Dynamic)
126 return ConvertToDynamicMatrix<T>(nav);
130 checkDimensions(nav, {Rows, Cols,
sizeof(
T)},
"ConvertToMatrix");
132 Eigen::Map<Eigen::Matrix<T, Rows, Cols>> map(
reinterpret_cast<T*
>(nav.
getData()));
137 template <
typename T>
142 ndArr->setShape({1, 4});
143 ndArr->setData(
sizeof(
T) * 4,
144 reinterpret_cast<const unsigned char*
>(quat.coeffs().data()));
149 template <
typename T>
155 ndArr->setShape({
static_cast<int>(mat.rows()),
static_cast<int>(mat.cols())});
156 ndArr->setData(
sizeof(
T) * mat.size(),
157 reinterpret_cast<const unsigned char*
>(mat.data()));
162 template <
typename T,
int Rows = Eigen::Dynamic,
int Cols = Eigen::Dynamic>
168 ndArr->setShape({Rows, Cols});
169 ndArr->setData(
sizeof(
T) * mat.size(),
170 reinterpret_cast<const unsigned char*
>(mat.data()));
177 template <
typename T>
178 static Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic>
184 using ArrayT = Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic>;
187 Eigen::Map<ArrayT>(
reinterpret_cast<T*
>(nav.
getData()), dims.at(0), dims.at(1));
191 template <
typename T,
int Rows = Eigen::Dynamic,
int Cols = Eigen::Dynamic>
192 static Eigen::Array<T, Rows, Cols>
195 if constexpr (Rows == Eigen::Dynamic and Cols == Eigen::Dynamic)
197 return ConvertToDynamicArray<T>(nav);
200 checkDimensions(nav, {Rows, Cols,
sizeof(
T)},
"ConvertToArray");
203 Eigen::Map<Eigen::Array<T, Rows, Cols>>
ret(
204 reinterpret_cast<T*
>(nav.
getData()), dims.at(0), dims.at(1));
208 template <
typename T>
214 ndArr->setShape({
static_cast<int>(mat.rows()),
static_cast<int>(mat.cols())});
215 ndArr->setData(
sizeof(
T) * mat.size(),
216 reinterpret_cast<const unsigned char*
>(mat.data()));
227 const std::vector<int>& expected,
228 const std::string& method,
229 const std::string& caller =
"AronEigenConverter");