PreFrontalCortex.H

00001 /*!@file Beosub/BeeBrain/PreFrontalCortex.C
00002  decision maker for strategy to complete missions                       */
00003 // //////////////////////////////////////////////////////////////////// //
00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2001 by the //
00005 // University of Southern California (USC) and the iLab at USC.         //
00006 // See http://iLab.usc.edu for information about this project.          //
00007 // //////////////////////////////////////////////////////////////////// //
00008 // Major portions of the iLab Neuromorphic Vision Toolkit are protected //
00009 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency //
00010 // in Visual Environments, and Applications'' by Christof Koch and      //
00011 // Laurent Itti, California Institute of Technology, 2001 (patent       //
00012 // pending; application number 09/912,225 filed July 23, 2001; see      //
00013 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status).     //
00014 // //////////////////////////////////////////////////////////////////// //
00015 // This file is part of the iLab Neuromorphic Vision C++ Toolkit.       //
00016 //                                                                      //
00017 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can   //
00018 // redistribute it and/or modify it under the terms of the GNU General  //
00019 // Public License as published by the Free Software Foundation; either  //
00020 // version 2 of the License, or (at your option) any later version.     //
00021 //                                                                      //
00022 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope  //
00023 // that it will be useful, but WITHOUT ANY WARRANTY; without even the   //
00024 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      //
00025 // PURPOSE.  See the GNU General Public License for more details.       //
00026 //                                                                      //
00027 // You should have received a copy of the GNU General Public License    //
00028 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write   //
00029 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,   //
00030 // Boston, MA 02111-1307 USA.                                           //
00031 // //////////////////////////////////////////////////////////////////// //
00032 //
00033 // Primary maintainer for this file: Michael Montalbo <montalbo@usc.edu>
00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/BeoSub/BeeBrain/PreFrontalCortex.H $
00035 // $Id: PreFrontalCortex.H 8623 2007-07-25 17:57:51Z rjpeters $
00036 
00037 #ifndef __PREFRONTAL_CORTEX_H__
00038 #define __PREFRONTAL_CORTEX_H__
00039 
00040 #include "BeoSub/BeeBrain/PreMotorComplex.H"
00041 #include "BeoSub/BeeBrain/ForwardVision.H"
00042 #include "BeoSub/BeeBrain/SonarListen.H"
00043 #include "BeoSub/BeeBrain/OceanObject.H"
00044 #include "BeoSub/BeeBrain/AgentManagerA.H"
00045 #include "BeoSub/BeeBrain/ComplexMovement.H"
00046 
00047 #include "rutz/shared_ptr.h"
00048 #include "Util/Timer.H"
00049 
00050 class AgentManagerA;
00051 class ForwardVisionAgent;
00052 
00053 class PreFrontalCortexAgent : public Agent
00054 {
00055 
00056 public:
00057 
00058   //
00059   PreFrontalCortexAgent(std::string name = "preFrontalCortexAgent");
00060 
00061   //
00062   PreFrontalCortexAgent
00063   (std::string name, rutz::shared_ptr<AgentManagerA> ama);
00064   ~PreFrontalCortexAgent();
00065   //Variables
00066 
00067   //Messages
00068   void msgOceanObjectUpdate();
00069   void msgMovementComplete();
00070 
00071   void start();
00072 
00073   //Scheduler
00074   bool pickAndExecuteAnAction();
00075 
00076   //Actions
00077   //  void search(SEARCH_TYPE type, /*Ocean_Object state*/);
00078 //   void surface();
00079 //   void killSwitch();
00080 //   void populateMissions();
00081 
00082   inline void setPreMotorComplex
00083   (rutz::shared_ptr<PreMotorComplex> pmc);
00084 
00085   inline void setForwardVisionAgent
00086   (rutz::shared_ptr<ForwardVisionAgent> fv);
00087 
00088 private:
00089 
00090   rutz::shared_ptr<ForwardVisionAgent> itsForwardVisionAgent;
00091   rutz::shared_ptr<PreMotorComplex> itsPreMotorComplex;
00092 
00093   rutz::shared_ptr<AgentManagerA> itsAgentManager;
00094 
00095   //! timer for the overall run
00096   rutz::shared_ptr<Timer> itsRunTimer;
00097 
00098   //! timer for the current mission
00099   rutz::shared_ptr<Timer> itsCurrentMissionTimer;
00100 
00101   //!
00102   enum MissionState { NOT_STARTED, SEARCHING, CENTERING, COMPLETED, FAILED };
00103 
00104   //!
00105   enum MissionName { GATE, HIT_START_BUOY, FIRST_BIN, SECOND_BIN, GET_TREASURE };
00106 
00107   //!
00108   struct Mission {
00109 
00110     uint timeForMission;
00111     std::vector< rutz::shared_ptr<OceanObject> > missionObjects;
00112     MissionState missionState;
00113     MissionName missionName;
00114   };
00115 
00116   //!
00117   rutz::shared_ptr<Mission> currentMission;
00118 
00119   //!
00120   std::vector< rutz::shared_ptr<Mission> > itsMissions;
00121 
00122 
00123   bool currentMovementDone;
00124 
00125   //!
00126   void populateMissions();
00127 
00128   //!
00129   void lookForObjects(std::vector<rutz::shared_ptr<OceanObject> > oceanObjects,
00130                       bool startLooking = true);
00131 
00132   bool executeGateMission();
00133   bool executeBuoyMission();
00134   bool executeFirstBinMission();
00135   bool executeSecondBinMission();
00136   bool executeCrossMission();
00137 };
00138 
00139 // ######################################################################
00140 inline void PreFrontalCortexAgent::setPreMotorComplex
00141 (rutz::shared_ptr<PreMotorComplex> pmc)
00142 {
00143   itsPreMotorComplex = pmc;
00144 }
00145 
00146 // ######################################################################
00147 inline void PreFrontalCortexAgent::setForwardVisionAgent
00148 (rutz::shared_ptr<ForwardVisionAgent> fv)
00149 {
00150   itsForwardVisionAgent = fv;
00151 }
00152 
00153 #endif
00154 
00155 // ######################################################################
00156 /* So things look consistent in everyone's emacs... */
00157 /* Local Variables: */
00158 /* indent-tabs-mode: nil */
00159 /* End: */
00160 
Generated on Sun May 8 08:40:19 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3