RtabmapThread: when receiving new map event from odometry, wait until the buffer has reached the corresponding timestamp before triggering a new map. DBReader: regenerate stamps when sync capture rate with stamps in database is false. MainWindow: ask for PNG or JPEG format when activating auto capture.

This commit is contained in:
matlabbe
2017-12-11 17:09:04 -05:00
parent ff135322f6
commit d776092b35
5 changed files with 47 additions and 13 deletions

View File

@@ -401,6 +401,10 @@ SensorData DBReader::getNextData(CameraInfo * info)
_previousStamp = stamp;
_previousMapID = mapId;
}
else
{
stamp = 0;
}
data.uncompressData();
if(data.cameraModels().size() > 1 &&

View File

@@ -85,6 +85,7 @@ void RtabmapThread::clearBufferedData()
_dataMutex.lock();
{
_dataBuffer.clear();
_newMapEvents.clear();
lastPose_.setIdentity();
covariance_ = cv::Mat();
_previousStamp = 0;
@@ -572,13 +573,13 @@ void RtabmapThread::addData(const OdometryEvent & odomEvent)
{
if(odomEvent.pose().isIdentity())
{
UWARN("Odometry is reset (identity pose detected). Increment map id!");
UWARN("Odometry is reset (identity pose detected). Increment map id! (stamp=%fs)", odomEvent.data().stamp());
}
else
{
UWARN("Odometry is reset (high variance (%f >=9999 detected). Increment map id!", odomEvent.info().reg.covariance.at<double>(0,0));
UWARN("Odometry is reset (high variance (%f >=9999 detected, stamp=%fs). Increment map id!", odomEvent.info().reg.covariance.at<double>(0,0), odomEvent.data().stamp());
}
pushNewState(kStateTriggeringMap);
_newMapEvents.push_back(odomEvent.data().stamp());
covariance_ = cv::Mat();
}
@@ -654,7 +655,7 @@ bool RtabmapThread::getData(OdometryEvent & data)
ULOGGER_INFO("wake-up");
bool dataFilled = false;
bool triggerNewMap = false;
_dataMutex.lock();
{
if(_state.empty() && !_dataBuffer.empty())
@@ -672,10 +673,23 @@ bool RtabmapThread::getData(OdometryEvent & data)
}
_userDataMutex.unlock();
while(_newMapEvents.size() && _newMapEvents.front() <= data.data().stamp())
{
UWARN("Triggering new map %f<=%f...", _newMapEvents.front() , data.data().stamp());
triggerNewMap = true;
_newMapEvents.pop_front();
}
dataFilled = true;
}
}
_dataMutex.unlock();
if(triggerNewMap)
{
_rtabmap->triggerNewMap();
}
return dataFilled;
}