00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef CRawlog_H
00029 #define CRawlog_H
00030
00031 #include <mrpt/poses/CPose2D.h>
00032 #include <mrpt/slam/CSensoryFrame.h>
00033 #include <mrpt/slam/CActionCollection.h>
00034 #include <mrpt/slam/CObservationComment.h>
00035 #include <mrpt/utils/CConfigFileMemory.h>
00036
00037
00038 namespace mrpt
00039 {
00040 namespace slam
00041 {
00042 DEFINE_SERIALIZABLE_PRE( CRawlog )
00043
00044 using namespace mrpt::utils;
00045
00046 typedef std::pair<mrpt::system::TTimeStamp, CObservationPtr> TTimeObservationPair;
00047 typedef std::multimap<mrpt::system::TTimeStamp, CObservationPtr> TListTimeAndObservations;
00048
00049
00071 class MRPTDLLIMPEXP CRawlog : public mrpt::utils::CSerializable
00072 {
00073
00074 DEFINE_SERIALIZABLE( CRawlog )
00075
00076 private:
00077 typedef std::deque<CSerializablePtr> TListObjects;
00078 TListObjects m_seqOfActObs;
00079
00080 CObservationComment m_commentTexts;
00081
00082 public:
00083 void getCommentText( std::string &t) const;
00084 std::string getCommentText() const;
00085 void setCommentText( const std::string &t);
00086 void getCommentTextAsConfigFile( mrpt::utils::CConfigFileMemory &memCfg ) const;
00087
00091 enum TEntryType
00092 {
00093 etSensoryFrame = 0,
00094 etActionCollection,
00095 etObservation
00096 };
00097
00100 CRawlog();
00101
00105
00106
00107
00110 virtual ~CRawlog();
00111
00114 void clear();
00115
00118 void clearWithoutDelete();
00119
00123 void addAction( CAction &action );
00124
00128 void addActions( CActionCollection &action );
00129
00133 void addObservations( CSensoryFrame &observations );
00134
00138 void addActionsMemoryReference( const CActionCollectionPtr &action );
00139
00143 void addObservationsMemoryReference( const CSensoryFramePtr &observations );
00144
00148 void addObservationMemoryReference( const CObservationPtr &observation );
00149
00155 bool loadFromRawLogFile( const std::string &fileName );
00156
00161 bool saveToRawLogFile( const std::string &fileName ) const;
00162
00165 size_t size() const;
00166
00172 MRPT_DEPRECATED_PRE bool isAction( size_t index ) MRPT_DEPRECATED_POST;
00173
00177 TEntryType getType( size_t index ) const;
00178
00182 void remove( size_t index );
00183
00189 CActionCollectionPtr getAsAction( size_t index ) const;
00190
00196 CSensoryFramePtr getAsObservations( size_t index ) const;
00197
00202 CSerializablePtr getAsGeneric( size_t index ) const;
00203
00210 CObservationPtr getAsObservation( size_t index ) const;
00211
00212
00215 class iterator
00216 {
00217 protected:
00218 TListObjects::iterator m_it;
00219
00220 public:
00221 iterator() : m_it() { }
00222 iterator(const TListObjects::iterator& it) : m_it(it) { }
00223 virtual ~iterator() { }
00224
00225 iterator & operator = (const iterator& o) { m_it = o.m_it; return *this; }
00226
00227 bool operator == (const iterator& o) { return m_it == o.m_it; }
00228 bool operator != (const iterator& o) { return m_it != o.m_it; }
00229
00230 CSerializablePtr operator *() { return *m_it; }
00231
00232 iterator operator ++(int) { m_it++; return *this; }
00233 iterator operator --(int) { m_it--; return *this; }
00234
00235 MRPT_DEPRECATED_PRE bool isAction() const MRPT_DEPRECATED_POST { return (*m_it)->GetRuntimeClass()->derivedFrom( CLASS_ID(CActionCollection) ); }
00236 MRPT_DEPRECATED_PRE bool isObservation() const MRPT_DEPRECATED_POST { return (*m_it)->GetRuntimeClass()->derivedFrom( CLASS_ID(CSensoryFrame) ); }
00237
00238 TEntryType getType() const
00239 {
00240 if ( (*m_it)->GetRuntimeClass()->derivedFrom( CLASS_ID(CObservation) ) )
00241 return etObservation;
00242 else if ( (*m_it)->GetRuntimeClass()->derivedFrom( CLASS_ID(CSensoryFrame) ) )
00243 return etSensoryFrame;
00244 else
00245 return etActionCollection;
00246 }
00247
00248 static iterator erase( TListObjects& lst, const iterator &it) { return lst.erase(it.m_it); }
00249 };
00250
00253 class const_iterator
00254 {
00255 protected:
00256 TListObjects::const_iterator m_it;
00257
00258 public:
00259 const_iterator() : m_it() { }
00260 const_iterator(const TListObjects::const_iterator& it) : m_it(it) { }
00261 virtual ~const_iterator() { }
00262
00263 bool operator == (const const_iterator& o) { return m_it == o.m_it; }
00264 bool operator != (const const_iterator& o) { return m_it != o.m_it; }
00265
00266 const CSerializablePtr operator *() const { return *m_it; }
00267
00268 const_iterator operator ++(int) { m_it++; return *this; }
00269 const_iterator operator --(int) { m_it--; return *this; }
00270
00271 MRPT_DEPRECATED_PRE bool isAction() const MRPT_DEPRECATED_POST { return (*m_it)->GetRuntimeClass()->derivedFrom( CLASS_ID(CActionCollection) ); }
00272 MRPT_DEPRECATED_PRE bool isObservation() const MRPT_DEPRECATED_POST { return (*m_it)->GetRuntimeClass()->derivedFrom( CLASS_ID(CSensoryFrame) ); }
00273
00274 TEntryType getType() const
00275 {
00276 if ( (*m_it)->GetRuntimeClass()->derivedFrom( CLASS_ID(CObservation) ) )
00277 return etObservation;
00278 else if ( (*m_it)->GetRuntimeClass()->derivedFrom( CLASS_ID(CSensoryFrame) ) )
00279 return etSensoryFrame;
00280 else
00281 return etActionCollection;
00282 }
00283
00284 };
00285
00286
00287 const_iterator begin() const { return m_seqOfActObs.begin(); }
00288 iterator begin() { return m_seqOfActObs.begin(); }
00289 const_iterator end() const { return m_seqOfActObs.end(); }
00290 iterator end() { return m_seqOfActObs.end(); }
00291
00292 iterator erase(const iterator &it) { return iterator::erase(m_seqOfActObs, it); }
00293
00298 void findObservationsByClassInRange(
00299 mrpt::system::TTimeStamp time_start,
00300 mrpt::system::TTimeStamp time_end,
00301 const mrpt::utils::TRuntimeClassId *class_type,
00302 TListTimeAndObservations &out_found,
00303 size_t guess_start_position = 0
00304 ) const;
00305
00306
00309 void moveFrom( CRawlog &obj);
00310
00313 void swap( CRawlog &obj);
00314
00322 static bool readActionObservationPair(
00323 CStream &inStream,
00324 CActionCollectionPtr &action,
00325 CSensoryFramePtr &observations,
00326 size_t & rawlogEntry );
00327
00335 bool getActionObservationPair(
00336 CActionCollectionPtr &action,
00337 CSensoryFramePtr &observations,
00338 size_t &rawlogEntry ) const;
00339
00340
00341 };
00342
00343 }
00344 }
00345
00346 #endif