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:
Sun Mar 03 16:26:47 2013 +0000
Revision:
2:d8e1613dc38b
Parent:
1:6cd533a712c6
Child:
3:92ba0254af87
Viereck Fahren; Code aufger?umt und eine setter methode progammiert f?r sollwert

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chrigelburri 2:d8e1613dc38b 1 /**
chrigelburri 2:d8e1613dc38b 2 * @author Christian Burri
chrigelburri 2:d8e1613dc38b 3 *
chrigelburri 2:d8e1613dc38b 4 * @section LICENSE
chrigelburri 2:d8e1613dc38b 5 *
chrigelburri 2:d8e1613dc38b 6 * Copyright © 2013 HSLU Pren Team #1 Cruising Crêpe
chrigelburri 1:6cd533a712c6 7 * All rights reserved.
chrigelburri 2:d8e1613dc38b 8 *
chrigelburri 2:d8e1613dc38b 9 * @section DESCRIPTION
chrigelburri 2:d8e1613dc38b 10 *
chrigelburri 2:d8e1613dc38b 11 * ?????
chrigelburri 2:d8e1613dc38b 12 *
chrigelburri 1:6cd533a712c6 13 */
chrigelburri 1:6cd533a712c6 14
chrigelburri 1:6cd533a712c6 15 #include "mbed.h"
chrigelburri 1:6cd533a712c6 16 #include "math.h"
chrigelburri 1:6cd533a712c6 17 #include "defines.h"
chrigelburri 1:6cd533a712c6 18 #include "State.h"
chrigelburri 1:6cd533a712c6 19 #include "HMC5883L.h"
chrigelburri 1:6cd533a712c6 20 #include "HMC6352.h"
chrigelburri 1:6cd533a712c6 21 #include "RobotControl.h"
chrigelburri 1:6cd533a712c6 22 #include "Ping.h"
chrigelburri 1:6cd533a712c6 23 #include "PowerControl/EthernetPowerControl.h"
chrigelburri 1:6cd533a712c6 24
chrigelburri 1:6cd533a712c6 25 // LiPo Batterie
chrigelburri 1:6cd533a712c6 26 AnalogIn battery(p15); // Battery check
chrigelburri 1:6cd533a712c6 27
chrigelburri 1:6cd533a712c6 28 // compass
chrigelburri 1:6cd533a712c6 29 //HMC5883L compass(p9, p10, PERIOD_COMPASS); // sda, sdl (I2C)
chrigelburri 1:6cd533a712c6 30 //HMC6352 compass(p9, p10, PERIOD_COMPASS); // sda, sdl (I2C)
chrigelburri 1:6cd533a712c6 31
chrigelburri 1:6cd533a712c6 32 //Hallsensor
chrigelburri 1:6cd533a712c6 33 //hall1, hall2, hall3
chrigelburri 1:6cd533a712c6 34 Hallsensor hallLeft(p18, p17, p16);
chrigelburri 1:6cd533a712c6 35 //hall1, hall2, hall3
chrigelburri 1:6cd533a712c6 36 Hallsensor hallRight(p27, p28, p29);
chrigelburri 1:6cd533a712c6 37
chrigelburri 1:6cd533a712c6 38 // Motors
chrigelburri 1:6cd533a712c6 39 //enb, ready, pwm, actualSpeed, Hallsensor object
chrigelburri 1:6cd533a712c6 40 MaxonESCON leftMotor(p26, p25, p24, p19, &hallLeft);
chrigelburri 1:6cd533a712c6 41 //enb, ready, pwm, actualSpeed, Hallsensor object
chrigelburri 1:6cd533a712c6 42 MaxonESCON rightMotor(p23, p22, p21, p20, &hallRight);
chrigelburri 1:6cd533a712c6 43
chrigelburri 1:6cd533a712c6 44 // Robot Control
chrigelburri 1:6cd533a712c6 45 RobotControl robotControl (&leftMotor, &rightMotor, /*&compass,*/ PERIOD_ROBOTCONTROL);
chrigelburri 1:6cd533a712c6 46
chrigelburri 1:6cd533a712c6 47 // Logging & State
chrigelburri 1:6cd533a712c6 48 state_t s; // stuct state
chrigelburri 1:6cd533a712c6 49 State state(&s, &robotControl, &leftMotor, &rightMotor, /*&compass,*/ &battery, PERIOD_STATE);
chrigelburri 1:6cd533a712c6 50
chrigelburri 1:6cd533a712c6 51 // PC USB communications
chrigelburri 1:6cd533a712c6 52 Serial pc(USBTX, USBRX);
chrigelburri 1:6cd533a712c6 53
chrigelburri 1:6cd533a712c6 54 DigitalOut myled(LED1);
chrigelburri 1:6cd533a712c6 55
chrigelburri 1:6cd533a712c6 56 //float magout[3] = {0};
chrigelburri 1:6cd533a712c6 57
chrigelburri 1:6cd533a712c6 58 // LiPo Batterie
chrigelburri 1:6cd533a712c6 59 float batterie_voltage;
chrigelburri 1:6cd533a712c6 60
chrigelburri 1:6cd533a712c6 61 int main()
chrigelburri 1:6cd533a712c6 62 {
chrigelburri 1:6cd533a712c6 63 /** Normal mbed power level for this setup is around 690mW
chrigelburri 1:6cd533a712c6 64 * assuming 5V used on Vin pin
chrigelburri 1:6cd533a712c6 65 * If you don't need networking...
chrigelburri 1:6cd533a712c6 66 * Power down Ethernet interface - saves around 175mW
chrigelburri 1:6cd533a712c6 67 * Also need to unplug network cable - just a cable sucks power
chrigelburri 1:6cd533a712c6 68 */
chrigelburri 1:6cd533a712c6 69 PHY_PowerDown();
chrigelburri 2:d8e1613dc38b 70
chrigelburri 2:d8e1613dc38b 71 // robotControl.start();
chrigelburri 1:6cd533a712c6 72 // compass.setOpMode(HMC6352_CONTINUOUS, 1, 20);
chrigelburri 1:6cd533a712c6 73 // compass.start();
chrigelburri 2:d8e1613dc38b 74
chrigelburri 2:d8e1613dc38b 75 state.initPlotFile();
chrigelburri 2:d8e1613dc38b 76
chrigelburri 1:6cd533a712c6 77 robotControl.start();
chrigelburri 1:6cd533a712c6 78 robotControl.setEnable(false);
chrigelburri 1:6cd533a712c6 79 wait(0.01);
chrigelburri 1:6cd533a712c6 80 robotControl.setEnable(true);
chrigelburri 1:6cd533a712c6 81 wait(0.01);
chrigelburri 1:6cd533a712c6 82 robotControl.setAllToZero(0, 0, PI/2 );
chrigelburri 2:d8e1613dc38b 83
chrigelburri 1:6cd533a712c6 84 leftMotor.setPulses(0);
chrigelburri 1:6cd533a712c6 85 rightMotor.setPulses(0);
chrigelburri 2:d8e1613dc38b 86
chrigelburri 2:d8e1613dc38b 87 state.startTimerFromZero();
chrigelburri 1:6cd533a712c6 88 state.start();
chrigelburri 2:d8e1613dc38b 89
chrigelburri 2:d8e1613dc38b 90 robotControl.setPositionAngle(0.0f, 1.0f, 17*PI/18);
chrigelburri 1:6cd533a712c6 91 while(!(s.millis >= 15000)) {
chrigelburri 1:6cd533a712c6 92 state.savePlotFile(s);
chrigelburri 1:6cd533a712c6 93 };
chrigelburri 2:d8e1613dc38b 94
chrigelburri 2:d8e1613dc38b 95 robotControl.setPositionAngle(-1.0f, 1.0f, -PI/2);
chrigelburri 1:6cd533a712c6 96 while(!(s.millis >= 30000)) {
chrigelburri 1:6cd533a712c6 97 state.savePlotFile(s);
chrigelburri 2:d8e1613dc38b 98 };
chrigelburri 2:d8e1613dc38b 99
chrigelburri 2:d8e1613dc38b 100 robotControl.setPositionAngle(-1.0f, 0.0f, 0.0f);
chrigelburri 2:d8e1613dc38b 101 while(!(s.millis >= 45000)) {
chrigelburri 2:d8e1613dc38b 102 state.savePlotFile(s);
chrigelburri 1:6cd533a712c6 103 };
chrigelburri 2:d8e1613dc38b 104
chrigelburri 2:d8e1613dc38b 105 robotControl.setPositionAngle(0.0f, 1.0f, PI/2);
chrigelburri 2:d8e1613dc38b 106 while(!(s.millis >= 63000)) {
chrigelburri 2:d8e1613dc38b 107 state.savePlotFile(s);
chrigelburri 2:d8e1613dc38b 108 };
chrigelburri 2:d8e1613dc38b 109
chrigelburri 2:d8e1613dc38b 110 state.savePlotFile(s);
chrigelburri 1:6cd533a712c6 111 state.closePlotFile();
chrigelburri 1:6cd533a712c6 112 state.stop();
chrigelburri 1:6cd533a712c6 113 robotControl.setEnable(false);
chrigelburri 1:6cd533a712c6 114 }