mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-01 17:10:26 +08:00
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:
@@ -401,6 +401,10 @@ SensorData DBReader::getNextData(CameraInfo * info)
|
||||
_previousStamp = stamp;
|
||||
_previousMapID = mapId;
|
||||
}
|
||||
else
|
||||
{
|
||||
stamp = 0;
|
||||
}
|
||||
|
||||
data.uncompressData();
|
||||
if(data.cameraModels().size() > 1 &&
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user