|
orca-robotics INTRODUCTION Overview Download and Install Quick Start Documentation Publications REPOSITORY Interfaces Components Libraries Utilities Software Map DEVELOPER Tutorials Examples Dev Guide Dashboard Wiki login/pass: orca/orca PEOPLE Contributors Users Project Download Mailing lists
|
replayers.h00001 #ifndef ORCALOGFACTORY_REPLAYERS_H 00002 #define ORCALOGFACTORY_REPLAYERS_H 00003 00004 #include <orcalog/orcalog.h> 00005 #include <orcalogfactory/logreaders.h> 00006 00007 #include <orcaifaceimpl/camera.h> 00008 #include <orcaifaceimpl/drivebicycle.h> 00009 #include <orcaifaceimpl/gps.h> 00010 #include <orcaifaceimpl/laserscanner2d.h> 00011 #include <orcaifaceimpl/localise2d.h> 00012 #include <orcaifaceimpl/localise3d.h> 00013 #include <orcaifaceimpl/odometry2d.h> 00014 #include <orcaifaceimpl/odometry3d.h> 00015 #include <orcaifaceimpl/power.h> 00016 #include <orcaifaceimpl/wifi.h> 00017 00018 namespace orcalogfactory { 00019 00020 // fwd declarations (ignore, they're defined below) 00021 template<class LogReaderType, 00022 class IfaceImplType> 00023 class DefaultIfaceImplSetup; 00024 template<class LogReaderType, 00025 class IfaceImplType, 00026 class DescriptionType> 00027 class DescriptionIfaceImplSetup; 00028 00029 00031 00032 00033 // 00034 // Generic Replayer. The last template argument is a class whose constructor 00035 // will set up the IfaceImpl (including reading a description if necessary). 00036 // 00037 template< class IfaceImplType, 00038 class LogReaderType, 00039 class DataType, 00040 class IfaceImplSetup=DefaultIfaceImplSetup<LogReaderType,IfaceImplType> > 00041 class GenericReplayer : public orcalog::Replayer 00042 { 00043 public: 00044 00045 GenericReplayer( const orcalog::LogReaderInfo &logReaderInfo ) 00046 : logReader_( logReaderInfo ) 00047 {} 00048 virtual ~GenericReplayer() {} 00049 00050 void init() 00051 { 00052 logReader_.init(); 00053 IfaceImplSetup( logReader_, iface_ ); 00054 iface_->initInterface(); 00055 } 00056 00057 void replayData( int index ) 00058 { 00059 logReader_.setLogIndex( index ); 00060 logReader_.read( data_ ); 00061 iface_->localSetAndSend( data_ ); 00062 } 00063 00064 std::string toString() const { return logReader_.toString(); } 00065 00066 protected: 00067 00068 IceUtil::Handle<IfaceImplType> iface_; 00069 LogReaderType logReader_; 00070 DataType data_; 00071 00072 }; 00073 00074 // 00075 // Useful defaults for setting up the IfaceImpl: 00076 // 00077 00078 // 00079 // This default will set up the IfaceImpl with no description required. 00080 // 00081 template<class LogReaderType, 00082 class IfaceImplType> 00083 class DefaultIfaceImplSetup { 00084 public: 00085 DefaultIfaceImplSetup( LogReaderType &logReader, 00086 IceUtil::Handle<IfaceImplType> &iface ) 00087 { 00088 iface = new IfaceImplType( logReader.logReaderInfo().context, 00089 logReader.logReaderInfo().interfaceName ); 00090 } 00091 }; 00092 // 00093 // This version works when all that needs to happen is that a description 00094 // needs to be read in. 00095 // 00096 template<class LogReaderType, 00097 class IfaceImplType, 00098 class DescriptionType> 00099 class DescriptionIfaceImplSetup { 00100 public: 00101 DescriptionIfaceImplSetup( LogReaderType &logReader, 00102 IceUtil::Handle<IfaceImplType> &iface ) 00103 { 00104 DescriptionType descr; 00105 logReader.read( descr ); 00106 iface = new IfaceImplType( descr, 00107 logReader.logReaderInfo().context, 00108 logReader.logReaderInfo().interfaceName ); 00109 } 00110 }; 00111 00114 00115 typedef GenericReplayer< orcaifaceimpl::CameraImpl, 00116 CameraLogReader, 00117 orca::ImageDataPtr, 00118 DescriptionIfaceImplSetup<CameraLogReader, 00119 orcaifaceimpl::CameraImpl, 00120 orca::CameraDescriptionPtr> > CameraReplayer; 00121 00123 00124 typedef GenericReplayer< orcaifaceimpl::DriveBicycleImpl, 00125 DriveBicycleLogReader, 00126 orca::DriveBicycleData, 00127 DescriptionIfaceImplSetup<DriveBicycleLogReader, 00128 orcaifaceimpl::DriveBicycleImpl, 00129 orca::VehicleDescription> > DriveBicycleReplayer; 00130 00132 00133 typedef GenericReplayer< orcaifaceimpl::GpsImpl, 00134 GpsLogReader, 00135 orca::GpsData, 00136 DescriptionIfaceImplSetup<GpsLogReader, 00137 orcaifaceimpl::GpsImpl, 00138 orca::GpsDescription> > GpsReplayer; 00139 00141 00142 typedef GenericReplayer< orcaifaceimpl::LaserScanner2dImpl, 00143 LaserScanner2dLogReader, 00144 orca::LaserScanner2dDataPtr, 00145 DescriptionIfaceImplSetup<LaserScanner2dLogReader, 00146 orcaifaceimpl::LaserScanner2dImpl, 00147 orca::RangeScanner2dDescription> > LaserScanner2dReplayer; 00148 00150 00151 typedef GenericReplayer< orcaifaceimpl::Localise2dImpl, 00152 Localise2dLogReader, 00153 orca::Localise2dData, 00154 DescriptionIfaceImplSetup<Localise2dLogReader, 00155 orcaifaceimpl::Localise2dImpl, 00156 orca::VehicleGeometryDescriptionPtr> > Localise2dReplayer; 00157 00159 00160 typedef GenericReplayer< orcaifaceimpl::Localise3dImpl, 00161 Localise3dLogReader, 00162 orca::Localise3dData, 00163 DescriptionIfaceImplSetup<Localise3dLogReader, 00164 orcaifaceimpl::Localise3dImpl, 00165 orca::VehicleGeometryDescriptionPtr> > Localise3dReplayer; 00166 00168 00169 typedef GenericReplayer< orcaifaceimpl::Odometry2dImpl, 00170 Odometry2dLogReader, 00171 orca::Odometry2dData, 00172 DescriptionIfaceImplSetup<Odometry2dLogReader, 00173 orcaifaceimpl::Odometry2dImpl, 00174 orca::VehicleDescription> > Odometry2dReplayer; 00175 00177 00178 typedef GenericReplayer< orcaifaceimpl::Odometry3dImpl, 00179 Odometry3dLogReader, 00180 orca::Odometry3dData, 00181 DescriptionIfaceImplSetup<Odometry3dLogReader, 00182 orcaifaceimpl::Odometry3dImpl, 00183 orca::VehicleDescription> > Odometry3dReplayer; 00184 00186 00187 typedef GenericReplayer<orcaifaceimpl::PowerImpl, 00188 PowerLogReader, 00189 orca::PowerData> PowerReplayer; 00190 00192 00193 typedef GenericReplayer<orcaifaceimpl::WifiImpl, 00194 WifiLogReader, 00195 orca::WifiData> WifiReplayer; 00196 00197 } 00198 00199 #endif 00200 00201 00202 00203 00204 // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 00205 // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 00206 // 00207 // AlexB: A slightly different approach that I tried and left lying around 00208 // just in case. 00209 // 00210 00211 // template<class IfaceImplType, 00212 // class LogReaderType, 00213 // class DataType> 00214 // class GenericReplayer : public orcalog::Replayer 00215 // { 00216 // public: 00217 00218 // GenericReplayer( const orcalog::LogReaderInfo &logReaderInfo ) 00219 // : logReader_( logReaderInfo ) 00220 // {} 00221 // virtual ~GenericReplayer() {} 00222 00223 // void init() 00224 // { 00225 // logReader_.init(); 00226 // setupIface(); 00227 // iface_->initInterface(); 00228 // } 00229 00230 // void replayData( int index ) 00231 // { 00232 // logReader_.setLogIndex( index ); 00233 // logReader_.read( data_ ); 00234 // iface_->localSetAndSend( data_ ); 00235 // } 00236 00237 // std::string toString() const { return logReader_.toString(); } 00238 00239 // protected: 00240 00241 // // Derived classes should overload. 00242 // virtual void setupIface()=0; 00243 00244 // IceUtil::Handle<IfaceImplType> iface_; 00245 // LogReaderType logReader_; 00246 // DataType data_; 00247 00248 // }; 00249 00250 // ////////////////////////////////////////////////////////////////////// 00251 // ////////////////////////////////////////////////////////////////////// 00252 // ////////////////////////////////////////////////////////////////////// 00253 00254 // class LaserScanner2dReplayer : public GenericReplayer<orcaifaceimpl::LaserScanner2dImpl, 00255 // LaserScanner2dLogReader, 00256 // orca::LaserScanner2dDataPtr> 00257 // { 00258 // public: 00259 00260 // LaserScanner2dReplayer( const orcalog::LogReaderInfo &logReaderInfo ) 00261 // : GenericReplayer<orcaifaceimpl::LaserScanner2dImpl, 00262 // LaserScanner2dLogReader, 00263 // orca::LaserScanner2dDataPtr>( logReaderInfo ) 00264 // {} 00265 00266 // private: 00267 00268 // virtual void setupIface() 00269 // { 00270 // orca::RangeScanner2dDescription descr; 00271 // logReader_.read( descr ); 00272 // iface_ = new orcaifaceimpl::LaserScanner2dImpl( descr, 00273 // logReader_.logReaderInfo().context, 00274 // logReader_.logReaderInfo().interfaceName ); 00275 // } 00276 // }; 00277 00278 // ////////////////////////////////////////////////////////////////////// 00279 00280 // class PowerReplayer : public GenericReplayer<orcaifaceimpl::PowerImpl, 00281 // PowerLogReader, 00282 // orca::PowerData> 00283 // { 00284 // public: 00285 00286 // PowerReplayer( const orcalog::LogReaderInfo &logReaderInfo ) 00287 // : GenericReplayer<orcaifaceimpl::PowerImpl, 00288 // PowerLogReader, 00289 // orca::PowerData>( logReaderInfo ) 00290 // {} 00291 00292 // private: 00293 00294 // virtual void setupIface() 00295 // { 00296 // iface_ = new orcaifaceimpl::PowerImpl( logReader_.logReaderInfo().context, 00297 // logReader_.logReaderInfo().interfaceName ); 00298 // } 00299 // }; 00300 00301 // // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 00302 // // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 00303 // // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 00304 |
Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)
1.4.5