handles.h
Go to the documentation of this file.
1 //=================================================================================================
2 // Copyright (c) 2013, Johannes Meyer, TU Darmstadt
3 // All rights reserved.
4 
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 // * Redistributions of source code must retain the above copyright
8 // notice, this list of conditions and the following disclaimer.
9 // * Redistributions in binary form must reproduce the above copyright
10 // notice, this list of conditions and the following disclaimer in the
11 // documentation and/or other materials provided with the distribution.
12 // * Neither the name of the Flight Systems and Automatic Control group,
13 // TU Darmstadt, nor the names of its contributors may be used to
14 // endorse or promote products derived from this software without
15 // specific prior written permission.
16 
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
21 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 //=================================================================================================
28 
29 #ifndef HECTOR_QUADROTOR_CONTROLLER_HANDLES_H
30 #define HECTOR_QUADROTOR_CONTROLLER_HANDLES_H
31 
32 #include <geometry_msgs/Pose.h>
33 #include <geometry_msgs/Twist.h>
34 #include <geometry_msgs/Wrench.h>
35 #include <sensor_msgs/Imu.h>
36 #include <hector_uav_msgs/MotorStatus.h>
37 #include <hector_uav_msgs/MotorCommand.h>
38 #include <hector_uav_msgs/AttitudeCommand.h>
39 #include <hector_uav_msgs/YawrateCommand.h>
40 #include <hector_uav_msgs/ThrustCommand.h>
41 
43 
44 class QuadrotorInterface;
45 
46 using geometry_msgs::Pose;
47 using geometry_msgs::Point;
48 using geometry_msgs::Quaternion;
49 using geometry_msgs::Twist;
50 using geometry_msgs::Vector3;
51 using geometry_msgs::Wrench;
52 using sensor_msgs::Imu;
53 using hector_uav_msgs::MotorStatus;
54 using hector_uav_msgs::MotorCommand;
55 using hector_uav_msgs::AttitudeCommand;
56 using hector_uav_msgs::YawrateCommand;
57 using hector_uav_msgs::ThrustCommand;
58 
59 template <class Derived, typename T>
60 class Handle_
61 {
62 public:
63  typedef T ValueType;
65 
66  Handle_(const std::string& name, const std::string& field = std::string()) : interface_(0), name_(name), field_(field), value_(0) {}
67  Handle_(QuadrotorInterface *interface, const std::string& name, const std::string& field = std::string()) : interface_(interface), name_(name), field_(field), value_(0) {}
68  Handle_(QuadrotorInterface *interface, const ValueType *source, const std::string& name, const std::string& field = std::string()) : interface_(interface), name_(name), field_(field) { *this = source; }
69  virtual ~Handle_() {}
70 
71  virtual const std::string& getName() const { return name_; }
72  virtual const std::string& getField() const { return field_; }
73 
74  virtual bool connected() const { return get(); }
75  virtual void reset() { value_ = 0; }
76 
77  Derived& operator=(const ValueType *source) { value_ = source; return static_cast<Derived &>(*this); }
78  const ValueType *get() const { return value_; }
79  const ValueType &operator*() const { return *value_; }
80 
81 protected:
83  const std::string name_;
84  const std::string field_;
85  const ValueType *value_;
86 };
87 
88 class PoseHandle : public Handle_<PoseHandle, Pose>
89 {
90 public:
91  using Base::operator=;
92 
93  PoseHandle() : Base("pose") {}
94  PoseHandle(QuadrotorInterface *interface) : Base(interface, "pose") {}
95  PoseHandle(QuadrotorInterface *interface, const Pose *pose) : Base(interface, pose, "pose") {}
96  virtual ~PoseHandle() {}
97 
98  const ValueType& pose() const { return *get(); }
99 
100  void getEulerRPY(double &roll, double &pitch, double &yaw) const;
101  double getYaw() const;
102  Vector3 toBody(const Vector3& nav) const;
103  Vector3 fromBody(const Vector3& nav) const;
104 };
106 
107 class TwistHandle : public Handle_<TwistHandle, Twist>
108 {
109 public:
110  using Base::operator=;
111 
112  TwistHandle() : Base("twist") {}
113  TwistHandle(QuadrotorInterface *interface) : Base(interface, "twist") {}
114  TwistHandle(QuadrotorInterface *interface, const Twist *twist) : Base(interface, twist, "twist") {}
115  virtual ~TwistHandle() {}
116 
117  const ValueType& twist() const { return *get(); }
118 };
120 
121 class AccelerationHandle : public Handle_<AccelerationHandle, Vector3>
122 {
123 public:
124  using Base::operator=;
125 
126  AccelerationHandle(QuadrotorInterface *interface, const Vector3 *acceleration) : Base(interface, acceleration, "acceleration") {}
127  virtual ~AccelerationHandle() {}
128 
129  const ValueType& acceleration() const { return *get(); }
130 };
132 
133 class StateHandle : public PoseHandle, public TwistHandle
134 {
135 public:
137  StateHandle(QuadrotorInterface *interface, const Pose *pose, const Twist *twist) : PoseHandle(interface, pose), TwistHandle(interface, twist) {}
138  virtual ~StateHandle() {}
139 
140  virtual bool connected() const { return PoseHandle::connected() && TwistHandle::connected(); }
141 };
143 
144 class ImuHandle : public Handle_<ImuHandle, Imu>
145 {
146 public:
147  using Base::operator=;
148 
149  ImuHandle() : Base("imu") {}
150  ImuHandle(QuadrotorInterface *interface, const Imu *imu) : Base(interface, imu, "imu") {}
151  virtual ~ImuHandle() {}
152 
153  const ValueType& imu() const { return *get(); }
154 };
156 
157 class MotorStatusHandle : public Handle_<MotorStatusHandle, MotorStatus>
158 {
159 public:
160  using Base::operator=;
161 
162  MotorStatusHandle() : Base("motor_status") {}
163  MotorStatusHandle(QuadrotorInterface *interface, const MotorStatus *motor_status) : Base(interface, motor_status, "motor_status") {}
164  virtual ~MotorStatusHandle() {}
165 
166  const ValueType& motorStatus() const { return *get(); }
167 };
169 
171 {
172 public:
173  CommandHandle() : interface_(0), new_value_(false) {}
174  CommandHandle(QuadrotorInterface *interface, const std::string& name, const std::string& field) : interface_(interface), name_(name), field_(field), new_value_(false) {}
175  virtual ~CommandHandle() {}
176 
177  virtual const std::string& getName() const { return name_; }
178  virtual const std::string& getField() const { return field_; }
179  virtual bool connected() const = 0;
180  virtual void reset() {}
181 
182  void *get() const { return 0; }
183 
184  bool enabled();
185  bool start();
186  void stop();
187  void disconnect();
188 
189  template <typename T> T* ownData(T* data) { my_.reset(data); return data; }
190 
191  template <typename Derived> bool connectFrom(const Derived& output) {
192  Derived *me = dynamic_cast<Derived *>(this);
193  if (!me) return false;
194  ROS_DEBUG("Connected output port '%s (%p)' to input port '%s (%p)'", output.getName().c_str(), &output, me->getName().c_str(), me);
195  return (*me = output.get()).connected();
196  }
197 
198  template <typename Derived> bool connectTo(Derived& input) const {
199  const Derived *me = dynamic_cast<const Derived *>(this);
200  if (!me) return false;
201  ROS_DEBUG("Connected output port '%s (%p)' to input port '%s (%p)'", me->getName().c_str(), me, input.getName().c_str(), &input);
202  return (input = me->get()).connected();
203  }
204 
205 private:
207  const std::string name_;
208  const std::string field_;
210 
211 protected:
212  mutable bool new_value_;
213  bool wasNew() const { bool old = new_value_; new_value_ = false; return old; }
214 };
216 
217 namespace internal {
218  template <class Derived> struct FieldAccessor {
219  static typename Derived::ValueType *get(void *) { return 0; }
220  };
221 }
222 
223 template <class Derived, typename T, class Parent = CommandHandle>
224 class CommandHandle_ : public Parent
225 {
226 public:
227  typedef T ValueType;
229 
230  CommandHandle_() : command_(0) {}
231  CommandHandle_(const Parent &other) : Parent(other), command_(0) {}
232  CommandHandle_(QuadrotorInterface *interface, const std::string& name, const std::string& field = std::string()) : Parent(interface, name, field), command_(0) {}
233  virtual ~CommandHandle_() {}
234 
235  virtual bool connected() const { return get(); }
236  virtual void reset() { command_ = 0; Parent::reset(); }
237 
238  using Parent::operator=;
239  Derived& operator=(ValueType *source) { command_ = source; return static_cast<Derived &>(*this); }
240  ValueType *get() const { return command_ ? command_ : internal::FieldAccessor<Derived>::get(Parent::get()); }
241  ValueType &operator*() const { return *command_; }
242 
243  ValueType& command() { return *get(); }
244  const ValueType& getCommand() const { this->new_value_ = false; return *get(); }
245  void setCommand(const ValueType& command) { this->new_value_ = true; *get() = command; }
246  bool getCommand(ValueType& command) const { command = *get(); return this->wasNew(); }
247 
248  bool update(ValueType& command) const {
249  if (!connected()) return false;
250  command = getCommand();
251  return true;
252  }
253 
254 protected:
255  ValueType *command_;
256 };
257 
258 class PoseCommandHandle : public CommandHandle_<PoseCommandHandle, Pose>
259 {
260 public:
261  using Base::operator=;
262 
264  PoseCommandHandle(QuadrotorInterface *interface, const std::string& name, const std::string& field = std::string()) : Base(interface, name, field) {}
265  PoseCommandHandle(Pose* command) { *this = command; }
266  virtual ~PoseCommandHandle() {}
267 };
269 
270 class HorizontalPositionCommandHandle : public CommandHandle_<HorizontalPositionCommandHandle, Point, PoseCommandHandle>
271 {
272 public:
273  using Base::operator=;
274 
276  HorizontalPositionCommandHandle(const PoseCommandHandle& other) : Base(other) {}
277  HorizontalPositionCommandHandle(QuadrotorInterface *interface, const std::string& name) : Base(interface, name, "position.xy") {}
278  HorizontalPositionCommandHandle(Point* command) { *this = command; }
280 
281  using Base::getCommand;
282  virtual bool getCommand(double &x, double &y) const {
283  x = get()->x;
284  y = get()->y;
285  return wasNew();
286  }
287 
288  using Base::setCommand;
289  virtual void setCommand(double x, double y)
290  {
291  this->new_value_ = true;
292  get()->x = x;
293  get()->y = y;
294  }
295 
296  using Base::update;
297  bool update(Pose& command) const {
298  if (!connected()) return false;
299  getCommand(command.position.x, command.position.y);
300  return true;
301  }
302 
303  void getError(const PoseHandle &pose, double &x, double &y) const;
304 };
306 
307 namespace internal {
309  static Point *get(Pose *pose) { return &(pose->position); }
310  };
311 }
312 
313 class HeightCommandHandle : public CommandHandle_<HeightCommandHandle, double, PoseCommandHandle>
314 {
315 public:
316  using Base::operator=;
317 
319  HeightCommandHandle(const PoseCommandHandle& other) : Base(other) {}
320  HeightCommandHandle(QuadrotorInterface *interface, const std::string& name) : Base(interface, name, "position.z") {}
321  HeightCommandHandle(double *command) { *this = command; }
322  virtual ~HeightCommandHandle() {}
323 
324  using Base::update;
325  bool update(Pose& command) const {
326  if (!connected()) return false;
327  command.position.z = getCommand();
328  return true;
329  }
330 
331  double getError(const PoseHandle &pose) const;
332 };
334 
335 namespace internal {
336  template <> struct FieldAccessor<HeightCommandHandle> {
337  static double *get(Pose *pose) { return &(pose->position.z); }
338  };
339 }
340 
341 class HeadingCommandHandle : public CommandHandle_<HeadingCommandHandle, Quaternion, PoseCommandHandle>
342 {
343 public:
344  using Base::operator=;
345 
347  HeadingCommandHandle(const PoseCommandHandle& other) : Base(other), scalar_(0) {}
348  HeadingCommandHandle(QuadrotorInterface *interface, const std::string& name) : Base(interface, name, "orientation.yaw"), scalar_(0) {}
349  HeadingCommandHandle(Quaternion *command) { *this = command; }
351 
352  using Base::getCommand;
353  double getCommand() const;
354 
355  using Base::setCommand;
356  void setCommand(double command);
357 
358  using Base::update;
359  bool update(Pose& command) const;
360 
361  double getError(const PoseHandle &pose) const;
362 
363 protected:
364  double *scalar_;
365 };
367 
368 namespace internal {
369  template <> struct FieldAccessor<HeadingCommandHandle> {
370  static Quaternion *get(Pose *pose) { return &(pose->orientation); }
371  };
372 }
373 
374 class TwistCommandHandle : public CommandHandle_<TwistCommandHandle, Twist>
375 {
376 public:
377 
378  using Base::operator=;
379 
381  TwistCommandHandle(QuadrotorInterface *interface, const std::string& name, const std::string& field = std::string()) : Base(interface, name, field) {}
382  TwistCommandHandle(Twist* command) { *this = command; }
383  virtual ~TwistCommandHandle() {}
384 };
386 
387 class HorizontalVelocityCommandHandle : public CommandHandle_<HorizontalVelocityCommandHandle, Vector3, TwistCommandHandle>
388 {
389 public:
390  using Base::operator=;
391 
394  HorizontalVelocityCommandHandle(QuadrotorInterface *interface, const std::string& name) : Base(interface, name, "linear.xy") {}
395  HorizontalVelocityCommandHandle(Vector3* command) { *this = command; }
397 
398  using Base::getCommand;
399  bool getCommand(double &x, double &y) const {
400  x = get()->x;
401  y = get()->y;
402  return true;
403  }
404 
405  using Base::setCommand;
406  void setCommand(double x, double y)
407  {
408  get()->x = x;
409  get()->y = y;
410  }
411 
412  using Base::update;
413  bool update(Twist& command) const {
414  if (!connected()) return false;
415  getCommand(command.linear.x, command.linear.y);
416  return true;
417  }
418 };
420 
421 namespace internal {
423  static Vector3 *get(Twist *twist) { return &(twist->linear); }
424  };
425 }
426 
427 class VerticalVelocityCommandHandle : public CommandHandle_<VerticalVelocityCommandHandle, double, TwistCommandHandle>
428 {
429 public:
430  using Base::operator=;
431 
433  VerticalVelocityCommandHandle(const TwistCommandHandle& other) : Base(other) {}
434  VerticalVelocityCommandHandle(QuadrotorInterface *interface, const std::string& name) : Base(interface, name, "linear.z") {}
435  VerticalVelocityCommandHandle(double* command) { *this = command; }
437 
438  using Base::update;
439  bool update(Twist& command) const {
440  if (!connected()) return false;
441  command.linear.z = *get();
442  return true;
443  }
444 };
446 
447 namespace internal {
449  static double *get(Twist *twist) { return &(twist->linear.z); }
450  };
451 }
452 
453 class AngularVelocityCommandHandle : public CommandHandle_<AngularVelocityCommandHandle, double, TwistCommandHandle>
454 {
455 public:
456  using Base::operator=;
457 
459  AngularVelocityCommandHandle(const TwistCommandHandle& other) : Base(other) {}
460  AngularVelocityCommandHandle(QuadrotorInterface *interface, const std::string& name) : Base(interface, name, "angular.z") {}
461  AngularVelocityCommandHandle(double* command) { *this = command; }
463 
464  using Base::update;
465  bool update(Twist& command) const {
466  if (!connected()) return false;
467  command.linear.z = *get();
468  return true;
469  }
470 };
472 
473 namespace internal {
475  static double *get(Twist *twist) { return &(twist->angular.z); }
476  };
477 }
478 
479 class WrenchCommandHandle : public CommandHandle_<WrenchCommandHandle, Wrench>
480 {
481 public:
482  using Base::operator=;
483 
485  WrenchCommandHandle(QuadrotorInterface *interface, const std::string& name) : Base(interface, name) {}
486  virtual ~WrenchCommandHandle() {}
487 };
489 
490 class MotorCommandHandle : public CommandHandle_<MotorCommandHandle, MotorCommand>
491 {
492 public:
493  using Base::operator=;
494 
496  MotorCommandHandle(QuadrotorInterface *interface, const std::string& name) : Base(interface, name) {}
497  virtual ~MotorCommandHandle() {}
498 };
500 
501 class AttitudeCommandHandle : public CommandHandle_<AttitudeCommandHandle, AttitudeCommand>
502 {
503 public:
504  using Base::operator=;
505 
507  AttitudeCommandHandle(QuadrotorInterface *interface, const std::string& name) : Base(interface, name) {}
509 };
511 
512 class YawrateCommandHandle : public CommandHandle_<YawrateCommandHandle, YawrateCommand>
513 {
514 public:
515  using Base::operator=;
516 
518  YawrateCommandHandle(QuadrotorInterface *interface, const std::string& name) : Base(interface, name) {}
520 };
522 
523 class ThrustCommandHandle : public CommandHandle_<ThrustCommandHandle, ThrustCommand>
524 {
525 public:
526  using Base::operator=;
527 
529  ThrustCommandHandle(QuadrotorInterface *interface, const std::string& name) : Base(interface, name) {}
530  virtual ~ThrustCommandHandle() {}
531 };
533 
534 } // namespace hector_quadrotor_controller
535 
536 #endif // HECTOR_QUADROTOR_CONTROLLER_HANDLES_H
AccelerationHandle(QuadrotorInterface *interface, const Vector3 *acceleration)
Definition: handles.h:126
virtual const std::string & getName() const
Definition: handles.h:71
boost::shared_ptr< HeightCommandHandle > HeightCommandHandlePtr
Definition: handles.h:333
virtual bool getCommand(double &x, double &y) const
Definition: handles.h:282
const ValueType & operator*() const
Definition: handles.h:79
ROSCPP_DECL void start()
QuadrotorInterface * interface_
Definition: handles.h:82
Handle_(QuadrotorInterface *interface, const std::string &name, const std::string &field=std::string())
Definition: handles.h:67
HorizontalVelocityCommandHandle(QuadrotorInterface *interface, const std::string &name)
Definition: handles.h:394
StateHandle(QuadrotorInterface *interface, const Pose *pose, const Twist *twist)
Definition: handles.h:137
VerticalVelocityCommandHandle(QuadrotorInterface *interface, const std::string &name)
Definition: handles.h:434
boost::shared_ptr< TwistHandle > TwistHandlePtr
Definition: handles.h:119
PoseHandle(QuadrotorInterface *interface, const Pose *pose)
Definition: handles.h:95
boost::shared_ptr< YawrateCommandHandle > YawrateCommandHandlePtr
Definition: handles.h:521
const ValueType & imu() const
Definition: handles.h:153
AngularVelocityCommandHandle(const TwistCommandHandle &other)
Definition: handles.h:459
const ValueType & pose() const
Definition: handles.h:98
WrenchCommandHandle(QuadrotorInterface *interface, const std::string &name)
Definition: handles.h:485
HeightCommandHandle(const PoseCommandHandle &other)
Definition: handles.h:319
boost::shared_ptr< ThrustCommandHandle > ThrustCommandHandlePtr
Definition: handles.h:532
Handle_(QuadrotorInterface *interface, const ValueType *source, const std::string &name, const std::string &field=std::string())
Definition: handles.h:68
const ValueType & twist() const
Definition: handles.h:117
boost::shared_ptr< CommandHandle > CommandHandlePtr
Definition: handles.h:215
CommandHandle(QuadrotorInterface *interface, const std::string &name, const std::string &field)
Definition: handles.h:174
boost::shared_ptr< AngularVelocityCommandHandle > AngularVelocityCommandHandlePtr
Definition: handles.h:471
HorizontalVelocityCommandHandle(const TwistCommandHandle &other)
Definition: handles.h:393
HeadingCommandHandle(const PoseCommandHandle &other)
Definition: handles.h:347
MotorCommandHandle(QuadrotorInterface *interface, const std::string &name)
Definition: handles.h:496
HeightCommandHandle(QuadrotorInterface *interface, const std::string &name)
Definition: handles.h:320
PoseHandle(QuadrotorInterface *interface)
Definition: handles.h:94
void update(const std::string &key, const XmlRpc::XmlRpcValue &v)
TwistHandle(QuadrotorInterface *interface)
Definition: handles.h:113
static Derived::ValueType * get(void *)
Definition: handles.h:219
virtual bool connected() const
Definition: handles.h:74
CommandHandle_< Derived, T, Parent > Base
Definition: handles.h:228
HeadingCommandHandle(QuadrotorInterface *interface, const std::string &name)
Definition: handles.h:348
virtual const std::string & getName() const
Definition: handles.h:177
HorizontalPositionCommandHandle(QuadrotorInterface *interface, const std::string &name)
Definition: handles.h:277
boost::shared_ptr< ImuHandle > ImuHandlePtr
Definition: handles.h:155
VerticalVelocityCommandHandle(const TwistCommandHandle &other)
Definition: handles.h:433
void setCommand(const ValueType &command)
Definition: handles.h:245
ROSLIB_DECL std::string command(const std::string &cmd)
const ValueType & getCommand() const
Definition: handles.h:244
ImuHandle(QuadrotorInterface *interface, const Imu *imu)
Definition: handles.h:150
virtual bool connected() const
Definition: handles.h:140
bool update(ValueType &command) const
Definition: handles.h:248
bool connectTo(Derived &input) const
Definition: handles.h:198
Handle_(const std::string &name, const std::string &field=std::string())
Definition: handles.h:66
Derived & operator=(ValueType *source)
Definition: handles.h:239
HorizontalPositionCommandHandle(const PoseCommandHandle &other)
Definition: handles.h:276
virtual const std::string & getField() const
Definition: handles.h:178
TwistHandle(QuadrotorInterface *interface, const Twist *twist)
Definition: handles.h:114
PoseCommandHandle(QuadrotorInterface *interface, const std::string &name, const std::string &field=std::string())
Definition: handles.h:264
bool getCommand(ValueType &command) const
Definition: handles.h:246
bool connectFrom(const Derived &output)
Definition: handles.h:191
Derived & operator=(const ValueType *source)
Definition: handles.h:77
CommandHandle_(QuadrotorInterface *interface, const std::string &name, const std::string &field=std::string())
Definition: handles.h:232
boost::shared_ptr< HeadingCommandHandle > HeadingCommandHandlePtr
Definition: handles.h:366
boost::shared_ptr< HorizontalVelocityCommandHandle > HorizontalVelocityCommandHandlePtr
Definition: handles.h:419
const ValueType & acceleration() const
Definition: handles.h:129
MotorStatusHandle(QuadrotorInterface *interface, const MotorStatus *motor_status)
Definition: handles.h:163
const ValueType & motorStatus() const
Definition: handles.h:166
boost::shared_ptr< HorizontalPositionCommandHandle > HorizontalPositionCommandHandlePtr
Definition: handles.h:305
ThrustCommandHandle(QuadrotorInterface *interface, const std::string &name)
Definition: handles.h:529
TwistCommandHandle(QuadrotorInterface *interface, const std::string &name, const std::string &field=std::string())
Definition: handles.h:381
virtual const std::string & getField() const
Definition: handles.h:72
AngularVelocityCommandHandle(QuadrotorInterface *interface, const std::string &name)
Definition: handles.h:460
boost::shared_ptr< AccelerationHandle > AccelerationHandlePtr
Definition: handles.h:131
boost::shared_ptr< PoseCommandHandle > PoseCommandHandlePtr
Definition: handles.h:268
boost::shared_ptr< void > my_
Definition: handles.h:209
boost::shared_ptr< MotorStatusHandle > MotorStatusHandlePtr
Definition: handles.h:168
boost::shared_ptr< PoseHandle > PoseHandlePtr
Definition: handles.h:105
boost::shared_ptr< WrenchCommandHandle > WrenchCommandHandlePtr
Definition: handles.h:488
Handle_< Derived, T > Base
Definition: handles.h:64
boost::shared_ptr< MotorCommandHandle > MotorCommandHandlePtr
Definition: handles.h:499
AttitudeCommandHandle(QuadrotorInterface *interface, const std::string &name)
Definition: handles.h:507
boost::shared_ptr< AttitudeCommandHandle > AttitudeCommandHandlePtr
Definition: handles.h:510
YawrateCommandHandle(QuadrotorInterface *interface, const std::string &name)
Definition: handles.h:518
boost::shared_ptr< VerticalVelocityCommandHandle > VerticalVelocityCommandHandlePtr
Definition: handles.h:445
#define ROS_DEBUG(...)
boost::shared_ptr< TwistCommandHandle > TwistCommandHandlePtr
Definition: handles.h:385


hector_quadrotor_controller
Author(s): Johannes Meyer
autogenerated on Sun Jul 10 2016 04:30:48