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:
3:92ba0254af87
Parent:
2:d8e1613dc38b
Child:
5:48a258f6335e
--- a/RobotControl/RobotControl.h	Sun Mar 03 16:26:47 2013 +0000
+++ b/RobotControl/RobotControl.h	Thu Mar 07 09:47:07 2013 +0000
@@ -1,7 +1,6 @@
 #ifndef _ROBOT_CONTROL_H_
 #define _ROBOT_CONTROL_H_
 
-#include <cmath>
 #include "mbed.h"
 #include "MaxonESCON.h"
 #include "MotionState.h"
@@ -20,13 +19,13 @@
  *
  * @section DESCRIPTION
  *
- * This class controls the position and orientation of the robot. It has
+ * This class controls the position of the robot. It has
  * a run loop that is called periodically. This run loop reads the actual
  * positions of the wheels, calculates the actual position and orientation
- * of the robot, calculates to move the robot,
+ * of the robot, calculates to move the robot
  * and writes these velocity values to the motor servo drives.
  * This class offers methods to enable or disable the controller, and to set
- * the desired translational and rotational speed values of the robot.
+ * the desired x- and y-postion and the &theta; values of the robot.
  */
 
 class RobotControl : public Task
@@ -49,12 +48,12 @@
 public:
 
     /**
-     * Creates a robot control object and initializes all private
+     * Creates a <code>Robot Control</code> object and initializes all private
      * state variables.
-     * @param motorControllerLeft a reference to the servo drive for the left motor.
-     * @param motorControllerRight a reference to the servo drive for the right motor.
+     * @param motorControllerLeft a reference to the servo drive for the left motor
+     * @param motorControllerRight a reference to the servo drive for the right motor
      * @param compass Modul HMC5883L
-     * @param period the sampling period of the run loop of this controller, given in [s].
+     * @param period the sampling period of the run loop of this controller, given in [s]
      */
     RobotControl(MaxonESCON* motorControllerLeft, MaxonESCON* motorControllerRight, /*HMC6352* compass,*/ float period);
 
@@ -72,152 +71,159 @@
 
     /**
     * Tests if the servo drives of the motors are enabled.
-    * @return <code>true</code> if the drives are enabled, <code>false</code> otherwise.
+    * @return <code>true</code> if the drives are enabled, <code>false</code> otherwise
     */
     bool        isEnabled();
 
     /**
     * Sets the maximum acceleration value.
-    * @param acceleration the maximum acceleration value to use for the calculation of the motion trajectory, given in [m/s<SUP>2</SUP>].
+    * @param acceleration the maximum acceleration value to use for the calculation of the motion trajectory, given in [m/s<SUP>2</SUP>]
     */
     void        setAcceleration(float acceleration);
 
     /**
     * Sets the maximum acceleration value of rotation.
-    * @param acceleration the maximum acceleration value to use for the calculation of the motion trajectory, given in [rad/s<SUP>2</SUP>].
+    * @param acceleration the maximum acceleration value to use for the calculation of the motion trajectory, given in [rad/s<SUP>2</SUP>]
     */
     void        setThetaAcceleration(float acceleration);
 
     /**
     * Sets the desired translational speed of the robot.
-    * @param speed the desired speed, given in [m/s].
+    * @param speed the desired speed, given in [m/s]
     */
     void        setDesiredSpeed(float speed);
 
     /**
     * Sets the desired rotational speed of the robot.
-    * @param omega the desired rotational speed, given in [rad/s].
+    * @param omega the desired rotational speed, given in [rad/s]
     */
     void        setDesiredOmega(float omega);
 
     /**
     * Sets the desired X-position of the robot.
-    * @param xposition the desired position, given in [m].
+    * @param xposition the desired position, given in [m]
     */
     void        setxPosition(float xposition);
 
     /**
     * Sets the desired Y-position of the robot.
-    * @param yposition the desired position, given in [m].
+    * @param yposition the desired position, given in [m]
     */
     void        setyPosition(float yposition);
 
     /**
-    * Sets the desired angle of the robot.
-    * @param theta the desired angle, given in [rad].
+    * Sets the desired &theta; of the robot.
+    * @param theta the desired &theta;, given in [rad]
     */
     void        setTheta(float theta);
