mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-02 01:20:25 +08:00
sending words too when getting map
This commit is contained in:
@@ -42,6 +42,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "rtabmap/utilite/UStl.h"
|
#include "rtabmap/utilite/UStl.h"
|
||||||
#include <opencv2/core/core.hpp>
|
#include <opencv2/core/core.hpp>
|
||||||
#include <opencv2/features2d/features2d.hpp>
|
#include <opencv2/features2d/features2d.hpp>
|
||||||
|
#include <pcl/point_types.h>
|
||||||
|
|
||||||
namespace rtabmap {
|
namespace rtabmap {
|
||||||
|
|
||||||
@@ -140,6 +141,9 @@ public:
|
|||||||
bool lookInDatabase = false) const;
|
bool lookInDatabase = false) const;
|
||||||
cv::Mat getImageCompressed(int signatureId) const;
|
cv::Mat getImageCompressed(int signatureId) const;
|
||||||
SensorData getNodeData(int nodeId, bool uncompressedData = false);
|
SensorData getNodeData(int nodeId, bool uncompressedData = false);
|
||||||
|
void getNodeWords(int nodeId,
|
||||||
|
std::multimap<int, cv::KeyPoint> & words,
|
||||||
|
std::multimap<int, pcl::PointXYZ> & words3);
|
||||||
SensorData getSignatureDataConst(int locationId) const;
|
SensorData getSignatureDataConst(int locationId) const;
|
||||||
std::set<int> getAllSignatureIds() const;
|
std::set<int> getAllSignatureIds() const;
|
||||||
bool memoryChanged() const {return _memoryChanged;}
|
bool memoryChanged() const {return _memoryChanged;}
|
||||||
|
|||||||
@@ -3354,6 +3354,42 @@ SensorData Memory::getNodeData(int nodeId, bool uncompressedData)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Memory::getNodeWords(int nodeId,
|
||||||
|
std::multimap<int, cv::KeyPoint> & words,
|
||||||
|
std::multimap<int, pcl::PointXYZ> & words3)
|
||||||
|
{
|
||||||
|
UDEBUG("nodeId=%d", nodeId);
|
||||||
|
Signature * s = this->_getSignature(nodeId);
|
||||||
|
if(s)
|
||||||
|
{
|
||||||
|
words = s->getWords();
|
||||||
|
words3 = s->getWords3();
|
||||||
|
}
|
||||||
|
else if(_dbDriver)
|
||||||
|
{
|
||||||
|
// load from database
|
||||||
|
std::list<Signature*> signatures;
|
||||||
|
std::list<int> ids;
|
||||||
|
ids.push_back(nodeId);
|
||||||
|
std::set<int> loadedFromTrash;
|
||||||
|
_dbDriver->loadSignatures(ids, signatures, &loadedFromTrash);
|
||||||
|
if(signatures.size())
|
||||||
|
{
|
||||||
|
words = signatures.front()->getWords();
|
||||||
|
words3 = signatures.front()->getWords3();
|
||||||
|
if(loadedFromTrash.size())
|
||||||
|
{
|
||||||
|
//put back
|
||||||
|
_dbDriver->asyncSave(signatures.front());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete signatures.front();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SensorData Memory::getSignatureDataConst(int locationId) const
|
SensorData Memory::getSignatureDataConst(int locationId) const
|
||||||
{
|
{
|
||||||
UDEBUG("");
|
UDEBUG("");
|
||||||
|
|||||||
@@ -2880,6 +2880,9 @@ void Rtabmap::get3DMap(
|
|||||||
_memory->getNodeInfo(*iter, odomPose, mapId, weight, label, stamp, true);
|
_memory->getNodeInfo(*iter, odomPose, mapId, weight, label, stamp, true);
|
||||||
SensorData data = _memory->getNodeData(*iter);
|
SensorData data = _memory->getNodeData(*iter);
|
||||||
data.setId(*iter);
|
data.setId(*iter);
|
||||||
|
std::multimap<int, cv::KeyPoint> words;
|
||||||
|
std::multimap<int, pcl::PointXYZ> words3;
|
||||||
|
_memory->getNodeWords(*iter, words, words3);
|
||||||
signatures.insert(std::make_pair(*iter,
|
signatures.insert(std::make_pair(*iter,
|
||||||
Signature(*iter,
|
Signature(*iter,
|
||||||
mapId,
|
mapId,
|
||||||
@@ -2888,6 +2891,8 @@ void Rtabmap::get3DMap(
|
|||||||
label,
|
label,
|
||||||
odomPose,
|
odomPose,
|
||||||
data)));
|
data)));
|
||||||
|
signatures.at(*iter).setWords(words);
|
||||||
|
signatures.at(*iter).setWords3(words3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(_memory && (_memory->getStMem().size() || _memory->getWorkingMem().size() > 1))
|
else if(_memory && (_memory->getStMem().size() || _memory->getWorkingMem().size() > 1))
|
||||||
|
|||||||
Reference in New Issue
Block a user