Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Modules/HeadControl/GT2004HeadControl/GT2004HeadControlSymbols.cpp

Go to the documentation of this file.
00001 /** 
00002 * @file GT2004HeadControlSymbols.cpp
00003 *
00004 * Implementation of class GT2004HeadControlSymbols.
00005 *
00006 * @author Martin Lötzsch
00007 */
00008 
00009 #include "GT2004HeadControl.h"
00010 
00011 GT2004HeadControlSymbols::GT2004HeadControlSymbols(const HeadControlInterfaces& interfaces,
00012                                                    GT2004HeadControl& headControl,
00013                                                    GT2004BasicBehaviorDirectedScanForLandmarks& gt2004BasicBehaviorDirectedScanForLandmarks)
00014 : HeadControlInterfaces(interfaces), headControl(headControl), gt2004BasicBehaviorDirectedScanForLandmarks(gt2004BasicBehaviorDirectedScanForLandmarks)
00015 {
00016   lastSeenBeaconIndex = 0;
00017 }
00018 
00019 
00020 void GT2004HeadControlSymbols::registerSymbols(Xabsl2Engine& engine)
00021 {
00022   engine.registerDecimalInputSymbol("position-in-walk-cycle",this,
00023     (double (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getPositionInWalkCycle);
00024 
00025   engine.registerDecimalInputSymbol("ball.time-since-last-seen",this,
00026     (double (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getBallTimeSinceLastSeen);
00027 
00028   engine.registerDecimalInputSymbol("ball.seen.distance",this,
00029     (double (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getSeenDistance);
00030 
00031   engine.registerDecimalInputSymbol("ball.consecutive-seen-time",this,
00032     (double (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getBallConsecutivelySeenTime);
00033   engine.registerDecimalInputSymbol("ball.time-since-last-seen-consecutively",this,
00034     (double (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getTimeSinceLastSeenConsecutively);
00035 
00036   engine.registerDecimalInputSymbol("ball.communicated-ball-distance",this,
00037     (double (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getCommunicatedBallDistance);
00038 
00039   engine.registerDecimalInputSymbol("ball.relative-speed-x",this,
00040     (double (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getRelativeBallSpeedX);
00041   engine.registerDecimalInputSymbol("ball.relative-speed-y",this,
00042     (double (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getRelativeBallSpeedY);
00043   engine.registerDecimalInputSymbol("ball.speed-abs",this,
00044     (double (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getBallSpeedAbs);
00045   
00046   engine.registerDecimalInputSymbol("time-since-last-seen-beacon",this,
00047     (double (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getTimeSinceLastSeenABeacon);
00048   engine.registerDecimalInputSymbol("time-between-last-beacons",this,
00049     (double (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getTimeBetweenSeen2LastBeacons); 
00050   
00051   
00052   engine.registerBooleanInputSymbol("body-PSD-detect-ball",this,
00053     (bool (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getBodyPSDDetectBall);
00054 
00055   engine.registerBooleanInputSymbol("head-is-blocked",&headIsBlockedBySpecialActionOrWalk);
00056   engine.registerBooleanInputSymbol("last-head-path-is-finished",this,
00057     (bool (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getLastHeadPathIsFinished);
00058   engine.registerBooleanInputSymbol("set-joints-is-close-to-destination",this,
00059     (bool (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getSetJointsIsCloseToDestination);
00060   engine.registerBooleanInputSymbol("set-joints-max-pan-reached",this,
00061     (bool (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getSetJointsMaxPanReached);
00062   engine.registerBooleanInputSymbol("next-landmark-is-within-reach",this,
00063     (bool (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getNextLandmarkIsWithinReach);
00064 
00065   engine.registerBooleanInputSymbol("releasing-ball-left-is-possible",this,
00066     (bool (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getReleasingBallLeftIsPossible);
00067 
00068   engine.registerBooleanInputSymbol("releasing-ball-right-is-possible",this,
00069     (bool (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getReleasingBallRightIsPossible);
00070   engine.registerBooleanInputSymbol("set-joints-is-near-destination",this,
00071     (bool (Xabsl2FunctionProvider::*)())&GT2004HeadControlSymbols::getSetJointsIsCloseToDestination);
00072  
00073 
00074 
00075   engine.registerEnumeratedInputSymbol("head-control-mode",(const int*)&headControlMode.headControlMode);
00076   engine.registerEnumeratedInputSymbolEnumElement("head-control-mode","search-auto",HeadControlMode::searchAuto);
00077   engine.registerEnumeratedInputSymbolEnumElement("head-control-mode","search-for-ball",HeadControlMode::searchForBall);
00078   engine.registerEnumeratedInputSymbolEnumElement("head-control-mode","catch-ball",HeadControlMode::catchBall);
00079 
00080   engine.registerEnumeratedInputSymbolEnumElement("head-control-mode","release-caught-ball-when-turning-left", HeadControlMode::releaseCaughtBallWhenTurningLeft);
00081   engine.registerEnumeratedInputSymbolEnumElement("head-control-mode","release-caught-ball-when-turning-right", HeadControlMode::releaseCaughtBallWhenTurningRight);
00082   engine.registerEnumeratedInputSymbolEnumElement("head-control-mode","search-for-ball-left", HeadControlMode::searchForBallLeft);
00083   engine.registerEnumeratedInputSymbolEnumElement("head-control-mode","search-for-ball-right", HeadControlMode::searchForBallRight);
00084 
00085 }
00086 
00087 
00088 
00089 void GT2004HeadControlSymbols::update()
00090 {
00091   // calculate the last seen beacon index
00092   lastSeenBeaconIndex = headControl.getLastSeenBeaconIndex();
00093 }
00094 
00095 
00096 double GT2004HeadControlSymbols::getBallTimeSinceLastSeen()
00097 {
00098   return SystemCall::getTimeSince(ballModel.seen.timeWhenLastSeen);
00099 }
00100 
00101 double GT2004HeadControlSymbols::getBallConsecutivelySeenTime()
00102 {
00103   return ballModel.seen.timeUntilSeenConsecutively 
00104     - ballModel.seen.timeWhenFirstSeenConsecutively;
00105 }
00106 
00107 double GT2004HeadControlSymbols::getTimeSinceLastSeenConsecutively()
00108 {
00109   return SystemCall::getTimeSince(ballModel.seen.timeUntilSeenConsecutively);
00110 }
00111 
00112 double GT2004HeadControlSymbols::getSeenDistance()
00113 {
00114   return Geometry::distanceTo(robotPose.getPose(),ballModel.seen);
00115 }
00116 
00117 double GT2004HeadControlSymbols::getCommunicatedBallDistance()
00118 {
00119   return (ballModel.communicated-robotPose.translation).abs();
00120 }
00121 
00122 double GT2004HeadControlSymbols::getRelativeBallSpeedX()
00123 {
00124   return (ballModel.seen.speed.x * cos(robotPose.rotation) -
00125           ballModel.seen.speed.y * sin(robotPose.rotation));
00126 }
00127 
00128 double GT2004HeadControlSymbols::getRelativeBallSpeedY()
00129 {
00130   return (ballModel.seen.speed.x * sin(robotPose.rotation) -
00131           ballModel.seen.speed.y * cos(robotPose.rotation));
00132 }
00133 
00134 double GT2004HeadControlSymbols::getBallSpeedAbs()
00135 {
00136   return ballModel.seen.speed.abs();
00137 }
00138 
00139 double GT2004HeadControlSymbols::getTimeSinceLastSeenABeacon()
00140 {
00141   return (double) SystemCall::getTimeSince(headControl.getTimeOfLastSeenBeacon(lastSeenBeaconIndex));
00142 }
00143 
00144 double GT2004HeadControlSymbols::getTimeBetweenSeen2LastBeacons()
00145 {
00146   return (double) headControl.getTimeBetweenSeen2LastBeacons(lastSeenBeaconIndex);
00147 }
00148 
00149 bool GT2004HeadControlSymbols::getBodyPSDDetectBall()
00150 {
00151   return robotState.getSomethingInFrontOfChest();
00152 }
00153 
00154 bool GT2004HeadControlSymbols::getLastHeadPathIsFinished()
00155 {
00156   return headControl.headPathPlanner.isLastPathFinished();
00157 }
00158 
00159 bool GT2004HeadControlSymbols::getSetJointsIsCloseToDestination()
00160 {
00161   return (headControl.setJointsIsCloseToDestination > 15);
00162 }
00163 
00164 bool GT2004HeadControlSymbols::getSetJointsMaxPanReached()
00165 {
00166   return headControl.setJointsMaxPanReached;
00167 }
00168 
00169 bool GT2004HeadControlSymbols::getNextLandmarkIsWithinReach()
00170 {
00171   return gt2004BasicBehaviorDirectedScanForLandmarks.nextLandmarkIsWithinReach;
00172 }
00173 
00174 bool GT2004HeadControlSymbols::getReleasingBallLeftIsPossible()
00175 {
00176   return (
00177     motionInfo.positionInWalkCycle > 0.27 && 
00178     motionInfo.positionInWalkCycle < 0.35);
00179 }
00180 
00181 bool GT2004HeadControlSymbols::getReleasingBallRightIsPossible()
00182 {
00183   return (
00184     motionInfo.positionInWalkCycle > 0.27 && 
00185     motionInfo.positionInWalkCycle < 0.35);
00186 }
00187 
00188 double GT2004HeadControlSymbols::getPositionInWalkCycle()
00189 {
00190   return motionInfo.positionInWalkCycle;
00191 }
00192 
00193 /*
00194 * Change Log
00195 * 
00196 * $Log: GT2004HeadControlSymbols.cpp,v $
00197 * Revision 1.19  2004/07/01 18:21:16  dassler
00198 * Added BasicBehavior and HeadControlMode:
00199 * search-for-ball-left
00200 * search-for-ball-right
00201 * Test is needed
00202 *
00203 * Revision 1.18  2004/06/28 14:00:04  jhoffman
00204 * - scan back to ball slower
00205 * - directed scan briefly stops at landmarks
00206 * - input symbol set-joints-is-close-to-destination implemented and added to behavior
00207 * - merged marcs changes into track-ball-strict
00208 *
00209 * Revision 1.17  2004/06/28 09:46:57  dassler
00210 * introduced some more headcontrol symbols
00211 * time-since-last-seen-beacon
00212 * time-between-last-beacons
00213 *
00214 * Revision 1.16  2004/06/27 15:37:45  dassler
00215 * introduced ball speed to headcontrol
00216 *
00217 * Revision 1.15  2004/06/23 17:31:46  loetzsch
00218 * improved
00219 *
00220 * Revision 1.14  2004/06/23 12:46:40  loetzsch
00221 * added "ball.time-since-last-seen-consecutively"
00222 *
00223 * Revision 1.13  2004/06/18 18:28:39  dassler
00224 * introduced basic-behavior:
00225 * BeginBallSearchAtBallPositionSeen
00226 * BeginBallSearchAtBallPositionCommunicated
00227 * BeginBallSearchAtBallPositionPropagated
00228 *
00229 * track-ball modified and build in ball-just-lost
00230 *
00231 * Revision 1.12  2004/06/16 18:14:00  jhoffman
00232 * - search-for-landmarks-bug removed (setjointsdirect now sets "headPathPlanner.last...")
00233 *
00234 * Revision 1.11  2004/06/15 16:29:56  jhoffman
00235 * check in for practice match
00236 *
00237 * Revision 1.10  2004/06/14 20:12:10  jhoffman
00238 * - numerous changes and additions to headcontrol
00239 * - cameraInfo default constructor now creates ERS7 info
00240 * - debug drawing "headcontrolfield" added
00241 *
00242 * Revision 1.9  2004/06/11 16:31:59  juengel
00243 * Added symbol positionInWalkCycle.
00244 *
00245 * Revision 1.8  2004/05/26 18:36:03  loetzsch
00246 * cleanup in the head control interfaces
00247 *
00248 * Revision 1.7  2004/05/26 12:25:24  juengel
00249 * Added release-ball modes.
00250 *
00251 * Revision 1.6  2004/05/25 16:54:29  goehring
00252 * catch-ball registered
00253 *
00254 * Revision 1.5  2004/05/25 13:12:06  tim
00255 * changed body PSD stuff
00256 *
00257 * Revision 1.4  2004/05/25 10:29:49  tim
00258 * added body PSD symbols
00259 *
00260 * Revision 1.3  2004/05/23 20:27:57  loetzsch
00261 * some improvements with the head control
00262 *
00263 * Revision 1.2  2004/05/22 22:52:03  juengel
00264 * Renamed ballP_osition to ballModel.
00265 *
00266 * Revision 1.1.1.1  2004/05/22 17:19:24  cvsadm
00267 * created new repository GT2004_WM
00268 *
00269 * Revision 1.2  2004/05/20 13:32:28  roefer
00270 * Warnings removed
00271 *
00272 * Revision 1.1  2004/05/18 13:40:00  loetzsch
00273 * registered symbols and basic behaviors for GT2004HeadControl,
00274 * renamed some states and basic behaviors
00275 *
00276 */
00277 

Generated on Thu Sep 23 19:57:27 2004 for GT2004 by doxygen 1.3.6