mirror of
https://github.com/introlab/rtabmap_ros.git
synced 2026-10-03 16:27:46 +08:00
fixed freezing bug when changing image rate of the camera to 0 when capturing
git-svn-id: http://rtabmap.googlecode.com/svn/trunk/rtabmap@564 f169173b-cf89-36c8-b27e-44dbe73f0c83
This commit is contained in:
@@ -236,23 +236,24 @@ cv::Mat Camera::takeImage(cv::Mat & descriptors, std::vector<cv::KeyPoint> & key
|
|||||||
{
|
{
|
||||||
descriptors = cv::Mat();
|
descriptors = cv::Mat();
|
||||||
keypoints.clear();
|
keypoints.clear();
|
||||||
if(_imageRate>0)
|
float imageRate = _imageRate;
|
||||||
|
if(imageRate>0)
|
||||||
{
|
{
|
||||||
int sleepTime = (1000.0f/_imageRate - 1000.0f*_frameRateTimer.getElapsedTime());
|
int sleepTime = (1000.0f/imageRate - 1000.0f*_frameRateTimer.getElapsedTime());
|
||||||
if(sleepTime > 2)
|
if(sleepTime > 2)
|
||||||
{
|
{
|
||||||
uSleep(sleepTime-2);
|
uSleep(sleepTime-2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add precision at the cost of a small overhead
|
// Add precision at the cost of a small overhead
|
||||||
while(_frameRateTimer.getElapsedTime() < 1.0/double(_imageRate)-0.000001)
|
while(_frameRateTimer.getElapsedTime() < 1.0/double(imageRate)-0.000001)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
double slept = _frameRateTimer.getElapsedTime();
|
double slept = _frameRateTimer.getElapsedTime();
|
||||||
_frameRateTimer.start();
|
_frameRateTimer.start();
|
||||||
UDEBUG("slept=%fs vs target=%fs", slept, 1.0/double(_imageRate));
|
UDEBUG("slept=%fs vs target=%fs", slept, 1.0/double(imageRate));
|
||||||
}
|
}
|
||||||
|
|
||||||
cv::Mat img;
|
cv::Mat img;
|
||||||
|
|||||||
Reference in New Issue
Block a user