Code to let Gr20's BioRobotics2017 robot come to live.
Dependencies: FastPWM MODSERIAL QEI mbed
Diff: robot.h
- Revision:
- 2:df0c6af898ac
- Parent:
- 1:ff11ee1c6baa
- Child:
- 5:088917beb5e4
--- a/robot.h Sun Nov 12 12:05:22 2017 +0000 +++ b/robot.h Sun Nov 12 14:06:23 2017 +0000 @@ -21,10 +21,15 @@ /** * Robot + * + * Implementation can be found in main.cpp */ namespace robot { +// sample time +const double kSampleTime = 0.001; +// Robot states enum State { OFF, CALIBRATION, @@ -34,6 +39,7 @@ MANUAL }; +// Robot state description const char *StateNames[] = { "Off", "Calibration", @@ -43,26 +49,33 @@ "Manual" }; +// State changing void SwitchState(State new_state); void GoToNextState(); -State state = OFF; -const double kSampleTime = 0.001; - +/** + * Robot properties + */ const double kL1 = 0.30; const double kL2 = 0.38; const double kCalibAngleMotor1 = 140; -const double kCalibAngleMotor2 = 0; +const double kCalibAngleMotor2 = -3; - +/** + * Motors and controllers + */ Motor m1(M1_PWM, M1_DIR, M1_ENC_A, M1_ENC_B, GEAR_RATIO*COUNTS_PER_REV); Motor m2(M2_PWM, M2_DIR, M2_ENC_A, M2_ENC_B, GEAR_RATIO*COUNTS_PER_REV, true); -Controller c1(.200,.100,0.020,kSampleTime); -Controller c2(.200,.100,0.020,kSampleTime); +Controller c1(.500,.200,0.070,kSampleTime); +Controller c2(.400,.200,0.050,kSampleTime); +/** + * Robot state + */ +State state = OFF; bool is_calibrated = false; bool has_power(); @@ -71,14 +84,19 @@ double get_x(); double get_y(); +/** + * Forward and inverse kinematics + */ double ForwardKinematicsX(double theta_1, double theta_2); double ForwardKinematicsY(double theta_1, double theta_2); - double InverseKinematicsTheta(double x, double y, int i); +/** + * Robot actions + */ void Start(); void Stop(); void ControlLoop(); void SetCalibrationAngles(); -} \ No newline at end of file +}