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:
Thu Apr 11 09:22:35 2013 +0000
Revision:
14:6a45a9f940a8
Parent:
12:235e318a414f
Child:
15:cb1337567ad4
android 2.0 implemented (untested!)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chrigelburri 11:775ebb69d5e1 1 #ifndef _ANDROID_H_
chrigelburri 11:775ebb69d5e1 2 #define _ANDROID_H_
chrigelburri 11:775ebb69d5e1 3
chrigelburri 14:6a45a9f940a8 4 #include "RobotControl.h"
chrigelburri 11:775ebb69d5e1 5 #include "mbed.h"
chrigelburri 11:775ebb69d5e1 6 #include "AndroidAccessory.h"
chrigelburri 11:775ebb69d5e1 7 #include "defines.h"
chrigelburri 11:775ebb69d5e1 8 #include <string>
chrigelburri 11:775ebb69d5e1 9 #include <sstream>
chrigelburri 11:775ebb69d5e1 10 #include <vector>
chrigelburri 11:775ebb69d5e1 11 #include <iostream>
chrigelburri 11:775ebb69d5e1 12 #include <stdlib.h>
chrigelburri 11:775ebb69d5e1 13
chrigelburri 11:775ebb69d5e1 14 /**
chrigelburri 11:775ebb69d5e1 15 * @author Arno Galliker
chrigelburri 11:775ebb69d5e1 16 *
chrigelburri 14:6a45a9f940a8 17 * @copyright Copyright &copy; 2013 HSLU Pren Team #1 Cruising Crêpe
chrigelburri 11:775ebb69d5e1 18 * All rights reserved.
chrigelburri 11:775ebb69d5e1 19 *
chrigelburri 14:6a45a9f940a8 20 * @brief
chrigelburri 11:775ebb69d5e1 21 *
chrigelburri 11:775ebb69d5e1 22 * This class implements communication with the android smartphone
chrigelburri 11:775ebb69d5e1 23 * For more information see the Android ADK Cookbook:
chrigelburri 11:775ebb69d5e1 24 * <a href="http://mbed.org/cookbook/mbed-with-Android-ADK">http://mbed.org/cookbook/mbed-with-Android-ADK</a>
chrigelburri 11:775ebb69d5e1 25 *
chrigelburri 11:775ebb69d5e1 26 * Originally created by p07gbar from work by Makoto Abe
chrigelburri 11:775ebb69d5e1 27 */
chrigelburri 11:775ebb69d5e1 28
chrigelburri 14:6a45a9f940a8 29 //#define OUTL 100
chrigelburri 14:6a45a9f940a8 30 //#define INBL 100
chrigelburri 11:775ebb69d5e1 31
chrigelburri 14:6a45a9f940a8 32 class AdkTerm : public AndroidAccessory, public Task
chrigelburri 11:775ebb69d5e1 33 {
chrigelburri 11:775ebb69d5e1 34
chrigelburri 11:775ebb69d5e1 35 private:
chrigelburri 11:775ebb69d5e1 36
chrigelburri 14:6a45a9f940a8 37 /** @brief Instance of RobotControl*/
chrigelburri 14:6a45a9f940a8 38 RobotControl* robotControl;
chrigelburri 11:775ebb69d5e1 39
chrigelburri 14:6a45a9f940a8 40 float period;
chrigelburri 14:6a45a9f940a8 41
chrigelburri 14:6a45a9f940a8 42 /** @brief Char buffer with a size of OUTL */
chrigelburri 11:775ebb69d5e1 43 char buffer[OUTL];
chrigelburri 11:775ebb69d5e1 44
chrigelburri 14:6a45a9f940a8 45 state_t* s;
chrigelburri 14:6a45a9f940a8 46
chrigelburri 14:6a45a9f940a8 47 /** @brief Buffer count ??? */
chrigelburri 11:775ebb69d5e1 48 int bcount;
chrigelburri 14:6a45a9f940a8 49
chrigelburri 14:6a45a9f940a8 50 /** @brief States if something is written to the buffer?? */
chrigelburri 11:775ebb69d5e1 51 bool ind;
chrigelburri 14:6a45a9f940a8 52
chrigelburri 14:6a45a9f940a8 53 /** @brief Desired position in meters for x-coordinate, given by android */
chrigelburri 14:6a45a9f940a8 54 float desiredX;
chrigelburri 14:6a45a9f940a8 55
chrigelburri 14:6a45a9f940a8 56 /** @brief Desired position in meters for y-coordinate, given by android */
chrigelburri 14:6a45a9f940a8 57 float desiredY;
chrigelburri 14:6a45a9f940a8 58
chrigelburri 14:6a45a9f940a8 59 /** @brief Desired position in degrees for theta, given by android */
chrigelburri 14:6a45a9f940a8 60 float desiredTheta;
chrigelburri 11:775ebb69d5e1 61
chrigelburri 11:775ebb69d5e1 62 public:
chrigelburri 11:775ebb69d5e1 63
chrigelburri 11:775ebb69d5e1 64 /**
chrigelburri 14:6a45a9f940a8 65 * @brief Creates a <code>AdkTerm</code> object and initializes all private
chrigelburri 11:775ebb69d5e1 66 * state variables. Constructor
chrigelburri 14:6a45a9f940a8 67 * @param robotControl RobotControl obejct reference
chrigelburri 14:6a45a9f940a8 68 * @param period length of a period in seconds
chrigelburri 11:775ebb69d5e1 69 */
chrigelburri 14:6a45a9f940a8 70 AdkTerm(RobotControl* robotControl, state_t* s, float period);
chrigelburri 11:775ebb69d5e1 71
chrigelburri 11:775ebb69d5e1 72 /**
chrigelburri 14:6a45a9f940a8 73 * @brief Sets initial configurations and clears the buffer
chrigelburri 14:6a45a9f940a8 74 *
chrigelburri 11:775ebb69d5e1 75 */
chrigelburri 11:775ebb69d5e1 76 void setupDevice();
chrigelburri 11:775ebb69d5e1 77
chrigelburri 11:775ebb69d5e1 78 /**
chrigelburri 14:6a45a9f940a8 79 * @brief Returns the desired position in meters for x-coordinate, given by android
chrigelburri 11:775ebb69d5e1 80 * @return x-coordinate,given in [m]
chrigelburri 11:775ebb69d5e1 81 */
chrigelburri 14:6a45a9f940a8 82 float getDesiredX();
chrigelburri 11:775ebb69d5e1 83
chrigelburri 11:775ebb69d5e1 84 /**
chrigelburri 11:775ebb69d5e1 85 * Returns the desired position in meters for y-coordinate, given by android
chrigelburri 11:775ebb69d5e1 86 * @return y-coordinate,given in [m]
chrigelburri 11:775ebb69d5e1 87 */
chrigelburri 14:6a45a9f940a8 88 float getDesiredY();
chrigelburri 11:775ebb69d5e1 89
chrigelburri 14:6a45a9f940a8 90 /**
chrigelburri 14:6a45a9f940a8 91 * @brief Returns the esired position in degrees for theta, given by android
chrigelburri 14:6a45a9f940a8 92 * @return y-coordinate,given in degrees [°]
chrigelburri 14:6a45a9f940a8 93 */
chrigelburri 14:6a45a9f940a8 94 float getDesiredTheta();
chrigelburri 14:6a45a9f940a8 95
chrigelburri 14:6a45a9f940a8 96 /** @brief Method to call when a tick period is over */
chrigelburri 14:6a45a9f940a8 97 void onTick();
chrigelburri 11:775ebb69d5e1 98
chrigelburri 11:775ebb69d5e1 99 private:
chrigelburri 11:775ebb69d5e1 100
chrigelburri 11:775ebb69d5e1 101 /**
chrigelburri 14:6a45a9f940a8 102 * @brief Clears the buffer and bcount
chrigelburri 11:775ebb69d5e1 103 */
chrigelburri 11:775ebb69d5e1 104 void resetDevice();
chrigelburri 11:775ebb69d5e1 105
chrigelburri 11:775ebb69d5e1 106 /**
chrigelburri 14:6a45a9f940a8 107 * @brief Takes an string, a vector of strings for the delimited tokens, and a with the
chrigelburri 11:775ebb69d5e1 108 * @param str
chrigelburri 11:775ebb69d5e1 109 * @param tokens
chrigelburri 11:775ebb69d5e1 110 * @param delimiters
chrigelburri 11:775ebb69d5e1 111 */
chrigelburri 14:6a45a9f940a8 112 void Tokenize(const string& str,
chrigelburri 14:6a45a9f940a8 113 vector<string>& tokens,
chrigelburri 14:6a45a9f940a8 114 const string& delimiters = " ");
chrigelburri 11:775ebb69d5e1 115
chrigelburri 11:775ebb69d5e1 116 /**
chrigelburri 14:6a45a9f940a8 117 * @brief
chrigelburri 11:775ebb69d5e1 118 * @param buf
chrigelburri 11:775ebb69d5e1 119 * @param len
chrigelburri 11:775ebb69d5e1 120 */
chrigelburri 11:775ebb69d5e1 121 int callbackRead(u8 *buf, int len);
chrigelburri 11:775ebb69d5e1 122
chrigelburri 11:775ebb69d5e1 123 /**
chrigelburri 14:6a45a9f940a8 124 * @brief
chrigelburri 11:775ebb69d5e1 125 *
chrigelburri 11:775ebb69d5e1 126 */
chrigelburri 11:775ebb69d5e1 127 int callbackWrite();
chrigelburri 11:775ebb69d5e1 128
chrigelburri 11:775ebb69d5e1 129 /**
chrigelburri 14:6a45a9f940a8 130 * @brief
chrigelburri 11:775ebb69d5e1 131 *
chrigelburri 11:775ebb69d5e1 132 */
chrigelburri 11:775ebb69d5e1 133 void serialIRQ();
chrigelburri 14:6a45a9f940a8 134
chrigelburri 14:6a45a9f940a8 135 /**
chrigelburri 14:6a45a9f940a8 136 * @brief Run method actualize every period
chrigelburri 14:6a45a9f940a8 137 */
chrigelburri 14:6a45a9f940a8 138 void run();
chrigelburri 11:775ebb69d5e1 139
chrigelburri 11:775ebb69d5e1 140 };
chrigelburri 11:775ebb69d5e1 141
chrigelburri 11:775ebb69d5e1 142 #endif