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

Dependencies:   FastPWM MODSERIAL QEI mbed

Committer:
megrootens
Date:
Sun Nov 12 14:06:23 2017 +0000
Revision:
2:df0c6af898ac
Parent:
0:caa8ee3bd882
Child:
5:088917beb5e4
this works, only controller needs to be updated since I broke the moving average filtered one....;

Who changed what in which revision?

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