amiro-os / include / amiro / DistControl.h @ ff7ad65b
History | View | Annotate | Download (2.175 KB)
| 1 | 58fe0e0b | Thomas Schöpping | #ifndef AMIRO_MOTOR_DISTCONTROL_H_
|
|---|---|---|---|
| 2 | #define AMIRO_MOTOR_DISTCONTROL_H_
|
||
| 3 | |||
| 4 | #include <amiro/MotorIncrements.h> |
||
| 5 | #include <amiro/MotorControl.h> |
||
| 6 | #include <amiro/Constants.h> |
||
| 7 | #include <Types.h> |
||
| 8 | |||
| 9 | #include <chprintf.h> |
||
| 10 | |||
| 11 | namespace amiro {
|
||
| 12 | |||
| 13 | class DistControl : public chibios_rt::BaseStaticThread<256> {
|
||
| 14 | public:
|
||
| 15 | /**
|
||
| 16 | * Constructor
|
||
| 17 | *
|
||
| 18 | * @param mc object for retrieving the motors
|
||
| 19 | * @param mi object for retrieving the motor increments of the qei
|
||
| 20 | */
|
||
| 21 | DistControl(MotorControl* mc, MotorIncrements* mi); |
||
| 22 | |||
| 23 | /**
|
||
| 24 | * Get the current target distance in um.
|
||
| 25 | *
|
||
| 26 | * @return target distance in um
|
||
| 27 | */
|
||
| 28 | int getCurrentTargetDist(void); |
||
| 29 | |||
| 30 | /**
|
||
| 31 | * Get the current target angle in urad.
|
||
| 32 | *
|
||
| 33 | * @return target distance in urad
|
||
| 34 | */
|
||
| 35 | int getCurrentTargetAngle(void); |
||
| 36 | |||
| 37 | /**
|
||
| 38 | * Sets the target position.
|
||
| 39 | *
|
||
| 40 | * @param distance Distance to drive in um
|
||
| 41 | * @param angle Angle to turn in urad
|
||
| 42 | * @param time Given time to drive in ms
|
||
| 43 | */
|
||
| 44 | void setTargetPosition(int32_t distance, int32_t angle, uint16_t time);
|
||
| 45 | |||
| 46 | /**
|
||
| 47 | * Gives if the distance controller is active.
|
||
| 48 | *
|
||
| 49 | * @return true if active, false if inactive
|
||
| 50 | */
|
||
| 51 | bool isActive(void); |
||
| 52 | |||
| 53 | /**
|
||
| 54 | * Deactivates the controller.
|
||
| 55 | * The motor velocities won't be set in any way!
|
||
| 56 | */
|
||
| 57 | void deactivateController(void); |
||
| 58 | |||
| 59 | |||
| 60 | |||
| 61 | protected:
|
||
| 62 | virtual msg_t main(void);
|
||
| 63 | |||
| 64 | private:
|
||
| 65 | /**
|
||
| 66 | * Calculates the velocities by using the error distance and error angle.
|
||
| 67 | */
|
||
| 68 | void calcVelocities(void); |
||
| 69 | |||
| 70 | MotorControl* motorControl; |
||
| 71 | MotorIncrements* motorIncrements; |
||
| 72 | bool controllerActive, drivingForward, turningLeft, newVelocities;
|
||
| 73 | const uint32_t period;
|
||
| 74 | int32_t increment[2];
|
||
| 75 | float incrementDifference[2]; |
||
| 76 | float actualDistance[2]; // m |
||
| 77 | int32_t fullDistance[2]; // um |
||
| 78 | int32_t realDistance; // um
|
||
| 79 | int32_t realAngle; // urad
|
||
| 80 | int32_t targetDistance; // um
|
||
| 81 | int32_t targetAngle; // urad
|
||
| 82 | int32_t errorDistance; // um
|
||
| 83 | int32_t errorAngle; // urad
|
||
| 84 | uint32_t restTime; // us
|
||
| 85 | types::kinematic maxVelocity; |
||
| 86 | types::kinematic targetVelocity; |
||
| 87 | types::kinematic minVelocity; |
||
| 88 | }; |
||
| 89 | } |
||
| 90 | |||
| 91 | #endif /* AMIRO_MOTOR_DISTCONTROL_H_ */ |