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 23 13:52:48 2013 +0000
Revision:
6:48eeb41188dd
Parent:
5:48a258f6335e
Child:
7:34be8b3a979c
mit link und rechten Radradius

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 3:92ba0254af87 6 // Physical dimensions
chrigelburri 3:92ba0254af87 7 #define PI 3.141592654f // Physical dimensions π.
chrigelburri 0:31f7be68e52d 8
chrigelburri 3:92ba0254af87 9 // maxon motor #339282 EC 45 flat 30W and GEAR
chrigelburri 3:92ba0254af87 10 #define POLE_PAIRS 8u // Number of of pole pairs
chrigelburri 5:48a258f6335e 11 #define GEAR 1/11.6f // Gear on the motor 1/11.6f
chrigelburri 6:48eeb41188dd 12 #define PULSES_PER_STEP 6u // Pulses per electrical step Hallsensor, have 6 steps
chrigelburri 0:31f7be68e52d 13
chrigelburri 0:31f7be68e52d 14 // Physical Dimension of the car
chrigelburri 6:48eeb41188dd 15 #define WHEEL_RADIUS_LEFT 0.043f // radius of the left wheel, given in [m]
chrigelburri 6:48eeb41188dd 16 #define WHEEL_RADIUS_RIGHT 0.043f // radius of the left wheel, given in [m]
chrigelburri 6:48eeb41188dd 17 #define WHEEL_DISTANCE 0.1865f // Distance of the wheel, given in [m]
chrigelburri 0:31f7be68e52d 18
chrigelburri 0:31f7be68e52d 19 // State Bits of the car
chrigelburri 0:31f7be68e52d 20 #define STATE_STOP 1u // Bit0 = stop pressed
chrigelburri 0:31f7be68e52d 21 #define STATE_UNDER 2u // Bit1 = Undervoltage battery
chrigelburri 0:31f7be68e52d 22 #define STATE_LEFT 4u // Bit2 = left ESCON in error state
chrigelburri 0:31f7be68e52d 23 #define STATE_RIGHT 8u // Bit3 = right ESCON in error state
chrigelburri 0:31f7be68e52d 24
chrigelburri 3:92ba0254af87 25 // ESCON Constands
chrigelburri 5:48a258f6335e 26 #define ESCON_SET_FACTOR 1200.0f // Speed Factor how set in the ESCON
chrigelburri 5:48a258f6335e 27 #define ESCON_GET_FACTOR 1400.0f // Speed Factor how get in the ESCON
chrigelburri 0:31f7be68e52d 28
chrigelburri 0:31f7be68e52d 29 // Start Defintition
chrigelburri 2:d8e1613dc38b 30 #define START_X_OFFSET -0.8f // Sets the start X-point [m]
chrigelburri 0:31f7be68e52d 31 #define START_Y_OFFSET 0.8f // Sets the start Y-point [m]
chrigelburri 0:31f7be68e52d 32
chrigelburri 0:31f7be68e52d 33 // Maximum Aceeleration
chrigelburri 0:31f7be68e52d 34 #define ACCELERATION 0.25f // maximum translational acceleration, given in [m/s2]
chrigelburri 1:6cd533a712c6 35 #define THETA_ACCELERATION 1.0f // maximum rotational acceleration, given in [rad/s2]
chrigelburri 1:6cd533a712c6 36
chrigelburri 3:92ba0254af87 37 // position controller
chrigelburri 2:d8e1613dc38b 38 #define GAIN 0.30f // Main Gain
chrigelburri 2:d8e1613dc38b 39 #define K1 1.0f * GAIN
chrigelburri 2:d8e1613dc38b 40 #define K2 3.0f * GAIN
chrigelburri 6:48eeb41188dd 41 #define K3 5.0f * GAIN // deafult 2.0f
chrigelburri 6:48eeb41188dd 42 #define MIN_DISTANCE_ERROR -0.02f // 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 2:d8e1613dc38b 45 #define BAT_MULTIPLICATOR 21.633333333f // R2 / (R1 + R2) = 0.153 R2= 10k , R1 = 1.8k 1/0.153 = 6.555 ---> 3.3 * 6.555 = 21.6333333f
chrigelburri 2:d8e1613dc38b 46 #define BAT_MIN 17.5f // minium operate voltage [V] Battery Type: 1SP1P LG-18650 --> nominal voltage 3.6V --> 5 batterys ==> 5 * 3.5V = 17.5V
chrigelburri 2:d8e1613dc38b 47
chrigelburri 0:31f7be68e52d 48 // Frequenz for the Task
chrigelburri 0:31f7be68e52d 49 #define PERIOD_COMPASS 0.050f // 20Hz Rate for Compass HMC6352
chrigelburri 0:31f7be68e52d 50 #define PERIOD_ROBOTCONTROL 0.001f // 1kHz Rate for Robot Control
chrigelburri 0:31f7be68e52d 51 #define PERIOD_STATE 0.001f // 1kHz Rate for State Objekt
chrigelburri 0:31f7be68e52d 52 #define PERIOD_ANDROID 0.1f // 10Hz Rate for State Objekt
chrigelburri 0:31f7be68e52d 53
chrigelburri 0:31f7be68e52d 54 // Compass Maxima und Minima for the Filter
chrigelburri 0:31f7be68e52d 55 #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 56 /*#define COMP_X_MAX 344.464996f // Maximum X-Range
chrigelburri 0:31f7be68e52d 57 #define COMP_Y_MAX 238.751282f // Maximum Y-Range
chrigelburri 0:31f7be68e52d 58 #define COMP_Z_MAX -266.899994f // Maximum Z-Range not used in this side
chrigelburri 0:31f7be68e52d 59 #define COMP_X_MIN -90.412109f // Minimum X-Range
chrigelburri 0:31f7be68e52d 60 #define COMP_Y_MIN -220.834808f // Minimum Y-Range
chrigelburri 0:31f7be68e52d 61 #define COMP_Z_MIN -356.000000f // Minimun Z-Range not used in this side
chrigelburri 0:31f7be68e52d 62 */
chrigelburri 0:31f7be68e52d 63 #define COMP_X_MAX 391.219910f // Maximum X-Range
chrigelburri 0:31f7be68e52d 64 #define COMP_Y_MAX 382.915161f // Maximum Y-Range
chrigelburri 0:31f7be68e52d 65 #define COMP_Z_MAX -237.855042f // Maximum Z-Range not used in this side
chrigelburri 0:31f7be68e52d 66 #define COMP_X_MIN -169.952530f // Minimum X-Range
chrigelburri 0:31f7be68e52d 67 #define COMP_Y_MIN -247.647675f // Minimum Y-Range
chrigelburri 6:48eeb41188dd 68 #define COMP_Z_MIN -385.915009f // Minimun Z-Range not used in this side
chrigelburri 6:48eeb41188dd 69
chrigelburri 6:48eeb41188dd 70 // Android Buffer Size for communication
chrigelburri 6:48eeb41188dd 71 #define OUTL 100
chrigelburri 6:48eeb41188dd 72 #define INBL 100
chrigelburri 0:31f7be68e52d 73
chrigelburri 2:d8e1613dc38b 74 /**
chrigelburri 2:d8e1613dc38b 75 * struct state
chrigelburri 2:d8e1613dc38b 76 * structure containing system sensor data
chrigelburri 2:d8e1613dc38b 77 **/
chrigelburri 0:31f7be68e52d 78 typedef struct state {
chrigelburri 0:31f7be68e52d 79 /** millis Time [ms]*/
chrigelburri 0:31f7be68e52d 80 int millis;
chrigelburri 0:31f7be68e52d 81 /** Battery voltage [V] */
chrigelburri 0:31f7be68e52d 82 float voltageBattery;
chrigelburri 0:31f7be68e52d 83 /** Number of pulses left */
chrigelburri 0:31f7be68e52d 84 int leftPulses;
chrigelburri 0:31f7be68e52d 85 /** Number of pulses right */
chrigelburri 0:31f7be68e52d 86 int rightPulses;
chrigelburri 0:31f7be68e52d 87 /** Velocity left [m/s] */
chrigelburri 0:31f7be68e52d 88 float leftVelocity;
chrigelburri 0:31f7be68e52d 89 /** Velocity right [m/s] */
chrigelburri 0:31f7be68e52d 90 float rightVelocity;
chrigelburri 0:31f7be68e52d 91 /** Velocity of the car [m/s] */
chrigelburri 0:31f7be68e52d 92 float velocity;
chrigelburri 0:31f7be68e52d 93 /** Velocity rotation [°/s] */
chrigelburri 0:31f7be68e52d 94 float omega;
chrigelburri 0:31f7be68e52d 95 /** X-Axis from co-ordinate [m] */
chrigelburri 0:31f7be68e52d 96 float xAxis;
chrigelburri 0:31f7be68e52d 97 /** Y-Axis from co-ordinate [m] */
chrigelburri 0:31f7be68e52d 98 float yAxis;
chrigelburri 0:31f7be68e52d 99 /** X-Axis Error [m] */
chrigelburri 0:31f7be68e52d 100 float xAxisError;
chrigelburri 0:31f7be68e52d 101 /** X-Axis Error [m] */
chrigelburri 0:31f7be68e52d 102 float yAxisError;
chrigelburri 0:31f7be68e52d 103 /** Angle Error [°] */
chrigelburri 0:31f7be68e52d 104 float angleError;
chrigelburri 0:31f7be68e52d 105 /** Angle from Car [°] */
chrigelburri 0:31f7be68e52d 106 float angle;
chrigelburri 0:31f7be68e52d 107 /** Setpoint X-Axis [m] */
chrigelburri 0:31f7be68e52d 108 float setxAxis;
chrigelburri 0:31f7be68e52d 109 /** Setpoint Y-Axis [m] */
chrigelburri 0:31f7be68e52d 110 float setyAxis;
chrigelburri 0:31f7be68e52d 111 /** Setpoint Angel [°] */
chrigelburri 0:31f7be68e52d 112 float setAngle;
chrigelburri 0:31f7be68e52d 113 /** Right Distance Sensor [m] */
chrigelburri 0:31f7be68e52d 114 float rightDist;
chrigelburri 0:31f7be68e52d 115 /** Compass Angle [°] */
chrigelburri 0:31f7be68e52d 116 float compassAngle;
chrigelburri 0:31f7be68e52d 117 /** Compass X-Axis */
chrigelburri 0:31f7be68e52d 118 float compassxAxis;
chrigelburri 0:31f7be68e52d 119 /** Compass Y-Axis */
chrigelburri 0:31f7be68e52d 120 float compassyAxis;
chrigelburri 0:31f7be68e52d 121 /** State of the Car **/
chrigelburri 0:31f7be68e52d 122 int state;
chrigelburri 2:d8e1613dc38b 123 /** distance to Goal */
chrigelburri 2:d8e1613dc38b 124 float rho;
chrigelburri 2:d8e1613dc38b 125 /** theta to goal */
chrigelburri 2:d8e1613dc38b 126 float lamda;
chrigelburri 2:d8e1613dc38b 127 /** theta from the goal */
chrigelburri 2:d8e1613dc38b 128 float delta;
chrigelburri 0:31f7be68e52d 129 } state_t;
chrigelburri 0:31f7be68e52d 130
chrigelburri 0:31f7be68e52d 131
chrigelburri 0:31f7be68e52d 132 #endif