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:
Thu Apr 11 09:22:35 2013 +0000
Revision:
14:6a45a9f940a8
Parent:
13:a7c30ee09bae
Child:
15:cb1337567ad4
android 2.0 implemented (untested!)

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 10:09ddb819fdcb 4 /*! \file defines.h
chrigelburri 10:09ddb819fdcb 5 \brief All defines for the roboter you can see here.
chrigelburri 10:09ddb819fdcb 6 */
chrigelburri 10:09ddb819fdcb 7
chrigelburri 0:31f7be68e52d 8 #include "mbed.h"
chrigelburri 0:31f7be68e52d 9
chrigelburri 10:09ddb819fdcb 10 /**
chrigelburri 11:775ebb69d5e1 11 * @name Physical dimensions π;
chrigelburri 10:09ddb819fdcb 12 */
chrigelburri 10:09ddb819fdcb 13 #define PI 3.141592654f
chrigelburri 11:775ebb69d5e1 14 /*! @} */
chrigelburri 10:09ddb819fdcb 15
chrigelburri 10:09ddb819fdcb 16 /**
chrigelburri 10:09ddb819fdcb 17 * @name maxon motor #339282 EC 45 flat 30W
chrigelburri 10:09ddb819fdcb 18 * @{
chrigelburri 10:09ddb819fdcb 19 */
chrigelburri 10:09ddb819fdcb 20
chrigelburri 10:09ddb819fdcb 21 /**
chrigelburri 11:775ebb69d5e1 22 * @brief Number of of pole pairs
chrigelburri 10:09ddb819fdcb 23 */
chrigelburri 10:09ddb819fdcb 24 #define POLE_PAIRS 8u
chrigelburri 0:31f7be68e52d 25
chrigelburri 10:09ddb819fdcb 26 /**
chrigelburri 11:775ebb69d5e1 27 * @brief Gear on the motor 1/11.6f
chrigelburri 10:09ddb819fdcb 28 */
chrigelburri 10:09ddb819fdcb 29 #define GEAR 1/11.6f
chrigelburri 10:09ddb819fdcb 30
chrigelburri 10:09ddb819fdcb 31 /**
chrigelburri 11:775ebb69d5e1 32 * @brief Pulses per electrical step form the Hallsensor, have 6 steps
chrigelburri 10:09ddb819fdcb 33 */
chrigelburri 10:09ddb819fdcb 34 #define PULSES_PER_STEP 6u
chrigelburri 10:09ddb819fdcb 35 /*! @} */
chrigelburri 10:09ddb819fdcb 36
chrigelburri 10:09ddb819fdcb 37 /**
chrigelburri 10:09ddb819fdcb 38 * @name Physical Dimension of the car
chrigelburri 10:09ddb819fdcb 39 * @{
chrigelburri 10:09ddb819fdcb 40 */
chrigelburri 10:09ddb819fdcb 41
chrigelburri 10:09ddb819fdcb 42 /**
chrigelburri 11:775ebb69d5e1 43 * @brief Value for the diffrerenz between left an right, given in [m]
chrigelburri 10:09ddb819fdcb 44 */
chrigelburri 10:09ddb819fdcb 45 #define WHEEL_RADIUS_DIFF 0.0000f
chrigelburri 0:31f7be68e52d 46
chrigelburri 10:09ddb819fdcb 47 /**
chrigelburri 11:775ebb69d5e1 48 * @brief Radius of the left wheel, given in [m]
chrigelburri 10:09ddb819fdcb 49 */
chrigelburri 10:09ddb819fdcb 50 #define WHEEL_RADIUS_LEFT 0.040280f
chrigelburri 10:09ddb819fdcb 51
chrigelburri 10:09ddb819fdcb 52 /**
chrigelburri 11:775ebb69d5e1 53 * @brief Radius of the left wheel, given in [m]
chrigelburri 10:09ddb819fdcb 54 */
chrigelburri 10:09ddb819fdcb 55 #define WHEEL_RADIUS_RIGHT (WHEEL_RADIUS_LEFT - WHEEL_RADIUS_DIFF)
chrigelburri 10:09ddb819fdcb 56
chrigelburri 10:09ddb819fdcb 57 /**
chrigelburri 11:775ebb69d5e1 58 * @brief Distance of the wheel, given in [m] Greater --> turn more
chrigelburri 10:09ddb819fdcb 59 */
chrigelburri 10:09ddb819fdcb 60 #define WHEEL_DISTANCE 0.2000f
chrigelburri 11:775ebb69d5e1 61
chrigelburri 11:775ebb69d5e1 62 /**
chrigelburri 11:775ebb69d5e1 63 * @brief Sets the start X-point, given in [m]
chrigelburri 11:775ebb69d5e1 64 */
chrigelburri 11:775ebb69d5e1 65 #define START_X_OFFSET -0.8f
chrigelburri 11:775ebb69d5e1 66
chrigelburri 11:775ebb69d5e1 67 /**
chrigelburri 11:775ebb69d5e1 68 * @brief Sets the start Y-point, given in [m]
chrigelburri 11:775ebb69d5e1 69 */
chrigelburri 11:775ebb69d5e1 70 #define START_Y_OFFSET 0.8f
chrigelburri 10:09ddb819fdcb 71 /*! @} */
chrigelburri 10:09ddb819fdcb 72
chrigelburri 10:09ddb819fdcb 73 /**
chrigelburri 10:09ddb819fdcb 74 * @name State Bits of the car
chrigelburri 10:09ddb819fdcb 75 * @{
chrigelburri 10:09ddb819fdcb 76 */
chrigelburri 0:31f7be68e52d 77
chrigelburri 10:09ddb819fdcb 78 /**
chrigelburri 11:775ebb69d5e1 79 * @brief Bit0 = stop pressed
chrigelburri 10:09ddb819fdcb 80 */
chrigelburri 10:09ddb819fdcb 81 #define STATE_STOP 1u
chrigelburri 10:09ddb819fdcb 82
chrigelburri 10:09ddb819fdcb 83 /**
chrigelburri 11:775ebb69d5e1 84 * @brief Bit1 = Undervoltage battery
chrigelburri 11:775ebb69d5e1 85 */
chrigelburri 11:775ebb69d5e1 86 #define STATE_UNDER 2u
chrigelburri 10:09ddb819fdcb 87
chrigelburri 10:09ddb819fdcb 88 /**
chrigelburri 11:775ebb69d5e1 89 * @brief Bit2 = left ESCON in error state
chrigelburri 11:775ebb69d5e1 90 */
chrigelburri 10:09ddb819fdcb 91 #define STATE_LEFT 4u
chrigelburri 10:09ddb819fdcb 92
chrigelburri 10:09ddb819fdcb 93 /**
chrigelburri 11:775ebb69d5e1 94 * @brief Bit3 = right ESCON in error state
chrigelburri 10:09ddb819fdcb 95 */
chrigelburri 10:09ddb819fdcb 96 #define STATE_RIGHT 8u
chrigelburri 11:775ebb69d5e1 97 /*! @} */
chrigelburri 11:775ebb69d5e1 98
chrigelburri 11:775ebb69d5e1 99 /**
chrigelburri 11:775ebb69d5e1 100 * @name ESCON Constands
chrigelburri 11:775ebb69d5e1 101 * @{
chrigelburri 11:775ebb69d5e1 102 */
chrigelburri 0:31f7be68e52d 103
chrigelburri 11:775ebb69d5e1 104 /**
chrigelburri 11:775ebb69d5e1 105 * @brief Speed Factor how set in the ESCON Studio
chrigelburri 11:775ebb69d5e1 106 */
chrigelburri 11:775ebb69d5e1 107 #define ESCON_SET_FACTOR 1500.0f
chrigelburri 11:775ebb69d5e1 108
chrigelburri 11:775ebb69d5e1 109 /**
chrigelburri 11:775ebb69d5e1 110 * @brief Speed Factor how get in the ESCON Studio
chrigelburri 11:775ebb69d5e1 111 */
chrigelburri 11:775ebb69d5e1 112 #define ESCON_GET_FACTOR 1600.4f
chrigelburri 8:696c2f9dfc62 113
chrigelburri 11:775ebb69d5e1 114 /**
chrigelburri 11:775ebb69d5e1 115 * @brief Error patch of the drift of Analog input and pwn output for set speed
chrigelburri 11:775ebb69d5e1 116 */
chrigelburri 11:775ebb69d5e1 117 #define SET_SPEED_PATCH (1+0.00262f)
chrigelburri 0:31f7be68e52d 118
chrigelburri 11:775ebb69d5e1 119 /**
chrigelburri 11:775ebb69d5e1 120 * @brief Error patch of the drift of Analog input and pwn output for get speed
chrigelburri 11:775ebb69d5e1 121 */
chrigelburri 11:775ebb69d5e1 122 #define GET_SPEED_PATCH (1+0.0019f)
chrigelburri 11:775ebb69d5e1 123 /*! @} */
chrigelburri 0:31f7be68e52d 124
chrigelburri 11:775ebb69d5e1 125 /**
chrigelburri 11:775ebb69d5e1 126 * @name position controller
chrigelburri 11:775ebb69d5e1 127 * @{
chrigelburri 11:775ebb69d5e1 128 */
chrigelburri 11:775ebb69d5e1 129
chrigelburri 11:775ebb69d5e1 130 /**
chrigelburri 11:775ebb69d5e1 131 * @brief Main Gain for k1, k2 and k3
chrigelburri 11:775ebb69d5e1 132 */
chrigelburri 11:775ebb69d5e1 133 #define GAIN 0.8f
chrigelburri 1:6cd533a712c6 134
chrigelburri 11:775ebb69d5e1 135 /**
chrigelburri 11:775ebb69d5e1 136 * @brief Gain k1 default 1.0f
chrigelburri 11:775ebb69d5e1 137 */
chrigelburri 9:d3cdcdef9719 138 #define K1 0.8f * GAIN
chrigelburri 11:775ebb69d5e1 139
chrigelburri 11:775ebb69d5e1 140 /**
chrigelburri 11:775ebb69d5e1 141 * @brief Gain k2 default 3.0f
chrigelburri 11:775ebb69d5e1 142 */
chrigelburri 11:775ebb69d5e1 143 #define K2 3.0f * GAIN
chrigelburri 11:775ebb69d5e1 144
chrigelburri 11:775ebb69d5e1 145 /**
chrigelburri 11:775ebb69d5e1 146 * @brief Gain k3 default 2.0f
chrigelburri 11:775ebb69d5e1 147 */
chrigelburri 11:775ebb69d5e1 148 #define K3 2.0f * GAIN
chrigelburri 0:31f7be68e52d 149
chrigelburri 11:775ebb69d5e1 150 /**
chrigelburri 11:775ebb69d5e1 151 * @brief Min. Distance to switch the position controller off.
chrigelburri 11:775ebb69d5e1 152 * Because when Distance Error goes to zero the ATAN2 is not define, given in [m]
chrigelburri 11:775ebb69d5e1 153 */
chrigelburri 11:775ebb69d5e1 154 #define MIN_DISTANCE_ERROR 0.01f
chrigelburri 11:775ebb69d5e1 155 /*! @} */
chrigelburri 2:d8e1613dc38b 156
chrigelburri 11:775ebb69d5e1 157 /**
chrigelburri 11:775ebb69d5e1 158 * @name Batterie control Battery Type: 1SP1P LG-18650
chrigelburri 13:a7c30ee09bae 159 * nominal voltage 3.6V
chrigelburri 13:a7c30ee09bae 160 * 5 batterys ==> 5 * 3.5V = 17.5V
chrigelburri 11:775ebb69d5e1 161 * @{
chrigelburri 11:775ebb69d5e1 162 */
chrigelburri 0:31f7be68e52d 163
chrigelburri 11:775ebb69d5e1 164 /**
chrigelburri 11:775ebb69d5e1 165 * @brief Battery Multiplicator for the potential divider.
chrigelburri 11:775ebb69d5e1 166 *
chrigelburri 11:775ebb69d5e1 167 * R2 / (R1 + R2) = 0.153 R2= 10k , R1 = 1.8k 1/0.153 = 6.555 --> 3.3 * 6.555 = 21.6333333f
chrigelburri 11:775ebb69d5e1 168 */
chrigelburri 11:775ebb69d5e1 169 #define BAT_MULTIPLICATOR 21.633333333f
chrigelburri 11:775ebb69d5e1 170
chrigelburri 11:775ebb69d5e1 171 /**
chrigelburri 11:775ebb69d5e1 172 * @brief minium operate voltage, given in [V]
chrigelburri 11:775ebb69d5e1 173 */
chrigelburri 11:775ebb69d5e1 174 #define BAT_MIN 17.5f
chrigelburri 11:775ebb69d5e1 175 /*! @} */
chrigelburri 0:31f7be68e52d 176
chrigelburri 10:09ddb819fdcb 177 /**
chrigelburri 11:775ebb69d5e1 178 * @name sampling rate for a Task Object
chrigelburri 11:775ebb69d5e1 179 * @{
chrigelburri 11:775ebb69d5e1 180 */
chrigelburri 11:775ebb69d5e1 181
chrigelburri 11:775ebb69d5e1 182 /**
chrigelburri 11:775ebb69d5e1 183 * @brief 1kHz Rate for Robot Control, given in [s]
chrigelburri 11:775ebb69d5e1 184 */
chrigelburri 11:775ebb69d5e1 185 #define PERIOD_ROBOTCONTROL 0.001f
chrigelburri 11:775ebb69d5e1 186
chrigelburri 11:775ebb69d5e1 187 /**
chrigelburri 11:775ebb69d5e1 188 * @brief 1kHz Rate for State Objekt , given in [s]
chrigelburri 11:775ebb69d5e1 189 */
chrigelburri 11:775ebb69d5e1 190 #define PERIOD_STATE 0.001f
chrigelburri 11:775ebb69d5e1 191
chrigelburri 11:775ebb69d5e1 192 /**
chrigelburri 11:775ebb69d5e1 193 * @brief 10Hz Rate for the Android communication , given in [s]
chrigelburri 11:775ebb69d5e1 194 */
chrigelburri 14:6a45a9f940a8 195 #define PERIOD_ANDROID 0.5f
chrigelburri 11:775ebb69d5e1 196 /*! @} */
chrigelburri 11:775ebb69d5e1 197
chrigelburri 11:775ebb69d5e1 198 /**
chrigelburri 11:775ebb69d5e1 199 * @name Android Buffer Size for communication
chrigelburri 11:775ebb69d5e1 200 * @{
chrigelburri 11:775ebb69d5e1 201 */
chrigelburri 11:775ebb69d5e1 202
chrigelburri 11:775ebb69d5e1 203 /**
chrigelburri 11:775ebb69d5e1 204 * @brief Buffer Output
chrigelburri 11:775ebb69d5e1 205 */
chrigelburri 11:775ebb69d5e1 206 #define OUTL 100
chrigelburri 11:775ebb69d5e1 207
chrigelburri 11:775ebb69d5e1 208 /**
chrigelburri 11:775ebb69d5e1 209 * @brief Buffer Input
chrigelburri 11:775ebb69d5e1 210 */
chrigelburri 11:775ebb69d5e1 211 #define INBL 100
chrigelburri 11:775ebb69d5e1 212 /*! @} */
chrigelburri 11:775ebb69d5e1 213
chrigelburri 11:775ebb69d5e1 214 /**
chrigelburri 11:775ebb69d5e1 215 * @brief struct state
chrigelburri 11:775ebb69d5e1 216 * structure containing system sensor data
chrigelburri 11:775ebb69d5e1 217 */
chrigelburri 0:31f7be68e52d 218 typedef struct state {
chrigelburri 11:775ebb69d5e1 219 /** @brief millis Time [ms]*/
chrigelburri 0:31f7be68e52d 220 int millis;
chrigelburri 11:775ebb69d5e1 221 /** @brief Battery voltage [V] */
chrigelburri 0:31f7be68e52d 222 float voltageBattery;
chrigelburri 11:775ebb69d5e1 223 /** @brief Number of pulses left */
chrigelburri 0:31f7be68e52d 224 int leftPulses;
chrigelburri 11:775ebb69d5e1 225 /** @brief Number of pulses right */
chrigelburri 0:31f7be68e52d 226 int rightPulses;
chrigelburri 11:775ebb69d5e1 227 /** @brief Velocity left [m/s] */
chrigelburri 0:31f7be68e52d 228 float leftVelocity;
chrigelburri 11:775ebb69d5e1 229 /** @brief Velocity right [m/s] */
chrigelburri 0:31f7be68e52d 230 float rightVelocity;
chrigelburri 11:775ebb69d5e1 231 /** @brief Velocity of the car [m/s] */
chrigelburri 0:31f7be68e52d 232 float velocity;
chrigelburri 11:775ebb69d5e1 233 /** @brief Velocity rotation [°/s] */
chrigelburri 0:31f7be68e52d 234 float omega;
chrigelburri 11:775ebb69d5e1 235 /** @brief X-Axis from co-ordinate [m] */
chrigelburri 0:31f7be68e52d 236 float xAxis;
chrigelburri 11:775ebb69d5e1 237 /** @brief Y-Axis from co-ordinate [m] */
chrigelburri 0:31f7be68e52d 238 float yAxis;
chrigelburri 11:775ebb69d5e1 239 /** @brief X-Axis Error [m] */
chrigelburri 0:31f7be68e52d 240 float xAxisError;
chrigelburri 11:775ebb69d5e1 241 /** @brief X-Axis Error [m] */
chrigelburri 0:31f7be68e52d 242 float yAxisError;
chrigelburri 11:775ebb69d5e1 243 /** @brief Angle Error [°] */
chrigelburri 0:31f7be68e52d 244 float angleError;
chrigelburri 11:775ebb69d5e1 245 /** @brief Angle from Car [°] */
chrigelburri 0:31f7be68e52d 246 float angle;
chrigelburri 11:775ebb69d5e1 247 /** @brief Setpoint X-Axis [m] */
chrigelburri 0:31f7be68e52d 248 float setxAxis;
chrigelburri 11:775ebb69d5e1 249 /** @brief Setpoint Y-Axis [m] */
chrigelburri 0:31f7be68e52d 250 float setyAxis;
chrigelburri 11:775ebb69d5e1 251 /** @brief Setpoint Angel [°] */
chrigelburri 0:31f7be68e52d 252 float setAngle;
chrigelburri 11:775ebb69d5e1 253 /** @brief Setpoint velocitiy [m/s] */
chrigelburri 8:696c2f9dfc62 254 float setVelocity;
chrigelburri 11:775ebb69d5e1 255 /** @brief Setpoint rotation velocitiy [rad/s] */
chrigelburri 8:696c2f9dfc62 256 float setOmega;
chrigelburri 14:6a45a9f940a8 257 /** @brief State of the car */
chrigelburri 0:31f7be68e52d 258 int state;
chrigelburri 11:775ebb69d5e1 259 /** @brief distance to Goal */
chrigelburri 2:d8e1613dc38b 260 float rho;
chrigelburri 11:775ebb69d5e1 261 /** @brief theta to goal */
chrigelburri 2:d8e1613dc38b 262 float lamda;
chrigelburri 11:775ebb69d5e1 263 /** @brief theta from the goal */
chrigelburri 2:d8e1613dc38b 264 float delta;
chrigelburri 0:31f7be68e52d 265 } state_t;
chrigelburri 0:31f7be68e52d 266
chrigelburri 11:775ebb69d5e1 267 #endif