Go to the documentation of this file.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 RTABMAPTHREAD_H_
00029 #define RTABMAPTHREAD_H_
00030
00031 #include "rtabmap/core/RtabmapExp.h"
00032
00033 #include <rtabmap/utilite/UThreadNode.h>
00034 #include <rtabmap/utilite/UEventsHandler.h>
00035 #include <rtabmap/utilite/USemaphore.h>
00036 #include <rtabmap/utilite/UMutex.h>
00037
00038 #include "rtabmap/core/RtabmapEvent.h"
00039 #include "rtabmap/core/SensorData.h"
00040 #include "rtabmap/core/Parameters.h"
00041
00042 #include <stack>
00043
00044 class UTimer;
00045
00046 namespace rtabmap {
00047
00048 class Rtabmap;
00049
00050 class RTABMAP_EXP RtabmapThread :
00051 public UThreadNode,
00052 public UEventsHandler
00053 {
00054 public:
00055 enum State {
00056 kStateInit,
00057 kStateDetecting,
00058 kStateReseting,
00059 kStateClose,
00060 kStateChangingParameters,
00061 kStateDumpingMemory,
00062 kStateDumpingPrediction,
00063 kStateGeneratingDOTGraph,
00064 kStateGeneratingDOTLocalGraph,
00065 kStateGeneratingTOROGraphLocal,
00066 kStateGeneratingTOROGraphGlobal,
00067 kStateCleanDataBuffer,
00068 kStatePublishingMapLocal,
00069 kStatePublishingMapGlobal,
00070 kStatePublishingTOROGraphLocal,
00071 kStatePublishingTOROGraphGlobal,
00072 kStateTriggeringMap,
00073 kStateAddingUserData,
00074 kStateSettingGoal
00075 };
00076
00077 public:
00078
00079 RtabmapThread(Rtabmap * rtabmap);
00080 virtual ~RtabmapThread();
00081
00082 void clearBufferedData();
00083 void setDetectorRate(float rate);
00084 void setBufferSize(int bufferSize);
00085
00086 protected:
00087 virtual void handleEvent(UEvent * anEvent);
00088
00089 private:
00090 virtual void mainLoop();
00091 virtual void mainLoopKill();
00092 void process();
00093 void addData(const SensorData & data);
00094 void getData(SensorData & data);
00095 void pushNewState(State newState, const ParametersMap & parameters = ParametersMap());
00096 void setDataBufferSize(int size);
00097 void publishMap(bool optimized, bool full) const;
00098 void publishTOROGraph(bool optimized, bool full) const;
00099
00100 private:
00101 UMutex _stateMutex;
00102 std::stack<State> _state;
00103 std::stack<ParametersMap> _stateParam;
00104
00105 std::list<SensorData> _dataBuffer;
00106 UMutex _dataMutex;
00107 USemaphore _dataAdded;
00108 int _dataBufferMaxSize;
00109 float _rate;
00110 UTimer * _frameRateTimer;
00111
00112 Rtabmap * _rtabmap;
00113 bool _paused;
00114 Transform lastPose_;
00115 float _rotVariance;
00116 float _transVariance;
00117
00118 std::vector<unsigned char> _userData;
00119 UMutex _userDataMutex;
00120 };
00121
00122 }
00123 #endif