diff --git a/corelib/include/rtabmap/core/CameraStereo.h b/corelib/include/rtabmap/core/CameraStereo.h index eee499b7..5c9d8d46 100644 --- a/corelib/include/rtabmap/core/CameraStereo.h +++ b/corelib/include/rtabmap/core/CameraStereo.h @@ -112,7 +112,21 @@ public: static bool available(); public: - CameraStereoZed(bool rgbdMode, float imageRate=0.0f, const Transform & localTransform = Transform::getIdentity()); + CameraStereoZed( + int deviceId, + int resolution = 2, // 0=HD2K, 1=HD1080, 2=HD720, 3=VGA + int quality = 1, // 0=NONE, 1=PERFORMANCE, 2=QUALITY + int sensingMode = 1,// 0=FULL, 1=RAW + int confidenceThr = 100, + float imageRate=0.0f, + const Transform & localTransform = Transform::getIdentity()); + CameraStereoZed( + const std::string & svoFilePath, + int quality = 1, // 0=NONE, 1=PERFORMANCE, 2=QUALITY + int sensingMode = 1,// 0=FULL, 1=RAW + int confidenceThr = 100, + float imageRate=0.0f, + const Transform & localTransform = Transform::getIdentity()); virtual ~CameraStereoZed(); virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = ""); @@ -125,7 +139,13 @@ protected: private: sl::zed::Camera * zed_; StereoCameraModel stereoModel_; - bool rgbdMode_; + CameraVideo::Source src_; + int usbDevice_; + std::string svoFilePath_; + int resolution_; + int quality_; + int sensingMode_; + int confidenceThr_; }; ///////////////////////// diff --git a/corelib/src/CameraStereo.cpp b/corelib/src/CameraStereo.cpp index 8c59f687..a52baea0 100644 --- a/corelib/src/CameraStereo.cpp +++ b/corelib/src/CameraStereo.cpp @@ -747,11 +747,55 @@ bool CameraStereoZed::available() #endif } -CameraStereoZed::CameraStereoZed(bool rgbdMode, float imageRate, const Transform & localTransform) : - Camera(imageRate, localTransform), - zed_(0), - rgbdMode_(rgbdMode) +CameraStereoZed::CameraStereoZed( + int deviceId, + int resolution, + int quality, + int sensingMode, + int confidenceThr, + float imageRate, + const Transform & localTransform) : + Camera(imageRate, localTransform), + zed_(0), + src_(CameraVideo::kUsbDevice), + usbDevice_(deviceId), + svoFilePath_(""), + resolution_(resolution), + quality_(quality), + sensingMode_(sensingMode), + confidenceThr_(confidenceThr) { +#ifdef RTABMAP_ZED + UASSERT(resolution_ >= sl::zed::HD2K && resolution_ <=sl::zed::VGA); + UASSERT(quality_ >= sl::zed::NONE && quality_ <=sl::zed::QUALITY); + UASSERT(sensingMode_ >= sl::zed::FULL && sensingMode_ <=sl::zed::RAW); + UASSERT(confidenceThr_ >= 0 && confidenceThr_ <=100); +#endif +} + +CameraStereoZed::CameraStereoZed( + const std::string & filePath, + int quality, + int sensingMode, + int confidenceThr, + float imageRate, + const Transform & localTransform) : + Camera(imageRate, localTransform), + zed_(0), + src_(CameraVideo::kVideoFile), + usbDevice_(0), + svoFilePath_(filePath), + resolution_(2), + quality_(quality), + sensingMode_(sensingMode), + confidenceThr_(confidenceThr) +{ +#ifdef RTABMAP_ZED + UASSERT(resolution_ >= sl::zed::HD2K && resolution_ <=sl::zed::VGA); + UASSERT(quality_ >= sl::zed::NONE && quality_ <=sl::zed::QUALITY); + UASSERT(sensingMode_ >= sl::zed::FULL && sensingMode_ <=sl::zed::RAW); + UASSERT(confidenceThr_ >= 0 && confidenceThr_ <=100); +#endif } CameraStereoZed::~CameraStereoZed() @@ -773,29 +817,41 @@ bool CameraStereoZed::init(const std::string & calibrationFolder, const std::str zed_ = 0; } - if(zed_->isZEDconnected()) + + if(src_ == CameraVideo::kVideoFile) { - zed_ = new sl::zed::Camera(sl::zed::HD720); // Use in Live Mode - //zed_ = new sl::zed::Camera(argv[1]); // Use in SVO playback mode - - //init WITH self-calibration (- last parameter to false -) - sl::zed::ERRCODE err = zed_->init(sl::zed::MODE::PERFORMANCE, 0, true, false, false); - - // Quit if an error occurred - if (err != sl::zed::SUCCESS) - { - UERROR("ZED camera initialization failed: %s", sl::zed::errcode2str(err).c_str()); - delete zed_; - zed_ = 0; - return false; - } + zed_ = new sl::zed::Camera(svoFilePath_); // Use in SVO playback mode } else { - UERROR("ZED camera initialization failed: ZED is not connected!"); + if(zed_->isZEDconnected()) + { + zed_ = new sl::zed::Camera((sl::zed::ZEDResolution_mode)resolution_, getImageRate(), usbDevice_); // Use in Live Mode + } + else + { + UERROR("ZED camera initialization failed: ZED is not connected!"); + return false; + } + } + + //init WITH self-calibration (- last parameter to false -) + sl::zed::ERRCODE err = zed_->init( + (sl::zed::MODE)quality_, + -1, // search for any GPU + true, false, false); + + // Quit if an error occurred + if (err != sl::zed::SUCCESS) + { + UERROR("ZED camera initialization failed: %s", sl::zed::errcode2str(err).c_str()); + delete zed_; + zed_ = 0; return false; } - + + zed_->setConfidenceThreshold(confidenceThr_); + sl::zed::StereoParameters * stereoParams = zed_->getParameters(); sl::zed::resolution res = zed_->getImageSize(); @@ -837,9 +893,7 @@ SensorData CameraStereoZed::captureImage() #ifdef RTABMAP_ZED if(zed_) { - sl::zed::SENSING_MODE dm_type = sl::zed::RAW; - bool res = zed_->grab(dm_type); - + bool res = zed_->grab((sl::zed::SENSING_MODE)sensingMode_, quality_ > 0, quality_ > 0, false); if(!res) { // get left image @@ -847,12 +901,12 @@ SensorData CameraStereoZed::captureImage() cv::Mat left; cv::cvtColor(rgbaLeft, left, cv::COLOR_BGRA2BGR); - if(rgbdMode_) + if(quality_ > 0) { // get depth image cv::Mat depth; slMat2cvMat(zed_->retrieveMeasure(sl::zed::MEASURE::DEPTH)).copyTo(depth); - depth /= 1000.0; + depth /= 1000.0; // to meters data = SensorData(left, depth, stereoModel_.left(), this->getNextSeqID(), UTimer::now()); } @@ -866,10 +920,14 @@ SensorData CameraStereoZed::captureImage() data = SensorData(left, right, stereoModel_, this->getNextSeqID(), UTimer::now()); } } - else + else if(src_ == CameraVideo::kUsbDevice) { UERROR("CameraStereoZed: Failed to grab images!"); } + else + { + UWARN("CameraStereoZed: end of stream is reached!"); + } } #else UERROR("CameraStereoZED: RTAB-Map is not built with ZED sdk support!"); diff --git a/corelib/src/Stereo.cpp b/corelib/src/Stereo.cpp index dbf40042..01aeecd8 100644 --- a/corelib/src/Stereo.cpp +++ b/corelib/src/Stereo.cpp @@ -150,7 +150,13 @@ std::vector StereoOpticalFlow::computeCorrespondences( if(countFlowRejected + countDisparityRejected > (int)status.size()/2) { - UWARN("A large number (%d/%d) of stereo correspondences are rejected! Optical flow may have failed, images are not calibrated or the background is too far (no disparity between the images).", countFlowRejected+countDisparityRejected, (int)status.size()); + UWARN("A large number (%d/%d) of stereo correspondences are rejected! " + "Optical flow may have failed, images are not calibrated, " + "the background is too far (no disparity between the images) or " + "maximum disparity may be too small (%d).", + countFlowRejected+countDisparityRejected, + (int)status.size(), + this->maxDisparity()); } return rightCorners; diff --git a/guilib/include/rtabmap/gui/PreferencesDialog.h b/guilib/include/rtabmap/gui/PreferencesDialog.h index a2cb8ef8..dca639f3 100644 --- a/guilib/include/rtabmap/gui/PreferencesDialog.h +++ b/guilib/include/rtabmap/gui/PreferencesDialog.h @@ -285,6 +285,7 @@ private slots: void selectSourceStereoVideoPath(); void selectSourceOniPath(); void selectSourceOni2Path(); + void selectSourceSvoPath(); void updateSourceGrpVisibility(); void testOdometry(); void testCamera(); diff --git a/guilib/src/MainWindow.cpp b/guilib/src/MainWindow.cpp index 20a964c0..62e955da 100644 --- a/guilib/src/MainWindow.cpp +++ b/guilib/src/MainWindow.cpp @@ -881,64 +881,78 @@ void MainWindow::processOdometry(const rtabmap::OdometryEvent & odom) (odom.data().cameraModels().size() || odom.data().stereoCameraModel().isValidForProjection()) && _preferencesDialog->isCloudsShown(1)) { - pcl::PointCloud::Ptr cloud; - pcl::IndicesPtr indices(new std::vector); - cloud = util3d::cloudRGBFromSensorData(odom.data(), - _preferencesDialog->getCloudDecimation(1), - _preferencesDialog->getCloudMaxDepth(1), - _preferencesDialog->getCloudMinDepth(1), - indices.get(), - _preferencesDialog->getAllParameters()); - if(indices->size()) + + if(odom.data().imageRaw().cols % _preferencesDialog->getCloudDecimation(1) != 0 || + odom.data().imageRaw().rows % _preferencesDialog->getCloudDecimation(1) != 0) + { + UERROR("Decimation (%d) is not modulo of the image resolution (%dx%d)! The cloud cannot be " + "created. Go to Preferences->3D Rendering under \"Odom\" column to modify this parameter.", + _preferencesDialog->getCloudDecimation(1), + odom.data().imageRaw().cols, + odom.data().imageRaw().rows); + } + else { - cloud = util3d::transformPointCloud(cloud, pose); - if(_preferencesDialog->isCloudMeshing()) + pcl::PointCloud::Ptr cloud; + pcl::IndicesPtr indices(new std::vector); + cloud = util3d::cloudRGBFromSensorData(odom.data(), + _preferencesDialog->getCloudDecimation(1), + _preferencesDialog->getCloudMaxDepth(1), + _preferencesDialog->getCloudMinDepth(1), + indices.get(), + _preferencesDialog->getAllParameters()); + if(indices->size()) { - // we need to extract indices as pcl::OrganizedFastMesh doesn't take indices - pcl::PointCloud::Ptr output(new pcl::PointCloud); - output = util3d::extractIndices(cloud, indices, false, true); + cloud = util3d::transformPointCloud(cloud, pose); - // Fast organized mesh - Eigen::Vector3f viewpoint(0.0f,0.0f,0.0f); - if(odom.data().cameraModels().size() && !odom.data().cameraModels()[0].localTransform().isNull()) + if(_preferencesDialog->isCloudMeshing()) { - viewpoint[0] = odom.data().cameraModels()[0].localTransform().x(); - viewpoint[1] = odom.data().cameraModels()[0].localTransform().y(); - viewpoint[2] = odom.data().cameraModels()[0].localTransform().z(); + // we need to extract indices as pcl::OrganizedFastMesh doesn't take indices + pcl::PointCloud::Ptr output(new pcl::PointCloud); + output = util3d::extractIndices(cloud, indices, false, true); + + // Fast organized mesh + Eigen::Vector3f viewpoint(0.0f,0.0f,0.0f); + if(odom.data().cameraModels().size() && !odom.data().cameraModels()[0].localTransform().isNull()) + { + viewpoint[0] = odom.data().cameraModels()[0].localTransform().x(); + viewpoint[1] = odom.data().cameraModels()[0].localTransform().y(); + viewpoint[2] = odom.data().cameraModels()[0].localTransform().z(); + } + else if(!odom.data().stereoCameraModel().localTransform().isNull()) + { + viewpoint[0] = odom.data().stereoCameraModel().localTransform().x(); + viewpoint[1] = odom.data().stereoCameraModel().localTransform().y(); + viewpoint[2] = odom.data().stereoCameraModel().localTransform().z(); + } + std::vector polygons = util3d::organizedFastMesh( + output, + _preferencesDialog->getCloudMeshingAngle(), + _preferencesDialog->isCloudMeshingQuad(), + _preferencesDialog->getCloudMeshingTriangleSize(), + Eigen::Vector3f(pose.x(), pose.y(), pose.z()) + viewpoint); + if(polygons.size()) + { + if(!_cloudViewer->addCloudMesh("cloudOdom", output, polygons, _odometryCorrection)) + { + UERROR("Adding cloudOdom to viewer failed!"); + } + } } - else if(!odom.data().stereoCameraModel().localTransform().isNull()) + else { - viewpoint[0] = odom.data().stereoCameraModel().localTransform().x(); - viewpoint[1] = odom.data().stereoCameraModel().localTransform().y(); - viewpoint[2] = odom.data().stereoCameraModel().localTransform().z(); - } - std::vector polygons = util3d::organizedFastMesh( - output, - _preferencesDialog->getCloudMeshingAngle(), - _preferencesDialog->isCloudMeshingQuad(), - _preferencesDialog->getCloudMeshingTriangleSize(), - Eigen::Vector3f(pose.x(), pose.y(), pose.z()) + viewpoint); - if(polygons.size()) - { - if(!_cloudViewer->addCloudMesh("cloudOdom", output, polygons, _odometryCorrection)) + if(!_cloudViewer->addCloud("cloudOdom", cloud, _odometryCorrection)) { UERROR("Adding cloudOdom to viewer failed!"); } } - } - else - { - if(!_cloudViewer->addCloud("cloudOdom", cloud, _odometryCorrection)) - { - UERROR("Adding cloudOdom to viewer failed!"); - } - } - _cloudViewer->setCloudVisibility("cloudOdom", true); - _cloudViewer->setCloudOpacity("cloudOdom", _preferencesDialog->getCloudOpacity(1)); - _cloudViewer->setCloudPointSize("cloudOdom", _preferencesDialog->getCloudPointSize(1)); + _cloudViewer->setCloudVisibility("cloudOdom", true); + _cloudViewer->setCloudOpacity("cloudOdom", _preferencesDialog->getCloudOpacity(1)); + _cloudViewer->setCloudPointSize("cloudOdom", _preferencesDialog->getCloudPointSize(1)); - cloudUpdated = true; + cloudUpdated = true; + } } } @@ -2218,6 +2232,18 @@ void MainWindow::createAndAddCloudToMap(int nodeId, const Transform & pose, int pcl::PointCloud::Ptr cloudWithoutNormals; pcl::IndicesPtr indices(new std::vector); UASSERT(nodeId == data.id()); + + if(image.cols % _preferencesDialog->getCloudDecimation(0) != 0 || + image.rows % _preferencesDialog->getCloudDecimation(0) != 0) + { + UERROR("Decimation (%d) is not modulo of the image resolution (%dx%d)! The cloud cannot be " + "created. Go to Preferences->3D Rendering under \"Map\" column to modify this parameter.", + _preferencesDialog->getCloudDecimation(0), + image.cols, + image.rows); + return; + } + // Create organized cloud cloudWithoutNormals = util3d::cloudRGBFromSensorData(data, _preferencesDialog->getCloudDecimation(0), diff --git a/guilib/src/PreferencesDialog.cpp b/guilib/src/PreferencesDialog.cpp index 0c272dc6..e99c1cbd 100644 --- a/guilib/src/PreferencesDialog.cpp +++ b/guilib/src/PreferencesDialog.cpp @@ -471,7 +471,12 @@ PreferencesDialog::PreferencesDialog(QWidget * parent) : connect(_ui->lineEdit_cameraStereoVideo_path, SIGNAL(textChanged(const QString &)), this, SLOT(makeObsoleteSourcePanel())); connect(_ui->checkBox_stereoVideo_rectify, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteSourcePanel())); - connect(_ui->checkBox_stereoZed_computeDisparity, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteSourcePanel())); + connect(_ui->comboBox_stereoZed_resolution, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel())); + connect(_ui->comboBox_stereoZed_quality, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel())); + connect(_ui->comboBox_stereoZed_sensingMode, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel())); + connect(_ui->spinBox_stereoZed_confidenceThr, SIGNAL(valueChanged(int)), this, SLOT(makeObsoleteSourcePanel())); + connect(_ui->toolButton_zedSvoPath, SIGNAL(clicked()), this, SLOT(selectSourceSvoPath())); + connect(_ui->lineEdit_zedSvoPath, SIGNAL(textChanged(const QString &)), this, SLOT(makeObsoleteSourcePanel())); connect(_ui->checkbox_rgbd_colorOnly, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteSourcePanel())); connect(_ui->spinBox_source_imageDecimation, SIGNAL(valueChanged(int)), this, SLOT(makeObsoleteSourcePanel())); @@ -1278,7 +1283,11 @@ void PreferencesDialog::resetSettings(QGroupBox * groupBox) _ui->checkBox_stereoImages_rectify->setChecked(false); _ui->lineEdit_cameraStereoVideo_path->setText(""); _ui->checkBox_stereoVideo_rectify->setChecked(false); - _ui->checkBox_stereoZed_computeDisparity->setChecked(true); + _ui->comboBox_stereoZed_resolution->setCurrentIndex(2); + _ui->comboBox_stereoZed_quality->setCurrentIndex(1); + _ui->comboBox_stereoZed_sensingMode->setCurrentIndex(1); + _ui->spinBox_stereoZed_confidenceThr->setValue(100); + _ui->lineEdit_zedSvoPath->clear(); _ui->checkBox_cameraImages_timestamps->setChecked(false); _ui->checkBox_cameraImages_syncTimeStamps->setChecked(true); @@ -1604,7 +1613,11 @@ void PreferencesDialog::readCameraSettings(const QString & filePath) settings.endGroup(); // StereoVideo settings.beginGroup("StereoZed"); - _ui->checkBox_stereoZed_computeDisparity->setChecked(settings.value("compute_disp", _ui->checkBox_stereoZed_computeDisparity->isChecked()).toBool()); + _ui->comboBox_stereoZed_resolution->setCurrentIndex(settings.value("resolution", _ui->comboBox_stereoZed_resolution->currentIndex()).toInt()); + _ui->comboBox_stereoZed_quality->setCurrentIndex(settings.value("quality", _ui->comboBox_stereoZed_quality->currentIndex()).toInt()); + _ui->comboBox_stereoZed_sensingMode->setCurrentIndex(settings.value("sensing_mode", _ui->comboBox_stereoZed_sensingMode->currentIndex()).toInt()); + _ui->spinBox_stereoZed_confidenceThr->setValue(settings.value("confidence_thr", _ui->spinBox_stereoZed_confidenceThr->value()).toInt()); + _ui->lineEdit_zedSvoPath->setText(settings.value("svo_path", _ui->lineEdit_zedSvoPath->text()).toString()); settings.endGroup(); // StereoZed @@ -1993,7 +2006,11 @@ void PreferencesDialog::writeCameraSettings(const QString & filePath) const settings.endGroup(); // StereoVideo settings.beginGroup("StereoZed"); - settings.setValue("compute_disp", _ui->checkBox_stereoZed_computeDisparity->isChecked()); + settings.setValue("resolution", _ui->comboBox_stereoZed_resolution->currentIndex()); + settings.setValue("quality", _ui->comboBox_stereoZed_quality->currentIndex()); + settings.setValue("sensing_mode", _ui->comboBox_stereoZed_sensingMode->currentIndex()); + settings.setValue("confidence_thr", _ui->spinBox_stereoZed_confidenceThr->value()); + settings.setValue("svo_path", _ui->lineEdit_zedSvoPath->text()); settings.endGroup(); // StereoZed @@ -2833,6 +2850,20 @@ void PreferencesDialog::selectSourceOni2Path() } } +void PreferencesDialog::selectSourceSvoPath() +{ + QString dir = _ui->lineEdit_zedSvoPath->text(); + if(dir.isEmpty()) + { + dir = getWorkingDirectory(); + } + QString path = QFileDialog::getOpenFileName(this, tr("Select file"), _ui->lineEdit_zedSvoPath->text(), tr("ZED (*.svo)")); + if(!path.isEmpty()) + { + _ui->lineEdit_zedSvoPath->setText(path); + } +} + void PreferencesDialog::setParameter(const std::string & key, const std::string & value) { UDEBUG("%s=%s", key.c_str(), value.c_str()); @@ -3988,10 +4019,27 @@ Camera * PreferencesDialog::createCamera(bool useRawImages) } else if (driver == kSrcStereoZed) { - camera = new CameraStereoZed( - _ui->checkBox_stereoZed_computeDisparity->isChecked(), - this->getGeneralInputRate(), - this->getSourceLocalTransform()); + if(!_ui->lineEdit_zedSvoPath->text().isEmpty()) + { + camera = new CameraStereoZed( + _ui->lineEdit_zedSvoPath->text().toStdString(), + _ui->comboBox_stereoZed_quality->currentIndex(), + _ui->comboBox_stereoZed_sensingMode->currentIndex(), + _ui->spinBox_stereoZed_confidenceThr->value(), + this->getGeneralInputRate(), + this->getSourceLocalTransform()); + } + else + { + camera = new CameraStereoZed( + this->getSourceDevice().isEmpty()?0:atoi(this->getSourceDevice().toStdString().c_str()), + _ui->comboBox_stereoZed_resolution->currentIndex(), + _ui->comboBox_stereoZed_quality->currentIndex(), + _ui->comboBox_stereoZed_sensingMode->currentIndex(), + _ui->spinBox_stereoZed_confidenceThr->value(), + this->getGeneralInputRate(), + this->getSourceLocalTransform()); + } } else if(driver == kSrcUsbDevice) { diff --git a/guilib/src/ui/preferencesDialog.ui b/guilib/src/ui/preferencesDialog.ui index b0743326..283baa0c 100644 --- a/guilib/src/ui/preferencesDialog.ui +++ b/guilib/src/ui/preferencesDialog.ui @@ -7,7 +7,7 @@ 0 0 984 - 693 + 713 @@ -63,25 +63,16 @@ 0 - 0 - 685 - 1826 + -477 + 686 + 2023 0 - - 0 - - - 0 - - - 0 - - + 0 @@ -2120,7 +2111,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki - 6 + 0 @@ -2788,7 +2779,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki - Driver + Driver. true @@ -2805,7 +2796,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki - Generate disparity image and convert it to depth. The resulting output is a RGB-D image instead of stereo images. + Generate disparity image and convert it to depth. The resulting output is a RGB-D image instead of stereo images. Dense disparity parameters can found under StereoBM tab. true @@ -2817,7 +2808,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki - 5 + 4 @@ -3038,32 +3029,135 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki Zed sdk - - - - - + + + + + + FULL + + + + + RAW + + + + + + + + + + ... + + + + + - - - - Compute disparity with the GPU (using Zed sdk approach). Note that "Generate disparity image..." above will be ignored if set. - - - true - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - + + + + + HD2K + + + + + HD1080 + + + + + HD720 + + + + + VGA + + + + + + + + Resolution. Not used when a SVO file is used. + + + true + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + + NONE + + + + + PERFORMANCE + + + + + QUALITY + + + + + + + + Quality. If NONE, the disparity is not computed on the GPU. + + + true + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + Sensing mode. + + + true + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + Path to a *.SVO file. + + + true + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + Qt::Vertical @@ -3071,11 +3165,31 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki 20 - 0 + 13 + + + + Filtering value for the disparity map (and by extension the depth map). A lower value means more confidence and precision (but less density), an upper value reduces the filtering (more density, less certainty). + + + true + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + 100 + + + @@ -3514,16 +3628,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki Directory of images (optional settings) - - 0 - - - 0 - - - 0 - - + 0 @@ -3531,7 +3636,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki - Use file names as timestamps. Format is epoch time. Example: "1305031102.175304.png" + Use file names as timestamps. Format is epoch time. Example: "1305031102.175304.png". true @@ -8680,16 +8785,7 @@ If set to false, classic RTAB-Map loop closure detection is done using only imag - - 0 - - - 0 - - - 0 - - + 0 @@ -8829,16 +8925,7 @@ Lower the ratio -> higher the precision. 0 means disabled, matching the neare - - 0 - - - 0 - - - 0 - - + 0 @@ -8996,16 +9083,7 @@ Lower the ratio -> higher the precision. 0 means disabled, matching the neare 0 - - 0 - - - 0 - - - 0 - - + 0 @@ -9085,16 +9163,7 @@ Lower the ratio -> higher the precision. 0 means disabled, matching the neare 0 - - 0 - - - 0 - - - 0 - - + 0 @@ -9206,16 +9275,7 @@ Lower the ratio -> higher the precision. 0 means disabled, matching the neare 0 - - 0 - - - 0 - - - 0 - - + 0 diff --git a/tools/CameraRGBD/main.cpp b/tools/CameraRGBD/main.cpp index f94dc3a0..64beec8d 100644 --- a/tools/CameraRGBD/main.cpp +++ b/tools/CameraRGBD/main.cpp @@ -243,7 +243,7 @@ int main(int argc, char * argv[]) UERROR("Not built with ZED sdk support..."); exit(-1); } - camera = new rtabmap::CameraStereoZed(true); + camera = new rtabmap::CameraStereoZed(0); } else {