HMR3300.H

Go to the documentation of this file.
00001 /*!@file Devices/HMR3300.H class for interfacing with a Honeywell 3300 compass */
00002 
00003 // //////////////////////////////////////////////////////////////////// //
00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2000-2003   //
00005 // by the 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: Nitin Dhavale <dhavale@usc.edu>
00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Devices/HMR3300.H $
00035 // $Id: HMR3300.H 7880 2007-02-09 02:34:07Z itti $
00036 //
00037 
00038 #ifndef DEVICES_HMR3300_H_DEFINED
00039 #define DEVICES_HMR3300_H_DEFINED
00040 
00041 #include "Component/OptionManager.H"
00042 #include "Devices/Serial.H"
00043 #include "Util/Angle.H"
00044 #include <pthread.h>
00045 
00046 //! A hook which will be called when a new compass reading is received
00047 class HMR3300Listener {
00048 public:
00049   //! Destructor
00050   virtual ~HMR3300Listener();
00051 
00052   //! New data was received
00053   virtual void newData(const Angle heading, const Angle pitch,
00054                        const Angle roll) = 0;
00055 };
00056 
00057 //! Class for interfacing with a Honeywell HMR-3300 compass
00058 /*! This is a 3-axis compass. The compass communicates with a host via
00059   RS-232 at 19,200 bauds. The compass sends the 3 angular measurements
00060   at regular intervals.
00061 
00062   In our BeoSub, Pitch is approx 0.0 when horizontal; tilting the sub
00063   nose down makes the pitch more negative.
00064 
00065   For Heading, 0.0 is north, turning left decreases the heading angle.
00066 
00067   For Roll, rolling leftwards (so that the left side of the sub goes
00068   down while the right side goes up) increases the roll angle.
00069 */
00070 class HMR3300 : public ModelComponent
00071 {
00072 public:
00073   //! Initialize
00074   HMR3300(OptionManager& mgr,
00075           const std::string& descrName = "HMR3300",
00076           const std::string& tagName = "HMR3300",
00077           const char *dev = "/dev/ttyS0");
00078 
00079   //! Destructor
00080   ~HMR3300();
00081 
00082   //! Install a callback (listener)
00083   /*! This callback will be called with the corresponding data each
00084     time new data is received from the device. */
00085   void setListener(rutz::shared_ptr<HMR3300Listener>& listener);
00086 
00087   //! Get the current filtered heading, pitch, and roll from the compass
00088   void get(Angle& heading, Angle& pitch, Angle& roll);
00089 
00090   //! Get the current filtered heading
00091   Angle getHeading();
00092 
00093   //! Get the current filtered pitch
00094   Angle getPitch();
00095 
00096   //! Get the current filtered roll
00097   Angle getRoll();
00098 
00099   //! The user need not concern himself with this method.
00100   /*! Should have been protected, but is not because
00101     of the pthread hack. */
00102   void run();
00103 
00104 protected:
00105   void start2();  //!< get started
00106   void stop1();   //!< get stopped
00107 
00108 private:
00109   nub::soft_ref<Serial> itsSerial;
00110   bool itsKeepgoing;
00111   rutz::shared_ptr<HMR3300Listener> itsListener;
00112   Angle itsHeading, itsPitch, itsRoll;
00113   pthread_mutex_t itsLock;
00114   pthread_t itsRunner;
00115 };
00116 
00117 #endif
00118 
00119 // ######################################################################
00120 /* So things look consistent in everyone's emacs... */
00121 /* Local Variables: */
00122 /* indent-tabs-mode: nil */
00123 /* End: */
Generated on Sun May 8 08:40:37 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3