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

Revision:
11:775ebb69d5e1
Parent:
10:09ddb819fdcb
Child:
12:235e318a414f
--- 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);
+    */
 }