Code to let Gr20's BioRobotics2017 robot come to live.
Dependencies: FastPWM MODSERIAL QEI mbed
ref.h@7:b9a209f889f5, 2017-11-13 (annotated)
- Committer:
- megrootens
- Date:
- Mon Nov 13 10:39:55 2017 +0000
- Revision:
- 7:b9a209f889f5
- Parent:
- 5:088917beb5e4
- Child:
- 8:383a0fb48121
Moved implementation to separate .cpp files, by using static const variables for constants in namespaces and extern declarations for non-const vars.; Code compiles & runs on a board. **Not yet tested on the actual robot!**
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
megrootens | 5:088917beb5e4 | 1 | #ifndef _REF_H_ |
megrootens | 5:088917beb5e4 | 2 | #define _REF_H_ |
megrootens | 7:b9a209f889f5 | 3 | |
megrootens | 7:b9a209f889f5 | 4 | #include "robot.h" |
megrootens | 7:b9a209f889f5 | 5 | |
megrootens | 0:caa8ee3bd882 | 6 | /** |
megrootens | 0:caa8ee3bd882 | 7 | * Reference signals |
megrootens | 2:df0c6af898ac | 8 | * __note that currently no safety limits are implemented__ |
megrootens | 2:df0c6af898ac | 9 | * simply use the min/max x&y values as a check |
megrootens | 0:caa8ee3bd882 | 10 | */ |
megrootens | 0:caa8ee3bd882 | 11 | namespace ref |
megrootens | 0:caa8ee3bd882 | 12 | { |
megrootens | 2:df0c6af898ac | 13 | // Sample time for reference signals |
megrootens | 7:b9a209f889f5 | 14 | static const double kSampleTime = 0.01; |
megrootens | 2:df0c6af898ac | 15 | |
megrootens | 2:df0c6af898ac | 16 | /** |
megrootens | 2:df0c6af898ac | 17 | * Allowed range of motion and linear speed |
megrootens | 2:df0c6af898ac | 18 | */ |
megrootens | 7:b9a209f889f5 | 19 | static const double kMinX = 0.280; // [m] |
megrootens | 7:b9a209f889f5 | 20 | static const double kMaxX = 0.560; // [m] |
megrootens | 2:df0c6af898ac | 21 | |
megrootens | 7:b9a209f889f5 | 22 | static const double kMinY = -0.140; // [m] |
megrootens | 7:b9a209f889f5 | 23 | static const double kMaxY = 0.170; // [m] |
megrootens | 0:caa8ee3bd882 | 24 | |
megrootens | 7:b9a209f889f5 | 25 | static const double kMaxSpeed = 0.05; // [m/s] |
megrootens | 7:b9a209f889f5 | 26 | static const double kMaxStep = kMaxSpeed*kSampleTime; // [m] |
megrootens | 0:caa8ee3bd882 | 27 | |
megrootens | 2:df0c6af898ac | 28 | /** |
megrootens | 2:df0c6af898ac | 29 | * Calibration motion; |
megrootens | 2:df0c6af898ac | 30 | */ |
megrootens | 7:b9a209f889f5 | 31 | static const double kCalibrationOmega = 20; // [deg/sec] |
megrootens | 7:b9a209f889f5 | 32 | static const double kCalibrationError = 1; // [deg] |
megrootens | 7:b9a209f889f5 | 33 | static const double kCalibrationOmegaStep = kCalibrationOmega*kSampleTime; // [deg] |
megrootens | 0:caa8ee3bd882 | 34 | |
megrootens | 2:df0c6af898ac | 35 | |
megrootens | 2:df0c6af898ac | 36 | /** |
megrootens | 2:df0c6af898ac | 37 | * Home angles |
megrootens | 2:df0c6af898ac | 38 | */ |
megrootens | 7:b9a209f889f5 | 39 | static const double kOriginTheta1 = robot::InverseKinematicsTheta(kMinX,kMinY,1);//[deg] |
megrootens | 7:b9a209f889f5 | 40 | static const double kOriginTheta2 = robot::InverseKinematicsTheta(kMinX,kMinY,2); |
megrootens | 7:b9a209f889f5 | 41 | |
megrootens | 0:caa8ee3bd882 | 42 | |
megrootens | 2:df0c6af898ac | 43 | /** |
megrootens | 2:df0c6af898ac | 44 | * Demo coordinates for linear movement between points |
megrootens | 2:df0c6af898ac | 45 | */ |
megrootens | 7:b9a209f889f5 | 46 | extern int i_demo_coord; |
megrootens | 7:b9a209f889f5 | 47 | static const int kNumDemoCoords = 9; |
megrootens | 7:b9a209f889f5 | 48 | static const double kDemoCoords[2][kNumDemoCoords] { |
megrootens | 0:caa8ee3bd882 | 49 | {kMinX, kMaxX, kMaxX, kMinX, kMinX, kMaxX, kMaxX, kMinX, kMinX}, |
megrootens | 0:caa8ee3bd882 | 50 | {kMinY, kMinY, kMaxY, kMaxY, kMinY, kMaxY, kMinY, kMaxY, kMaxY} |
megrootens | 2:df0c6af898ac | 51 | }; |
megrootens | 0:caa8ee3bd882 | 52 | |
megrootens | 2:df0c6af898ac | 53 | /** |
megrootens | 2:df0c6af898ac | 54 | * Current reference signal; motor angles and (x,y) through forward kinematics |
megrootens | 2:df0c6af898ac | 55 | */ |
megrootens | 7:b9a209f889f5 | 56 | extern double theta_1; |
megrootens | 7:b9a209f889f5 | 57 | extern double theta_2; |
megrootens | 0:caa8ee3bd882 | 58 | |
megrootens | 0:caa8ee3bd882 | 59 | double get_ref_x(); |
megrootens | 0:caa8ee3bd882 | 60 | double get_ref_y(); |
megrootens | 0:caa8ee3bd882 | 61 | |
megrootens | 0:caa8ee3bd882 | 62 | void SetPositionAsReference(); |
megrootens | 0:caa8ee3bd882 | 63 | |
megrootens | 2:df0c6af898ac | 64 | /** |
megrootens | 2:df0c6af898ac | 65 | * Reference signal generation functions |
megrootens | 2:df0c6af898ac | 66 | */ |
megrootens | 0:caa8ee3bd882 | 67 | void UpdateReference(); |
megrootens | 0:caa8ee3bd882 | 68 | |
megrootens | 0:caa8ee3bd882 | 69 | void CalibrationReference(); |
megrootens | 0:caa8ee3bd882 | 70 | void HomingReference(); |
megrootens | 0:caa8ee3bd882 | 71 | void DemoReference(); |
megrootens | 2:df0c6af898ac | 72 | } |
megrootens | 5:088917beb5e4 | 73 | |
megrootens | 5:088917beb5e4 | 74 | #endif |