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
00027 #include "ArExport.h"
00028 #include "ariaOSDef.h"
00029 #include "ArActionInput.h"
00030 #include "ArRobot.h"
00034 ArActionInput::ArActionInput(const char *name) :
00035 ArAction(name, "Inputs vel and heading")
00036 {
00037 clear();
00038 }
00039
00040 ArActionInput::~ArActionInput()
00041 {
00042 }
00043
00044 void ArActionInput::setVel(double vel)
00045 {
00046 myUsingVel = true;
00047 myVelSet = vel;
00048 }
00049
00050 void ArActionInput::setRotVel(double rotVel)
00051 {
00052 myRotRegime = ROTVEL;
00053 myRotVal = rotVel;
00054 }
00055
00056 void ArActionInput::deltaHeadingFromCurrent(double delta)
00057 {
00058 myRotRegime = DELTAHEADING;
00059 myRotVal = delta;
00060 }
00061
00062 void ArActionInput::setHeading(double heading)
00063 {
00064 myRotRegime = SETHEADING;
00065 myRotVal = heading;
00066 }
00067
00068 void ArActionInput::clear(void)
00069 {
00070 myUsingVel = false;
00071 myRotRegime = NONE;
00072 }
00073
00074 ArActionDesired *ArActionInput::fire(
00075 ArActionDesired currentDesired)
00076 {
00077 myDesired.reset();
00078
00079 if (myUsingVel)
00080 myDesired.setVel(myVelSet);
00081
00082 if (myRotRegime == ROTVEL)
00083 myDesired.setRotVel(myRotVal);
00084 else if (myRotRegime == DELTAHEADING)
00085 {
00086 myDesired.setDeltaHeading(myRotVal);
00087 myRotVal = 0;
00088 }
00089 else if (myRotRegime == SETHEADING)
00090 myDesired.setHeading(myRotVal);
00091 else if (myRotRegime != NONE)
00092 ArLog::log(ArLog::Normal, "ArActionInput::fire: Bad rot regime %d",
00093 myRotRegime);
00094
00095 return &myDesired;
00096 }