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 30 06:55:08 2013 +0000
Revision:
8:696c2f9dfc62
Parent:
7:34be8b3a979c
Child:
9:d3cdcdef9719
vor dem tuning. nicht merh 50% duty cicle und 1.65V mitte

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 8:696c2f9dfc62 15 #define WHEEL_RADIUS_DIFF -0.00015f // positiv zu weit rechts, given in [m]
chrigelburri 8:696c2f9dfc62 16 #define WHEEL_RADIUS_LEFT 0.040280f // radius of the left wheel, given in [m] 0.040479f
chrigelburri 8:696c2f9dfc62 17 #define WHEEL_RADIUS_RIGHT (WHEEL_RADIUS_LEFT - WHEEL_RADIUS_DIFF) // radius of the left wheel, given in [m]
chrigelburri 8:696c2f9dfc62 18 #define WHEEL_DISTANCE 0.1875f // Distance of the wheel, given in [m] Grösser --> mehr drehen
chrigelburri 0:31f7be68e52d 19
chrigelburri 0:31f7be68e52d 20 // State Bits of the car
chrigelburri 0:31f7be68e52d 21 #define STATE_STOP 1u // Bit0 = stop pressed
chrigelburri 0:31f7be68e52d 22 #define STATE_UNDER 2u // Bit1 = Undervoltage battery
chrigelburri 0:31f7be68e52d 23 #define STATE_LEFT 4u // Bit2 = left ESCON in error state
chrigelburri 0:31f7be68e52d 24 #define STATE_RIGHT 8u // Bit3 = right ESCON in error state
chrigelburri 0:31f7be68e52d 25
chrigelburri 3:92ba0254af87 26 // ESCON Constands
chrigelburri 8:696c2f9dfc62 27 #define ESCON_SET_FACTOR 1200.0f // Speed Factor how set in the ESCON
chrigelburri 8:696c2f9dfc62 28 #define ESCON_GET_FACTOR 1400.0f // Speed Factor how get in the ESCON
chrigelburri 8:696c2f9dfc62 29
chrigelburri 8:696c2f9dfc62 30 //Error patch of the drift of Analog input and pwn output
chrigelburri 8:696c2f9dfc62 31 #define SET_SPEED_PATCH (1+0.0029f) // patch factor of set speed
chrigelburri 8:696c2f9dfc62 32 #define GET_SPEED_PATCH (1+0.0019f) // patch factor of get speed
chrigelburri 0:31f7be68e52d 33
chrigelburri 0:31f7be68e52d 34 // Start Defintition
chrigelburri 2:d8e1613dc38b 35 #define START_X_OFFSET -0.8f // Sets the start X-point [m]
chrigelburri 0:31f7be68e52d 36 #define START_Y_OFFSET 0.8f // Sets the start Y-point [m]
chrigelburri 0:31f7be68e52d 37
chrigelburri 0:31f7be68e52d 38 // Maximum Aceeleration
chrigelburri 0:31f7be68e52d 39 #define ACCELERATION 0.25f // maximum translational acceleration, given in [m/s2]
chrigelburri 1:6cd533a712c6 40 #define THETA_ACCELERATION 1.0f // maximum rotational acceleration, given in [rad/s2]
chrigelburri 1:6cd533a712c6 41
chrigelburri 3:92ba0254af87 42 // position controller
chrigelburri 2:d8e1613dc38b 43 #define GAIN 0.30f // Main Gain
chrigelburri 2:d8e1613dc38b 44 #define K1 1.0f * GAIN
chrigelburri 2:d8e1613dc38b 45 #define K2 3.0f * GAIN
chrigelburri 7:34be8b3a979c 46 #define K3 2.0f * GAIN // deafult 2.0f
chrigelburri 8:696c2f9dfc62 47 #define MIN_DISTANCE_ERROR -0.005f // 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 48
chrigelburri 0:31f7be68e52d 49 // LiPo Batterie
chrigelburri 2:d8e1613dc38b 50 #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 51 #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 52
chrigelburri 0:31f7be68e52d 53 // Frequenz for the Task
chrigelburri 0:31f7be68e52d 54 #define PERIOD_COMPASS 0.050f // 20Hz Rate for Compass HMC6352
chrigelburri 0:31f7be68e52d 55 #define PERIOD_ROBOTCONTROL 0.001f // 1kHz Rate for Robot Control
chrigelburri 0:31f7be68e52d 56 #define PERIOD_STATE 0.001f // 1kHz Rate for State Objekt
chrigelburri 0:31f7be68e52d 57 #define PERIOD_ANDROID 0.1f // 10Hz Rate for State Objekt
chrigelburri 0:31f7be68e52d 58
chrigelburri 0:31f7be68e52d 59 // Compass Maxima und Minima for the Filter
chrigelburri 0:31f7be68e52d 60 #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 61 #define COMP_X_MAX 391.219910f // Maximum X-Range
chrigelburri 0:31f7be68e52d 62 #define COMP_Y_MAX 382.915161f // Maximum Y-Range
chrigelburri 0:31f7be68e52d 63 #define COMP_Z_MAX -237.855042f // Maximum Z-Range not used in this side
chrigelburri 0:31f7be68e52d 64 #define COMP_X_MIN -169.952530f // Minimum X-Range
chrigelburri 0:31f7be68e52d 65 #define COMP_Y_MIN -247.647675f // Minimum Y-Range
chrigelburri 6:48eeb41188dd 66 #define COMP_Z_MIN -385.915009f // Minimun Z-Range not used in this side
chrigelburri 6:48eeb41188dd 67
chrigelburri 6:48eeb41188dd 68 // Android Buffer Size for communication
chrigelburri 6:48eeb41188dd 69 #define OUTL 100
chrigelburri 6:48eeb41188dd 70 #define INBL 100
chrigelburri 0:31f7be68e52d 71
chrigelburri 2:d8e1613dc38b 72 /**
chrigelburri 2:d8e1613dc38b 73 * struct state
chrigelburri 2:d8e1613dc38b 74 * structure containing system sensor data
chrigelburri 2:d8e1613dc38b 75 **/
chrigelburri 0:31f7be68e52d 76 typedef struct state {
chrigelburri 0:31f7be68e52d 77 /** millis Time [ms]*/
chrigelburri 0:31f7be68e52d 78 int millis;
chrigelburri 0:31f7be68e52d 79 /** Battery voltage [V] */
chrigelburri 0:31f7be68e52d 80 float voltageBattery;
chrigelburri 0:31f7be68e52d 81 /** Number of pulses left */
chrigelburri 0:31f7be68e52d 82 int leftPulses;
chrigelburri 0:31f7be68e52d 83 /** Number of pulses right */
chrigelburri 0:31f7be68e52d 84 int rightPulses;
chrigelburri 0:31f7be68e52d 85 /** Velocity left [m/s] */
chrigelburri 0:31f7be68e52d 86 float leftVelocity;
chrigelburri 0:31f7be68e52d 87 /** Velocity right [m/s] */
chrigelburri 0:31f7be68e52d 88 float rightVelocity;
chrigelburri 0:31f7be68e52d 89 /** Velocity of the car [m/s] */
chrigelburri 0:31f7be68e52d 90 float velocity;
chrigelburri 0:31f7be68e52d 91 /** Velocity rotation [°/s] */
chrigelburri 0:31f7be68e52d 92 float omega;
chrigelburri 0:31f7be68e52d 93 /** X-Axis from co-ordinate [m] */
chrigelburri 0:31f7be68e52d 94 float xAxis;
chrigelburri 0:31f7be68e52d 95 /** Y-Axis from co-ordinate [m] */
chrigelburri 0:31f7be68e52d 96 float yAxis;
chrigelburri 0:31f7be68e52d 97 /** X-Axis Error [m] */
chrigelburri 0:31f7be68e52d 98 float xAxisError;
chrigelburri 0:31f7be68e52d 99 /** X-Axis Error [m] */
chrigelburri 0:31f7be68e52d 100 float yAxisError;
chrigelburri 0:31f7be68e52d 101 /** Angle Error [°] */
chrigelburri 0:31f7be68e52d 102 float angleError;
chrigelburri 0:31f7be68e52d 103 /** Angle from Car [°] */
chrigelburri 0:31f7be68e52d 104 float angle;
chrigelburri 0:31f7be68e52d 105 /** Setpoint X-Axis [m] */
chrigelburri 0:31f7be68e52d 106 float setxAxis;
chrigelburri 0:31f7be68e52d 107 /** Setpoint Y-Axis [m] */
chrigelburri 0:31f7be68e52d 108 float setyAxis;
chrigelburri 0:31f7be68e52d 109 /** Setpoint Angel [°] */
chrigelburri 0:31f7be68e52d 110 float setAngle;
chrigelburri 8:696c2f9dfc62 111 /** Setpoint velocitiy [m/s] */
chrigelburri 8:696c2f9dfc62 112 float setVelocity;
chrigelburri 8:696c2f9dfc62 113 /** Setpoint rotation velocitiy [rad/s] */
chrigelburri 8:696c2f9dfc62 114 float setOmega;
chrigelburri 0:31f7be68e52d 115 /** Compass X-Axis */
chrigelburri 0:31f7be68e52d 116 float compassxAxis;
chrigelburri 0:31f7be68e52d 117 /** Compass Y-Axis */
chrigelburri 0:31f7be68e52d 118 float compassyAxis;
chrigelburri 0:31f7be68e52d 119 /** State of the Car **/
chrigelburri 0:31f7be68e52d 120 int state;
chrigelburri 2:d8e1613dc38b 121 /** distance to Goal */
chrigelburri 2:d8e1613dc38b 122 float rho;
chrigelburri 2:d8e1613dc38b 123 /** theta to goal */
chrigelburri 2:d8e1613dc38b 124 float lamda;
chrigelburri 2:d8e1613dc38b 125 /** theta from the goal */
chrigelburri 2:d8e1613dc38b 126 float delta;
chrigelburri 0:31f7be68e52d 127 } state_t;
chrigelburri 0:31f7be68e52d 128
chrigelburri 0:31f7be68e52d 129
chrigelburri 0:31f7be68e52d 130 #endif