updated dataRecorder app to use all drivers, fixed OpenNI2 intermittent deadlock on end of *.oni reading

This commit is contained in:
matlabbe
2015-04-23 11:08:50 -04:00
parent c1e15c0f2f
commit 39dce825d6
3 changed files with 103 additions and 51 deletions

View File

@@ -719,7 +719,7 @@ void CameraOpenNI2::captureImage(cv::Mat & rgb, cv::Mat & depth, float & fx, flo
{ {
openni::VideoStream* depthStream[] = {_depth}; openni::VideoStream* depthStream[] = {_depth};
openni::VideoStream* colorStream[] = {_color}; openni::VideoStream* colorStream[] = {_color};
if(openni::OpenNI::waitForAnyStream(depthStream, 1, &readyStream, 2000) != openni::STATUS_OK && if(openni::OpenNI::waitForAnyStream(depthStream, 1, &readyStream, 2000) != openni::STATUS_OK ||
openni::OpenNI::waitForAnyStream(colorStream, 1, &readyStream, 2000) != openni::STATUS_OK) openni::OpenNI::waitForAnyStream(colorStream, 1, &readyStream, 2000) != openni::STATUS_OK)
{ {
UWARN("No frames received since the last 2 seconds, end of stream is reached!"); UWARN("No frames received since the last 2 seconds, end of stream is reached!");

View File

@@ -102,12 +102,12 @@ void DataRecorder::closeRecorder()
{ {
delete memory_; delete memory_;
memory_ = 0; memory_ = 0;
UINFO("Data recorded to \"%s\".", this->path().toStdString().c_str());
} }
memoryMutex_.unlock(); memoryMutex_.unlock();
processingImages_ = false; processingImages_ = false;
count_ = 0; count_ = 0;
totalSizeKB_ = 0; totalSizeKB_ = 0;
UINFO("Data recorded to \"%s\".", this->path().toStdString().c_str());
if(this->isVisible()) if(this->isVisible())
{ {
QMessageBox::information(this, tr("Data recorder"), tr("Data recorded to \"%1\".").arg(this->path())); QMessageBox::information(this, tr("Data recorder"), tr("Data recorded to \"%1\".").arg(this->path()));

View File

@@ -46,9 +46,16 @@ void showUsage()
" -hide Don't display the current cloud recorded.\n" " -hide Don't display the current cloud recorded.\n"
" -debug Set debug level for the logger.\n" " -debug Set debug level for the logger.\n"
" -rate #.# Input rate Hz (default 0=inf)\n" " -rate #.# Input rate Hz (default 0=inf)\n"
" -openni Use openni camera instead of the usb camera.\n" " -driver Driver number to use:\n"
" -openni2 Use openni2 camera instead of the usb camera.\n" " 0=OpenNI-PCL (Kinect)\n"
" -freenect Use freenect camera instead of the usb camera.\n"); " 1=OpenNI2 (Kinect and Xtion PRO Live)\n"
" 2=Freenect (Kinect)\n"
" 3=OpenNI-CV (Kinect)\n"
" 4=OpenNI-CV-ASUS (Xtion PRO Live)\n"
" 5=Freenect2 (Kinect v2)\n"
" 6=DC1394 (Bumblebee2)\n"
" 7=FlyCapture2 (Bumblebee2)\n"
" -device "" Device ID (default \"\")\n");
exit(1); exit(1);
} }
@@ -76,9 +83,8 @@ int main (int argc, char * argv[])
// parse arguments // parse arguments
QString fileName; QString fileName;
bool show = true; bool show = true;
bool openni = false; int driver = 0;
bool openni2 = false; std::string deviceId;
bool freenect = false;
float rate = 0.0f; float rate = 0.0f;
if(argc < 2) if(argc < 2)
@@ -114,19 +120,34 @@ int main (int argc, char * argv[])
show = false; show = false;
continue; continue;
} }
if(strcmp(argv[i], "-openni") == 0) if(strcmp(argv[i], "-driver") == 0)
{ {
openni = true; ++i;
if(i < argc)
{
driver = std::atoi(argv[i]);
if(driver < 0 || driver > 7)
{
showUsage();
}
}
else
{
showUsage();
}
continue; continue;
} }
if(strcmp(argv[i], "-openni2") == 0) if(strcmp(argv[i], "-device") == 0)
{ {
openni2 = true; ++i;
continue; if(i < argc)
} {
if(strcmp(argv[i], "-freenect") == 0) deviceId = argv[i];
{ }
freenect = true; else
{
showUsage();
}
continue; continue;
} }
@@ -143,33 +164,6 @@ int main (int argc, char * argv[])
UINFO("Output = %s", fileName.toStdString().c_str()); UINFO("Output = %s", fileName.toStdString().c_str());
UINFO("Show = %s", show?"true":"false"); UINFO("Show = %s", show?"true":"false");
if(openni)
{
UINFO("Openni = true");
if(!CameraOpenni::available())
{
UERROR("Openni is not available. Please select another driver.");
return -1;
}
}
else if(openni2)
{
UINFO("Openni2 = true");
if(!CameraOpenNI2::available())
{
UERROR("Openni2 is not available. Please select another driver.");
return -1;
}
}
else if(freenect)
{
UINFO("Freenect = true");
if(!CameraFreenect::available())
{
UERROR("Freenect is not available. Please select another driver.");
return -1;
}
}
UINFO("Rate =%f Hz", rate); UINFO("Rate =%f Hz", rate);
app = new QApplication(argc, argv); app = new QApplication(argc, argv);
@@ -180,22 +174,80 @@ int main (int argc, char * argv[])
signal(SIGTERM, &sighandler); signal(SIGTERM, &sighandler);
signal(SIGINT, &sighandler); signal(SIGINT, &sighandler);
if(openni2) rtabmap::CameraRGBD * camera = 0;
rtabmap::Transform t=rtabmap::Transform(0,0,1,0, -1,0,0,0, 0,-1,0,0);
if(driver == 0)
{ {
cam = new rtabmap::CameraThread(new rtabmap::CameraOpenNI2("", rate, rtabmap::Transform(0,0,1,0, -1,0,0,0, 0,-1,0,0))); camera = new rtabmap::CameraOpenni(deviceId, rate, t);
} }
else if(openni) else if(driver == 1)
{ {
cam = new rtabmap::CameraThread(new rtabmap::CameraOpenni("", rate, rtabmap::Transform(0,0,1,0, -1,0,0,0, 0,-1,0,0))); if(!rtabmap::CameraOpenNI2::available())
{
UERROR("Not built with OpenNI2 support...");
exit(-1);
}
camera = new rtabmap::CameraOpenNI2(deviceId, rate, t);
} }
else if(freenect) else if(driver == 2)
{ {
cam = new rtabmap::CameraThread(new rtabmap::CameraFreenect(0, rate, rtabmap::Transform(0,0,1,0, -1,0,0,0, 0,-1,0,0))); if(!rtabmap::CameraFreenect::available())
{
UERROR("Not built with Freenect support...");
exit(-1);
}
camera = new rtabmap::CameraFreenect(deviceId.size()?atoi(deviceId.c_str()):0, rate, t);
}
else if(driver == 3)
{
if(!rtabmap::CameraOpenNICV::available())
{
UERROR("Not built with OpenNI from OpenCV support...");
exit(-1);
}
camera = new rtabmap::CameraOpenNICV(false, rate, t);
}
else if(driver == 4)
{
if(!rtabmap::CameraOpenNICV::available())
{
UERROR("Not built with OpenNI from OpenCV support...");
exit(-1);
}
camera = new rtabmap::CameraOpenNICV(true, rate, t);
}
else if(driver == 5)
{
if(!rtabmap::CameraFreenect2::available())
{
UERROR("Not built with Freenect2 support...");
exit(-1);
}
camera = new rtabmap::CameraFreenect2(deviceId.size()?atoi(deviceId.c_str()):0, rtabmap::CameraFreenect2::kTypeRGBDepthSD, rate, t);
}
else if(driver == 6)
{
if(!rtabmap::CameraStereoDC1394::available())
{
UERROR("Not built with dc1394 support...");
exit(-1);
}
camera = new rtabmap::CameraStereoDC1394(rate, t);
}
else if(driver == 7)
{
if(!rtabmap::CameraStereoFlyCapture2::available())
{
UERROR("Not built with FlyCapture2/Triclops support...");
exit(-1);
}
camera = new rtabmap::CameraStereoFlyCapture2(rate, t);
} }
else else
{ {
cam = new rtabmap::CameraThread(new rtabmap::CameraVideo(0, rate)); UFATAL("Camera driver (%d) not found!", driver);
} }
cam = new CameraThread(camera);
DataRecorder recorder; DataRecorder recorder;