00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "ArExport.h"
00027 #include "ariaOSDef.h"
00028 #include "ArActionInput.h"
00029 #include "ArRobot.h"
00033 AREXPORT ArActionInput::ArActionInput(const char *name) :
00034 ArAction(name, "Inputs vel and heading")
00035 {
00036 clear();
00037 }
00038
00039 AREXPORT ArActionInput::~ArActionInput()
00040 {
00041 }
00042
00043 AREXPORT void ArActionInput::setVel(double vel)
00044 {
00045 myUsingVel = true;
00046 myVelSet = vel;
00047 }
00048
00049 AREXPORT void ArActionInput::setRotVel(double rotVel)
00050 {
00051 myRotRegime = ROTVEL;
00052 myRotVal = rotVel;
00053 }
00054
00055 AREXPORT void ArActionInput::deltaHeadingFromCurrent(double delta)
00056 {
00057 myRotRegime = DELTAHEADING;
00058 myRotVal = delta;
00059 }
00060
00061 AREXPORT void ArActionInput::setHeading(double heading)
00062 {
00063 myRotRegime = SETHEADING;
00064 myRotVal = heading;
00065 }
00066
00067 AREXPORT void ArActionInput::clear(void)
00068 {
00069 myUsingVel = false;
00070 myRotRegime = NONE;
00071 }
00072
00073 AREXPORT ArActionDesired *ArActionInput::fire(
00074 ArActionDesired currentDesired)
00075 {
00076 myDesired.reset();
00077
00078 if (myUsingVel)
00079 myDesired.setVel(myVelSet);
00080
00081 if (myRotRegime == ROTVEL)
00082 myDesired.setRotVel(myRotVal);
00083 else if (myRotRegime == DELTAHEADING)
00084 {
00085 myDesired.setDeltaHeading(myRotVal);
00086 myRotVal = 0;
00087 }
00088 else if (myRotRegime == SETHEADING)
00089 myDesired.setHeading(myRotVal);
00090 else if (myRotRegime != NONE)
00091 ArLog::log(ArLog::Normal, "ArActionInput::fire: Bad rot regime %d",
00092 myRotRegime);
00093
00094 return &myDesired;
00095 }