Robot Raconteur Companion C++ Library
Loading...
Searching...
No Matches
EigenConverters.h
Go to the documentation of this file.
1
23
24#include <Eigen/Geometry>
25#include <Eigen/Dense>
26#include <Eigen/Core>
27#include <RobotRaconteur/DataTypes.h>
28#include <RobotRaconteurCompanion/Util/UtilMacros.h>
29
30#include <com__robotraconteur__geometry.h>
31
32#pragma once
33
34namespace RobotRaconteur
35{
36namespace Companion
37{
38namespace Converters
39{
40namespace Eigen
41{
42
43template <typename T>
44class RRArrayEigenTraits
45{
46};
47
48template <typename T, int N>
49class RRArrayEigenTraits< ::Eigen::Matrix<T, N, 1> >
50{
51 public:
52 typedef RobotRaconteur::RRArrayPtr<T> RRArrayPtrType;
53 typedef T NumberType;
54 enum
55 {
56 Rows = N
57 };
58
59 static ::Eigen::Matrix<T, N, 1> CopyToEigen(RRArrayPtrType rr_array)
60 {
61 RobotRaconteur::rr_null_check(rr_array);
62 if (rr_array->size() != N)
63 {
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()));
67 }
68
69 return ::Eigen::Map< ::Eigen::Matrix<T, N, 1> >(rr_array->data());
70 }
71};
72
73template <typename T>
74class RRArrayEigenTraits< ::Eigen::Matrix<T, ::Eigen::Dynamic, 1> >
75{
76 public:
77 typedef RobotRaconteur::RRArrayPtr<T> RRArrayPtrType;
78 typedef T NumberType;
79
80 static ::Eigen::Matrix<T, ::Eigen::Dynamic, 1> CopyToEigen(RRArrayPtrType rr_array)
81 {
82 RobotRaconteur::rr_null_check(rr_array);
83
84 return ::Eigen::Map< ::Eigen::Matrix<T, ::Eigen::Dynamic, 1> >(rr_array->data(), rr_array->size());
85 }
86};
87
96template <typename T, int N>
97RobotRaconteur::RRArrayPtr<T> EigenToRRArray(const ::Eigen::Matrix<T, N, 1>& eigen_in)
98{
99 return RobotRaconteur::AttachRRArrayCopy<T>(eigen_in.data(), eigen_in.rows());
100}
101
109template <typename T>
110T RRArrayToEigen(typename RRArrayEigenTraits<T>::RRArrayPtrType rr_array)
111{
112 return RRArrayEigenTraits<T>::CopyToEigen(rr_array);
113}
114
122template <typename T, int R, int C>
123RobotRaconteur::RRMultiDimArrayPtr<T> EigenToRRMultiDimArray(const ::Eigen::Matrix<T, R, C>& eigen_in)
124{
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);
130 return out;
131}
132
140template <typename T>
141::Eigen::Matrix<T, ::Eigen::Dynamic, ::Eigen::Dynamic> RRMultiDimArrayToEigen(
142 RobotRaconteur::RRMultiDimArrayPtr<T> array_in)
143{
144 RobotRaconteur::rr_null_check(array_in);
145 RobotRaconteur::rr_null_check(array_in->Dims);
146 RobotRaconteur::rr_null_check(array_in->Array);
147
148 switch (array_in->Dims->size())
149 {
150 case 0:
151 throw RobotRaconteur::InvalidArgumentException("Invalid matrix dimensions");
152 case 1: {
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());
155 return o;
156 }
157 case 2: {
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());
161 return o;
162 }
163 default:
164 throw RobotRaconteur::InvalidArgumentException("Invalid matrix dimensions");
165 }
166}
167
174ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Vector2 ToVector2(
175 const ::Eigen::Ref<const ::Eigen::Vector2d>& vs);
176
183ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Vector2d ToVector(const com::robotraconteur::geometry::Vector2& vs);
184
191ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Vector3 ToVector3(
192 const ::Eigen::Ref<const ::Eigen::Vector3d>& vs);
193
200ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Vector3d ToVector(const com::robotraconteur::geometry::Vector3& vs);
201
208ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Vector6 ToVector6(
209 const ::Eigen::Ref<const ::Eigen::Matrix<double, 6, 1> >& vs);
210
217ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Matrix<double, 6, 1> ToVector(
218 const com::robotraconteur::geometry::Vector6& vs);
219
226ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Point2D ToPoint2D(
227 const ::Eigen::Ref<const ::Eigen::Vector2d>& vs);
228
235ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Vector2d ToVector(const com::robotraconteur::geometry::Point2D& vs);
236
243ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Point ToPoint(
244 const ::Eigen::Ref<const ::Eigen::Vector3d>& vs);
245
252ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Vector3d ToVector(const com::robotraconteur::geometry::Point& vs);
253
260ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Size2D ToSize2D(
261 const ::Eigen::Ref<const ::Eigen::Vector2d>& vs);
262
269ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Vector2d ToVector(const com::robotraconteur::geometry::Size2D& vs);
270
277ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Size ToSize(
278 const ::Eigen::Ref<const ::Eigen::Vector3d>& vs);
279
286ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Vector3d ToVector(const com::robotraconteur::geometry::Size& vs);
287
294ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Quaterniond ToQuaternion(const com::robotraconteur::geometry::Quaternion& q);
295
302ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Quaternion ToQuaternion(const ::Eigen::Quaterniond& q);
303
310ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Isometry3d ToIsometry(const com::robotraconteur::geometry::Transform& t);
311
318ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Transform ToTransform(const ::Eigen::Isometry3d& iso);
319
326ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Isometry3d ToIsometry(const com::robotraconteur::geometry::Pose& t);
327
334ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Pose ToPose(const ::Eigen::Isometry3d& iso);
335
342ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::SpatialVelocity ToSpatialVelocity(
343 const ::Eigen::Ref<const ::Eigen::Matrix<double, 6, 1> >& vs);
344
351ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Matrix<double, 6, 1> ToVector(
352 const com::robotraconteur::geometry::SpatialVelocity& vs);
353
361ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::SpatialAcceleration ToSpatialAcceleration(
362 const ::Eigen::Ref<const ::Eigen::Matrix<double, 6, 1> >& vs);
363
370ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Matrix<double, 6, 1> ToVector(
371 const com::robotraconteur::geometry::SpatialAcceleration& vs);
372
379ROBOTRACONTEUR_COMPANION_UTIL_API com::robotraconteur::geometry::Wrench ToWrench(
380 const ::Eigen::Ref<const ::Eigen::Matrix<double, 6, 1> >& vs);
381
388ROBOTRACONTEUR_COMPANION_UTIL_API ::Eigen::Matrix<double, 6, 1> ToVector(
389 const com::robotraconteur::geometry::Wrench& vs);
390
391} // namespace Eigen
392} // namespace Converters
393} // namespace Companion
394} // namespace RobotRaconteur
::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.