Code to let Gr20's BioRobotics2017 robot come to live.

Dependencies:   FastPWM MODSERIAL QEI mbed

Committer:
megrootens
Date:
Mon Nov 13 09:11:42 2017 +0000
Revision:
5:088917beb5e4
Parent:
2:df0c6af898ac
Child:
7:b9a209f889f5
added include guards in header files

Who changed what in which revision?

UserRevisionLine numberNew contents of line
megrootens 5:088917beb5e4 1 #ifndef _REF_H_
megrootens 5:088917beb5e4 2 #define _REF_H_
megrootens 0:caa8ee3bd882 3 /**
megrootens 0:caa8ee3bd882 4 * Reference signals
megrootens 2:df0c6af898ac 5 * __note that currently no safety limits are implemented__
megrootens 2:df0c6af898ac 6 * simply use the min/max x&y values as a check
megrootens 2:df0c6af898ac 7 *
megrootens 2:df0c6af898ac 8 * Implementation can be found in main.cpp
megrootens 0:caa8ee3bd882 9 */
megrootens 0:caa8ee3bd882 10 namespace ref
megrootens 0:caa8ee3bd882 11 {
megrootens 2:df0c6af898ac 12 // Sample time for reference signals
megrootens 0:caa8ee3bd882 13 const double kSampleTime = 0.01;
megrootens 2:df0c6af898ac 14
megrootens 2:df0c6af898ac 15 /**
megrootens 2:df0c6af898ac 16 * Allowed range of motion and linear speed
megrootens 2:df0c6af898ac 17 */
megrootens 2:df0c6af898ac 18 const double kMinX = 0.280; // [m]
megrootens 2:df0c6af898ac 19 const double kMaxX = 0.560; // [m]
megrootens 2:df0c6af898ac 20
megrootens 2:df0c6af898ac 21 const double kMinY = -0.140; // [m]
megrootens 2:df0c6af898ac 22 const double kMaxY = 0.170; // [m]
megrootens 0:caa8ee3bd882 23
megrootens 2:df0c6af898ac 24 const double kMaxSpeed = 0.05; // [m/s]
megrootens 2:df0c6af898ac 25 const double kMaxStep = kMaxSpeed*kSampleTime; // [m]
megrootens 0:caa8ee3bd882 26
megrootens 2:df0c6af898ac 27 /**
megrootens 2:df0c6af898ac 28 * Calibration motion;
megrootens 2:df0c6af898ac 29 */
megrootens 2:df0c6af898ac 30 const double kCalibrationOmega = 20; // [deg/sec]
megrootens 2:df0c6af898ac 31 const double kCalibrationError = 1; // [deg]
megrootens 2:df0c6af898ac 32 const double kCalibrationOmegaStep = kCalibrationOmega*kSampleTime; // [deg]
megrootens 0:caa8ee3bd882 33
megrootens 2:df0c6af898ac 34
megrootens 2:df0c6af898ac 35 /**
megrootens 2:df0c6af898ac 36 * Home angles
megrootens 2:df0c6af898ac 37 */
megrootens 2:df0c6af898ac 38 const double kOriginTheta1 = robot::InverseKinematicsTheta(kMinX,kMinY,1);//[deg]
megrootens 0:caa8ee3bd882 39 const double kOriginTheta2 = robot::InverseKinematicsTheta(kMinX,kMinY,2);
megrootens 0:caa8ee3bd882 40
megrootens 2:df0c6af898ac 41 /**
megrootens 2:df0c6af898ac 42 * Demo coordinates for linear movement between points
megrootens 2:df0c6af898ac 43 */
megrootens 0:caa8ee3bd882 44 int i_demo_coord = 0;
megrootens 0:caa8ee3bd882 45 const int kNumDemoCoords = 9;
megrootens 0:caa8ee3bd882 46 const double kDemoCoords[2][kNumDemoCoords] {
megrootens 0:caa8ee3bd882 47 {kMinX, kMaxX, kMaxX, kMinX, kMinX, kMaxX, kMaxX, kMinX, kMinX},
megrootens 0:caa8ee3bd882 48 {kMinY, kMinY, kMaxY, kMaxY, kMinY, kMaxY, kMinY, kMaxY, kMaxY}
megrootens 2:df0c6af898ac 49 };
megrootens 0:caa8ee3bd882 50
megrootens 2:df0c6af898ac 51 /**
megrootens 2:df0c6af898ac 52 * Current reference signal; motor angles and (x,y) through forward kinematics
megrootens 2:df0c6af898ac 53 */
megrootens 0:caa8ee3bd882 54 double theta_1 = 0;
megrootens 0:caa8ee3bd882 55 double theta_2 = 0;
megrootens 0:caa8ee3bd882 56
megrootens 0:caa8ee3bd882 57 double get_ref_x();
megrootens 0:caa8ee3bd882 58 double get_ref_y();
megrootens 0:caa8ee3bd882 59
megrootens 0:caa8ee3bd882 60 void SetPositionAsReference();
megrootens 0:caa8ee3bd882 61
megrootens 2:df0c6af898ac 62 /**
megrootens 2:df0c6af898ac 63 * Reference signal generation functions
megrootens 2:df0c6af898ac 64 */
megrootens 0:caa8ee3bd882 65 void UpdateReference();
megrootens 0:caa8ee3bd882 66
megrootens 0:caa8ee3bd882 67 void CalibrationReference();
megrootens 0:caa8ee3bd882 68 void HomingReference();
megrootens 0:caa8ee3bd882 69 void DemoReference();
megrootens 2:df0c6af898ac 70 }
megrootens 5:088917beb5e4 71
megrootens 5:088917beb5e4 72 #endif