00001 /*!@file BeoSub/test-SeaBee.C Test BeoSub submarine basic functions */ 00002 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: Laurent Itti <itti@usc.edu> 00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/BeoSub/test-SeaBee.C $ 00035 // $Id: test-SeaBee.C 7063 2006-08-29 18:26:55Z rjpeters $ 00036 // 00037 00038 #include "BeoSub/SeaBee.H" 00039 #include "Component/ModelManager.H" 00040 #include "SIFT/VisualObjectDB.H" 00041 00042 //need current estimation stuff 00043 int main(const int argc, const char **argv) 00044 { 00045 00046 // instantiate a model manager: 00047 00048 00049 ModelManager manager("BeoSub Main Action"); 00050 00051 // Instantiate our various ModelComponents: 00052 nub::soft_ref<SeaBee> sub(new SeaBee(manager)); 00053 manager.addSubComponent(sub); 00054 00055 manager.start(); 00056 sub->test(); 00057 00058 //sub->LookForRedLight(); 00059 00060 //sub->FollowPipeLine(); 00061 //sub->ApproachPipeLine(); 00062 //sub->TestBin(1); 00063 //sub->CenterBin(); 00064 //sub->TaskB(); 00065 00066 /* 00067 // Parse command-line: 00068 if (manager.parseCommandLine(argc, argv, "", 0, 0) == false) 00069 return(1); 00070 00071 // let's get all our ModelComponent instances started: 00072 manager.start(); 00073 00074 LINFO("start"); 00075 00076 // wait for visual start: 00077 rutz::shared_ptr<VisualObjectDB> startdb(new VisualObjectDB()); 00078 if (startdb->loadFrom("/home/vien/startdb/startdb.vdb")) 00079 { 00080 int count = 0; const int maxcount = 120; 00081 while(++count < maxcount) 00082 { 00083 LINFO("Waiting for start image... %d/%d", count, maxcount); 00084 00085 Image< PixRGB<byte> > img = sub->grabImage(BEOSUBCAMDOWN); 00086 rutz::shared_ptr<VisualObject> vo(new VisualObject("Grab", "", img)); 00087 std::vector< rutz::shared_ptr<VisualObjectMatch> > matches; 00088 const uint nmatches = 00089 startdb->getObjectMatches(vo, matches, VOMA_KDTREEBBF, 00090 5U, 0.5F, 0.5F, 0.4F, 3U, 7U); 00091 if (nmatches > 0) 00092 { 00093 LINFO("Found! Let's get started."); 00094 break; 00095 } 00096 } 00097 } 00098 else 00099 LERROR("Cannot load start DB -- no visual start"); 00100 00101 #if 0 00102 sub->turnAbs(127, true); 00103 #endif 00104 Angle my = 127; 00105 sub->turnRel(my-sub->getHeading()); 00106 sub->useRotVelPID(true); 00107 // go through gate: 00108 LINFO("diving..."); 00109 sub->useDepthPID(true); 00110 sub->diveAbs(1.4F, true); 00111 00112 LINFO("advancing..."); 00113 sub->advanceRel(25.0F, true); //GATE FIX 00114 sub->diveAbs(3.2); 00115 if(!sub->approachArea("src/BeoSub/database/down/taskAdown", BEOSUBCAMDOWN, 10.0)){ 00116 if(!sub->approachArea("src/BeoSub/database/front/taskAfront", BEOSUBCAMFRONT, 10.0)){ 00117 00118 } 00119 } 00120 sub->TaskA(); 00121 00122 if(!sub->approachArea("src/BeoSub/database/down/taskBdown", BEOSUBCAMDOWN, 10.0)){ 00123 if(!sub->approachArea("src/BeoSub/database/front/taskBfront", BEOSUBCAMFRONT, 10.0)){ 00124 00125 } 00126 } 00127 sub->TaskB(); 00128 00129 if(!sub->approachArea("src/BeoSub/database/down/taskCdown", BEOSUBCAMDOWN, 10.0)){ 00130 if(!sub->approachArea("src/BeoSub/database/front/taskCfront", BEOSUBCAMFRONT, 10.0)){ 00131 00132 } 00133 } 00134 sub->TaskC(); 00135 00136 sub->diveAbs(-1.0); 00137 sleep(300); 00138 // stop all our ModelComponents 00139 manager.stop(); 00140 00141 // all done! 00142 return 0; 00143 */ 00144 } 00145 00146 // ###################################################################### 00147 /* So things look consistent in everyone's emacs... */ 00148 /* Local Variables: */ 00149 /* indent-tabs-mode: nil */ 00150 /* End: */