This program is for an autonomous robot for the competition at the Hochschule Luzern. We are one of the 32 teams. <a href="http://cruisingcrepe.wordpress.com/">http://cruisingcrepe.wordpress.com/</a> 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: <a href="http://www.dis.uniroma1.it/~labrob/pub/papers/Ramsete01.pdf">http://www.dis.uniroma1.it/~labrob/pub/papers/Ramsete01.pdf</a>

Dependencies:   mbed

Fork of autonomousRobotAndroid by Christian Burri

Committer:
chrigelburri
Date:
Fri Apr 05 10:58:42 2013 +0000
Revision:
11:775ebb69d5e1
Parent:
10:09ddb819fdcb
Child:
12:235e318a414f
doku soweit gut ohne android

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chrigelburri 10:09ddb819fdcb 1 /*! \mainpage Index Page
chrigelburri 2:d8e1613dc38b 2 * @author Christian Burri
chrigelburri 11:775ebb69d5e1 3 * @author Arno Galliker
chrigelburri 2:d8e1613dc38b 4 *
chrigelburri 11:775ebb69d5e1 5 * @copyright Copyright &copy; 2013 HSLU Pren Team #1 Cruising Crêpe
chrigelburri 1:6cd533a712c6 6 * All rights reserved.
chrigelburri 2:d8e1613dc38b 7 *
chrigelburri 11:775ebb69d5e1 8 * @brief
chrigelburri 2:d8e1613dc38b 9 *
chrigelburri 3:92ba0254af87 10 * This Programm is for a autonomous robot for the competition
chrigelburri 4:3a97923ff2d4 11 * at the Hochschule Luzern.
chrigelburri 3:92ba0254af87 12 * We are one of the 32 teams. In the team #1 is:
chrigelburri 11:775ebb69d5e1 13 * - Bauernfeind Julia <B>WI</B> <a href="mailto:julia.bauernfeind@stud.hslu.ch">julia.bauernfeind@stud.hslu.ch</a>
chrigelburri 11:775ebb69d5e1 14 * - Büttler Pirmin <B>WI</B> <a href="mailto:pirmin.buetler@stud.hslu.ch">pirmin.buetler@stud.hslu.ch</a>
chrigelburri 11:775ebb69d5e1 15 * - Amberg Reto <B>I</B> <a href="mailto:reto.amberg@stud.hslu.ch">reto.amberg@stud.hslu.ch</a>
chrigelburri 11:775ebb69d5e1 16 * - Galliker Arno <B>I</B> <a href="mailto:arno.galliker@stud.hslu.ch">arno.galliker@stud.hslu.ch</a>
chrigelburri 11:775ebb69d5e1 17 * - Amrein Marcel <B>M</B> <a href="mailto:marcel.amrein@stud.hslu.ch">marcel.amrein@stud.hslu.ch</a>
chrigelburri 11:775ebb69d5e1 18 * - Flühler Ramon <B>M</B> <a href="mailto:ramon.fluehler@stud.hslu.ch">ramon.fluehler@stud.hslu.ch</a>
chrigelburri 11:775ebb69d5e1 19 * - Burri Christian <B>ET</B> <a href="mailto:christian.burri@stud.hslu.ch">christian.burri@stud.hslu.ch</a>
chrigelburri 4:3a97923ff2d4 20 *
chrigelburri 4:3a97923ff2d4 21 * The postition control is based on polar coordiantes.
chrigelburri 3:92ba0254af87 22 * For more information see here: <a href="http://www.dis.uniroma1.it/~labrob/pub/papers/Ramsete01.pdf">a href="http://www.dis.uniroma1.it/~labrob/pub/papers/Ramsete01.pdf</a>
chrigelburri 2:d8e1613dc38b 23 *
chrigelburri 11:775ebb69d5e1 24 *
chrigelburri 1:6cd533a712c6 25 */
chrigelburri 1:6cd533a712c6 26
chrigelburri 11:775ebb69d5e1 27 /**
chrigelburri 11:775ebb69d5e1 28 * @file main.cpp
chrigelburri 11:775ebb69d5e1 29 */
chrigelburri 11:775ebb69d5e1 30
chrigelburri 1:6cd533a712c6 31 #include "defines.h"
chrigelburri 1:6cd533a712c6 32 #include "State.h"
chrigelburri 1:6cd533a712c6 33 #include "RobotControl.h"
chrigelburri 6:48eeb41188dd 34 //#include "android.h"
chrigelburri 6:48eeb41188dd 35
chrigelburri 6:48eeb41188dd 36 //Android
chrigelburri 11:775ebb69d5e1 37 //AdkTerm adkTerm;
chrigelburri 11:775ebb69d5e1 38
chrigelburri 11:775ebb69d5e1 39 /**
chrigelburri 11:775ebb69d5e1 40 * @name Hallsensor
chrigelburri 11:775ebb69d5e1 41 * @{
chrigelburri 11:775ebb69d5e1 42 */
chrigelburri 11:775ebb69d5e1 43
chrigelburri 11:775ebb69d5e1 44 /**
chrigelburri 11:775ebb69d5e1 45 * @brief <code>hallsensorLeft</code> object with pin15, pin17 and pin16
chrigelburri 11:775ebb69d5e1 46 */
chrigelburri 11:775ebb69d5e1 47 Hallsensor hallLeft(p18, p17, p16);
chrigelburri 11:775ebb69d5e1 48 /**
chrigelburri 11:775ebb69d5e1 49 * @brief <code>hallsensorLeft</code> object with pin17, pin28 and pin29
chrigelburri 11:775ebb69d5e1 50 */
chrigelburri 11:775ebb69d5e1 51 Hallsensor hallRight(p27, p28, p29);
chrigelburri 11:775ebb69d5e1 52 /*! @} */
chrigelburri 1:6cd533a712c6 53
chrigelburri 10:09ddb819fdcb 54 /**
chrigelburri 11:775ebb69d5e1 55 * @name Motors and Robot Control
chrigelburri 11:775ebb69d5e1 56 * @{
chrigelburri 10:09ddb819fdcb 57 */
chrigelburri 11:775ebb69d5e1 58
chrigelburri 11:775ebb69d5e1 59 /**
chrigelburri 11:775ebb69d5e1 60 * @brief <code>leftMotor</code> object with pin26, pin25, pin24, pin19 and <code>hallsensorLeft</code> object
chrigelburri 11:775ebb69d5e1 61 */
chrigelburri 1:6cd533a712c6 62 MaxonESCON leftMotor(p26, p25, p24, p19, &hallLeft);
chrigelburri 11:775ebb69d5e1 63 /**
chrigelburri 11:775ebb69d5e1 64 * @brief <code>rightMotor</code> object with pin23, pin22, pin21, pin20 and <code>hallsensorRight</code> object
chrigelburri 11:775ebb69d5e1 65 */
chrigelburri 1:6cd533a712c6 66 MaxonESCON rightMotor(p23, p22, p21, p20, &hallRight);
chrigelburri 1:6cd533a712c6 67
chrigelburri 11:775ebb69d5e1 68 /**
chrigelburri 11:775ebb69d5e1 69 * @brief <code>robotControl</code> object with <code>leftMotor</code>, <code>rightMotor</code> and the sampling rate for the run method
chrigelburri 11:775ebb69d5e1 70 */
chrigelburri 11:775ebb69d5e1 71 RobotControl robotControl(&leftMotor, &rightMotor, PERIOD_ROBOTCONTROL);
chrigelburri 11:775ebb69d5e1 72 /*! @} */
chrigelburri 1:6cd533a712c6 73
chrigelburri 11:775ebb69d5e1 74 /**
chrigelburri 11:775ebb69d5e1 75 * @name Logging & State
chrigelburri 11:775ebb69d5e1 76 * @{
chrigelburri 11:775ebb69d5e1 77 */
chrigelburri 11:775ebb69d5e1 78
chrigelburri 11:775ebb69d5e1 79 /**
chrigelburri 11:775ebb69d5e1 80 * @brief Define the struct for the State and the Logging
chrigelburri 11:775ebb69d5e1 81 */
chrigelburri 11:775ebb69d5e1 82 state_t s;
chrigelburri 11:775ebb69d5e1 83 /**
chrigelburri 11:775ebb69d5e1 84 * @brief <code>state</code> object with <code>robotControl</code>, <code>rightMotor</code>, <code>leftMotor</code>, <code>battery</code>, and the sampling rate for the run method
chrigelburri 11:775ebb69d5e1 85 */
chrigelburri 11:775ebb69d5e1 86 State state(&s, &robotControl, &leftMotor, &rightMotor, p15, PERIOD_STATE);
chrigelburri 11:775ebb69d5e1 87 /*! @} */
chrigelburri 1:6cd533a712c6 88
chrigelburri 11:775ebb69d5e1 89 // PC USB communications DAs wird danach gelöscht
chrigelburri 11:775ebb69d5e1 90 //Serial pc(USBTX, USBRX);
chrigelburri 1:6cd533a712c6 91
chrigelburri 1:6cd533a712c6 92 int main()
chrigelburri 1:6cd533a712c6 93 {
chrigelburri 11:775ebb69d5e1 94
chrigelburri 11:775ebb69d5e1 95 state.initPlotFile();
chrigelburri 11:775ebb69d5e1 96 state.startTimerFromZero();
chrigelburri 11:775ebb69d5e1 97 state.start();
chrigelburri 11:775ebb69d5e1 98
chrigelburri 1:6cd533a712c6 99 robotControl.setEnable(false);
chrigelburri 6:48eeb41188dd 100 wait(0.1);
chrigelburri 1:6cd533a712c6 101 robotControl.setEnable(true);
chrigelburri 6:48eeb41188dd 102 wait(0.1);
chrigelburri 11:775ebb69d5e1 103 robotControl.setAllToZero(0, 0, PI/2 );
chrigelburri 11:775ebb69d5e1 104 // robotControl.setAllToZero(START_X_OFFSET, START_Y_OFFSET, PI/2 );
chrigelburri 8:696c2f9dfc62 105 robotControl.start();
chrigelburri 8:696c2f9dfc62 106
chrigelburri 8:696c2f9dfc62 107
chrigelburri 8:696c2f9dfc62 108 // robotControl.setDesiredPositionAndAngle(START_X_OFFSET, START_Y_OFFSET, PI/2);
chrigelburri 8:696c2f9dfc62 109 // robotControl.setDesiredPositionAndAngle(0, 0, PI/2);
chrigelburri 8:696c2f9dfc62 110 // wait(0.1);
chrigelburri 8:696c2f9dfc62 111
chrigelburri 8:696c2f9dfc62 112 //////////////////////////////////////////
chrigelburri 11:775ebb69d5e1 113
chrigelburri 9:d3cdcdef9719 114 robotControl.setDesiredPositionAndAngle(0.0f, 1.0f, PI);
chrigelburri 9:d3cdcdef9719 115 while(!(robotControl.getDistanceError() <= 0.1)) {
chrigelburri 9:d3cdcdef9719 116 state.savePlotFile(s);
chrigelburri 9:d3cdcdef9719 117 };
chrigelburri 2:d8e1613dc38b 118
chrigelburri 9:d3cdcdef9719 119 robotControl.setDesiredPositionAndAngle(-1.00f, 1.0f, -PI/2);
chrigelburri 9:d3cdcdef9719 120 while(!(robotControl.getDistanceError() <= 0.1)) {
chrigelburri 9:d3cdcdef9719 121 state.savePlotFile(s);
chrigelburri 9:d3cdcdef9719 122 };
chrigelburri 8:696c2f9dfc62 123
chrigelburri 9:d3cdcdef9719 124 robotControl.setDesiredPositionAndAngle(0.0f, -0.8f, PI/2);
chrigelburri 9:d3cdcdef9719 125 while(!(robotControl.getDistanceError() <= 0.05)) {
chrigelburri 9:d3cdcdef9719 126 state.savePlotFile(s);
chrigelburri 9:d3cdcdef9719 127 };
chrigelburri 8:696c2f9dfc62 128
chrigelburri 9:d3cdcdef9719 129 robotControl.setDesiredPositionAndAngle(0.0f, -0.2f, PI/2);
chrigelburri 9:d3cdcdef9719 130 while(!(robotControl.getDistanceError() <= 0.05)) {
chrigelburri 9:d3cdcdef9719 131 state.savePlotFile(s);
chrigelburri 9:d3cdcdef9719 132 };
chrigelburri 8:696c2f9dfc62 133
chrigelburri 9:d3cdcdef9719 134 robotControl.setDesiredPositionAndAngle(0.0, 0.0f, PI/2);
chrigelburri 9:d3cdcdef9719 135 while(!(s.millis >= 32000)) {
chrigelburri 9:d3cdcdef9719 136 state.savePlotFile(s);
chrigelburri 9:d3cdcdef9719 137 };
chrigelburri 11:775ebb69d5e1 138
chrigelburri 8:696c2f9dfc62 139
chrigelburri 8:696c2f9dfc62 140
chrigelburri 8:696c2f9dfc62 141
chrigelburri 8:696c2f9dfc62 142
chrigelburri 8:696c2f9dfc62 143 ///////////////////////stay
chrigelburri 7:34be8b3a979c 144 /*
chrigelburri 8:696c2f9dfc62 145 robotControl.setDesiredPositionAndAngle(0.0, 0.0f, PI/2);
chrigelburri 8:696c2f9dfc62 146 while(!(s.millis >= 25000)) {
chrigelburri 6:48eeb41188dd 147 state.savePlotFile(s);
chrigelburri 6:48eeb41188dd 148 };
chrigelburri 8:696c2f9dfc62 149 */
chrigelburri 8:696c2f9dfc62 150 //////////////////////////stay
chrigelburri 5:48a258f6335e 151
chrigelburri 8:696c2f9dfc62 152
chrigelburri 8:696c2f9dfc62 153
chrigelburri 8:696c2f9dfc62 154
chrigelburri 8:696c2f9dfc62 155
chrigelburri 8:696c2f9dfc62 156
chrigelburri 8:696c2f9dfc62 157
chrigelburri 8:696c2f9dfc62 158 ////////////////////////////////////////////////////////////////////////
chrigelburri 8:696c2f9dfc62 159
chrigelburri 9:d3cdcdef9719 160 /*
chrigelburri 9:d3cdcdef9719 161
chrigelburri 9:d3cdcdef9719 162 //Zum Umfang einstellen 2m fahren
chrigelburri 9:d3cdcdef9719 163 robotControl.setDesiredPositionAndAngle(0.0f, 0.5f, PI/2);
chrigelburri 9:d3cdcdef9719 164 while(!(robotControl.getDistanceError() <= 0.2)) {
chrigelburri 9:d3cdcdef9719 165 state.savePlotFile(s);
chrigelburri 9:d3cdcdef9719 166 };
chrigelburri 9:d3cdcdef9719 167
chrigelburri 9:d3cdcdef9719 168 robotControl.setDesiredPositionAndAngle(0.0f, 1.0f, PI/2);
chrigelburri 9:d3cdcdef9719 169 while(!(robotControl.getDistanceError() <= 0.2)) {
chrigelburri 9:d3cdcdef9719 170 state.savePlotFile(s);
chrigelburri 9:d3cdcdef9719 171 };
chrigelburri 9:d3cdcdef9719 172 robotControl.setDesiredPositionAndAngle(0.0f, 1.5f, PI/2);
chrigelburri 9:d3cdcdef9719 173 while(!(robotControl.getDistanceError() <= 0.2)) {
chrigelburri 9:d3cdcdef9719 174 state.savePlotFile(s);
chrigelburri 9:d3cdcdef9719 175 };
chrigelburri 8:696c2f9dfc62 176
chrigelburri 6:48eeb41188dd 177
chrigelburri 9:d3cdcdef9719 178 robotControl.setDesiredPositionAndAngle(0.0f, 2.0f, PI/2);
chrigelburri 9:d3cdcdef9719 179 while(!(s.millis >= 30000)) {
chrigelburri 9:d3cdcdef9719 180 state.savePlotFile(s);
chrigelburri 9:d3cdcdef9719 181 };
chrigelburri 8:696c2f9dfc62 182
chrigelburri 9:d3cdcdef9719 183 */
chrigelburri 8:696c2f9dfc62 184
chrigelburri 8:696c2f9dfc62 185
chrigelburri 8:696c2f9dfc62 186 ///////////////oder//////////////////e
chrigelburri 8:696c2f9dfc62 187
chrigelburri 8:696c2f9dfc62 188
chrigelburri 8:696c2f9dfc62 189 // Zum radabstand einstellen
chrigelburri 8:696c2f9dfc62 190
chrigelburri 8:696c2f9dfc62 191 /*
chrigelburri 8:696c2f9dfc62 192 robotControl.setDesiredPositionAndAngle(-0.7f, 1.0f, PI);
chrigelburri 7:34be8b3a979c 193 while(!(robotControl.getDistanceError() <= 0.05)) {
chrigelburri 7:34be8b3a979c 194 state.savePlotFile(s);
chrigelburri 7:34be8b3a979c 195 };
chrigelburri 2:d8e1613dc38b 196
chrigelburri 8:696c2f9dfc62 197 robotControl.setDesiredPositionAndAngle(-0.8f, 1.0f, PI);
chrigelburri 8:696c2f9dfc62 198 while(!(robotControl.getDistanceError() <= 0.05)) {
chrigelburri 7:34be8b3a979c 199 state.savePlotFile(s);
chrigelburri 7:34be8b3a979c 200 };
chrigelburri 6:48eeb41188dd 201
chrigelburri 6:48eeb41188dd 202
chrigelburri 8:696c2f9dfc62 203 robotControl.setDesiredPositionAndAngle(-1.0f, 1.0f, PI);
chrigelburri 8:696c2f9dfc62 204 while(!(s.millis >= 30000)) {
chrigelburri 6:48eeb41188dd 205 state.savePlotFile(s);
chrigelburri 8:696c2f9dfc62 206 }
chrigelburri 9:d3cdcdef9719 207
chrigelburri 8:696c2f9dfc62 208 */
chrigelburri 6:48eeb41188dd 209
chrigelburri 6:48eeb41188dd 210
chrigelburri 6:48eeb41188dd 211 ////////////////////////////////////////////////////////
chrigelburri 6:48eeb41188dd 212
chrigelburri 6:48eeb41188dd 213
chrigelburri 6:48eeb41188dd 214
chrigelburri 6:48eeb41188dd 215 // Epä Parkour fahrä
chrigelburri 11:775ebb69d5e1 216 /*
chrigelburri 11:775ebb69d5e1 217 robotControl.setDesiredPositionAndAngle(START_X_OFFSET, START_Y_OFFSET, PI/2);
chrigelburri 11:775ebb69d5e1 218 wait(0.1);
chrigelburri 6:48eeb41188dd 219
chrigelburri 11:775ebb69d5e1 220 robotControl.setDesiredPositionAndAngle(-1.50f, 1.50f, 3*PI/4);
chrigelburri 11:775ebb69d5e1 221 while(!(robotControl.getDistanceError() <= 0.9)) {
chrigelburri 11:775ebb69d5e1 222 state.savePlotFile(s);
chrigelburri 11:775ebb69d5e1 223 };
chrigelburri 6:48eeb41188dd 224
chrigelburri 11:775ebb69d5e1 225 robotControl.setDesiredPositionAndAngle(-1.20f, 2.1f, PI/4);
chrigelburri 11:775ebb69d5e1 226 while(!(robotControl.getDistanceError() <= 0.7)) {
chrigelburri 11:775ebb69d5e1 227 state.savePlotFile(s);
chrigelburri 11:775ebb69d5e1 228 };
chrigelburri 5:48a258f6335e 229
chrigelburri 11:775ebb69d5e1 230 robotControl.setDesiredPositionAndAngle(-0.75f, 3.0f, PI/2);
chrigelburri 11:775ebb69d5e1 231 while(!(robotControl.getDistanceError() <= 0.7)) {
chrigelburri 11:775ebb69d5e1 232 state.savePlotFile(s);
chrigelburri 11:775ebb69d5e1 233 };
chrigelburri 6:48eeb41188dd 234
chrigelburri 11:775ebb69d5e1 235 robotControl.setDesiredPositionAndAngle(-1.0f, 3.75f, 3*PI/4);
chrigelburri 11:775ebb69d5e1 236 while(!(robotControl.getDistanceError() <= 0.55)) {
chrigelburri 11:775ebb69d5e1 237 state.savePlotFile(s);
chrigelburri 11:775ebb69d5e1 238 };
chrigelburri 8:696c2f9dfc62 239
chrigelburri 4:3a97923ff2d4 240
chrigelburri 11:775ebb69d5e1 241 robotControl.setDesiredPositionAndAngle(-1.5f, 3.6f, PI);
chrigelburri 11:775ebb69d5e1 242 while(!(robotControl.getDistanceError() <= 0.05)) {
chrigelburri 11:775ebb69d5e1 243 state.savePlotFile(s);
chrigelburri 11:775ebb69d5e1 244 };
chrigelburri 11:775ebb69d5e1 245
chrigelburri 11:775ebb69d5e1 246 robotControl.setDesiredPositionAndAngle(-2.6f, 3.0f, -PI/2);
chrigelburri 11:775ebb69d5e1 247 while(!(robotControl.getDistanceError() <= 1.0)) {
chrigelburri 11:775ebb69d5e1 248 state.savePlotFile(s);
chrigelburri 11:775ebb69d5e1 249 };
chrigelburri 11:775ebb69d5e1 250
chrigelburri 11:775ebb69d5e1 251 robotControl.setDesiredPositionAndAngle(-1.74f, 1.30f, -PI/2);
chrigelburri 11:775ebb69d5e1 252 while(!(robotControl.getDistanceError() <= 0.1)) {
chrigelburri 11:775ebb69d5e1 253 state.savePlotFile(s);
chrigelburri 11:775ebb69d5e1 254 };
chrigelburri 11:775ebb69d5e1 255 robotControl.setDesiredPositionAndAngle(-1.75f, 0.80f, -PI/2);
chrigelburri 11:775ebb69d5e1 256 while(!(s.millis >= 32000)) {
chrigelburri 11:775ebb69d5e1 257 state.savePlotFile(s);
chrigelburri 11:775ebb69d5e1 258 }
chrigelburri 9:d3cdcdef9719 259
chrigelburri 11:775ebb69d5e1 260 */
chrigelburri 11:775ebb69d5e1 261
chrigelburri 11:775ebb69d5e1 262
chrigelburri 11:775ebb69d5e1 263
chrigelburri 11:775ebb69d5e1 264 /*
chrigelburri 9:d3cdcdef9719 265
chrigelburri 11:775ebb69d5e1 266 pc.baud(460800);
chrigelburri 11:775ebb69d5e1 267 pc.printf("Welcome to adkTerm\n\n\n\n\n\n\r");
chrigelburri 11:775ebb69d5e1 268 pc.printf("here we go... \n");
chrigelburri 11:775ebb69d5e1 269 adkTerm.setupDevice();
chrigelburri 11:775ebb69d5e1 270 pc.printf("Android Development Kit: start\r\n");
chrigelburri 11:775ebb69d5e1 271 USBInit();
chrigelburri 11:775ebb69d5e1 272 while (1) {
chrigelburri 11:775ebb69d5e1 273 USBLoop();
chrigelburri 11:775ebb69d5e1 274
chrigelburri 11:775ebb69d5e1 275 pc.printf("Android x: %f ",adkTerm.getx());
chrigelburri 11:775ebb69d5e1 276 pc.printf("Android y: %f ",adkTerm.gety());
chrigelburri 11:775ebb69d5e1 277 pc.printf("Android t: %f\n",adkTerm.gett());
chrigelburri 11:775ebb69d5e1 278 robotControl.setDesiredPositionAndAngle(adkTerm.getx(), adkTerm.gety(), adkTerm.gett());
chrigelburri 10:09ddb819fdcb 279 }
chrigelburri 8:696c2f9dfc62 280
chrigelburri 8:696c2f9dfc62 281
chrigelburri 8:696c2f9dfc62 282
chrigelburri 8:696c2f9dfc62 283
chrigelburri 10:09ddb819fdcb 284 state.savePlotFile(s);
chrigelburri 10:09ddb819fdcb 285 state.closePlotFile();
chrigelburri 10:09ddb819fdcb 286 state.stop();
chrigelburri 10:09ddb819fdcb 287 robotControl.setEnable(false);
chrigelburri 11:775ebb69d5e1 288 */
chrigelburri 10:09ddb819fdcb 289 }