Added Bundle Adjustment options to OdometryF2M (OdomF2M/BundleAdjustment) and RegistrationVis (Vis/BundleAdjustment). Added logger thread filter. RegistrationVis: Copy back corresponding input word IDs to output words when available. Memory::computeTransform() added option to use already computed corespondences if possible (proximity detection by time uses this). Updated Optimizer::optimizeBA() interface.

This commit is contained in:
matlabbe
2016-11-14 19:54:31 -05:00
parent 9fbd02b06d
commit 9276607920
39 changed files with 2214 additions and 594 deletions

View File

@@ -63,6 +63,8 @@ UMutex ULogger::loggerMutex_;
const std::string ULogger::kDefaultLogFileName = "./ULog.txt";
std::string ULogger::logFileName_;
std::string ULogger::bufferedMsgs_;
std::set<unsigned long> ULogger::threadIdFilter_;
std::map<std::string, unsigned long> ULogger::registeredThreads_;
/**
* This class is used to write logs in the console. This class cannot
@@ -199,6 +201,58 @@ void ULogger::setType(Type type, const std::string &fileName, bool append)
loggerMutex_.unlock();
}
void ULogger::setTreadIdFilter(const std::vector<std::string> & ids)
{
loggerMutex_.lock();
threadIdFilter_.clear();
for(unsigned int i=0;i<ids.size();++i)
{
if(registeredThreads_.find(ids[i]) != registeredThreads_.end())
{
threadIdFilter_.insert(registeredThreads_.at(ids[i]));
}
}
loggerMutex_.unlock();
}
void ULogger::registerCurrentThread(const std::string & name)
{
loggerMutex_.lock();
UASSERT(!name.empty());
uInsert(registeredThreads_, std::make_pair(name, UThread::currentThreadId()));
loggerMutex_.unlock();
}
void ULogger::unregisterCurrentThread()
{
loggerMutex_.lock();
unsigned long id = UThread::currentThreadId();
for(std::map<std::string, unsigned long>::iterator iter=registeredThreads_.begin(); iter!=registeredThreads_.end();)
{
if(iter->second == id)
{
iter = registeredThreads_.erase(iter);
threadIdFilter_.erase(id);
break;
}
else
{
++iter;
}
}
loggerMutex_.unlock();
}
std::map<std::string, unsigned long> ULogger::getRegisteredThreads()
{
loggerMutex_.lock();
std::map<std::string, unsigned long> out = registeredThreads_;
loggerMutex_.unlock();
return out;
}
void ULogger::reset()
{
ULogger::setType(ULogger::kTypeNoLog);
@@ -323,6 +377,13 @@ void ULogger::write(ULogger::Level level,
// No need to show an empty message if we don't print where.
return;
}
if(level < kFatal &&
threadIdFilter_.size() &&
threadIdFilter_.find(UThread::currentThreadId()) == threadIdFilter_.end())
{
loggerMutex_.unlock();
return;
}
if(level >= level_ || level >= eventLevel_)
{