-
Notifications
You must be signed in to change notification settings - Fork 9
/
Motion.h
60 lines (49 loc) · 2.37 KB
/
Motion.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
* Motion.h
* Copyright (c) 2022, ZHAW
* All rights reserved.
*/
#ifndef MOTION_H_
#define MOTION_H_
#include <cstdlib>
/**
* This class keeps the motion values <code>position</code> and <code>velocity</code>, and
* offers methods to increment these values towards a desired target position or velocity.
* <br/>
* To increment the current motion values, this class uses a simple 2nd order motion planner.
* This planner calculates the motion to the target position or velocity with the various motion
* phases, based on given limits for the profile velocity, acceleration and deceleration.
* <br/>
* Note that the trajectory is calculated every time the motion state is incremented.
* This allows to change the target position or velocity, as well as the limits for profile
* velocity, acceleration and deceleration at any time.
*/
class Motion {
public:
double position; /**< The position value of this motion, given in [m] or [rad]. */
float velocity; /**< The velocity value of this motion, given in [m/s] or [rad/s]. */
Motion();
Motion(double position, float velocity);
Motion(const Motion& motion);
virtual ~Motion();
void set(double position, float velocity);
void set(const Motion& motion);
void setPosition(double position);
double getPosition();
void setVelocity(float velocity);
float getVelocity();
void setProfileVelocity(float profileVelocity);
void setProfileAcceleration(float profileAcceleration);
void setProfileDeceleration(float profileDeceleration);
void setLimits(float profileVelocity, float profileAcceleration, float profileDeceleration);
float getTimeToPosition(double targetPosition);
void incrementToVelocity(float targetVelocity, float period);
void incrementToPosition(double targetPosition, float period);
private:
static const float DEFAULT_LIMIT; // default value for limits
static const float MINIMUM_LIMIT; // smallest value allowed for limits
float profileVelocity;
float profileAcceleration;
float profileDeceleration;
};
#endif /* MOTION_H_ */