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 "ariaOSDef.h"
00027 #include "ArCommands.h"
00028 #include "ArExport.h"
00029 #include "ArSonarAutoDisabler.h"
00030 #include "ArRobot.h"
00031
00032 AREXPORT ArSonarAutoDisabler::ArSonarAutoDisabler(ArRobot *robot) :
00033 myUserTaskCB(this, &ArSonarAutoDisabler::userTask)
00034 {
00035 myRobot = robot;
00036 myUserTaskCB.setName("SonarAutoDisabler");
00037 myRobot->addUserTask("SonarAutoDisabler", -50, &myUserTaskCB);
00038 myLastMoved.setToNow();
00039 mySonarEnabled = true;
00040 }
00041
00042 AREXPORT ArSonarAutoDisabler::~ArSonarAutoDisabler()
00043 {
00044 myRobot->remUserTask("SonarAutoDisabler");
00045 }
00046
00047 AREXPORT void ArSonarAutoDisabler::userTask(void)
00048 {
00049
00050 if (myRobot->isTryingToMove() || fabs(myRobot->getVel()) > 3 ||
00051 fabs(myRobot->getRotVel()) > 3)
00052 {
00053 myLastMoved.setToNow();
00054
00055
00056 if (!mySonarEnabled && myRobot->areMotorsEnabled())
00057 {
00058 mySonarEnabled = true;
00059 myRobot->enableSonar();
00060 }
00061 }
00062 else
00063 {
00064
00065
00066 if (mySonarEnabled && myLastMoved.secSince() > 10)
00067 {
00068 mySonarEnabled = false;
00069 myRobot->disableSonar();
00070 }
00071 }
00072 }