00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "RobotStateSymbols.h"
00010
00011 RobotStateSymbols::RobotStateSymbols(const BehaviorControlInterfaces& interfaces)
00012 : BehaviorControlInterfaces(interfaces)
00013 {
00014 }
00015
00016
00017 void RobotStateSymbols::registerSymbols(Xabsl2Engine& engine)
00018 {
00019
00020 engine.registerBooleanInputSymbol("robot-state.any-back-button-pressed-for-one-second",this,
00021 (bool (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getAnyBackButtonPressedForOneSecond);
00022
00023 engine.registerBooleanInputSymbol("robot-state.any-back-button-pressed-short-and-released",this,
00024 (bool (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getAnyBackButtonPressedShortAndReleased);
00025
00026 engine.registerBooleanInputSymbol("robot-state.fore-back-button-pressed-short-and-released",this,
00027 (bool (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getForeBackButtonPressedShortAndReleased);
00028
00029 engine.registerBooleanInputSymbol("robot-state.middle-back-button-pressed-short-and-released",this,
00030 (bool (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getMiddleBackButtonPressedShortAndReleased);
00031
00032 engine.registerBooleanInputSymbol("robot-state.hind-back-button-pressed-short-and-released",this,
00033 (bool (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getHindBackButtonPressedShortAndReleased);
00034
00035 engine.registerBooleanInputSymbol("robot-state.fore-back-button-pressed-short",this,
00036 (bool (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getForeBackButtonPressedShort);
00037
00038 engine.registerBooleanInputSymbol("robot-state.middle-back-button-pressed-short",this,
00039 (bool (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getMiddleBackButtonPressedShort);
00040
00041 engine.registerBooleanInputSymbol("robot-state.hind-back-button-pressed-short",this,
00042 (bool (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getHindBackButtonPressedShort);
00043
00044 engine.registerBooleanInputSymbol("robot-state.head-button-pressed-for-three-seconds",this,
00045 (bool (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getHeadButtonPressedForThreeSeconds);
00046
00047 engine.registerBooleanInputSymbol("robot-state.head-button-pressed-short",this,
00048 (bool (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getHeadButtonPressedShort);
00049
00050 engine.registerBooleanInputSymbol("robot-state.head-button-pressed-short-and-released",this,
00051 (bool (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getHeadButtonPressedShortAndReleased);
00052
00053
00054 engine.registerEnumeratedInputSymbol("robot-state.mouth-state",this,
00055 (int (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getMouthState);
00056 engine.registerEnumeratedInputSymbolEnumElement("robot-state.mouth-state","mouth-open",RobotState::mouthOpen);
00057 engine.registerEnumeratedInputSymbolEnumElement("robot-state.mouth-state","mouth-closed",RobotState::mouthClosed);
00058
00059 engine.registerBooleanInputSymbol("robot-state.ball-under-head",this,
00060 (bool (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getBallUnderHead);
00061
00062 engine.registerBooleanInputSymbol("robot-state.something-in-front-of-chest",this,
00063 (bool (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getSomethingInFrontOfChest);
00064
00065 engine.registerDecimalInputSymbol("robot-state.time-since-something-was-in-front-of-chest",this,
00066 (double (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getTimeSinceSomethingWasInFrontOfChest);
00067
00068 engine.registerDecimalInputSymbol("robot-state.distance-to-something-in-front-of-chest",this,
00069 (double (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getDistanceToSIFOC);
00070
00071
00072 engine.registerDecimalInputSymbol("robot-state.system-time",this,
00073 (double (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getCurrentSystemTime);
00074
00075 engine.registerDecimalInputSymbol("robot-state.remaining-capacity",this,
00076 (double (Xabsl2FunctionProvider::*)())&RobotStateSymbols::getRemainingCapacity);
00077 }
00078
00079 void RobotStateSymbols::update()
00080 {
00081 }
00082
00083 int RobotStateSymbols::getMouthState()
00084 {
00085 return robotState.getMouthState();
00086 }
00087
00088 double RobotStateSymbols::getCurrentSystemTime()
00089 {
00090 return SystemCall::getCurrentSystemTime();
00091 }
00092
00093 double RobotStateSymbols::getRemainingCapacity()
00094 {
00095 return SystemCall::getRemainingPower();
00096 }
00097
00098 bool RobotStateSymbols::getBallUnderHead()
00099 {
00100
00101
00102 return sensorDataBuffer.lastFrame().data[SensorData::headTilt]>270000;
00103 }
00104
00105 bool RobotStateSymbols::getSomethingInFrontOfChest()
00106 {
00107 return robotState.getSomethingInFrontOfChest();
00108 }
00109
00110 double RobotStateSymbols::getTimeSinceSomethingWasInFrontOfChest()
00111 {
00112 return SystemCall::getTimeSince(robotState.getTimeWhenSomethingWasInFrontOfChestLast());
00113 }
00114
00115 double RobotStateSymbols::getDistanceToSIFOC()
00116 {
00117 return robotState.getDistanceToSIFOC();
00118 }
00119
00120
00121 bool RobotStateSymbols::getAnyBackButtonPressedForOneSecond()
00122 {
00123 return (
00124 (
00125 robotState.getAnyBackButtonPressed() &&
00126 robotState.getAnyBackButtonDuration() > 1000
00127 )
00128 ||
00129 (
00130 !robotState.getAnyBackButtonPressed() &&
00131 robotState.getAnyBackButtonPressedTime() > 1000 &&
00132 SystemCall::getTimeSince(robotState.getAnyBackButtonTime()) < 700
00133 )
00134 );
00135 }
00136
00137 bool RobotStateSymbols::getAnyBackButtonPressedShortAndReleased()
00138 {
00139 return (
00140 !robotState.getAnyBackButtonPressed() &&
00141 robotState.getAnyBackButtonPressedTime() < 1000 &&
00142 SystemCall::getTimeSince(robotState.getAnyBackButtonTime()) < 700
00143 );
00144 }
00145
00146 bool RobotStateSymbols::getForeBackButtonPressedShort()
00147 {
00148 return (
00149 (
00150 robotState.getButtonPressed(BodyPercept::backFront) &&
00151 robotState.getButtonDuration(BodyPercept::backFront) < 800
00152 )
00153 );
00154 }
00155
00156 bool RobotStateSymbols::getForeBackButtonPressedShortAndReleased()
00157 {
00158 return (
00159 !robotState.getButtonPressed(BodyPercept::backFront) &&
00160 robotState.getButtonPressedTime(BodyPercept::backFront) < 1000 &&
00161 SystemCall::getTimeSince(robotState.getButtonTime(BodyPercept::backFront)) < 700
00162 );
00163 }
00164
00165 bool RobotStateSymbols::getMiddleBackButtonPressedShort()
00166 {
00167 return (
00168 (
00169 robotState.getButtonPressed(BodyPercept::backMiddle) &&
00170 robotState.getButtonDuration(BodyPercept::backMiddle) < 800
00171 )
00172 );
00173 }
00174
00175 bool RobotStateSymbols::getMiddleBackButtonPressedShortAndReleased()
00176 {
00177 return (
00178 !robotState.getButtonPressed(BodyPercept::backMiddle) &&
00179 robotState.getButtonPressedTime(BodyPercept::backMiddle) < 1000 &&
00180 SystemCall::getTimeSince(robotState.getButtonTime(BodyPercept::backMiddle)) < 700
00181 );
00182 }
00183
00184 bool RobotStateSymbols::getHindBackButtonPressedShort()
00185 {
00186 return (
00187 (
00188 robotState.getButtonPressed(BodyPercept::backBack) &&
00189 robotState.getButtonDuration(BodyPercept::backBack) < 800
00190 )
00191 );
00192 }
00193
00194 bool RobotStateSymbols::getHindBackButtonPressedShortAndReleased()
00195 {
00196 return (
00197 !robotState.getButtonPressed(BodyPercept::backBack) &&
00198 robotState.getButtonPressedTime(BodyPercept::backBack) < 1000 &&
00199 SystemCall::getTimeSince(robotState.getButtonTime(BodyPercept::backBack)) < 700
00200 );
00201 }
00202
00203 bool RobotStateSymbols::getHeadButtonPressedForThreeSeconds()
00204 {
00205 return (
00206 (
00207 robotState.getButtonPressed(BodyPercept::head) &&
00208 robotState.getButtonDuration(BodyPercept::head) > 3000
00209 )
00210 ||
00211 (
00212 !robotState.getButtonPressed(BodyPercept::head) &&
00213 robotState.getButtonPressedTime(BodyPercept::head) > 3000 &&
00214 SystemCall::getTimeSince(robotState.getButtonTime(BodyPercept::head)) < 500
00215 )
00216 );
00217 }
00218
00219 bool RobotStateSymbols::getHeadButtonPressedShort()
00220 {
00221 return (
00222 (
00223 robotState.getButtonPressed(BodyPercept::head) &&
00224
00225 robotState.getButtonDuration(BodyPercept::head) < 800
00226 )
00227 );
00228 }
00229
00230 bool RobotStateSymbols::getHeadButtonPressedShortAndReleased()
00231 {
00232 return (
00233 !robotState.getButtonPressed(BodyPercept::head) &&
00234
00235 robotState.getButtonPressedTime(BodyPercept::head) < 1000 &&
00236 SystemCall::getTimeSince(robotState.getButtonTime(BodyPercept::head)) < 700
00237 );
00238 }
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321