Pose.hpp
Go to the documentation of this file.
1 // Copyright (C) 2021 COGIP Robotics association <cogip35@gmail.com>
2 // This file is subject to the terms and conditions of the GNU Lesser
3 // General Public License v2.1. See the file LICENSE in the top level
4 // directory for more details.
5 
11 
12 #pragma once
13 
14 #include "cogip_defs/Coords.hpp"
15 #include "cogip_defs/Polar.hpp"
16 #include "PB_Pose.hpp"
17 #include "trigonometry.h"
18 
19 namespace cogip {
20 
21 namespace cogip_defs {
22 
24 class Pose : public Coords {
25 public:
28  double x=0.0,
29  double y=0.0,
30  double O=0.0
31  ) : Coords(x, y), O_(O) {};
32 
34  explicit Pose(const PB_Pose &pose) : Coords(pose.get_x(), pose.get_y()), O_(pose.get_O()) {};
35 
37  Coords coords(void) const { return Coords(x_, y_); };
38 
40  void set_coords(
41  const Coords &coords
42  ) { x_ = coords.x(); y_ = coords.y();};
43 
45  double O(void) const { return O_; };
46 
48  void set_O(
49  double O
50  ) { O_ = O; };
51 
55  const Pose other
56  ) const { return x_ == other.x_ && y_ == other.y_ && O_ == other.O_; };
57 
59  void pb_copy(
60  PB_Pose &pose
61  ) const {
62  pose.set_x(x_);
63  pose.set_y(y_);
64  pose.set_O(O_);
65  };
66 
67  Polar operator-(const Pose& p) {
68  double error_x = x_ - p.x();
69  double error_y = y_ - p.y();
70 
71  double error_O = limit_angle_rad(atan2(error_y, error_x) - DEG2RAD(p.O()));
72 
73  return Polar(
74  sqrt(square(error_x) + square(error_y)),
75  RAD2DEG(error_O)
76  );
77  };
78 
79 protected:
80  double O_;
81 };
82 
83 } // namespace cogip_defs
84 
85 } // namespace cogip
86 
cogip::cogip_defs::Polar
Polar coordinate.
Definition: Polar.hpp:21
cogip::cogip_defs::Pose::Pose
Pose(double x=0.0, double y=0.0, double O=0.0)
Constructor.
Definition: Pose.hpp:27
cogip::cogip_defs::Pose::operator==
bool operator==(const Pose other) const
Check if this pose is equal to another.
Definition: Pose.hpp:54
cogip::cogip_defs::Coords::y_
double y_
y-position
Definition: Coords.hpp:76
cogip::cogip_defs::Pose::Pose
Pose(const PB_Pose &pose)
Constructor from Protobuf class.
Definition: Pose.hpp:34
Polar.hpp
Polar class declaration.
cogip::cogip_defs::Coords::y
double y(void) const
Return Y coordinate.
Definition: Coords.hpp:36
Coords.hpp
Coords declaration.
cogip::cogip_defs::Pose::set_coords
void set_coords(const Coords &coords)
Set coordinates.
Definition: Pose.hpp:40
cogip
Differential drive controller.
Definition: Coords.hpp:16
cogip::cogip_defs::Pose::set_O
void set_O(double O)
Set 0-orientation.
Definition: Pose.hpp:48
cogip::cogip_defs::Pose
A robot position.
Definition: Pose.hpp:24
cogip::cogip_defs::Coords::x_
double x_
x-position
Definition: Coords.hpp:72
cogip::cogip_defs::Coords::Coords
Coords(double x=0.0, double y=0.0)
Constructor.
Definition: Coords.hpp:24
cogip::cogip_defs::Pose::O
double O(void) const
Return 0-orientation.
Definition: Pose.hpp:45
cogip::cogip_defs::Coords
Absolute coordinates along X and Y axis.
Definition: Coords.hpp:21
cogip::cogip_defs::Pose::coords
Coords coords(void) const
Return coordinates.
Definition: Pose.hpp:37
cogip::cogip_defs::Pose::pb_copy
void pb_copy(PB_Pose &pose) const
Copy data to Protobuf message.
Definition: Pose.hpp:59
cogip::cogip_defs::Pose::O_
double O_
0-orientation
Definition: Pose.hpp:77
cogip::cogip_defs::Coords::x
double x(void) const
Return X coordinate.
Definition: Coords.hpp:33