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