This program is for an autonomous robot for the competition at the Hochschule Luzern. http://cruisingcrepe.wordpress.com/ We are one of the 32 teams. http://cruisingcrepe.wordpress.com/ The postition control is based on this Documentation: Control of Wheeled Mobile Robots: An Experimental Overview from Alessandro De Luca, Giuseppe Oriolo, Marilena Vendittelli. For more information see here: http://www.dis.uniroma1.it/~labrob/pub/papers/Ramsete01.pdf

Dependencies:   mbed

Fork of autonomous Robot Android by Christian Burri

Committer:
chrigelburri
Date:
Sat Mar 02 09:39:34 2013 +0000
Revision:
1:6cd533a712c6
Parent:
0:31f7be68e52d
Child:
2:d8e1613dc38b
Pos Regler funktioniert getestet im leerlauf;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chrigelburri 0:31f7be68e52d 1 #ifndef _DEFINES_H_
chrigelburri 0:31f7be68e52d 2 #define _DEFINES_H_
chrigelburri 0:31f7be68e52d 3
chrigelburri 0:31f7be68e52d 4 #include "mbed.h"
chrigelburri 0:31f7be68e52d 5
chrigelburri 0:31f7be68e52d 6 //Physical dimensions.
chrigelburri 0:31f7be68e52d 7 #define PI 3.141592654f
chrigelburri 0:31f7be68e52d 8
chrigelburri 0:31f7be68e52d 9 // Motor #339282 EC 45 flat 30W and GEAR
chrigelburri 0:31f7be68e52d 10 #define POLE_PAIRS 8u // 8
chrigelburri 0:31f7be68e52d 11 #define GEAR 1.0f // Gear on the motor
chrigelburri 0:31f7be68e52d 12 #define PULSES_PER_STEP 6u // 6 step for Hallsensor
chrigelburri 0:31f7be68e52d 13
chrigelburri 0:31f7be68e52d 14 // Physical Dimension of the car
chrigelburri 0:31f7be68e52d 15 #define WHEEL_RADIUS 0.042f // radius of the wheel, given in [m]
chrigelburri 1:6cd533a712c6 16 #define WHEEL_DISTANCE 0.18f // Distance of the wheel, given in [m]
chrigelburri 0:31f7be68e52d 17
chrigelburri 0:31f7be68e52d 18 // State Bits of the car
chrigelburri 0:31f7be68e52d 19 #define STATE_STOP 1u // Bit0 = stop pressed
chrigelburri 0:31f7be68e52d 20 #define STATE_UNDER 2u // Bit1 = Undervoltage battery
chrigelburri 0:31f7be68e52d 21 #define STATE_LEFT 4u // Bit2 = left ESCON in error state
chrigelburri 0:31f7be68e52d 22 #define STATE_RIGHT 8u // Bit3 = right ESCON in error state
chrigelburri 0:31f7be68e52d 23
chrigelburri 0:31f7be68e52d 24 // ESCON Dimenstion
chrigelburri 0:31f7be68e52d 25 #define ESCON_SET_FACTOR 100.0f // Speed Factor how set in the ESCON
chrigelburri 0:31f7be68e52d 26 #define ESCON_GET_FACTOR 100.0f // Speed Factor how get in the ESCON
chrigelburri 0:31f7be68e52d 27
chrigelburri 0:31f7be68e52d 28 // Start Defintition
chrigelburri 0:31f7be68e52d 29 #define START_X_OFFSET -0.8f // Sets the start X-point [m]
chrigelburri 0:31f7be68e52d 30 #define START_Y_OFFSET 0.8f // Sets the start Y-point [m]
chrigelburri 0:31f7be68e52d 31
chrigelburri 0:31f7be68e52d 32 // Maximum Aceeleration
chrigelburri 0:31f7be68e52d 33 #define ACCELERATION 0.25f // maximum translational acceleration, given in [m/s2]
chrigelburri 1:6cd533a712c6 34 #define THETA_ACCELERATION 1.0f // maximum rotational acceleration, given in [rad/s2]
chrigelburri 1:6cd533a712c6 35
chrigelburri 1:6cd533a712c6 36 // Gains of the position controller
chrigelburri 1:6cd533a712c6 37 #define GAIN 0.2f
chrigelburri 1:6cd533a712c6 38 #define K1 1.0f * GAIN
chrigelburri 1:6cd533a712c6 39 #define K2 3.0f * GAIN
chrigelburri 1:6cd533a712c6 40 #define K3 2.0f * GAIN
chrigelburri 1:6cd533a712c6 41
chrigelburri 1:6cd533a712c6 42 #define MIN_DISTANCE_ERROR 0.1 // min. Distance to switch the position controller off. Because when Distance Error goes to zero the ATAN2 is not define, given in [m]
chrigelburri 0:31f7be68e52d 43
chrigelburri 0:31f7be68e52d 44 // LiPo Batterie
chrigelburri 0:31f7be68e52d 45 #define BAT_MULTIPLICATOR 21.633333333f // R2 / (R1 + R2) = 0.153 R2= 10k , R1 = 1.8k
chrigelburri 0:31f7be68e52d 46 // 1/0.153 = 6.555 ---> 3.3/1 * 6.555 = 21.6333333f
chrigelburri 0:31f7be68e52d 47 #define BAT_MIN 17.5f // minium operate voltage [V] Battery Type: 1SP1P LG-18650 -->
chrigelburri 0:31f7be68e52d 48 // nominal voltage 3.6V --> 5 batterys ==> 5 * 3.5V = 17.5V
chrigelburri 0:31f7be68e52d 49 // Frequenz for the Task
chrigelburri 0:31f7be68e52d 50 #define PERIOD_COMPASS 0.050f // 20Hz Rate for Compass HMC6352
chrigelburri 0:31f7be68e52d 51 #define PERIOD_ROBOTCONTROL 0.001f // 1kHz Rate for Robot Control
chrigelburri 0:31f7be68e52d 52 #define PERIOD_STATE 0.001f // 1kHz Rate for State Objekt
chrigelburri 0:31f7be68e52d 53 #define PERIOD_ANDROID 0.1f // 10Hz Rate for State Objekt
chrigelburri 0:31f7be68e52d 54
chrigelburri 0:31f7be68e52d 55
chrigelburri 0:31f7be68e52d 56 // Compass Maxima und Minima for the Filter
chrigelburri 0:31f7be68e52d 57 #define SET_MAXIMAS_MINIMAS true // For Set the maximas und minimas when false the object search the maximas minimas by your own
chrigelburri 0:31f7be68e52d 58 /*#define COMP_X_MAX 344.464996f // Maximum X-Range
chrigelburri 0:31f7be68e52d 59 #define COMP_Y_MAX 238.751282f // Maximum Y-Range
chrigelburri 0:31f7be68e52d 60 #define COMP_Z_MAX -266.899994f // Maximum Z-Range not used in this side
chrigelburri 0:31f7be68e52d 61 #define COMP_X_MIN -90.412109f // Minimum X-Range
chrigelburri 0:31f7be68e52d 62 #define COMP_Y_MIN -220.834808f // Minimum Y-Range
chrigelburri 0:31f7be68e52d 63 #define COMP_Z_MIN -356.000000f // Minimun Z-Range not used in this side
chrigelburri 0:31f7be68e52d 64 */
chrigelburri 0:31f7be68e52d 65 #define COMP_X_MAX 391.219910f // Maximum X-Range
chrigelburri 0:31f7be68e52d 66 #define COMP_Y_MAX 382.915161f // Maximum Y-Range
chrigelburri 0:31f7be68e52d 67 #define COMP_Z_MAX -237.855042f // Maximum Z-Range not used in this side
chrigelburri 0:31f7be68e52d 68 #define COMP_X_MIN -169.952530f // Minimum X-Range
chrigelburri 0:31f7be68e52d 69 #define COMP_Y_MIN -247.647675f // Minimum Y-Range
chrigelburri 0:31f7be68e52d 70 #define COMP_Z_MIN -385.915009f // Minimun Z-Range not used in this side
chrigelburri 0:31f7be68e52d 71
chrigelburri 0:31f7be68e52d 72
chrigelburri 0:31f7be68e52d 73 /**
chrigelburri 0:31f7be68e52d 74 * struct state
chrigelburri 0:31f7be68e52d 75 * structure containing system sensor data
chrigelburri 0:31f7be68e52d 76 ****** System Status
chrigelburri 0:31f7be68e52d 77 ****** Data reported Motor
chrigelburri 0:31f7be68e52d 78 ****** Data reported Car
chrigelburri 0:31f7be68e52d 79 ****** Set Point Car
chrigelburri 0:31f7be68e52d 80 ****** measuring Position and angle
chrigelburri 0:31f7be68e52d 81 **/
chrigelburri 0:31f7be68e52d 82 typedef struct state {
chrigelburri 0:31f7be68e52d 83 /** millis Time [ms]*/
chrigelburri 0:31f7be68e52d 84 int millis;
chrigelburri 0:31f7be68e52d 85 /** Battery voltage [V] */
chrigelburri 0:31f7be68e52d 86 float voltageBattery;
chrigelburri 0:31f7be68e52d 87 /** Number of pulses left */
chrigelburri 0:31f7be68e52d 88 int leftPulses;
chrigelburri 0:31f7be68e52d 89 /** Number of pulses right */
chrigelburri 0:31f7be68e52d 90 int rightPulses;
chrigelburri 0:31f7be68e52d 91 /** Velocity left [m/s] */
chrigelburri 0:31f7be68e52d 92 float leftVelocity;
chrigelburri 0:31f7be68e52d 93 /** Velocity right [m/s] */
chrigelburri 0:31f7be68e52d 94 float rightVelocity;
chrigelburri 0:31f7be68e52d 95 /** Velocity of the car [m/s] */
chrigelburri 0:31f7be68e52d 96 float velocity;
chrigelburri 0:31f7be68e52d 97 /** Velocity rotation [°/s] */
chrigelburri 0:31f7be68e52d 98 float omega;
chrigelburri 0:31f7be68e52d 99 /** X-Axis from co-ordinate [m] */
chrigelburri 0:31f7be68e52d 100 float xAxis;
chrigelburri 0:31f7be68e52d 101 /** Y-Axis from co-ordinate [m] */
chrigelburri 0:31f7be68e52d 102 float yAxis;
chrigelburri 0:31f7be68e52d 103 /** X-Axis Error [m] */
chrigelburri 0:31f7be68e52d 104 float xAxisError;
chrigelburri 0:31f7be68e52d 105 /** X-Axis Error [m] */
chrigelburri 0:31f7be68e52d 106 float yAxisError;
chrigelburri 0:31f7be68e52d 107 /** Angle Error [°] */
chrigelburri 0:31f7be68e52d 108 float angleError;
chrigelburri 0:31f7be68e52d 109 /** Angle from Car [°] */
chrigelburri 0:31f7be68e52d 110 float angle;
chrigelburri 0:31f7be68e52d 111 /** Setpoint X-Axis [m] */
chrigelburri 0:31f7be68e52d 112 float setxAxis;
chrigelburri 0:31f7be68e52d 113 /** Setpoint Y-Axis [m] */
chrigelburri 0:31f7be68e52d 114 float setyAxis;
chrigelburri 0:31f7be68e52d 115 /** Setpoint Angel [°] */
chrigelburri 0:31f7be68e52d 116 float setAngle;
chrigelburri 0:31f7be68e52d 117 /** Right Distance Sensor [m] */
chrigelburri 0:31f7be68e52d 118 float rightDist;
chrigelburri 0:31f7be68e52d 119 /** Compass Angle [°] */
chrigelburri 0:31f7be68e52d 120 float compassAngle;
chrigelburri 0:31f7be68e52d 121 /** Compass X-Axis */
chrigelburri 0:31f7be68e52d 122 float compassxAxis;
chrigelburri 0:31f7be68e52d 123 /** Compass Y-Axis */
chrigelburri 0:31f7be68e52d 124 float compassyAxis;
chrigelburri 0:31f7be68e52d 125 /** State of the Car **/
chrigelburri 0:31f7be68e52d 126 int state;
chrigelburri 0:31f7be68e52d 127 } state_t;
chrigelburri 0:31f7be68e52d 128
chrigelburri 0:31f7be68e52d 129
chrigelburri 0:31f7be68e52d 130 #endif