24#include <Eigen/Geometry>
27#include <RobotRaconteur/DataTypes.h>
28#include <RobotRaconteurCompanion/Util/UtilMacros.h>
30#include <com__robotraconteur__geometry.h>
34namespace RobotRaconteur
44class RRArrayEigenTraits
48template <
typename T,
int N>
49class RRArrayEigenTraits< ::Eigen::Matrix<T, N, 1> >
52 typedef RobotRaconteur::RRArrayPtr<T> RRArrayPtrType;
59 static ::Eigen::Matrix<T, N, 1> CopyToEigen(RRArrayPtrType rr_array)
61 RobotRaconteur::rr_null_check(rr_array);
62 if (rr_array->size() != N)
64 throw RobotRaconteur::InvalidArgumentException(
"Invalid array length for Eigen vector, expected " +
65 boost::lexical_cast<std::string>(N) +
" got " +
66 boost::lexical_cast<std::string>(rr_array->size()));
69 return ::Eigen::Map< ::Eigen::Matrix<T, N, 1> >(rr_array->data());
74class RRArrayEigenTraits< ::Eigen::Matrix<T, ::Eigen::Dynamic, 1> >
77 typedef RobotRaconteur::RRArrayPtr<T> RRArrayPtrType;
80 static ::Eigen::Matrix<T, ::Eigen::Dynamic, 1> CopyToEigen(RRArrayPtrType rr_array)
82 RobotRaconteur::rr_null_check(rr_array);
84 return ::Eigen::Map< ::Eigen::Matrix<T, ::Eigen::Dynamic, 1> >(rr_array->data(), rr_array->size());
96template <
typename T,
int N>
97RobotRaconteur::RRArrayPtr<T>
EigenToRRArray(const ::Eigen::Matrix<T, N, 1>& eigen_in)
99 return RobotRaconteur::AttachRRArrayCopy<T>(eigen_in.data(), eigen_in.rows());
112 return RRArrayEigenTraits<T>::CopyToEigen(rr_array);
122template <
typename T,
int R,
int C>
125 std::vector<uint32_t> dims{(uint32_t)eigen_in.rows(), (uint32_t)eigen_in.cols()};
126 RobotRaconteur::RRMultiDimArrayPtr<T> out = RobotRaconteur::AllocateEmptyRRMultiDimArray<T>(dims);
127 ::Eigen::Matrix<T, ::Eigen::Dynamic, ::Eigen::Dynamic, ::Eigen::ColMajor> eigen_in2 = eigen_in;
128 size_t total_elems = eigen_in.rows() * eigen_in.cols();
129 memcpy(&out->Array->at(0), eigen_in2.data(),
sizeof(T) * total_elems);
142 RobotRaconteur::RRMultiDimArrayPtr<T> array_in)
144 RobotRaconteur::rr_null_check(array_in);
145 RobotRaconteur::rr_null_check(array_in->Dims);
146 RobotRaconteur::rr_null_check(array_in->Array);
148 switch (array_in->Dims->size())
151 throw RobotRaconteur::InvalidArgumentException(
"Invalid matrix dimensions");
153 ::Eigen::Matrix<T, ::Eigen::Dynamic, ::Eigen::Dynamic, ::Eigen::ColMajor> o(array_in->Dims->at(0), 1);
154 memcpy(o.data(), array_in->Array->data(),
sizeof(T) * array_in->Array->size());
158 ::Eigen::Matrix<T, ::Eigen::Dynamic, ::Eigen::Dynamic, ::Eigen::ColMajor> o(array_in->Dims->at(0),
159 array_in->Dims->at(1));
160 memcpy(o.data(), array_in->Array->data(),
sizeof(T) * array_in->Array->size());
164 throw RobotRaconteur::InvalidArgumentException(
"Invalid matrix dimensions");
174ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Vector2
ToVector2(
175 const ::Eigen::Ref<const ::Eigen::Vector2d>& vs);
183ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Vector2d
ToVector(
const com::robotraconteur::geometry::Vector2& vs);
191ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Vector3
ToVector3(
192 const ::Eigen::Ref<const ::Eigen::Vector3d>& vs);
200ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Vector3d
ToVector(
const com::robotraconteur::geometry::Vector3& vs);
208ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Vector6
ToVector6(
209 const ::Eigen::Ref<const ::Eigen::Matrix<double, 6, 1> >& vs);
217ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Matrix<double, 6, 1>
ToVector(
218 const com::robotraconteur::geometry::Vector6& vs);
226ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Point2D
ToPoint2D(
227 const ::Eigen::Ref<const ::Eigen::Vector2d>& vs);
235ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Vector2d
ToVector(
const com::robotraconteur::geometry::Point2D& vs);
243ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Point
ToPoint(
244 const ::Eigen::Ref<const ::Eigen::Vector3d>& vs);
252ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Vector3d
ToVector(
const com::robotraconteur::geometry::Point& vs);
260ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Size2D
ToSize2D(
261 const ::Eigen::Ref<const ::Eigen::Vector2d>& vs);
269ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Vector2d
ToVector(
const com::robotraconteur::geometry::Size2D& vs);
277ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Size
ToSize(
278 const ::Eigen::Ref<const ::Eigen::Vector3d>& vs);
286ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Vector3d
ToVector(
const com::robotraconteur::geometry::Size& vs);
294ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Quaterniond
ToQuaternion(
const com::robotraconteur::geometry::Quaternion& q);
302ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Quaternion
ToQuaternion(const ::Eigen::Quaterniond& q);
310ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Isometry3d
ToIsometry(
const com::robotraconteur::geometry::Transform& t);
318ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Transform
ToTransform(const ::Eigen::Isometry3d& iso);
326ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Isometry3d
ToIsometry(
const com::robotraconteur::geometry::Pose& t);
334ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Pose
ToPose(const ::Eigen::Isometry3d& iso);
342ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::SpatialVelocity
ToSpatialVelocity(
343 const ::Eigen::Ref<const ::Eigen::Matrix<double, 6, 1> >& vs);
351ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Matrix<double, 6, 1>
ToVector(
352 const com::robotraconteur::geometry::SpatialVelocity& vs);
362 const ::Eigen::Ref<const ::Eigen::Matrix<double, 6, 1> >& vs);
370ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Matrix<double, 6, 1>
ToVector(
371 const com::robotraconteur::geometry::SpatialAcceleration& vs);
379ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Wrench
ToWrench(
380 const ::Eigen::Ref<const ::Eigen::Matrix<double, 6, 1> >& vs);
388ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Matrix<double, 6, 1>
ToVector(
389 const com::robotraconteur::geometry::Wrench& vs);
::Eigen::Isometry3d ToIsometry(const com::robotraconteur::geometry::Transform &t)
Convert com::robotraconteur::geometry::Transform to Eigen Isometry.
com::robotraconteur::geometry::Wrench ToWrench(const ::Eigen::Ref< const ::Eigen::Matrix< double, 6, 1 > > &vs)
Convert Eigen Vector with 6 elements to com::robotraconteur::geometry::Wrench.
com::robotraconteur::geometry::SpatialVelocity ToSpatialVelocity(const ::Eigen::Ref< const ::Eigen::Matrix< double, 6, 1 > > &vs)
Convert Eigen Vector with 6 elements to com::robotraconteur::geometry::SpatialVelocity.
::Eigen::Quaterniond ToQuaternion(const com::robotraconteur::geometry::Quaternion &q)
Convert com::robotraconteur::geometry::Quaternion to Eigen Quaternion.
com::robotraconteur::geometry::Pose ToPose(const ::Eigen::Isometry3d &iso)
Convert Eigen Isometry to com::robotraconteur::geometry::Pose.
com::robotraconteur::geometry::Vector2 ToVector2(const ::Eigen::Ref< const ::Eigen::Vector2d > &vs)
Convert Eigen vector to com::robotraconteur::geometry::Vector2.
com::robotraconteur::geometry::Vector6 ToVector6(const ::Eigen::Ref< const ::Eigen::Matrix< double, 6, 1 > > &vs)
Convert Eigen vector to com::robotraconteur::geometry::Vector6.
com::robotraconteur::geometry::Size2D ToSize2D(const ::Eigen::Ref< const ::Eigen::Vector2d > &vs)
Convert Eigen vector with 2 elements to com::robotraconteur::geometry::Size2D.
com::robotraconteur::geometry::Vector3 ToVector3(const ::Eigen::Ref< const ::Eigen::Vector3d > &vs)
Convert Eigen vector to com::robotraconteur::geometry::Vector3.
com::robotraconteur::geometry::Size ToSize(const ::Eigen::Ref< const ::Eigen::Vector3d > &vs)
Convert Eigen vector with 3 elements to com::robotraconteur::geometry::Size.
::Eigen::Matrix< T, ::Eigen::Dynamic, ::Eigen::Dynamic > RRMultiDimArrayToEigen(RobotRaconteur::RRMultiDimArrayPtr< T > array_in)
Convert RRMultiDimArray to Eigen matrix.
Definition EigenConverters.h:141
RobotRaconteur::RRMultiDimArrayPtr< T > EigenToRRMultiDimArray(const ::Eigen::Matrix< T, R, C > &eigen_in)
Convert Eigen matrix to RRMultiDimArray.
Definition EigenConverters.h:123
com::robotraconteur::geometry::Transform ToTransform(const ::Eigen::Isometry3d &iso)
Convert Eigen Isometry to com::robotraconteur::geometry::Transform.
RobotRaconteur::RRArrayPtr< T > EigenToRRArray(const ::Eigen::Matrix< T, N, 1 > &eigen_in)
Convert Eigen vector to RRArray.
Definition EigenConverters.h:97
com::robotraconteur::geometry::Point2D ToPoint2D(const ::Eigen::Ref< const ::Eigen::Vector2d > &vs)
Convert Eigen vector with 2 elements to com::robotraconteur::geometry::Point2D.
com::robotraconteur::geometry::Point ToPoint(const ::Eigen::Ref< const ::Eigen::Vector3d > &vs)
Convert Eigen vector with 3 elements to com::robotraconteur::geometry::Point.
::Eigen::Vector2d ToVector(const com::robotraconteur::geometry::Vector2 &vs)
Convert com::robotraconteur::geometry::Vector2 to Eigen vector.
T RRArrayToEigen(typename RRArrayEigenTraits< T >::RRArrayPtrType rr_array)
Convert RRArray to Eigen vector.
Definition EigenConverters.h:110
com::robotraconteur::geometry::SpatialAcceleration ToSpatialAcceleration(const ::Eigen::Ref< const ::Eigen::Matrix< double, 6, 1 > > &vs)
Convert Eigen Vector with 6 elements to com::robotraconteur::geometry::SpatialAcceleration.