pose2d.h
Go to the documentation of this file.
1 #ifndef POSE2D_H
2 #define POSE2D_H
3 
4 #include <memory>
5 #include <opencv2/core/core.hpp>
6 #include <tuw_geometry/point2d.h>
7 namespace tuw
8 {
9 class Pose2D;
10 using Pose2DPtr = std::shared_ptr< Pose2D >;
11 using Pose2DConstPtr = std::shared_ptr< Pose2D const>;
12 
17 class Pose2D
18 {
19 protected:
21  double orientation_;
22  mutable double costheta_, sintheta_; // precomputed cos() & sin() of theta.
23  mutable bool cossin_uptodate_;
24 
29  void update_cached_cos_sin() const;
30 
31 public:
32  Pose2D();
33  Pose2D ( const Point2D &p, double orientation );
34  Pose2D ( const Pose2D &p );
35  Pose2D ( double x, double y, double orientation );
36  Pose2D ( const cv::Vec<double, 3> &s );
44  Pose2D &set ( double x, const double y, double phi ) ;
51  Pose2D &set ( const Point2D &position, const Point2D &point_ahead ) ;
52 
58  Pose2D &set ( const Pose2D &p ) ;
59 
64  const Point2D &position () const;
65 
70  Point2D &position ();
71 
77  const double &x () const;
78 
83  double &x ();
84 
89  const double &y () const;
90 
95  double &y ();
96 
101  const double &theta () const;
102 
107  double &theta ();
108 
113  void set_x ( double v );
114 
119  double get_x () const;
120 
125  void set_y ( double v );
126 
131  double get_y () const;
132 
137  void set_theta ( double v );
144  Point2D &transform_into_base ( const Point2D &src, Point2D &des ) const;
145 
152  Pose2D transform_into( const Pose2D &target ) const;
153 
158  double get_theta () const;
159 
164  void recompute_cached_cos_sin() const;
170  double theta_cos() const;
176  double theta_sin() const;
177 
182  Point2D point_ahead ( double d = 1. ) const;
183 
187  void normalizeOrientation ();
188 
193  Tf2D tf () const;
194 
199  cv::Vec<double, 3> state_vector () const;
200 
205  Pose2D inv () const;
206 
207 
214  Pose2D &operator += ( const cv::Vec<double, 3> &s );
215 
222  Pose2D &operator -= ( const cv::Vec<double, 3> &s ) ;
223 
224 
231  friend std::ostream &operator << ( std::ostream &os, const Pose2D &o )
232  {
233  os << "[" << o.x() << ", " << o.y() << ", " << o.theta() << "]";
234  return os;
235  }
236 
242  std::string str ( const char* format = "[%6.4lf, %6.4lf, %6.5lf]" ) const;
243 
249  bool equal ( const Pose2D& o, double tolerance ) const;
250 
251 
256  template <typename T>
257  void copyToROSPose ( T &des ) const
258  {
259  des.position.x = x();
260  des.position.y = y();
261  des.position.z = 0.;
262  EulerYawToQuaternion ( theta(), des.orientation );
263  }
264 };
265 
266 }
267 #endif //POSE2D_H
268 
std::shared_ptr< Pose2D > Pose2DPtr
Definition: pose2d.h:10
bool cossin_uptodate_
Definition: pose2d.h:23
Pose2D inv() const
Definition: pose2d.cpp:168
double sintheta_
Definition: pose2d.h:22
Pose2D transform_into(const Pose2D &target) const
Definition: pose2d.cpp:213
double costheta_
rotation in rad
Definition: pose2d.h:22
double get_y() const
Definition: pose2d.cpp:127
std::string str(const char *format="[%6.4lf, %6.4lf, %6.5lf]") const
Definition: pose2d.cpp:259
std::shared_ptr< Pose2D const > Pose2DConstPtr
Definition: pose2d.h:11
Point2D point_ahead(double d=1.) const
Definition: pose2d.cpp:54
Pose2D & operator-=(const cv::Vec< double, 3 > &s)
Definition: pose2d.cpp:202
const double & theta() const
Definition: pose2d.cpp:73
friend std::ostream & operator<<(std::ostream &os, const Pose2D &o)
Definition: pose2d.h:231
void set_y(double v)
Definition: pose2d.cpp:120
void set_x(double v)
Definition: pose2d.cpp:106
void copyToROSPose(T &des) const
Definition: pose2d.h:257
const Point2D & position() const
Definition: pose2d.cpp:47
void recompute_cached_cos_sin() const
Definition: pose2d.cpp:221
Definition: command.h:8
void normalizeOrientation()
Definition: pose2d.cpp:147
const double & x() const
Definition: pose2d.cpp:61
const double & y() const
Definition: pose2d.cpp:67
double get_x() const
Definition: pose2d.cpp:113
double theta_sin() const
Definition: pose2d.cpp:250
void set_theta(double v)
Definition: pose2d.cpp:134
void EulerYawToQuaternion(double yaw, Quaternion &q)
Definition: utils.h:102
Point2D & transform_into_base(const Point2D &src, Point2D &des) const
Definition: pose2d.cpp:178
cv::Matx< double, 3, 3 > Tf2D
Definition: utils.h:10
Point2D position_
Definition: pose2d.h:20
double theta_cos() const
Definition: pose2d.cpp:241
bool equal(const Pose2D &o, double tolerance) const
Definition: pose2d.cpp:271
double orientation_
position
Definition: pose2d.h:21
std::string format(const cv::Mat_< int8_t > &m)
Definition: utils.cpp:11
double get_theta() const
Definition: pose2d.cpp:141
cv::Vec< double, 3 > state_vector() const
Definition: pose2d.cpp:161
Tf2D tf() const
Definition: pose2d.cpp:153
void update_cached_cos_sin() const
Definition: pose2d.cpp:230
Pose2D & operator+=(const cv::Vec< double, 3 > &s)
Definition: pose2d.cpp:191


tuw_geometry
Author(s): Markus Bader
autogenerated on Mon Jun 10 2019 15:33:09