kdl_mqueue.cpp
Go to the documentation of this file.
4 #include <rtt/types/TransportPlugin.hpp>
6 #include <boost/serialization/vector.hpp>
7 #include <boost/serialization/array.hpp>
8 #include <kdl/frames.hpp>
9 #include <kdl/jacobian.hpp>
10 #include <kdl/framevel.hpp>
11 #include <kdl/jntarray.hpp>
12 #include <kdl/jntarrayvel.hpp>
13 #include <Eigen/Dense>
14 
15 using namespace std;
16 using namespace RTT::detail;
17 using namespace RTT;
18 using namespace RTT::mqueue;
19 using namespace RTT::types;
20 using namespace Eigen;
21 
22 // From Shmuel Levine : http://stackoverflow.com/questions/18382457/eigen-and-boostserialize
23 namespace boost{
24  namespace serialization{
25 
26  template< class Archive,
27  class S,
28  int Rows_,
29  int Cols_,
30  int Ops_,
31  int MaxRows_,
32  int MaxCols_>
33  inline void save(
34  Archive & ar,
35  const Eigen::Matrix<S, Rows_, Cols_, Ops_, MaxRows_, MaxCols_> & g,
36  const unsigned int version)
37  {
38  int rows = g.rows();
39  int cols = g.cols();
40 
41  ar & rows;
42  ar & cols;
43  ar & boost::serialization::make_array(g.data(), rows * cols);
44  }
45 
46  template< class Archive,
47  class S,
48  int Rows_,
49  int Cols_,
50  int Ops_,
51  int MaxRows_,
52  int MaxCols_>
53  inline void load(
54  Archive & ar,
55  Eigen::Matrix<S, Rows_, Cols_, Ops_, MaxRows_, MaxCols_> & g,
56  const unsigned int version)
57  {
58  int rows, cols;
59  ar & rows;
60  ar & cols;
61  g.resize(rows, cols);
62  ar & boost::serialization::make_array(g.data(), rows * cols);
63  }
64 
65  template< class Archive,
66  class S,
67  int Rows_,
68  int Cols_,
69  int Ops_,
70  int MaxRows_,
71  int MaxCols_>
72  inline void serialize(
73  Archive & ar,
74  Eigen::Matrix<S, Rows_, Cols_, Ops_, MaxRows_, MaxCols_> & g,
75  const unsigned int version)
76  {
77  split_free(ar, g, version);
78  }
79 
80 
81  } // namespace serialization
82 } // namespace boost
83 
84 namespace boost{
85  namespace serialization{
86  template<class Archive> inline void serialize(
87  Archive & ar,
88  KDL::Rotation& g,
89  const unsigned int version)
90  {
91  ar & make_array(g.data,9);
92  }
93  template<class Archive> inline void serialize(
94  Archive & ar,
95  KDL::Vector& g,
96  const unsigned int version)
97  {
98  ar & make_array(g.data,3);
99  }
100  template<class Archive> inline void serialize(
101  Archive & ar,
102  KDL::Twist& g,
103  const unsigned int version)
104  {
105  ar & make_array(g.rot.data,3);
106  ar & make_array(g.vel.data,3);
107  }
108  template<class Archive> inline void serialize(
109  Archive & ar,
110  KDL::Wrench& g,
111  const unsigned int version)
112  {
113  ar & make_array(g.force.data,3);
114  ar & make_array(g.torque.data,3);
115  }
116  template<class Archive> inline void serialize(
117  Archive & ar,
118  KDL::Frame& g,
119  const unsigned int version)
120  {
121  ar & make_array(g.p.data,3);
122  ar & make_array(g.M.data,9);
123  }
124  template<class Archive> inline void serialize(
125  Archive & ar,
126  KDL::Jacobian& g,
127  const unsigned int version)
128  {
129  serialize(ar,g.data,version);
130  }
131  template<class Archive> inline void serialize(
132  Archive & ar,
133  KDL::JntArray& g,
134  const unsigned int version)
135  {
136  serialize(ar,g.data,version);
137  }
138  template<class Archive> inline void serialize(
139  Archive & ar,
140  KDL::JntArrayVel& g,
141  const unsigned int version)
142  {
143  serialize(ar,g.q.data,version);
144  serialize(ar,g.qdot.data,version);
145  }
146 
147  }
148 }
149 namespace RTT {
150  namespace mqueue {
151  bool MQKDLPlugin::registerTransport(std::string name, TypeInfo* ti)
152  {
153  if ( name == "KDL.Vector" )
155  if ( name == "KDL.Rotation" )
157  if ( name == "KDL.Frame" )
159  if ( name == "KDL.Wrench" )
161  if ( name == "KDL.Twist" )
163  if ( name == "KDL.Jacobian" )
165  if ( name == "KDL.JntArray" )
167  if ( name == "KDL.JntArrayVel" )
169 
170  return false;
171  }
172 
173  std::string MQKDLPlugin::getTransportName() const {
174  return "mqueue";
175  }
176 
177  std::string MQKDLPlugin::getTypekitName() const {
178  return "KDL";
179  }
180  std::string MQKDLPlugin::getName() const {
181  return "kdl-mqueue-types";
182  }
183  }
184 }
185 
187 
#define ORO_TYPEKIT_PLUGIN(TYPEKIT)
Vector vel
Vector torque
Rotation M
EIGEN_MAKE_ALIGNED_OPERATOR_NEW Eigen::Matrix< double, 6, Eigen::Dynamic > data
Vector rot
double data[3]
Eigen::VectorXd data
void load(Archive &ar, Eigen::Matrix< S, Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > &g, const unsigned int version)
Definition: kdl_mqueue.cpp:53
bool addProtocol(int protocol_id, TypeTransporter *tt)
void save(Archive &ar, const Eigen::Matrix< S, Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > &g, const unsigned int version)
Definition: kdl_mqueue.cpp:33
Vector force
void serialize(Archive &ar, KDL::JntArrayVel &g, const unsigned int version)
Definition: kdl_mqueue.cpp:138
#define ORO_MQUEUE_PROTOCOL_ID
double data[9]


kdl_typekit
Author(s): Steven Bellens, Ruben Smits
autogenerated on Wed Jul 3 2019 19:39:45