-    
+
     /**
-    * Sets the desired Position and angle.
-    * @param xposition the desired position, given in [m].
-    * @param yposition the desired position, given in [m]. 
-    * @param theta the desired angle, given in [rad].  
+    * Sets the desired Position and &theta;.
+    * @param xposition the desired position, given in [m]
+    * @param yposition the desired position, given in [m]
+    * @param theta the desired &theta;, given in [rad]
     */
     void        setPositionAngle(float xposition, float yposition, float theta);
 
     /**
-     * Gets the desired Theta. Angle of the goal Point.
-     * @return the desired Theta, given in [rad].
+     * Gets the desired &theta; of the goal point.
+     * @return the desired &theta;, given in [rad]
      */
     float       getTheta();
 
     /**
      * Gets the desired translational speed of the robot.
-     * @return the desired speed, given in [m/s].
+     * @return the desired speed, given in [m/s]
      */
     float       getDesiredSpeed();
 
     /**
      * Gets the actual translational speed of the robot.
-     * @return the desired speed, given in [m/s].
+     * @return the desired speed, given in [m/s]
      */
     float       getActualSpeed();
 
     /**
     * Gets the desired rotational speed of the robot.
-    * @return the desired speed, given in [rad/s].
+    * @return the desired speed, given in [rad/s]
     */
     float       getDesiredOmega();
 
     /**
     * Gets the actual rotational speed of the robot.
-    * @return the desired speed, given in [rad/s].
+    * @return the desired speed, given in [rad/s]
     */
     float       getActualOmega();
 
     /**
     * Gets the actual translational X-position of the robot.
-    * @return the actual position, given in [m].
+    * @return the actual position, given in [m]
     */
     float       getxActualPosition();
 
     /**
     * Gets the X-position following error of the robot.
-    * @return the position following error, given in [m].
+    * @return the position following error, given in [m]
     */
     float       getxPositionError();
 
     /**
     * Gets the actual translational Y-position of the robot.
-    * @return the actual position, given in [m].
+    * @return the actual position, given in [m]
     */
     float       getyActualPosition();
 
     /**
     * Gets the Y-position following error of the robot.
-    * @return the position following error, given in [m].
+    * @return the position following error, given in [m]
     */
     float       getyPositionError();
 
     /**
     * Gets the actual orientation of the robot.
-    * @return the orientation, given in [rad].
+    * @return the orientation, given in [rad]
     */
     float       getActualTheta();
 
     /**
     * Gets the orientation following error of the robot.
-    * @return the orientation following error, given in [rad].
+    * @return the orientation following error, given in [rad]
     */
     float       getThetaError();
-    
+
     /**
-    * Gets the Distance to Disired point. Calculate witch pythagoras
-    * @return distance to goal, given in [m].
+    * Gets the distance to disired point. Calculate with pythagoras.
+    * @return distance to goal, given in [m]
     */
     float       getDistanceError();
-    
+
     /**
-    * Gets the Angle ot the pointing vector to the goal right the unicycle axis from actual point
-    * @return theta to goal, given in [rad].
+    * Gets the &theta; ot the pointing vector to the goal right the unicycle axis from actual point.
+    * @return theta to goal, given in [rad]
     */
     float       getThetaErrorToGoal();
-    
+
     /**
-    * Gets the Angle ot the pointing vector to the goal right the unicycle main axis
-    * @return theta from the goal, given in [rad].
+    * Gets the &theta; ot the pointing vector to the goal right the unicycle main axis.
+    * @return theta from the goal, given in [rad]
     */
     float       getThetaGoal();
 
     /**
-    * Set all state to zero
-    * @param xZeroPos Sets the start X-position [m].
-    * @param yZeroPos Sets the start y-position [m].
-    * @param theta Sets the start angle [rad].
+    * Set all state to zero, except the X-position, y-position and &theta;.
+    * @param xZeroPos Sets the start X-position, given in [m]
+    * @param yZeroPos Sets the start y-position, given in [m]
+    * @param theta Sets the start &theta;, given in [rad]
     */
     void        setAllToZero(float xZeroPos, float yZeroPos, float theta);
 
+    /**
+    * Add &plusmn;2&pi; when the range of the radian is over +&pi; or under -&pi;.
+    * @param theta to check the value
+    * @return the value in the range from -&pi; to +&pi;
+    */
+    float        PiRange(float theta);
+
     void        run();
 };