30#include <Eigen/Geometry>
36#include <RobotAPI/interface/aron.h>
41 class AronEigenConverter
43 AronEigenConverter() =
delete;
62 static Eigen::Quaternion<T>
70 static Eigen::Quaternion<T>
73 checkDimensions(
nav, {1, 4,
sizeof(
T)},
"ConvertToQuaternion");
74 auto dims =
nav.getShape();
76 Eigen::Map<Eigen::Quaternion<T>> ret(
reinterpret_cast<T*
>(
nav.getData()));
80 template <
typename T,
int Size>
88 template <
typename T,
int Size>
92 checkDimensions(
nav, {Size, 1,
sizeof(
T)},
"ConvertToVector");
93 auto dims =
nav.getShape();
95 Eigen::Map<Eigen::Matrix<T, Size, 1>> ret(
reinterpret_cast<T*
>(
nav.getData()));
99 template <
typename T,
int Rows,
int Cols>
107 template <
typename T>
113 const auto dims =
nav.getShape();
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)
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>
181 const auto dims =
nav.getShape();
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)
200 checkDimensions(
nav, {Rows, Cols,
sizeof(
T)},
"ConvertToArray");
201 auto dims =
nav.getShape();
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");
static Eigen::Matrix< T, Rows, Cols > ConvertToMatrix(const data::NDArray &nav)
static Eigen::Quaternion< double > ConvertToQuaterniond(const data::NDArrayPtr &)
static Eigen::Matrix< T, Rows, Cols > ConvertToMatrix(const data::NDArrayPtr &nav)
static Eigen::Matrix< T, Size, 1 > ConvertToVector(const data::NDArrayPtr &nav)
static Eigen::Matrix< T, Size, 1 > ConvertToVector(const data::NDArray &nav)
static Eigen::Matrix4f ConvertToMatrix4f(const data::NDArrayPtr &)
static Eigen::Array< T, Eigen::Dynamic, Eigen::Dynamic > ConvertToDynamicArray(const data::NDArray &nav)
static Eigen::Quaternion< T > ConvertToQuaternion(const data::NDArray &nav)
static Eigen::Vector3f ConvertToVector3f(const data::NDArrayPtr &)
static Eigen::Quaternion< T > ConvertToQuaternion(const data::NDArrayPtr &nav)
static Eigen::Vector3d ConvertToVector3d(const data::NDArrayPtr &)
static data::NDArrayPtr ConvertFromMatrix(const Eigen::Matrix< T, Rows, Cols > &mat)
static Eigen::Matrix4d ConvertToMatrix4d(const data::NDArrayPtr &)
static Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > ConvertToDynamicMatrix(const data::NDArray &nav)
static data::NDArrayPtr ConvertFromQuaternion(const Eigen::Quaternion< T > &quat)
static Eigen::Array< T, Rows, Cols > ConvertToArray(const data::NDArray &nav)
static data::NDArrayPtr ConvertFromArray(const Eigen::Array< T, Eigen::Dynamic, Eigen::Dynamic > &mat)
static data::NDArrayPtr ConvertFromMatrix(const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > &mat)
static Eigen::Quaternion< float > ConvertToQuaternionf(const data::NDArrayPtr &)
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
#define ARMARX_CHECK_EQUAL(lhs, rhs)
This macro evaluates whether lhs is equal (==) rhs and if it turns out to be false it will throw an E...
::armarx::aron::data::converter::AronEigenConverter AronEigenConverter
std::shared_ptr< NDArray > NDArrayPtr