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: RobotControl/RobotControl.h
- 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 θ 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 θ of the robot. + * @param theta the desired θ, 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 θ. + * @param xposition the desired position, given in [m] + * @param yposition the desired position, given in [m] + * @param theta the desired θ, 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 θ of the goal point. + * @return the desired θ, 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 θ 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 θ 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 θ. + * @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 θ, given in [rad] */ void setAllToZero(float xZeroPos, float yZeroPos, float theta); + /** + * Add ±2π when the range of the radian is over +π or under -π. + * @param theta to check the value + * @return the value in the range from -π to +π + */ + float PiRange(float theta); + void run(); };