diff --git a/corelib/include/rtabmap/core/CameraRGBD.h b/corelib/include/rtabmap/core/CameraRGBD.h index 7bc61257..77242d32 100644 --- a/corelib/include/rtabmap/core/CameraRGBD.h +++ b/corelib/include/rtabmap/core/CameraRGBD.h @@ -72,7 +72,7 @@ class RTABMAP_EXP CameraOpenni : public Camera { public: - static bool available() {return true;} + static bool available(); public: // default local transform z in, x right, y down)); @@ -80,11 +80,12 @@ public: float imageRate = 0, const Transform & localTransform = Transform::getIdentity()); virtual ~CameraOpenni(); - +#ifdef HAVE_OPENNI void image_cb ( const boost::shared_ptr& rgb, const boost::shared_ptr& depth, float constant); +#endif virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = ""); virtual bool isCalibrated() const; diff --git a/corelib/src/CameraRGBD.cpp b/corelib/src/CameraRGBD.cpp index 1f346a70..613e3e0c 100644 --- a/corelib/src/CameraRGBD.cpp +++ b/corelib/src/CameraRGBD.cpp @@ -38,8 +38,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +#ifdef HAVE_OPENNI #include #include +#endif #ifdef WITH_FREENECT #include @@ -86,8 +88,18 @@ CameraOpenni::CameraOpenni(const std::string & deviceId, float imageRate, const { } +bool CameraOpenni::available() +{ +#ifdef HAVE_OPENNI + return true; +#else + return false; +#endif +} + CameraOpenni::~CameraOpenni() { +#ifdef HAVE_OPENNI UDEBUG(""); if(connection_.connected()) { @@ -101,8 +113,9 @@ CameraOpenni::~CameraOpenni() delete interface_; interface_ = 0; } +#endif } - +#ifdef HAVE_OPENNI void CameraOpenni::image_cb ( const boost::shared_ptr& rgb, const boost::shared_ptr& depth, @@ -126,9 +139,11 @@ void CameraOpenni::image_cb ( dataReady_.release(); } } +#endif bool CameraOpenni::init(const std::string & calibrationFolder, const std::string & cameraName) { +#ifdef HAVE_OPENNI if(interface_) { interface_->stop(); @@ -167,25 +182,36 @@ bool CameraOpenni::init(const std::string & calibrationFolder, const std::string return false; } return true; +#else + UERROR("PCL not built with OpenNI! Cannot initialize CameraOpenNI"); + return false; +#endif } bool CameraOpenni::isCalibrated() const { +#ifdef HAVE_OPENNI return true; +#else + return false; +#endif } std::string CameraOpenni::getSerial() const { +#ifdef HAVE_OPENNI if(interface_) { return interface_->getName(); } +#endif return ""; } SensorData CameraOpenni::captureImage() { SensorData data; +#ifdef HAVE_OPENNI if(interface_ && interface_->isRunning()) { if(!dataReady_.acquire(1, 2000)) @@ -211,6 +237,9 @@ SensorData CameraOpenni::captureImage() depthConstant_ = 0.0f; } } +#else + UERROR("CameraOpenNI: RTAB-Map is not built with PCL having OpenNI support!"); +#endif return data; } @@ -1289,7 +1318,7 @@ SensorData CameraFreenect2::captureImage() float fx=0,fy=0,cx=0,cy=0; if(irFrame && depthFrame) { - cv::Mat irMat(irFrame->height, irFrame->width, CV_32FC1, irFrame->data); + cv::Mat irMat((int)irFrame->height, (int)irFrame->width, CV_32FC1, irFrame->data); //convert to gray scaled float maxIr_ = 0x7FFF; float minIr_ = 0x0; @@ -1303,7 +1332,7 @@ SensorData CameraFreenect2::captureImage() } } - cv::Mat(depthFrame->height, depthFrame->width, CV_32FC1, depthFrame->data).convertTo(depth, CV_16U, 1); + cv::Mat((int)depthFrame->height, (int)depthFrame->width, CV_32FC1, depthFrame->data).convertTo(depth, CV_16U, 1); cv::flip(rgb, rgb, 1); cv::flip(depth, depth, 1); @@ -1331,7 +1360,7 @@ SensorData CameraFreenect2::captureImage() { //rgb + ir or rgb + depth - cv::Mat rgbMatC4(rgbFrame->height, rgbFrame->width, CV_8UC4, rgbFrame->data); + cv::Mat rgbMatC4((int)rgbFrame->height, (int)rgbFrame->width, CV_8UC4, rgbFrame->data); cv::Mat rgbMat; // rtabmap uses 3 channels RGB cv::cvtColor(rgbMatC4, rgbMat, CV_BGRA2BGR); cv::flip(rgbMat, rgb, 1); @@ -1343,14 +1372,14 @@ SensorData CameraFreenect2::captureImage() if(irFrame) { //rectify IR - cv::Mat(irFrame->height, irFrame->width, CV_32FC1, irFrame->data).convertTo(depth, CV_16U, 1); + cv::Mat((int)irFrame->height, (int)irFrame->width, CV_32FC1, irFrame->data).convertTo(depth, CV_16U, 1); cv::flip(depth, depth, 1); depth = stereoModel_.left().rectifyImage(depth); } else { //rectify depth - cv::Mat(depthFrame->height, depthFrame->width, CV_32FC1, depthFrame->data).convertTo(depth, CV_16U, 1); + cv::Mat((int)depthFrame->height, (int)depthFrame->width, CV_32FC1, depthFrame->data).convertTo(depth, CV_16U, 1); cv::flip(depth, depth, 1); depth = stereoModel_.left().rectifyDepth(depth); @@ -1382,11 +1411,11 @@ SensorData CameraFreenect2::captureImage() //use data from libfreenect2 if(irFrame) { - cv::Mat(irFrame->height, irFrame->width, CV_32FC1, irFrame->data).convertTo(depth, CV_16U, 1); + cv::Mat((int)irFrame->height, (int)irFrame->width, CV_32FC1, irFrame->data).convertTo(depth, CV_16U, 1); } else { - cv::Mat(depthFrame->height, depthFrame->width, CV_32FC1, depthFrame->data).convertTo(depth, CV_16U, 1); + cv::Mat((int)depthFrame->height, (int)depthFrame->width, CV_32FC1, depthFrame->data).convertTo(depth, CV_16U, 1); //registration of the depth if(reg_) @@ -1397,7 +1426,7 @@ SensorData CameraFreenect2::captureImage() cv::resize(rgb, tmp, cv::Size(), 0.5, 0.5, cv::INTER_AREA); rgb = tmp; } - cv::Mat depthFrameMat = cv::Mat(depthFrame->height, depthFrame->width, CV_32FC1, depthFrame->data); + cv::Mat depthFrameMat = cv::Mat((int)depthFrame->height, (int)depthFrame->width, CV_32FC1, depthFrame->data); depth = cv::Mat::zeros(rgb.rows, rgb.cols, CV_16U); for(int dx=0; dxgraphOptimization_type->setItemData(1, 0, Qt::UserRole - 1); } + if(!CameraOpenni::available()) + { + _ui->comboBox_cameraRGBD->setItemData(0, 0, Qt::UserRole - 1); + } if(!CameraFreenect::available()) { _ui->comboBox_cameraRGBD->setItemData(1, 0, Qt::UserRole - 1); diff --git a/tools/Camera/main.cpp b/tools/Camera/main.cpp index a2827b53..23741915 100644 --- a/tools/Camera/main.cpp +++ b/tools/Camera/main.cpp @@ -144,7 +144,7 @@ int main(int argc, char * argv[]) } else { - camera = new rtabmap::CameraVideo(path, rate); + camera = new rtabmap::CameraVideo(path, false, rate); } } else if(UDirectory::exists(path)) diff --git a/tools/ConsoleApp/main.cpp b/tools/ConsoleApp/main.cpp index fb063015..bc03b5e8 100644 --- a/tools/ConsoleApp/main.cpp +++ b/tools/ConsoleApp/main.cpp @@ -302,11 +302,11 @@ int main(int argc, char * argv[]) Camera * camera = 0; if(UDirectory::exists(path)) { - camera = new CameraImages(path, startAt, false, false, 1/rate); + camera = new CameraImages(path, startAt, false, false, 1.0f/rate); } else { - camera = new CameraVideo(path, 1/rate); + camera = new CameraVideo(path, false, 1.0f/rate); } if(!camera || !camera->init())