00001 /*!@file BeoSub/test-BeoSub.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-BeoSub.C $ 00035 // $Id: test-BeoSub.C 8542 2007-07-07 21:20:07Z beobot $ 00036 // 00037 00038 #include "BeoSub/BeoSubOneBal.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<BeoSubOneBal> sub(new BeoSubOneBal(manager)); 00053 manager.addSubComponent(sub); 00054 00055 //sub->LookForRedLight(); 00056 00057 sub->FollowPipeLine(); 00058 //sub->ApproachPipeLine(); 00059 //sub->TestBin(1); 00060 //sub->CenterBin(); 00061 //sub->TaskB(); 00062 00063 /* 00064 // Parse command-line: 00065 if (manager.parseCommandLine(argc, argv, "", 0, 0) == false) 00066 return(1); 00067 00068 // let's get all our Mode lComponent instances started: 00069 manager.start(); 00070 00071 LINFO("start"); 00072 00073 // wait for visual start: 00074 rutz::shared_ptr<VisualObjectDB> startdb(new VisualObjectDB()); 00075 if (startdb->loadFrom("/home/vien/startdb/startdb.vdb")) 00076 { 00077 int count = 0; const int maxcount = 120; 00078 while(++count < maxcount) 00079 { 00080 LINFO("Waiting for start image... %d/%d", count, maxcount); 00081 00082 Image< PixRGB<byte> > img = sub->grabImage(BEOSUBCAMDOWN); 00083 rutz::shared_ptr<VisualObject> vo(new VisualObject("Grab", "", img)); 00084 std::vector< rutz::shared_ptr<VisualObjectMatch> > matches; 00085 const uint nmatches = 00086 startdb->getObjectMatches(vo, matches, VOMA_KDTREEBBF, 00087 5U, 0.5F, 0.5F, 0.4F, 3U, 7U); 00088 if (nmatches > 0) 00089 { 00090 LINFO("Found! Let's get started."); 00091 break; 00092 } 00093 } 00094 } 00095 else 00096 LERROR("Cannot load start DB -- no visual start"); 00097 00098 #if 0 00099 sub->turnAbs(127, true); 00100 #endif 00101 Angle my = 127; 00102 sub->turnRel(my-sub->getHeading()); 00103 sub->useRotVelPID(true); 00104 // go through gate: 00105 LINFO("diving..."); 00106 sub->useDepthPID(true); 00107 sub->diveAbs(1.4F, true); 00108 00109 LINFO("advancing..."); 00110 sub->advanceRel(25.0F, true); //GATE FIX 00111 sub->diveAbs(3.2); 00112 if(!sub->approachArea("src/BeoSub/database/down/taskAdown", BEOSUBCAMDOWN, 10.0)){ 00113 if(!sub->approachArea("src/BeoSub/database/front/taskAfront", BEOSUBCAMFRONT, 10.0)){ 00114 00115 } 00116 } 00117 sub->TaskA(); 00118 00119 if(!sub->approachArea("src/BeoSub/database/down/taskBdown", BEOSUBCAMDOWN, 10.0)){ 00120 if(!sub->approachArea("src/BeoSub/database/front/taskBfront", BEOSUBCAMFRONT, 10.0)){ 00121 00122 } 00123 } 00124 sub->TaskB(); 00125 00126 if(!sub->approachArea("src/BeoSub/database/down/taskCdown", BEOSUBCAMDOWN, 10.0)){ 00127 if(!sub->approachArea("src/BeoSub/database/front/taskCfront", BEOSUBCAMFRONT, 10.0)){ 00128 00129 } 00130 } 00131 sub->TaskC(); 00132 00133 sub->diveAbs(-1.0); 00134 sleep(300); 00135 // stop all our ModelComponents 00136 manager.stop(); 00137 00138 // all done! 00139 return 0; 00140 */ 00141 } 00142 00143 // ###################################################################### 00144 /* So things look consistent in everyone's emacs... */ 00145 /* Local Variables: */ 00146 /* indent-tabs-mode: nil */ 00147 /* End: */