Split RawDataKept parameter into Raw and Binary parameters to save RAM when keeping raw data in the core is not required

This commit is contained in:
Mathieu Labbe
2015-01-12 18:23:25 -05:00
parent cdb1e29d45
commit 6bd2a0926b
9 changed files with 49 additions and 21 deletions

View File

@@ -103,6 +103,7 @@ public:
std::map<int, Link> getLoopClosureLinks(int signatureId,
bool lookInDatabase = false) const;
bool isRawDataKept() const {return _rawDataKept;}
bool isBinDataKept() const {return _binDataKept;}
float getSimilarityThreshold() const {return _similarityThreshold;}
std::map<int, int> getWeights() const;
int getLastSignatureId() const;
@@ -183,7 +184,6 @@ private:
void copyData(const Signature * from, Signature * to);
Signature * createSignature(
const SensorData & data,
bool keepRawData=false,
Statistics * stats = 0);
//keypoint stuff
@@ -199,6 +199,7 @@ private:
// parameters
float _similarityThreshold;
bool _rawDataKept;
bool _binDataKept;
bool _keepRehearsedNodesInDb;
bool _incrementalMemory;
int _maxStMemSize;

View File

@@ -183,7 +183,8 @@ class RTABMAP_EXP Parameters
// Memory
RTABMAP_PARAM(Mem, RehearsalSimilarity, float, 0.6, "Rehearsal similarity.");
RTABMAP_PARAM(Mem, ImageKept, bool, true, "Keep images in db.");
RTABMAP_PARAM(Mem, ImageKept, bool, false, "Keep raw images in RAM.");
RTABMAP_PARAM(Mem, BinDataKept, bool, true, "Keep binary data in db.");
RTABMAP_PARAM(Mem, RehearsedNodesKept, bool, true, "Keep rehearsed ndoes in db.");
RTABMAP_PARAM(Mem, STMSize, unsigned int, 10, "Short-term memory size.");
RTABMAP_PARAM(Mem, IncrementalMemory, bool, true, "SLAM mode, othwersize it is Localization mode.");

View File

@@ -57,6 +57,7 @@ Memory::Memory(const ParametersMap & parameters) :
_dbDriver(0),
_similarityThreshold(Parameters::defaultMemRehearsalSimilarity()),
_rawDataKept(Parameters::defaultMemImageKept()),
_binDataKept(Parameters::defaultMemBinDataKept()),
_keepRehearsedNodesInDb(Parameters::defaultMemRehearsedNodesKept()),
_incrementalMemory(Parameters::defaultMemIncrementalMemory()),
_maxStMemSize(Parameters::defaultMemSTMSize()),
@@ -363,6 +364,7 @@ void Memory::parseParameters(const ParametersMap & parameters)
ParametersMap::const_iterator iter;
Parameters::parse(parameters, Parameters::kMemImageKept(), _rawDataKept);
Parameters::parse(parameters, Parameters::kMemBinDataKept(), _binDataKept);
Parameters::parse(parameters, Parameters::kMemRehearsedNodesKept(), _keepRehearsedNodesInDb);
Parameters::parse(parameters, Parameters::kMemRehearsalIdUpdatedToNewOne(), _idUpdatedToNewOneRehearsal);
Parameters::parse(parameters, Parameters::kMemGenerateIds(), _generateIds);
@@ -514,7 +516,7 @@ bool Memory::update(const SensorData & data, Statistics * stats)
//============================================================
// Create a signature with the image received.
//============================================================
Signature * signature = this->createSignature(data, this->isRawDataKept(), stats);
Signature * signature = this->createSignature(data, stats);
if (signature == 0)
{
UERROR("Failed to create a signature...");
@@ -2484,7 +2486,7 @@ cv::Mat Memory::getImageCompressed(int signatureId) const
{
image = s->getImageCompressed();
}
if(image.empty() && this->isRawDataKept() && _dbDriver)
if(image.empty() && this->isBinDataKept() && _dbDriver)
{
_dbDriver->getNodeData(signatureId, image);
}
@@ -2877,7 +2879,7 @@ private:
VWDictionary * _vwp;
};
Signature * Memory::createSignature(const SensorData & data, bool keepRawData, Statistics * stats)
Signature * Memory::createSignature(const SensorData & data, Statistics * stats)
{
UASSERT(data.image().empty() || data.image().type() == CV_8UC1 || data.image().type() == CV_8UC3);
UASSERT(data.depth().empty() || data.depth().type() == CV_16UC1 || data.depth().type() == CV_32FC1);
@@ -3283,7 +3285,7 @@ Signature * Memory::createSignature(const SensorData & data, bool keepRawData, S
}
Signature * s;
if(keepRawData)
if(this->isBinDataKept())
{
std::vector<unsigned char> imageBytes;
std::vector<unsigned char> depthBytes;
@@ -3323,9 +3325,6 @@ Signature * Memory::createSignature(const SensorData & data, bool keepRawData, S
data.cx(),
data.cy(),
data.localTransform());
s->setImageRaw(data.image());
s->setDepthRaw(depthOrRightImage);
s->setLaserScanRaw(data.laserScan());
}
else
{
@@ -3336,6 +3335,12 @@ Signature * Memory::createSignature(const SensorData & data, bool keepRawData, S
data.pose(),
util3d::compressData2(data.laserScan()));
}
if(this->isRawDataKept())
{
s->setImageRaw(data.image());
s->setDepthRaw(data.depth());
s->setLaserScanRaw(data.laserScan());
}
t = timer.ticks();

View File

@@ -158,7 +158,7 @@ OdometryBOW::OdometryBOW(const ParametersMap & parameters) :
customParameters.insert(ParametersPair(Parameters::kKpMaxDepth(), uNumber2Str(this->getMaxDepth())));
customParameters.insert(ParametersPair(Parameters::kKpRoiRatios(), this->getRoiRatios()));
customParameters.insert(ParametersPair(Parameters::kMemRehearsalSimilarity(), "1.0")); // desactivate rehearsal
customParameters.insert(ParametersPair(Parameters::kMemImageKept(), "false"));
customParameters.insert(ParametersPair(Parameters::kMemBinDataKept(), "false"));
customParameters.insert(ParametersPair(Parameters::kMemSTMSize(), "0"));
int nn = Parameters::defaultOdomBowNNType();
float nndr = Parameters::defaultOdomBowNNDR();

View File

@@ -1256,7 +1256,7 @@ bool Rtabmap::process(const SensorData & data)
// override some parameters
uInsert(customParameters, ParametersPair(Parameters::kMemIncrementalMemory(), "true")); // make sure it is incremental
uInsert(customParameters, ParametersPair(Parameters::kMemRehearsalSimilarity(), "1.0")); // desactivate rehearsal
uInsert(customParameters, ParametersPair(Parameters::kMemImageKept(), "false"));
uInsert(customParameters, ParametersPair(Parameters::kMemBinDataKept(), "false"));
uInsert(customParameters, ParametersPair(Parameters::kMemSTMSize(), "0"));
uInsert(customParameters, ParametersPair(Parameters::kKpIncrementalDictionary(), "true")); // make sure it is incremental
uInsert(customParameters, ParametersPair(Parameters::kKpNewWordsComparedTogether(), "false"));