Conscience Core
CscSequenceMovements.h
Go to the documentation of this file.
1 #ifndef CscSequenceMovements_H_
2 #define CscSequenceMovements_H_
3 
4 #include "CscCommon.h"
5 #include "Axiomes/Csc3dTypes.h"
7 
8 using namespace conscience_utils::logging;
9 using namespace conscience_core::axiomes;
10 using std::min, std::max;
11 
15 enum class MovementType {
16  ROTATION = 0,
17  POINT = 1,
18  LINE = 2,
19  MULTI_LINE = 3,
20  ARC = 4
21 };
22 
29 enum class MovementStatesType {
30  CONTINU = 0,
31  LOOP_DISTANCE = 1,
32  LOOP_TIME = 2
33 };
34 
40  STATES_TYPE = 1 << 0,
41  ALIGNMENT = 1 << 1,
42  SPEED = 1 << 2
43 };
44 
49 };
50 
60 
61  MovementStatesParameters(MovementStatesType type, int firstStateId, int secondStateId, optional<double> loopFirstStateValue, optional<double> loopSecondStateValue)
62  : type(type),
63  firstStateId(firstStateId),
64  secondStateId(secondStateId),
65  loopFirstStateValue(loopFirstStateValue),
66  loopSecondStateValue(loopSecondStateValue) {}
67 };
68 
72  double positionError;
74 
75  MovementNavigationInformations(double translationSpeed, double rotationSpeed, double posError, double orientError)
76  : translationSpeedTarget(translationSpeed),
77  rotationSpeedTarget(rotationSpeed),
78  positionError(posError),
79  orientationError(orientError) {}
80 };
81 
85  optional<double> wheelSpacing; // Spacing between wheels in centimeters
86 
88  optional<double> translationSpeedMax = {},
89  optional<double> rotationSpeedMax = {},
90  optional<double> wheelSpacing = {})
91  : translationSpeedMaxInCmBySecond(translationSpeedMax),
92  rotationSpeedMaxInCmBySecond(rotationSpeedMax),
93  wheelSpacing(wheelSpacing) {}
94 };
95 
102  double currentYaw;
103 
105  CscPoint3d *currentPosition,
106  double currentYaw)
107  : currentPosition(currentPosition),
108  currentYaw(currentYaw) {}
110 };
111 
116 class CscMovement {
117 protected:
118  MovementType type; // Type of movement (rotation, line, etc)
119  optional<MovementStatesParameters> statesParameters; // State parameters (optional)
120  optional<EnslavementAlignementType> alignement; // Alignment type if needed (optional)
121  optional<double> speed; // Optional target speed
122  int movementDirection; // 1 (forward) or -1 (backward)
123  CscSequencePositionType positionType; // Coordinate type (XYZ, LNG_LAT)
124  bool requiertAlignement = false; // True if force alignment step is needed
125  optional<string> projection = {}; // Current map projection used if LNG_LAT positon type
126 
127 public:
128  CscMovement(optional<double> speed, int movementDirection, optional<MovementStatesParameters> statesParameters, std::optional<EnslavementAlignementType> alignement, CscSequencePositionType positionType);
129 
130  virtual ~CscMovement() {
131  };
132 
133  MovementType getType() const;
134  optional<EnslavementAlignementType> getAlignmentType() const;
135  optional<double> getSpeed() const;
136  int getMovementDirection() const;
137  CscSequencePositionType getPositionType() const;
138 
139  const optional<MovementStatesParameters> getStatesParameters() const;
140 };
141 
146 protected:
147  double angleTarget; // Target yaw angle
148  optional<double> startYaw = {}; // Initial yaw at start (for progression)
149 public:
150  CscMovementRotation(optional<double> speed, int movementDirection, optional<MovementStatesParameters> statesParameters, double angleTarget, std::optional<EnslavementAlignementType> alignement, CscSequencePositionType positionType);
151 
152  double getAngleTarget() const;
153 };
154 
158 class CscMovementLine : public CscMovement {
159 protected:
160  CscPoint3d *pointTarget = nullptr;
161  CscPoint3d *pointSource = nullptr;
162 
163 public:
164  CscMovementLine(optional<double> speed, int movementDirection, optional<MovementStatesParameters> statesParameters, std::optional<EnslavementAlignementType> alignement, CscPoint3d *pointTarget, CscPoint3d *pointSource, CscSequencePositionType positionType);
168  virtual ~CscMovementLine();
169 
170  CscPoint3d *getPointSource() const;
171  CscPoint3d *getPointTarget() const;
172 };
173 
178 protected:
179 public:
180  CscMovementPoint(optional<double> speed, int movementDirection, optional<MovementStatesParameters> statesParameters, std::optional<EnslavementAlignementType> alignement, CscPoint3d *pointTarget, CscSequencePositionType positionType);
184  virtual ~CscMovementPoint();
185 };
186 
191 protected:
192  const double MAX_DISTANCE_LOOK_HEAD_CENTIMETERS = 25;
193  const double MIN_DISTANCE_LOOK_HEAD_CENTIMETERS = 10;
194  const double MAX_DERIVE_ANGLE_IN_DEGREES = 15.0;
195 
196  vector<CscPoint3d *> *points; // List of path points
197 
198 public:
199  CscMovementMultiLine(optional<double> speed, int movementDirection, optional<MovementStatesParameters> statesParameters, std::optional<EnslavementAlignementType> alignement, vector<CscPoint3d *> *points, CscSequencePositionType positionType);
203  virtual ~CscMovementMultiLine();
204 
205  CscPoint3d *getPoint(int index) const;
206  vector<CscPoint3d *> *getPoints() const;
207  int countPoint() const;
208 };
209 
214 protected:
215  const double MINIMUM_RADIUS_FOR_SPEED_IN_CENTIMETERS = 30.0;
216  CscPoint3d *center; // Center of arc
217  double radius; // Arc radius in centimeters
218  int arcDirection; // Arc direction: 1 = counterclockwise (trigonometric), -1 = clockwise (anti-trigonometric)
219 
220 public:
221  CscMovementArc(optional<double> speed, int movementDirection, optional<MovementStatesParameters> statesParameters, std::optional<EnslavementAlignementType> alignement, CscPoint3d *pointTarget, CscPoint3d *pointSource, CscPoint3d *center, double radius, int arcDirection, CscSequencePositionType positionType);
226  virtual ~CscMovementArc();
227 
228  CscPoint3d *getPointCenter() const;
229  double getRadius() const;
230  int getArcDirection() const;
231 };
232 
236 class CscSequenceMovements : virtual public CscSequence {
237 public:
238  CscSequenceMovements(vector<CscMovement *> *movements);
240 
246 
247  int countMovements() const;
248 
249  CscMovement *getMovement(int index) const;
250 
251  void addMovement(CscMovement *movement);
252 
253  vector<CscMovement *> *getMovements() const;
254 
255  void setMovements(vector<CscMovement *> *movements);
256 
257 protected:
258  vector<CscMovement *> *movements;
259 };
260 
261 #endif
MovementType
MovementType
Definition: CscSequenceMovements.h:15
MovementStatesParameters::type
MovementStatesType type
How states alternate (continuous, loop by distance, or loop by time)
Definition: CscSequenceMovements.h:55
conscience_core::axiomes::CscPoint3d
The CscPoint3d class represents a point in three-dimensional space. It is primarily used to denote a ...
Definition: Csc3dTypes.h:24
CscMovementArc::arcDirection
int arcDirection
Definition: CscSequenceMovements.h:218
CurrentRobotInformations::currentPosition
CscPoint3d * currentPosition
Definition: CscSequenceMovements.h:101
MovementStatesParameters::loopFirstStateValue
optional< double > loopFirstStateValue
Distance or time value for first state (optional)
Definition: CscSequenceMovements.h:58
CurrentRobotInformations::CurrentRobotInformations
CurrentRobotInformations(CscPoint3d *currentPosition, double currentYaw)
Definition: CscSequenceMovements.h:104
ALIGNEMENT_OUT_OF_LINE
@ ALIGNEMENT_OUT_OF_LINE
Definition: CscSequenceMovements.h:47
RobotNavigationParameters::rotationSpeedMaxInCmBySecond
optional< double > rotationSpeedMaxInCmBySecond
Definition: CscSequenceMovements.h:84
CscMovementMultiLine::points
vector< CscPoint3d * > * points
Definition: CscSequenceMovements.h:196
RobotNavigationParameters::RobotNavigationParameters
RobotNavigationParameters(optional< double > translationSpeedMax={}, optional< double > rotationSpeedMax={}, optional< double > wheelSpacing={})
Definition: CscSequenceMovements.h:87
CscMovement::alignement
optional< EnslavementAlignementType > alignement
Definition: CscSequenceMovements.h:120
CscMovementArc
Definition: CscSequenceMovements.h:213
conscience_core::axiomes
Definition: Csc2dTypes.cpp:9
ALIGNEMENT_IN_OF_LINE
@ ALIGNEMENT_IN_OF_LINE
Definition: CscSequenceMovements.h:46
MovementStatesParameters::firstStateId
int firstStateId
start state ID
Definition: CscSequenceMovements.h:56
MovementType::LINE
@ LINE
MovementNavigationInformations::MovementNavigationInformations
MovementNavigationInformations(double translationSpeed, double rotationSpeed, double posError, double orientError)
Definition: CscSequenceMovements.h:75
MovementStatesType::CONTINU
@ CONTINU
CurrentRobotInformations::currentYaw
double currentYaw
Definition: CscSequenceMovements.h:102
RobotNavigationParameters
Definition: CscSequenceMovements.h:82
RobotNavigationParameters::wheelSpacing
optional< double > wheelSpacing
Definition: CscSequenceMovements.h:85
CscMovementPoint
Definition: CscSequenceMovements.h:177
CscMovementArc::center
CscPoint3d * center
Definition: CscSequenceMovements.h:216
ALIGNMENT
@ ALIGNMENT
Definition: CscSequenceMovements.h:41
MovementType::POINT
@ POINT
STATES_TYPE
@ STATES_TYPE
Definition: CscSequenceMovements.h:40
CscMovement::movementDirection
int movementDirection
Definition: CscSequenceMovements.h:122
CscSequencePositionType
CscSequencePositionType
Definition: CscSequencePositions.h:18
CscMovementArc::radius
double radius
Definition: CscSequenceMovements.h:217
MovementOptionalAttribut
MovementOptionalAttribut
Definition: CscSequenceMovements.h:39
MovementStatesParameters::secondStateId
int secondStateId
Alternate/end state ID.
Definition: CscSequenceMovements.h:57
CscSequenceMovements::movements
vector< CscMovement * > * movements
Definition: CscSequenceMovements.h:258
CscMovementRotation::angleTarget
double angleTarget
Definition: CscSequenceMovements.h:147
CurrentRobotInformations
Definition: CscSequenceMovements.h:100
MovementNavigationInformations::translationSpeedTarget
double translationSpeedTarget
Target translation speed in percent.
Definition: CscSequenceMovements.h:70
MovementType::ROTATION
@ ROTATION
conscience_utils::logging
Definition: conscience_log.cpp:20
MovementOptionalAttributType
uint8_t MovementOptionalAttributType
Definition: CscSequenceMovements.h:38
SPEED
@ SPEED
Definition: CscSequenceMovements.h:42
MovementNavigationInformations::orientationError
double orientationError
Error in orientation (yaw) in degrees.
Definition: CscSequenceMovements.h:73
jwt::alphabet::index
uint32_t index(const std::array< char, 64 > &alphabet, char symbol)
Definition: base.h:91
RobotNavigationParameters::translationSpeedMaxInCmBySecond
optional< double > translationSpeedMaxInCmBySecond
Definition: CscSequenceMovements.h:83
CscCommon.h
MovementStatesType
MovementStatesType
Definition: CscSequenceMovements.h:29
MovementStatesType::LOOP_DISTANCE
@ LOOP_DISTANCE
MovementNavigationInformations
Definition: CscSequenceMovements.h:69
CscMovement
Definition: CscSequenceMovements.h:116
jwt::json::type
type
Generic JSON types used in JWTs.
Definition: jwt.h:1794
Csc3dTypes.h
MovementNavigationInformations::rotationSpeedTarget
double rotationSpeedTarget
Target rotation speed in percent.
Definition: CscSequenceMovements.h:71
CscMovement::type
MovementType type
Definition: CscSequenceMovements.h:118
MovementType::ARC
@ ARC
CscSequencePositions.h
conscience_core::bridging::commands::environment_objects::optional< double >
const ptr< CscObjectModel > const string const CscPoint3d const CscPoint3d optional< double >
Definition: environmentObjectsCommands.h:367
MovementType::MULTI_LINE
@ MULTI_LINE
MovementStatesType::LOOP_TIME
@ LOOP_TIME
CscMovementRotation
Definition: CscSequenceMovements.h:145
CscMovement::speed
optional< double > speed
Definition: CscSequenceMovements.h:121
CscMovement::~CscMovement
virtual ~CscMovement()
Definition: CscSequenceMovements.h:130
CscMovementMultiLine
Definition: CscSequenceMovements.h:190
conscience_core::bridging::commands::environment_objects::optional< string >
const ptr< CscObjectModel > const string const CscPoint3d const CscPoint3d optional< string >
Definition: environmentObjectsCommands.h:373
CscSequenceMovements
Definition: CscSequenceMovements.h:236
CscMovement::positionType
CscSequencePositionType positionType
Definition: CscSequenceMovements.h:123
MovementStatesParameters::MovementStatesParameters
MovementStatesParameters(MovementStatesType type, int firstStateId, int secondStateId, optional< double > loopFirstStateValue, optional< double > loopSecondStateValue)
Definition: CscSequenceMovements.h:61
MovementNavigationInformations::positionError
double positionError
Error in position in centimeters.
Definition: CscSequenceMovements.h:72
MovementStatesParameters::loopSecondStateValue
optional< double > loopSecondStateValue
Distance or time value for second state (optional)
Definition: CscSequenceMovements.h:59
CscMovementLine
Definition: CscSequenceMovements.h:158
CscMovement::statesParameters
optional< MovementStatesParameters > statesParameters
Definition: CscSequenceMovements.h:119
CscSequence
Definition: CscSequence.h:51
EnslavementAlignementType
EnslavementAlignementType
Definition: CscSequenceMovements.h:45
NO_ALIGNMENT
@ NO_ALIGNMENT
Definition: CscSequenceMovements.h:48
MovementStatesParameters
Definition: CscSequenceMovements.h:54