Program Listing for File MappingThread.h¶
↰ Return to documentation for file (lib/SlamSystem/MappingThread.h)
#pragma once
#include <mutex>
#include <memory>
#include <boost/thread/shared_mutex.hpp>
#include "active_object/active.h"
#include "util/MovingAverage.h"
#include "util/ThreadMutexObject.h"
#include "DataStructures/KeyFrame.h"
#include "DepthEstimation/DepthMap.h"
#include "Tracking/TrackingReference.h"
#include "Tracking/Relocalizer.h"
namespace lsd_slam {
class KeyFrameGraph;
class SlamSystem;
class MappingThread {
public:
MappingThread( SlamSystem &system, bool threaded );
~MappingThread();
//=== Callbacks into the thread ===
// void pushDoIteration()
// {
// //if( _thread ) _thread->send( std::bind( &MappingThread::doMappingIteration, this ));
// if( _thread ) {
// _thread->send( std::bind( &MappingThread::doMappingIterationSet, this ));
// } else {
// doMappingIterationSet();
// }
// }
/* REDUNDANT
void pushUnmappedTrackedFrame( const Frame::SharedPtr &frame )
{
{
std::lock_guard<std::mutex> lock(unmappedTrackedFramesMutex );
unmappedTrackedFrames.push_back( frame );
}
if( _thread ) _thread->send( std::bind( &MappingThread::callbackUnmappedTrackedFrames, this ));
}
*/
void doMapSet( const KeyFrame::SharedPtr &kf, const ImageSet::SharedPtr &set)
{
if( _thread )
_thread->send( std::bind( &MappingThread::mapSetImpl, this, kf, set ));
else
mapSetImpl(kf, set);
}
void doMergeOptimizationUpdate( void )
{
optimizationUpdateMerged.reset();
if( _thread ) _thread->send( std::bind( &MappingThread::mergeOptimizationOffsetImpl, this ));
}
// Create the first (uninitialized) keyframe
void createFirstKeyFrame( const Frame::SharedPtr &frame );
// Create subsequent keyframes by depth map propagation
void doCreateNewKeyFrame( const KeyFrame::SharedPtr &keyframe, const Frame::SharedPtr &frame )
{
if( _thread )
_thread->send( std::bind( &MappingThread::createNewKeyFrameImpl, this, keyframe, frame ));
else
createNewKeyFrameImpl( keyframe, frame );
}
// Used during re-localization
Relocalizer relocalizer;
ThreadSynchronizer optimizationUpdateMerged;
private:
SlamSystem &_system;
// == Thread callbacks ==
void mapSetImpl( const KeyFrame::SharedPtr &kf, const ImageSet::SharedPtr &set );
void createNewKeyFrameImpl( const KeyFrame::SharedPtr &keyframe, const Frame::SharedPtr &frame );
// == Local functions ==
void mergeOptimizationOffsetImpl();
// == Local functions ==
void addTimingSamples();
void finishCurrentKeyframe();
void discardCurrentKeyframe();
void debugDisplayDepthMap();
std::unique_ptr<active_object::Active> _thread;
};
}