dynamic_graph_manager
dg_to_ros.hh
Go to the documentation of this file.
1 
9 #ifndef DYNAMIC_GRAPH_ROS_DG_TO_ROS_HH
10 #define DYNAMIC_GRAPH_ROS_DG_TO_ROS_HH
11 #include <utility>
12 #include <vector>
13 
14 #include <boost/format.hpp>
15 
16 #include <std_msgs/Float64.h>
17 #include <std_msgs/UInt32.h>
18 #include "dynamic_graph_manager/Matrix.h"
19 #include "dynamic_graph_manager/Vector.h"
20 
21 #include "geometry_msgs/Transform.h"
22 #include "geometry_msgs/TransformStamped.h"
23 #include "geometry_msgs/Twist.h"
24 #include "geometry_msgs/TwistStamped.h"
25 #include "geometry_msgs/Vector3Stamped.h"
26 
27 #include <dynamic-graph/linear-algebra.h>
28 #include <dynamic-graph/signal-ptr.h>
29 #include <dynamic-graph/signal-time-dependent.h>
30 
32 
33 #define MAKE_SIGNAL_STRING(NAME, IS_INPUT, OUTPUT_TYPE, SIGNAL_NAME) \
34  makeSignalString( \
35  typeid(*this).name(), NAME, IS_INPUT, OUTPUT_TYPE, SIGNAL_NAME)
36 
37 namespace dynamic_graph
38 {
39 typedef dynamicgraph::Vector Vector;
40 typedef dynamicgraph::Matrix Matrix;
41 
47 namespace specific
48 {
49 class Vector3
50 {
51 };
52 class Twist
53 {
54 };
55 } // end of namespace specific.
56 
63 template <typename SotType>
64 class DgToRos;
65 
66 template <>
67 struct DgToRos<double>
68 {
69  typedef double dg_t;
70  typedef std_msgs::Float64 ros_t;
71  typedef std_msgs::Float64ConstPtr ros_const_ptr_t;
72  typedef dynamicgraph::Signal<dg_t, int> signal_t;
73  typedef dynamicgraph::SignalPtr<dg_t, int> signalIn_t;
74  typedef boost::function<dg_t&(dg_t&, int)> callback_t;
75 
76  static const char* signalTypeName;
77 
78  template <typename S>
79  static void setDefault(S& s)
80  {
81  s.setConstant(0.);
82  }
83 
84  static void setDefault(dg_t& s)
85  {
86  s = 0.;
87  }
88 };
89 
90 template <>
91 struct DgToRos<unsigned int>
92 {
93  typedef unsigned int dg_t;
94  typedef std_msgs::UInt32 ros_t;
95  typedef std_msgs::UInt32ConstPtr ros_const_ptr_t;
96  typedef dynamicgraph::Signal<dg_t, int> signal_t;
97  typedef dynamicgraph::SignalPtr<dg_t, int> signalIn_t;
98  typedef boost::function<dg_t&(dg_t&, int)> callback_t;
99 
100  static const char* signalTypeName;
101 
102  template <typename S>
103  static void setDefault(S& s)
104  {
105  s.setConstant(0);
106  }
107 
108  static void setDefault(dg_t& s)
109  {
110  s = 0;
111  }
112 };
113 
114 template <>
115 struct DgToRos<Matrix>
116 {
117  typedef Matrix dg_t;
118  typedef dynamic_graph_manager::Matrix ros_t;
119  typedef dynamic_graph_manager::MatrixConstPtr ros_const_ptr_t;
120  typedef dynamicgraph::SignalTimeDependent<dg_t, int> signal_t;
121  typedef dynamicgraph::SignalPtr<dg_t, int> signalIn_t;
122  typedef boost::function<dg_t&(dg_t&, int)> callback_t;
123 
124  static const char* signalTypeName;
125 
126  template <typename S>
127  static void setDefault(S& s)
128  {
129  Matrix m;
130  m.resize(0, 0);
131  s.setConstant(m);
132  }
133 
134  static void setDefault(dg_t& s)
135  {
136  s.resize(0, 0);
137  }
138 };
139 
140 template <>
141 struct DgToRos<Vector>
142 {
143  typedef Vector dg_t;
144  typedef dynamic_graph_manager::Vector ros_t;
145  typedef dynamic_graph_manager::VectorConstPtr ros_const_ptr_t;
146  typedef dynamicgraph::SignalTimeDependent<dg_t, int> signal_t;
147  typedef dynamicgraph::SignalPtr<dg_t, int> signalIn_t;
148  typedef boost::function<dg_t&(dg_t&, int)> callback_t;
149 
150  static const char* signalTypeName;
151 
152  template <typename S>
153  static void setDefault(S& s)
154  {
155  Vector v;
156  v.resize(0);
157  s.setConstant(v);
158  }
159 
160  static void setDefault(dg_t& s)
161  {
162  s.resize(0, 0);
163  }
164 };
165 
166 template <>
167 struct DgToRos<specific::Vector3>
168 {
169  typedef Vector dg_t;
170  typedef geometry_msgs::Vector3 ros_t;
171  typedef geometry_msgs::Vector3ConstPtr ros_const_ptr_t;
172  typedef dynamicgraph::SignalTimeDependent<dg_t, int> signal_t;
173  typedef dynamicgraph::SignalPtr<dg_t, int> signalIn_t;
174  typedef boost::function<dg_t&(dg_t&, int)> callback_t;
175 
176  static const char* signalTypeName;
177 
178  template <typename S>
179  static void setDefault(S& s)
180  {
181  Vector v(Vector::Zero(3));
182  s.setConstant(v);
183  }
184 
185  static void setDefault(dg_t& s)
186  {
187  s = Vector::Zero(3);
188  }
189 };
190 
191 template <>
192 struct DgToRos<MatrixHomogeneous>
193 {
194  typedef MatrixHomogeneous dg_t;
195  typedef geometry_msgs::Transform ros_t;
196  typedef geometry_msgs::TransformConstPtr ros_const_ptr_t;
197  typedef dynamicgraph::SignalTimeDependent<dg_t, int> signal_t;
198  typedef dynamicgraph::SignalPtr<dg_t, int> signalIn_t;
199  typedef boost::function<dg_t&(dg_t&, int)> callback_t;
200 
201  static const char* signalTypeName;
202 
203  template <typename S>
204  static void setDefault(S& s)
205  {
206  MatrixHomogeneous m;
207  s.setConstant(m);
208  }
209 
210  static void setDefault(dg_t& s)
211  {
212  s.setIdentity();
213  }
214 };
215 
216 template <>
217 struct DgToRos<specific::Twist>
218 {
219  typedef Vector dg_t;
220  typedef geometry_msgs::Twist ros_t;
221  typedef geometry_msgs::TwistConstPtr ros_const_ptr_t;
222  typedef dynamicgraph::SignalTimeDependent<dg_t, int> signal_t;
223  typedef dynamicgraph::SignalPtr<dg_t, int> signalIn_t;
224  typedef boost::function<dg_t&(dg_t&, int)> callback_t;
225 
226  static const char* signalTypeName;
227 
228  template <typename S>
229  static void setDefault(S& s)
230  {
231  Vector v(6);
232  v.setZero();
233  s.setConstant(v);
234  }
235 
236  static void setDefault(dg_t& s)
237  {
238  s = Vector::Zero(6);
239  }
240 };
241 
242 // Stamped vector3
243 template <>
244 struct DgToRos<std::pair<specific::Vector3, Vector> >
245 {
246  typedef Vector dg_t;
247  typedef geometry_msgs::Vector3Stamped ros_t;
248  typedef geometry_msgs::Vector3StampedConstPtr ros_const_ptr_t;
249  typedef dynamicgraph::SignalTimeDependent<dg_t, int> signal_t;
250  typedef dynamicgraph::SignalPtr<dg_t, int> signalIn_t;
251  typedef boost::function<dg_t&(dg_t&, int)> callback_t;
252 
253  static const char* signalTypeName;
254 
255  template <typename S>
256  static void setDefault(S& s)
257  {
259  }
260 };
261 
262 // Stamped transformation
263 template <>
264 struct DgToRos<std::pair<MatrixHomogeneous, Vector> >
265 {
266  typedef MatrixHomogeneous dg_t;
267  typedef geometry_msgs::TransformStamped ros_t;
268  typedef geometry_msgs::TransformStampedConstPtr ros_const_ptr_t;
269  typedef dynamicgraph::SignalTimeDependent<dg_t, int> signal_t;
270  typedef dynamicgraph::SignalPtr<dg_t, int> signalIn_t;
271  typedef boost::function<dg_t&(dg_t&, int)> callback_t;
272 
273  static const char* signalTypeName;
274 
275  template <typename S>
276  static void setDefault(S& s)
277  {
279  }
280 };
281 
282 // Stamped twist
283 template <>
284 struct DgToRos<std::pair<specific::Twist, Vector> >
285 {
286  typedef Vector dg_t;
287  typedef geometry_msgs::TwistStamped ros_t;
288  typedef geometry_msgs::TwistStampedConstPtr ros_const_ptr_t;
289  typedef dynamicgraph::SignalTimeDependent<dg_t, int> signal_t;
290  typedef dynamicgraph::SignalPtr<dg_t, int> signalIn_t;
291  typedef boost::function<dg_t&(dg_t&, int)> callback_t;
292 
293  static const char* signalTypeName;
294 
295  template <typename S>
296  static void setDefault(S& s)
297  {
299  }
300 };
301 
302 inline std::string makeSignalString(const std::string& className,
303  const std::string& instanceName,
304  bool isInputSignal,
305  const std::string& signalType,
306  const std::string& signalName)
307 {
308  boost::format fmt("%s(%s)::%s(%s)::%s");
309  fmt % className % instanceName % (isInputSignal ? "input" : "output") %
310  signalType % signalName;
311  return fmt.str();
312 }
313 } // namespace dynamic_graph
314 
315 #endif
boost::function< void(int)> callback_t
Simple shortcut for code writing convenience.
Definition: ros_robot_state_publisher.hpp:43
Definition: dg_to_ros.hh:49
this is this package namespace in order to avoid naming conflict
Definition: device.hh:22
Definition: dg_to_ros.hh:52
DgToRos trait type.
Definition: dg_to_ros.hh:64