mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-09 21:10:19 +08:00
Merged pcl_integration branch to trunk
git-svn-id: http://rtabmap.googlecode.com/svn/trunk/rtabmap@1014 f169173b-cf89-36c8-b27e-44dbe73f0c83
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
|
||||
SET(SRC_FILES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
SET(INCLUDE_DIRS
|
||||
${PROJECT_SOURCE_DIR}/corelib/include
|
||||
${PROJECT_SOURCE_DIR}/utilite/include
|
||||
${PROJECT_SOURCE_DIR}/guilib/include
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${PCL_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
INCLUDE(${QT_USE_FILE})
|
||||
|
||||
SET(LIBRARIES
|
||||
${PCL_LIBRARIES}
|
||||
${QT_LIBRARIES}
|
||||
)
|
||||
|
||||
add_definitions(${PCL_DEFINITIONS})
|
||||
|
||||
INCLUDE_DIRECTORIES(${INCLUDE_DIRS})
|
||||
|
||||
IF(MINGW)
|
||||
ADD_EXECUTABLE(dataRecorder WIN32 ${SRC_FILES})
|
||||
ELSE()
|
||||
ADD_EXECUTABLE(dataRecorder ${SRC_FILES})
|
||||
ENDIF()
|
||||
TARGET_LINK_LIBRARIES(dataRecorder rtabmap_core rtabmap_gui rtabmap_utilite ${LIBRARIES})
|
||||
|
||||
SET_TARGET_PROPERTIES( dataRecorder
|
||||
PROPERTIES OUTPUT_NAME ${PROJECT_PREFIX}-dataRecorder)
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
|
||||
#include <rtabmap/utilite/ULogger.h>
|
||||
#include <rtabmap/core/CameraOpenni.h>
|
||||
#include <rtabmap/core/Camera.h>
|
||||
#include <rtabmap/core/CameraThread.h>
|
||||
#include <rtabmap/gui/DataRecorder.h>
|
||||
#include <QtGui/QApplication.h>
|
||||
#include <signal.h>
|
||||
|
||||
using namespace rtabmap;
|
||||
|
||||
void showUsage()
|
||||
{
|
||||
printf("\nUsage:\n"
|
||||
"dataRecorder [options] output.db\n"
|
||||
"Options:\n"
|
||||
" -hide Don't display the current cloud recorded.\n"
|
||||
" -debug Set debug level for the logger.\n"
|
||||
" -rate #.# Input rate Hz (default 0=inf)\n"
|
||||
" -openni Use openni camera instead of the usb camera.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
rtabmap::CameraOpenni * openniCamera = 0;
|
||||
rtabmap::CameraThread * cam = 0;
|
||||
QApplication * app = 0;
|
||||
// catch ctrl-c
|
||||
void sighandler(int sig)
|
||||
{
|
||||
printf("\nSignal %d caught...\n", sig);
|
||||
if(openniCamera)
|
||||
{
|
||||
openniCamera->kill();
|
||||
}
|
||||
if(cam)
|
||||
{
|
||||
cam->join(true);
|
||||
}
|
||||
if(app)
|
||||
{
|
||||
QMetaObject::invokeMethod(app, "quit");
|
||||
}
|
||||
}
|
||||
|
||||
int main (int argc, char * argv[])
|
||||
{
|
||||
ULogger::setType(ULogger::kTypeConsole);
|
||||
ULogger::setLevel(ULogger::kInfo);
|
||||
|
||||
// parse arguments
|
||||
QString fileName;
|
||||
bool show = true;
|
||||
bool openni = false;
|
||||
float rate = 0.0f;
|
||||
|
||||
if(argc < 2)
|
||||
{
|
||||
showUsage();
|
||||
}
|
||||
for(int i=1; i<argc-1; ++i)
|
||||
{
|
||||
if(strcmp(argv[i], "-rate") == 0)
|
||||
{
|
||||
++i;
|
||||
if(i < argc)
|
||||
{
|
||||
rate = std::atof(argv[i]);
|
||||
if(rate < 0.0f)
|
||||
{
|
||||
showUsage();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
showUsage();
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if(strcmp(argv[i], "-debug") == 0)
|
||||
{
|
||||
ULogger::setLevel(ULogger::kDebug);
|
||||
continue;
|
||||
}
|
||||
if(strcmp(argv[i], "-hide") == 0)
|
||||
{
|
||||
show = false;
|
||||
continue;
|
||||
}
|
||||
if(strcmp(argv[i], "-openni") == 0)
|
||||
{
|
||||
openni = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
printf("Unrecognized option : %s\n", argv[i]);
|
||||
showUsage();
|
||||
}
|
||||
fileName = argv[argc-1]; // the last is the output path
|
||||
|
||||
UINFO("Output = %s", fileName.toStdString().c_str());
|
||||
UINFO("Show = %s", show?"true":"false");
|
||||
UINFO("Openni = %s", openni?"true":"false");
|
||||
UINFO("Rate =%f Hz", rate);
|
||||
|
||||
app = new QApplication(argc, argv);
|
||||
|
||||
// Catch ctrl-c to close the gui
|
||||
// (Place this after QApplication's constructor)
|
||||
signal(SIGABRT, &sighandler);
|
||||
signal(SIGTERM, &sighandler);
|
||||
signal(SIGINT, &sighandler);
|
||||
|
||||
if(openni)
|
||||
{
|
||||
openniCamera = new rtabmap::CameraOpenni("", rate, rtabmap::Transform(0,0,1,0, -1,0,0,0, 0,-1,0,0));
|
||||
}
|
||||
else
|
||||
{
|
||||
cam = new rtabmap::CameraThread(new rtabmap::CameraVideo(0, rate));
|
||||
}
|
||||
|
||||
DataRecorder recorder;
|
||||
|
||||
if(recorder.init(fileName))
|
||||
{
|
||||
recorder.registerToEventsManager();
|
||||
if(show)
|
||||
{
|
||||
recorder.setWindowTitle("Cloud viewer");
|
||||
recorder.setMinimumWidth(500);
|
||||
recorder.setMinimumHeight(300);
|
||||
recorder.showNormal();
|
||||
app->processEvents();
|
||||
}
|
||||
|
||||
if(openni?openniCamera->init():cam->init())
|
||||
{
|
||||
openni?openniCamera->start():cam->start();
|
||||
|
||||
app->exec();
|
||||
|
||||
UINFO("Closing...");
|
||||
|
||||
recorder.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
UERROR("Cannot initialize the camera!");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
UERROR("Cannot initialize the recorder! Maybe the path is wrong: \"%s\"", fileName.toStdString().c_str());
|
||||
}
|
||||
|
||||
if(openniCamera)
|
||||
{
|
||||
delete openniCamera;
|
||||
}
|
||||
if(cam)
|
||||
{
|
||||
delete cam;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user