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
Fork of autonomous Robot Android by
Diff: main.cpp
- Revision:
- 11:775ebb69d5e1
- Parent:
- 10:09ddb819fdcb
- Child:
- 12:235e318a414f
diff -r 09ddb819fdcb -r 775ebb69d5e1 main.cpp --- a/main.cpp Thu Apr 04 06:43:43 2013 +0000 +++ b/main.cpp Fri Apr 05 10:58:42 2013 +0000 @@ -1,105 +1,107 @@ /*! \mainpage Index Page - * * @author Christian Burri + * @author Arno Galliker * - * @section LICENSE - * - * Copyright © 2013 HSLU Pren Team #1 Cruising Crêpe + * @copyright Copyright © 2013 HSLU Pren Team #1 Cruising Crêpe * All rights reserved. * - * @section DESCRIPTION + * @brief * * This Programm is for a autonomous robot for the competition * at the Hochschule Luzern. * We are one of the 32 teams. In the team #1 is: - * - Bauernfeind Julia <B>WI</B> <a href="julia.bauernfeind@stud.hslu.ch">julia.bauernfeind@stud.hslu.ch</a> - * - Büttler Pirmin <B>WI</B> <a href="pirmin.buetler@stud.hslu.ch">pirmin.buetler@stud.hslu.ch</a> - * - Amberg Reto <B>I</B> <a href="reto.amberg@stud.hslu.ch">reto.amberg@stud.hslu.ch</a> - * - Galliker Arno <B>I</B> <a href="arno.galliker@stud.hslu.ch">arno.galliker@stud.hslu.ch</a> - * - Amrein Marcel <B>M</B> <a href="marcel.amrein@stud.hslu.ch">marcel.amrein@stud.hslu.ch</a> - * - Flühler Ramon <B>M</B> <a href="ramon.fluehler@stud.hslu.ch">ramon.fluehler@stud.hslu.ch</a> - * - Burri Christian <B>ET</B> <a href="christian.burri@stud.hslu.ch">christian.burri@stud.hslu.ch</a> + * - Bauernfeind Julia <B>WI</B> <a href="mailto:julia.bauernfeind@stud.hslu.ch">julia.bauernfeind@stud.hslu.ch</a> + * - Büttler Pirmin <B>WI</B> <a href="mailto:pirmin.buetler@stud.hslu.ch">pirmin.buetler@stud.hslu.ch</a> + * - Amberg Reto <B>I</B> <a href="mailto:reto.amberg@stud.hslu.ch">reto.amberg@stud.hslu.ch</a> + * - Galliker Arno <B>I</B> <a href="mailto:arno.galliker@stud.hslu.ch">arno.galliker@stud.hslu.ch</a> + * - Amrein Marcel <B>M</B> <a href="mailto:marcel.amrein@stud.hslu.ch">marcel.amrein@stud.hslu.ch</a> + * - Flühler Ramon <B>M</B> <a href="mailto:ramon.fluehler@stud.hslu.ch">ramon.fluehler@stud.hslu.ch</a> + * - Burri Christian <B>ET</B> <a href="mailto:christian.burri@stud.hslu.ch">christian.burri@stud.hslu.ch</a> * * The postition control is based on polar coordiantes. * 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> * + * */ -#include "mbed.h" -#include "math.h" +/** + * @file main.cpp + */ + #include "defines.h" #include "State.h" -#include "HMC5883L.h" -#include "HMC6352.h" #include "RobotControl.h" -#include "Ping.h" -#include "PowerControl/EthernetPowerControl.h" //#include "android.h" //Android -//AdkTerm AdkTerm; +//AdkTerm adkTerm; + +/** + * @name Hallsensor + * @{ + */ + + /** + * @brief <code>hallsensorLeft</code> object with pin15, pin17 and pin16 + */ +Hallsensor hallLeft(p18, p17, p16); +/** + * @brief <code>hallsensorLeft</code> object with pin17, pin28 and pin29 + */ +Hallsensor hallRight(p27, p28, p29); +/*! @} */ /** - * LiPo Batterie for check an undervoltage. + * @name Motors and Robot Control + * @{ */ -AnalogIn battery(p15); - -// compass -//HMC5883L compass(p9, p10, PERIOD_COMPASS); // sda, sdl (I2C) -//HMC6352 compass(p9, p10, PERIOD_COMPASS); // sda, sdl (I2C) - -//Hallsensor -//hall1, hall2, hall3 -Hallsensor hallLeft(p18, p17, p16); -//hall1, hall2, hall3 -Hallsensor hallRight(p27, p28, p29); - -// Motors -//enb, ready, pwm, actualSpeed, Hallsensor object + + /** + * @brief <code>leftMotor</code> object with pin26, pin25, pin24, pin19 and <code>hallsensorLeft</code> object + */ MaxonESCON leftMotor(p26, p25, p24, p19, &hallLeft); -//enb, ready, pwm, actualSpeed, Hallsensor object +/** + * @brief <code>rightMotor</code> object with pin23, pin22, pin21, pin20 and <code>hallsensorRight</code> object + */ MaxonESCON rightMotor(p23, p22, p21, p20, &hallRight); -// Robot Control -RobotControl robotControl (&leftMotor, &rightMotor, /*&compass,*/ PERIOD_ROBOTCONTROL); - -// Logging & State -state_t s; // stuct state -State state(&s, &robotControl, &leftMotor, &rightMotor, /*&compass,*/ &battery, PERIOD_STATE); +/** + * @brief <code>robotControl</code> object with <code>leftMotor</code>, <code>rightMotor</code> and the sampling rate for the run method + */ +RobotControl robotControl(&leftMotor, &rightMotor, PERIOD_ROBOTCONTROL); +/*! @} */ -// PC USB communications -Serial pc(USBTX, USBRX); +/** + * @name Logging & State + * @{ + */ + + /** + * @brief Define the struct for the State and the Logging + */ +state_t s; +/** + * @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 + */ +State state(&s, &robotControl, &leftMotor, &rightMotor, p15, PERIOD_STATE); +/*! @} */ -DigitalOut myled(LED1); - - -// LiPo Batterie -float batterie_voltage; +// PC USB communications DAs wird danach gelöscht +//Serial pc(USBTX, USBRX); int main() { - /** Normal mbed power level for this setup is around 690mW - * assuming 5V used on Vin pin - * If you don't need networking... - * Power down Ethernet interface - saves around 175mW - * Also need to unplug network cable - just a cable sucks power - */ - PHY_PowerDown(); - - // robotControl.start(); - // compass.setOpMode(HMC6352_CONTINUOUS, 1, 20); - // compass.start(); - - state.initPlotFile(); - state.startTimerFromZero(); - state.start(); - + + state.initPlotFile(); + state.startTimerFromZero(); + state.start(); + robotControl.setEnable(false); wait(0.1); robotControl.setEnable(true); wait(0.1); - //robotControl.setAllToZero(0, 0, PI/2 ); - robotControl.setAllToZero(START_X_OFFSET, START_Y_OFFSET, PI/2 ); + robotControl.setAllToZero(0, 0, PI/2 ); +// robotControl.setAllToZero(START_X_OFFSET, START_Y_OFFSET, PI/2 ); robotControl.start(); @@ -108,7 +110,7 @@ // wait(0.1); ////////////////////////////////////////// - /* + robotControl.setDesiredPositionAndAngle(0.0f, 1.0f, PI); while(!(robotControl.getDistanceError() <= 0.1)) { state.savePlotFile(s); @@ -133,7 +135,7 @@ while(!(s.millis >= 32000)) { state.savePlotFile(s); }; - */ + @@ -211,72 +213,77 @@ // Epä Parkour fahrä - - robotControl.setDesiredPositionAndAngle(START_X_OFFSET, START_Y_OFFSET, PI/2); - wait(0.1); + /* + robotControl.setDesiredPositionAndAngle(START_X_OFFSET, START_Y_OFFSET, PI/2); + wait(0.1); - robotControl.setDesiredPositionAndAngle(-1.50f, 1.50f, 3*PI/4); - while(!(robotControl.getDistanceError() <= 0.9)) { - state.savePlotFile(s); - }; + robotControl.setDesiredPositionAndAngle(-1.50f, 1.50f, 3*PI/4); + while(!(robotControl.getDistanceError() <= 0.9)) { + state.savePlotFile(s); + }; - robotControl.setDesiredPositionAndAngle(-1.20f, 2.1f, PI/4); - while(!(robotControl.getDistanceError() <= 0.7)) { - state.savePlotFile(s); - }; + robotControl.setDesiredPositionAndAngle(-1.20f, 2.1f, PI/4); + while(!(robotControl.getDistanceError() <= 0.7)) { + state.savePlotFile(s); + }; - robotControl.setDesiredPositionAndAngle(-0.75f, 3.0f, PI/2); - while(!(robotControl.getDistanceError() <= 0.7)) { - state.savePlotFile(s); - }; + robotControl.setDesiredPositionAndAngle(-0.75f, 3.0f, PI/2); + while(!(robotControl.getDistanceError() <= 0.7)) { + state.savePlotFile(s); + }; - robotControl.setDesiredPositionAndAngle(-1.0f, 3.75f, 3*PI/4); - while(!(robotControl.getDistanceError() <= 0.55)) { - state.savePlotFile(s); - }; + robotControl.setDesiredPositionAndAngle(-1.0f, 3.75f, 3*PI/4); + while(!(robotControl.getDistanceError() <= 0.55)) { + state.savePlotFile(s); + }; - robotControl.setDesiredPositionAndAngle(-1.5f, 3.6f, PI); - while(!(robotControl.getDistanceError() <= 0.1)) { - state.savePlotFile(s); - }; + robotControl.setDesiredPositionAndAngle(-1.5f, 3.6f, PI); + while(!(robotControl.getDistanceError() <= 0.05)) { + state.savePlotFile(s); + }; + + robotControl.setDesiredPositionAndAngle(-2.6f, 3.0f, -PI/2); + while(!(robotControl.getDistanceError() <= 1.0)) { + state.savePlotFile(s); + }; + + robotControl.setDesiredPositionAndAngle(-1.74f, 1.30f, -PI/2); + while(!(robotControl.getDistanceError() <= 0.1)) { + state.savePlotFile(s); + }; + robotControl.setDesiredPositionAndAngle(-1.75f, 0.80f, -PI/2); + while(!(s.millis >= 32000)) { + state.savePlotFile(s); + } - robotControl.setDesiredPositionAndAngle(-2.4f, 3.0f, -PI/2); - while(!(robotControl.getDistanceError() <= 1.0)) { - state.savePlotFile(s); - }; + */ + + + +/* - robotControl.setDesiredPositionAndAngle(-1.74f, 1.30f, -PI/2); - while(!(robotControl.getDistanceError() <= 0.1)) { - state.savePlotFile(s); - }; - robotControl.setDesiredPositionAndAngle(-1.75f, 0.80f, -PI/2); - while(!(s.millis >= 32000)) { - state.savePlotFile(s); + pc.baud(460800); + pc.printf("Welcome to adkTerm\n\n\n\n\n\n\r"); + pc.printf("here we go... \n"); + adkTerm.setupDevice(); + pc.printf("Android Development Kit: start\r\n"); + USBInit(); + while (1) { + USBLoop(); + + pc.printf("Android x: %f ",adkTerm.getx()); + pc.printf("Android y: %f ",adkTerm.gety()); + pc.printf("Android t: %f\n",adkTerm.gett()); + robotControl.setDesiredPositionAndAngle(adkTerm.getx(), adkTerm.gety(), adkTerm.gett()); } - - /* - printf("here we go... \n"); - AdkTerm.setupDevice(); - printf("Android Development Kit: start\r\n"); - USBInit(); - while (!(s.millis >= 60000)) { - USBLoop(); - - printf("x: %f y: %f theta: %f", AdkTerm.getx(), AdkTerm.getx(), AdkTerm.getx() ) - - if( AdkTerm.getx() == 99) { - break; - } - } - */ - state.savePlotFile(s); state.closePlotFile(); state.stop(); robotControl.setEnable(false); + */ }