beobot-calibrate.C

Go to the documentation of this file.
00001 /*!@file Beobot/beobot-calibrate.C Calibrate the beobot's ESC and turn */
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/Beobot/beobot-calibrate.C $
00035 // $Id: beobot-calibrate.C 7912 2007-02-14 21:12:44Z rjpeters $
00036 //
00037 
00038 #include "Component/ModelManager.H"
00039 #include "Devices/BeoChip.H"
00040 #include "Devices/DeviceOpts.H"
00041 #include "Util/MathFunctions.H"
00042 
00043 #include <cstdlib>
00044 
00045 //! Calibrate the motor hardware of a Beobot
00046 /*! Calibrate the ESC by following the sequence prescribed in the EVX
00047   manual. */
00048 int main(const int argc, const char* argv[])
00049 {
00050   MYLOGVERB = LOG_INFO;
00051 
00052   // instantiate a model manager:
00053   ModelManager manager("Beobot Calibrator");
00054 
00055   // Instantiate our various ModelComponents:
00056   nub::soft_ref<BeoChip> b(new BeoChip(manager));
00057   manager.addSubComponent(b);
00058 
00059   // Parse command-line:
00060   if (manager.parseCommandLine(argc, argv, "<serdev> <sernum>", 2, 2) == false)
00061     return(1);
00062 
00063   // let's configure our serial device:
00064   b->setModelParamVal("BeoChipDeviceName", manager.getExtraArg(0));
00065   int servo = manager.getExtraArgAs<int>(1);
00066 
00067   // let's get all our ModelComponent instances started:
00068   manager.start();
00069 
00070   // ESC calibration:
00071   b->lcdClear();   // 01234567890123456789
00072   b->lcdPrintf(0, 0, " Beobot Servo Calib");
00073   const byte neutral = byte(127); // raw value for neutral
00074   LINFO("Setting all servos to neutral (%d)", neutral);
00075   b->setServoRaw(servo, neutral);
00076 
00077   LINFO("Press and hold ESC 'SET' button until LED turns solid red.");
00078   LINFO("Then release button and press [RETURN]");
00079   getchar();
00080 
00081   LINFO("Setting servo %d to full forward (255)", servo);
00082   b->setServoRaw(servo, 255);
00083   LINFO("Press [RETURN] when LED turns solid green.");
00084   getchar();
00085 
00086   LINFO("Setting servo %d to full reverse (0)", servo);
00087   b->setServoRaw(servo, 0);
00088   LINFO("Press [RETURN] when LED blinks green.");
00089   getchar();
00090 
00091   LINFO("Setting servo %d to neutral (%d)", servo, neutral);
00092   b->setServoRaw(servo, neutral);
00093   LINFO("Press [RETURN] when LED gets solid red.");
00094   getchar();
00095 
00096   LINFO("Calibration complete!");
00097 
00098   while(1) {
00099     b->setServoRaw(servo, neutral);
00100     LINFO("Neutral... press [RETURN] to continue");
00101     getchar();
00102 
00103     b->setServoRaw(servo, 192);
00104     LINFO("Weak forward... press [RETURN] to continue");
00105     getchar();
00106 
00107     b->setServoRaw(servo, 255);
00108     LINFO("Full forward... press [RETURN] to continue");
00109     getchar();
00110 
00111     b->setServoRaw(servo, neutral);
00112     LINFO("Neutral... press [RETURN] to continue");
00113     getchar();
00114 
00115     b->setServoRaw(servo, 64);
00116     LINFO("Weak reverse... press [RETURN] to continue");
00117     getchar();
00118 
00119     b->setServoRaw(servo, 0);
00120     LINFO("Full Reverse... press [RETURN] to continue");
00121     getchar();
00122   }
00123 
00124   manager.stop();
00125   return 0;
00126 }
00127 
00128 // ######################################################################
00129 /* So things look consistent in everyone's emacs... */
00130 /* Local Variables: */
00131 /* indent-tabs-mode: nil */
00132 /* End: */
Generated on Sun May 8 08:40:11 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3