diff --git a/.appveyor.yml b/.appveyor.yml index 27addc3ebe..02efb84e04 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -120,6 +120,13 @@ install: - ps: "ls \"C:/Program Files (x86)/Intel RealSense SDK 2.0\"" - set PATH=%PATH%;C:\Program Files (x86)\Intel RealSense SDK 2.0\bin\x64 - set RealSense2_ROOT_DIR=C:\Program Files (x86)\Intel RealSense SDK 2.0 + # Phase + - ps: wget 'https://github.com/i3drobotics/phase/releases/download/v0.1.1/phase-v0.1.1-windows-x86_64.exe' -outfile phase.exe + - cmd: phase.exe /VERYSILENT + - ECHO "Installed Phase:" + - ps: "ls \"C:/Program Files/I3DR/Phase\"" + - set PATH=%PATH%;C:\Program Files\I3DR\Phase\bin + - set Phase_ROOT_DIR=C:\Program Files\I3DR\Phase # Kinect 4 Azure - ps: wget 'https://download.microsoft.com/download/3/d/6/3d6d9e99-a251-4cf3-8c6a-8e108e960b4b/Azure%20Kinect%20SDK%201.4.1.exe' -outfile azure.exe - cmd: azure.exe /quiet diff --git a/.github/workflows/cmake-ros.yml b/.github/workflows/cmake-ros.yml index 812bc7e822..24d8cd378f 100644 --- a/.github/workflows/cmake-ros.yml +++ b/.github/workflows/cmake-ros.yml @@ -12,6 +12,7 @@ env: jobs: build: + if: startsWith(github.head_ref, 'add-phase') == false # The CMake configure and build commands are platform agnostic and should work equally # well on Windows or Mac. You can convert this to a matrix build if you need # cross-platform coverage. diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 13039bed9c..6b3fb1a3a9 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -11,6 +11,7 @@ env: jobs: build: + if: startsWith(github.head_ref, 'add-phase') == false name: ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index db9483a8a4..7d9120e000 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -11,7 +11,7 @@ jobs: strategy: matrix: - docker_tag: [xenial, bionic, focal, android23, android24, android26, android30] + docker_tag: [xenial, bionic, focal] include: - docker_tag: xenial docker_tags: | @@ -37,39 +37,6 @@ jobs: linux/amd64 linux/arm64 docker_path: 'focal' - - docker_tag: android23 - docker_tags: | - i3dr/rtabmap:android23 - i3dr/rtabmap:tango - docker_args: | - API_VERSION=23 - docker_platforms: | - linux/amd64 - docker_path: 'bionic/android/rtabmap_apiXX' - - docker_tag: android24 - docker_tags: | - i3dr/rtabmap:android24 - docker_args: | - API_VERSION=24 - docker_platforms: | - linux/amd64 - docker_path: 'bionic/android/rtabmap_apiXX' - - docker_tag: android26 - docker_tags: | - i3dr/rtabmap:android26 - docker_args: | - API_VERSION=26 - docker_platforms: | - linux/amd64 - docker_path: 'bionic/android/rtabmap_apiXX' - - docker_tag: android30 - docker_tags: | - i3dr/rtabmap:android30 - docker_args: | - API_VERSION=30 - docker_platforms: | - linux/amd64 - docker_path: 'bionic/android/rtabmap_apiXX' steps: - diff --git a/CMakeLists.txt b/CMakeLists.txt index 190d913914..6a0a4d6988 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -195,6 +195,7 @@ option(WITH_ZEDOC "Include ZED Open Capture support" ON) option(WITH_REALSENSE "Include RealSense support" ON) option(WITH_REALSENSE_SLAM "Include RealSenseSlam support" ON) option(WITH_REALSENSE2 "Include RealSense support" ON) +option(WITH_PHASE "Include Phase support" ON) option(WITH_MYNTEYE "Include mynteye-s support" ON) option(WITH_DEPTHAI "Include depthai-core support" OFF) option(WITH_OCTOMAP "Include Octomap support" ON) @@ -593,6 +594,13 @@ IF(WITH_REALSENSE2) ENDIF(realsense2_FOUND) ENDIF(WITH_REALSENSE2) +IF(WITH_PHASE) + FIND_PACKAGE(Phase QUIET) + IF(Phase_FOUND) + MESSAGE(STATUS "Found Phase: ${Phase_INCLUDE_DIRS}") + ENDIF(Phase_FOUND) +ENDIF(WITH_PHASE) + IF(WITH_MYNTEYE) FIND_PACKAGE(mynteye QUIET) IF(mynteye_FOUND) @@ -929,6 +937,11 @@ IF(NOT realsense2_FOUND) ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${realsense2_LIBRARIES}) ENDIF() +IF(NOT Phase_FOUND) + SET(PHASE "//") +ELSE() + SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${Phase_LIBRARIES}) +ENDIF() IF(NOT mynteye_FOUND) SET(MYNTEYE "//") ENDIF(NOT mynteye_FOUND) @@ -1512,6 +1525,14 @@ ELSE() MESSAGE(STATUS " With RealSense2 = NO (librealsense2 not found)") ENDIF() +IF(Phase_FOUND) +MESSAGE(STATUS " With Phase = YES (License: Apache-2)") +ELSEIF(NOT WITH_PHASE) +MESSAGE(STATUS " With Phase = NO (WITH_PHASE=OFF)") +ELSE() +MESSAGE(STATUS " With Phase = NO (Phase library not found)") +ENDIF() + IF(mynteye_FOUND) MESSAGE(STATUS " With MyntEyeS = YES (License: Apache-2)") ELSEIF(NOT WITH_MYNTEYE) diff --git a/Version.h.in b/Version.h.in index 4fb54ce772..5c695f3b2e 100644 --- a/Version.h.in +++ b/Version.h.in @@ -64,6 +64,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. @REALSENSE@#define RTABMAP_REALSENSE @REALSENSESLAM@#define RTABMAP_REALSENSE_SLAM @REALSENSE2@#define RTABMAP_REALSENSE2 +@PHASE@#define RTABMAP_PHASE @MYNTEYE@#define RTABMAP_MYNTEYE @DEPTHAI@#define RTABMAP_DEPTHAI @OCTOMAP@#define RTABMAP_OCTOMAP diff --git a/cmake_modules/FindPhase.cmake b/cmake_modules/FindPhase.cmake new file mode 100644 index 0000000000..2b6c4911a5 --- /dev/null +++ b/cmake_modules/FindPhase.cmake @@ -0,0 +1,75 @@ +# - Find Phase (https://github.com/i3drobotics/phase) +# +# Phase_ROOT_DIR environment variable can be set to find the library. +# +# It sets the following variables: +# Phase_FOUND - Set to false, or undefined, if Phase isn't found. +# Phase_INCLUDE_DIRS - The Phase include directory. +# Phase_LIBRARIES - The Phase library to link against. + +#Phase library + +cmake_minimum_required(VERSION 3.9) + +SET(Phase_ROOT_DIR $ENV{Phase_ROOT_DIR}) + +if (WIN32) + file (GLOB Phase_LIBRARY_FILES + "${Phase_ROOT_DIR}/bin/*.dll" + ) +endif() + +find_path(Phase_INCLUDE_DIR + NAMES phase/phaseversion.h + HINTS ${Phase_ROOT_DIR}/include + NO_DEFAULT_PATH + DOC "The Phase include directory" +) + +if (NOT Phase_INCLUDE_DIR) + message(WARNING "phase include directory not found") +endif() + +find_library(Phase_LIB + NAMES phase + PATHS ${Phase_ROOT_DIR}/lib + NO_DEFAULT_PATH + DOC "The Phase_ROOT_DIR library" +) + +if (NOT Phase_LIB) + message(WARNING "phase library directory not found") +endif() + +file(GLOB Conan_LIBS + "${Phase_ROOT_DIR}/lib/*.lib" + "${Phase_ROOT_DIR}/lib/*.so*" + "${Phase_ROOT_DIR}/lib/i3drsgm/*.so*" +) + +set(WITH_I3DRSGM ON) + +if (WITH_I3DRSGM) + set (Phase_DEFINITIONS WITH_I3DRSGM) +endif() + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set LOGGING_FOUND to TRUE +# if all listed variables are TRUE +find_package_handle_standard_args(Phase DEFAULT_MSG Phase_INCLUDE_DIR Phase_LIB) + +if (Phase_FOUND) + set(Phase_LIBRARIES + ${Phase_LIB} + ${Conan_LIBS} + ) + set(Phase_INCLUDE_DIRS + ${Phase_INCLUDE_DIR} + ) + set(Phase_DEFINITIONS ${Phase_DEFINITIONS}) +else(Phase_FOUND) + message(FATAL_ERROR "Could not find Phase") +endif() + +# Tell cmake GUIs to ignore the "local" variables. +mark_as_advanced(Phase_ROOT_DIR Phase_LIB Conan_LIBS Phase_INCLUDE_DIR) diff --git a/corelib/include/rtabmap/core/CameraRGBD.h b/corelib/include/rtabmap/core/CameraRGBD.h index 9a5ad84632..f36133879f 100644 --- a/corelib/include/rtabmap/core/CameraRGBD.h +++ b/corelib/include/rtabmap/core/CameraRGBD.h @@ -35,6 +35,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include #include #include diff --git a/corelib/include/rtabmap/core/camera/CameraPhase.h b/corelib/include/rtabmap/core/camera/CameraPhase.h new file mode 100644 index 0000000000..992bc88e07 --- /dev/null +++ b/corelib/include/rtabmap/core/camera/CameraPhase.h @@ -0,0 +1,76 @@ +/* +Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Universite de Sherbrooke nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#pragma once + +#include "rtabmap/core/RtabmapExp.h" // DLL export/import defines + +#include "rtabmap/core/CameraModel.h" +#include "rtabmap/core/Camera.h" +#include "rtabmap/core/Version.h" + +#include + +#ifdef RTABMAP_PHASE +// TODO add phase includes +#endif + +namespace rtabmap +{ + +class RTABMAP_EXP CameraPhase : + public Camera +{ +public: + static bool available(); + +public: + CameraPhase( + const std::string & deviceId = "", + float imageRate = 0, + const Transform & localTransform = Transform::getIdentity()); + virtual ~CameraPhase(); + + virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = ""); + virtual bool isCalibrated() const; + virtual std::string getSerial() const; + +#ifdef RTABMAP_PHASE +//TODO add phase camera members +#endif + +protected: + virtual SensorData captureImage(CameraInfo * info = 0); + +private: +#ifdef RTABMAP_PHASE + //TODO add phase camera variables +#endif +}; + + +} // namespace rtabmap diff --git a/corelib/src/CMakeLists.txt b/corelib/src/CMakeLists.txt index c98845485f..06cb3bfef3 100644 --- a/corelib/src/CMakeLists.txt +++ b/corelib/src/CMakeLists.txt @@ -27,6 +27,7 @@ SET(SRC_FILES camera/CameraOpenNICV.cpp camera/CameraRealSense.cpp camera/CameraRealSense2.cpp + camera/CameraPhase.cpp camera/CameraRGBDImages.cpp camera/CameraStereoDC1394.cpp camera/CameraStereoFlyCapture2.cpp @@ -316,6 +317,17 @@ IF(realsense2_FOUND) ENDIF() ENDIF(realsense2_FOUND) +IF(Phase_FOUND) + SET(INCLUDE_DIRS + ${INCLUDE_DIRS} + ${Phase_INCLUDE_DIRS} + ) + SET(LIBRARIES + ${LIBRARIES} + ${Phase_LIBRARIES} + ) +ENDIF(Phase_FOUND) + IF(DC1394_FOUND) SET(INCLUDE_DIRS ${INCLUDE_DIRS} diff --git a/corelib/src/Parameters.cpp b/corelib/src/Parameters.cpp index 59c055404d..e97783768f 100644 --- a/corelib/src/Parameters.cpp +++ b/corelib/src/Parameters.cpp @@ -781,6 +781,12 @@ ParametersMap Parameters::parseArguments(int argc, char * argv[], bool onlyParam std::cout << str << std::setw(spacing - str.size()) << "true" << std::endl; #else std::cout << str << std::setw(spacing - str.size()) << "false" << std::endl; +#endif + str = "With Phase:"; +#ifdef RTABMAP_PHASE + std::cout << str << std::setw(spacing - str.size()) << "true" << std::endl; +#else + std::cout << str << std::setw(spacing - str.size()) << "false" << std::endl; #endif str = "With MYNT EYE S:"; #ifdef RTABMAP_MYNTEYE diff --git a/corelib/src/camera/CameraPhase.cpp b/corelib/src/camera/CameraPhase.cpp new file mode 100644 index 0000000000..c06bda01a1 --- /dev/null +++ b/corelib/src/camera/CameraPhase.cpp @@ -0,0 +1,121 @@ +/* +Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Universite de Sherbrooke nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef RTABMAP_PHASE +//TODO add phase includes +#endif + +namespace rtabmap +{ + +bool CameraPhase::available() +{ +#ifdef RTABMAP_PHASE + return true; +#else + return false; +#endif +} + +CameraPhase::CameraPhase( + const std::string & device, + float imageRate, + const rtabmap::Transform & localTransform) : + Camera(imageRate, localTransform) +#ifdef RTABMAP_PHASE + // , + //TODO add phase constructor +#endif +{ + UDEBUG(""); +} + +CameraPhase::~CameraPhase() +{ +#ifdef RTABMAP_PHASE + //TODO + // add phase camera destructor +#endif +} + +#ifdef RTABMAP_PHASE +//TODO add phase camera methods +#endif + +bool CameraPhase::init(const std::string & calibrationFolder, const std::string & cameraName) +{ + UDEBUG(""); +#ifdef RTABMAP_PHASE + //TODO add phase camera initalisation + return false; + +#else + UERROR("CameraPhase: RTAB-Map is not built with Phase support!"); + return false; +#endif +} + +bool CameraPhase::isCalibrated() const +{ +#ifdef RTABMAP_PHASE + //TODO add phase camera calibration check + return false; +#else + return false; +#endif +} + +std::string CameraPhase::getSerial() const +{ +#ifdef RTABMAP_PHASE + //TODO add phase camera serial getter + return "NA"; +#endif + return "NA"; +} + +SensorData CameraPhase::captureImage(CameraInfo * info) +{ + SensorData data; +#ifdef RTABMAP_PHASE + // TODO add phase camera image capture + return data; +#else + UERROR("CameraPhase: RTAB-Map is not built with Phase support!"); +#endif + return data; +} + +} // namespace rtabmap diff --git a/examples/RGBDMapping/main.cpp b/examples/RGBDMapping/main.cpp index c39c56be35..fec589431d 100644 --- a/examples/RGBDMapping/main.cpp +++ b/examples/RGBDMapping/main.cpp @@ -50,7 +50,7 @@ void showUsage() { printf("\nUsage:\n" "rtabmap-rgbd_mapping driver\n" - " driver Driver number to use: 0=OpenNI-PCL, 1=OpenNI2, 2=Freenect, 3=OpenNI-CV, 4=OpenNI-CV-ASUS, 5=Freenect2, 6=ZED SDK, 7=RealSense, 8=RealSense2 9=Kinect for Azure SDK 10=MYNT EYE S\n\n"); + " driver Driver number to use: 0=OpenNI-PCL, 1=OpenNI2, 2=Freenect, 3=OpenNI-CV, 4=OpenNI-CV-ASUS, 5=Freenect2, 6=ZED SDK, 7=RealSense, 8=RealSense2 9=Kinect for Azure SDK 10=MYNT EYE S 11=Phase\n\n"); exit(1); } @@ -175,6 +175,15 @@ int main(int argc, char * argv[]) } camera = new rtabmap::CameraMyntEye(); } + else if (driver == 11) + { + if (!rtabmap::CameraPhase::available()) + { + UERROR("Not built with Phase support..."); + exit(-1); + } + camera = new rtabmap::CameraPhase(); + } else { camera = new rtabmap::CameraOpenni(); diff --git a/examples/WifiMapping/main.cpp b/examples/WifiMapping/main.cpp index 847fcf20a0..a62cf3b253 100644 --- a/examples/WifiMapping/main.cpp +++ b/examples/WifiMapping/main.cpp @@ -51,7 +51,7 @@ void showUsage() "Options:\n" " -i \"name\" Wifi interface name (e.g. \"eth0\"). Only required on Linux.\n" " -m Enable mirroring of the camera image.\n" - " -d # Driver number to use: 0=OpenNI-PCL, 1=OpenNI2, 2=Freenect, 3=OpenNI-CV, 4=OpenNI-CV-ASUS, 5=Freenect2, 6=ZED SDK, 7=RealSense, 8=RealSense2 9=Kinect for Azure SDK 10=MYNT EYE S\n\n"); + " -d # Driver number to use: 0=OpenNI-PCL, 1=OpenNI2, 2=Freenect, 3=OpenNI-CV, 4=OpenNI-CV-ASUS, 5=Freenect2, 6=ZED SDK, 7=RealSense, 8=RealSense2 9=Kinect for Azure SDK 10=MYNT EYE S 11=Phase\n\n"); exit(1); } @@ -210,6 +210,15 @@ int main(int argc, char * argv[]) } camera = new rtabmap::CameraMyntEye(); } + else if (driver == 11) + { + if (!rtabmap::CameraPhase::available()) + { + UERROR("Not built with Phase support..."); + exit(-1); + } + camera = new rtabmap::CameraPhase("", 0, opticalRotation); + } else { camera = new rtabmap::CameraOpenni("", 0, opticalRotation); diff --git a/guilib/include/rtabmap/gui/MainWindow.h b/guilib/include/rtabmap/gui/MainWindow.h index 11b191ad47..b49df0ca3d 100644 --- a/guilib/include/rtabmap/gui/MainWindow.h +++ b/guilib/include/rtabmap/gui/MainWindow.h @@ -180,6 +180,7 @@ protected Q_SLOTS: void selectRealSense2(); void selectRealSense2L515(); void selectRealSense2Stereo(); + void selectPhase(); void selectStereoDC1394(); void selectStereoFlyCapture2(); void selectStereoZed(); diff --git a/guilib/include/rtabmap/gui/PreferencesDialog.h b/guilib/include/rtabmap/gui/PreferencesDialog.h index e63b18b5ea..42e390e55c 100644 --- a/guilib/include/rtabmap/gui/PreferencesDialog.h +++ b/guilib/include/rtabmap/gui/PreferencesDialog.h @@ -94,6 +94,7 @@ class RTABMAPGUI_EXP PreferencesDialog : public QDialog kSrcK4W2 = 8, kSrcRealSense2 = 9, kSrcK4A = 10, + kSrcPhase = 11, kSrcStereo = 100, kSrcDC1394 = 100, @@ -107,6 +108,7 @@ class RTABMAPGUI_EXP PreferencesDialog : public QDialog kSrcStereoMyntEye = 108, kSrcStereoZedOC = 109, kSrcStereoDepthAI = 110, + kSrcStereoDepth = 111, kSrcRGB = 200, kSrcUsbDevice = 200, diff --git a/guilib/src/AboutDialog.cpp b/guilib/src/AboutDialog.cpp index 01d1e76d52..7d97cc19f2 100644 --- a/guilib/src/AboutDialog.cpp +++ b/guilib/src/AboutDialog.cpp @@ -137,6 +137,8 @@ AboutDialog::AboutDialog(QWidget * parent) : _ui->label_realsense_license->setEnabled(CameraRealSense::available()); _ui->label_realsense2->setText(CameraRealSense2::available() ? "Yes" : "No"); _ui->label_realsense2_license->setEnabled(CameraRealSense2::available()); + _ui->label_phase->setText(CameraPhase::available() ? "Yes" : "No"); + _ui->label_phase_license->setEnabled(CameraPhase::available()); _ui->label_dc1394->setText(CameraStereoDC1394::available()?"Yes":"No"); _ui->label_dc1394_license->setEnabled(CameraStereoDC1394::available()); _ui->label_flycapture2->setText(CameraStereoFlyCapture2::available()?"Yes":"No"); diff --git a/guilib/src/MainWindow.cpp b/guilib/src/MainWindow.cpp index a35dd22db5..4af8a74abc 100644 --- a/guilib/src/MainWindow.cpp +++ b/guilib/src/MainWindow.cpp @@ -444,6 +444,7 @@ MainWindow::MainWindow(PreferencesDialog * prefDialog, QWidget * parent, bool sh connect(_ui->actionRealSense2_SR300, SIGNAL(triggered()), this, SLOT(selectRealSense2())); connect(_ui->actionRealSense2_D400, SIGNAL(triggered()), this, SLOT(selectRealSense2())); connect(_ui->actionRealSense2_L515, SIGNAL(triggered()), this, SLOT(selectRealSense2L515())); + connect(_ui->actionPhase, SIGNAL(triggered()), this, SLOT(selectPhase())); connect(_ui->actionStereoDC1394, SIGNAL(triggered()), this, SLOT(selectStereoDC1394())); connect(_ui->actionStereoFlyCapture2, SIGNAL(triggered()), this, SLOT(selectStereoFlyCapture2())); connect(_ui->actionStereoZed, SIGNAL(triggered()), this, SLOT(selectStereoZed())); @@ -469,6 +470,7 @@ MainWindow::MainWindow(PreferencesDialog * prefDialog, QWidget * parent, bool sh _ui->actionRealSense2_D400->setEnabled(CameraRealSense2::available()); _ui->actionRealSense2_L515->setEnabled(CameraRealSense2::available()); _ui->actionRealSense2_T265->setEnabled(CameraRealSense2::available()); + _ui->actionPhase->setEnabled(CameraPhase::available()); _ui->actionStereoDC1394->setEnabled(CameraStereoDC1394::available()); _ui->actionStereoFlyCapture2->setEnabled(CameraStereoFlyCapture2::available()); _ui->actionStereoZed->setEnabled(CameraStereoZed::available()); @@ -4997,6 +4999,7 @@ void MainWindow::updateSelectSourceMenu() _ui->actionRealSense2_SR300->setChecked(_preferencesDialog->getSourceDriver() == PreferencesDialog::kSrcRealSense2); _ui->actionRealSense2_D400->setChecked(_preferencesDialog->getSourceDriver() == PreferencesDialog::kSrcRealSense2); _ui->actionRealSense2_L515->setChecked(_preferencesDialog->getSourceDriver() == PreferencesDialog::kSrcRealSense2); + _ui->actionPhase->setChecked(_preferencesDialog->getSourceDriver() == PreferencesDialog::kSrcPhase); _ui->actionStereoDC1394->setChecked(_preferencesDialog->getSourceDriver() == PreferencesDialog::kSrcDC1394); _ui->actionStereoFlyCapture2->setChecked(_preferencesDialog->getSourceDriver() == PreferencesDialog::kSrcFlyCapture2); _ui->actionStereoZed->setChecked(_preferencesDialog->getSourceDriver() == PreferencesDialog::kSrcStereoZed); @@ -6840,6 +6843,16 @@ void MainWindow::selectRealSense2Stereo() _preferencesDialog->selectSourceDriver(PreferencesDialog::kSrcStereoRealSense2); } +void MainWindow::selectPhase() +{ + _preferencesDialog->selectSourceDriver(PreferencesDialog::kSrcPhase); +} + +void MainWindow::selectStereoPhase() +{ + _preferencesDialog->selectSourceDriver(PreferencesDialog::kSrcStereoPhase); +} + void MainWindow::selectStereoDC1394() { _preferencesDialog->selectSourceDriver(PreferencesDialog::kSrcDC1394); diff --git a/guilib/src/PreferencesDialog.cpp b/guilib/src/PreferencesDialog.cpp index 792d2567da..673f7b1129 100644 --- a/guilib/src/PreferencesDialog.cpp +++ b/guilib/src/PreferencesDialog.cpp @@ -367,6 +367,11 @@ PreferencesDialog::PreferencesDialog(QWidget * parent) : _ui->comboBox_cameraStereo->setItemData(kSrcStereoRealSense2 - kSrcStereo, 0, Qt::UserRole - 1); _ui->comboBox_odom_sensor->setItemData(1, 0, Qt::UserRole - 1); } + if (!CameraPhase::available()) + { + _ui->comboBox_cameraRGBD->setItemData(kSrcPhase - kSrcRGBD, 0, Qt::UserRole - 1); + _ui->comboBox_cameraStereo->setItemData(kSrcStereoPhase - kSrcStereo, 0, Qt::UserRole - 1); + } if(!CameraStereoDC1394::available()) { _ui->comboBox_cameraStereo->setItemData(kSrcDC1394 - kSrcStereo, 0, Qt::UserRole - 1); @@ -804,10 +809,10 @@ PreferencesDialog::PreferencesDialog(QWidget * parent) : connect(_ui->pushButton_calibrate_simple, SIGNAL(clicked()), this, SLOT(calibrateSimple())); connect(_ui->toolButton_openniOniPath, SIGNAL(clicked()), this, SLOT(selectSourceOniPath())); connect(_ui->toolButton_openni2OniPath, SIGNAL(clicked()), this, SLOT(selectSourceOni2Path())); - connect(_ui->comboBox_k4a_rgb_resolution, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel())); - connect(_ui->comboBox_k4a_framerate, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel())); + connect(_ui->comboBox_k4a_rgb_resolution, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel())); + connect(_ui->comboBox_k4a_framerate, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel())); connect(_ui->comboBox_k4a_depth_resolution, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel())); - connect(_ui->checkbox_k4a_irDepth, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteSourcePanel())); + connect(_ui->checkbox_k4a_irDepth, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteSourcePanel())); connect(_ui->toolButton_k4a_mkv, SIGNAL(clicked()), this, SLOT(selectSourceMKVPath())); connect(_ui->toolButton_source_distortionModel, SIGNAL(clicked()), this, SLOT(selectSourceDistortionModel())); connect(_ui->toolButton_distortionModel, SIGNAL(clicked()), this, SLOT(visualizeDistortionModel())); @@ -1994,9 +1999,9 @@ void PreferencesDialog::resetSettings(QGroupBox * groupBox) _ui->lineEdit_rs2_jsonFile->clear(); _ui->lineEdit_openniOniPath->clear(); _ui->lineEdit_openni2OniPath->clear(); - _ui->comboBox_k4a_rgb_resolution->setCurrentIndex(0); - _ui->comboBox_k4a_framerate->setCurrentIndex(2); - _ui->comboBox_k4a_depth_resolution->setCurrentIndex(2); + _ui->comboBox_k4a_rgb_resolution->setCurrentIndex(0); + _ui->comboBox_k4a_framerate->setCurrentIndex(2); + _ui->comboBox_k4a_depth_resolution->setCurrentIndex(2); _ui->checkbox_k4a_irDepth->setChecked(false); _ui->lineEdit_k4a_mkv->clear(); _ui->source_checkBox_useMKVStamps->setChecked(true); @@ -2441,9 +2446,9 @@ void PreferencesDialog::readCameraSettings(const QString & filePath) settings.endGroup(); // K4W2 settings.beginGroup("K4A"); - _ui->comboBox_k4a_rgb_resolution->setCurrentIndex(settings.value("rgb_resolution", _ui->comboBox_k4a_rgb_resolution->currentIndex()).toInt()); - _ui->comboBox_k4a_framerate->setCurrentIndex(settings.value("framerate", _ui->comboBox_k4a_framerate->currentIndex()).toInt()); - _ui->comboBox_k4a_depth_resolution->setCurrentIndex(settings.value("depth_resolution", _ui->comboBox_k4a_depth_resolution->currentIndex()).toInt()); + _ui->comboBox_k4a_rgb_resolution->setCurrentIndex(settings.value("rgb_resolution", _ui->comboBox_k4a_rgb_resolution->currentIndex()).toInt()); + _ui->comboBox_k4a_framerate->setCurrentIndex(settings.value("framerate", _ui->comboBox_k4a_framerate->currentIndex()).toInt()); + _ui->comboBox_k4a_depth_resolution->setCurrentIndex(settings.value("depth_resolution", _ui->comboBox_k4a_depth_resolution->currentIndex()).toInt()); _ui->checkbox_k4a_irDepth->setChecked(settings.value("ir", _ui->checkbox_k4a_irDepth->isChecked()).toBool()); _ui->lineEdit_k4a_mkv->setText(settings.value("mkvPath", _ui->lineEdit_k4a_mkv->text()).toString()); _ui->source_checkBox_useMKVStamps->setChecked(settings.value("useMkvStamps", _ui->source_checkBox_useMKVStamps->isChecked()).toBool()); @@ -2471,6 +2476,20 @@ void PreferencesDialog::readCameraSettings(const QString & filePath) _ui->lineEdit_rs2_jsonFile->setText(settings.value("json_preset", _ui->lineEdit_rs2_jsonFile->text()).toString()); settings.endGroup(); // RealSense + settings.beginGroup("Phase"); + // _ui->checkbox_rs2_emitter->setChecked(settings.value("emitter", _ui->checkbox_rs2_emitter->isChecked()).toBool()); + // _ui->checkbox_rs2_irMode->setChecked(settings.value("ir", _ui->checkbox_rs2_irMode->isChecked()).toBool()); + // _ui->checkbox_rs2_irDepth->setChecked(settings.value("irdepth", _ui->checkbox_rs2_irDepth->isChecked()).toBool()); + // _ui->spinBox_rs2_width->setValue(settings.value("width", _ui->spinBox_rs2_width->value()).toInt()); + // _ui->spinBox_rs2_height->setValue(settings.value("height", _ui->spinBox_rs2_height->value()).toInt()); + // _ui->spinBox_rs2_rate->setValue(settings.value("rate", _ui->spinBox_rs2_rate->value()).toInt()); + // _ui->spinBox_rs2_width_depth->setValue(settings.value("width_depth", _ui->spinBox_rs2_width_depth->value()).toInt()); + // _ui->spinBox_rs2_height_depth->setValue(settings.value("height_depth", _ui->spinBox_rs2_height_depth->value()).toInt()); + // _ui->spinBox_rs2_rate_depth->setValue(settings.value("rate_depth", _ui->spinBox_rs2_rate_depth->value()).toInt()); + // _ui->checkbox_rs2_globalTimeStync->setChecked(settings.value("global_time_sync", _ui->checkbox_rs2_globalTimeStync->isChecked()).toBool()); + // _ui->lineEdit_rs2_jsonFile->setText(settings.value("json_preset", _ui->lineEdit_rs2_jsonFile->text()).toString()); + settings.endGroup(); // Phase + settings.beginGroup("RGBDImages"); _ui->lineEdit_cameraRGBDImages_path_rgb->setText(settings.value("path_rgb", _ui->lineEdit_cameraRGBDImages_path_rgb->text()).toString()); _ui->lineEdit_cameraRGBDImages_path_depth->setText(settings.value("path_depth", _ui->lineEdit_cameraRGBDImages_path_depth->text()).toString()); @@ -2963,9 +2982,9 @@ void PreferencesDialog::writeCameraSettings(const QString & filePath) const settings.endGroup(); // K4W2 settings.beginGroup("K4A"); - settings.setValue("rgb_resolution", _ui->comboBox_k4a_rgb_resolution->currentIndex()); - settings.setValue("framerate", _ui->comboBox_k4a_framerate->currentIndex()); - settings.setValue("depth_resolution", _ui->comboBox_k4a_depth_resolution->currentIndex()); + settings.setValue("rgb_resolution", _ui->comboBox_k4a_rgb_resolution->currentIndex()); + settings.setValue("framerate", _ui->comboBox_k4a_framerate->currentIndex()); + settings.setValue("depth_resolution", _ui->comboBox_k4a_depth_resolution->currentIndex()); settings.setValue("ir", _ui->checkbox_k4a_irDepth->isChecked()); settings.setValue("mkvPath", _ui->lineEdit_k4a_mkv->text()); settings.setValue("useMkvStamps", _ui->source_checkBox_useMKVStamps->isChecked()); @@ -2993,6 +3012,20 @@ void PreferencesDialog::writeCameraSettings(const QString & filePath) const settings.setValue("json_preset", _ui->lineEdit_rs2_jsonFile->text()); settings.endGroup(); // RealSense2 + settings.beginGroup("Phase"); + // settings.setValue("emitter", _ui->checkbox_rs2_emitter->isChecked()); + // settings.setValue("ir", _ui->checkbox_rs2_irMode->isChecked()); + // settings.setValue("irdepth", _ui->checkbox_rs2_irDepth->isChecked()); + // settings.setValue("width", _ui->spinBox_rs2_width->value()); + // settings.setValue("height", _ui->spinBox_rs2_height->value()); + // settings.setValue("rate", _ui->spinBox_rs2_rate->value()); + // settings.setValue("width_depth", _ui->spinBox_rs2_width_depth->value()); + // settings.setValue("height_depth", _ui->spinBox_rs2_height_depth->value()); + // settings.setValue("rate_depth", _ui->spinBox_rs2_rate_depth->value()); + // settings.setValue("global_time_sync", _ui->checkbox_rs2_globalTimeStync->isChecked()); + // settings.setValue("json_preset", _ui->lineEdit_rs2_jsonFile->text()); + settings.endGroup(); // Phase + settings.beginGroup("RGBDImages"); settings.setValue("path_rgb", _ui->lineEdit_cameraRGBDImages_path_rgb->text()); settings.setValue("path_depth", _ui->lineEdit_cameraRGBDImages_path_depth->text()); @@ -4933,7 +4966,8 @@ void PreferencesDialog::updateStereoDisparityVisibility() _ui->comboBox_cameraStereo->currentIndex() == kSrcStereoTara - kSrcStereo || _ui->comboBox_cameraStereo->currentIndex() == kSrcStereoVideo - kSrcStereo || _ui->comboBox_cameraStereo->currentIndex() == kSrcDC1394 - kSrcStereo || - _ui->comboBox_cameraStereo->currentIndex() == kSrcStereoRealSense2 - kSrcStereo); + _ui->comboBox_cameraStereo->currentIndex() == kSrcStereoRealSense2 - kSrcStereo || + _ui->comboBox_cameraStereo->currentIndex() == kSrcStereoPhase - kSrcStereo); _ui->checkBox_stereo_rectify->setVisible(_ui->checkBox_stereo_rectify->isEnabled()); _ui->label_stereo_rectify->setVisible(_ui->checkBox_stereo_rectify->isEnabled()); } @@ -5173,13 +5207,15 @@ void PreferencesDialog::updateSourceGrpVisibility() _ui->comboBox_cameraRGBD->currentIndex() == kSrcRealSense - kSrcRGBD || _ui->comboBox_cameraRGBD->currentIndex() == kSrcRGBDImages-kSrcRGBD || _ui->comboBox_cameraRGBD->currentIndex() == kSrcOpenNI_PCL-kSrcRGBD || - _ui->comboBox_cameraRGBD->currentIndex() == kSrcRealSense2-kSrcRGBD)); + _ui->comboBox_cameraRGBD->currentIndex() == kSrcRealSense2-kSrcRGBD || + _ui->comboBox_cameraRGBD->currentIndex() == kSrcPhase-kSrcRGBD)); _ui->groupBox_openni2->setVisible(_ui->comboBox_sourceType->currentIndex() == 0 && _ui->comboBox_cameraRGBD->currentIndex() == kSrcOpenNI2-kSrcRGBD); _ui->groupBox_freenect2->setVisible(_ui->comboBox_sourceType->currentIndex() == 0 && _ui->comboBox_cameraRGBD->currentIndex() == kSrcFreenect2-kSrcRGBD); _ui->groupBox_k4w2->setVisible(_ui->comboBox_sourceType->currentIndex() == 0 && _ui->comboBox_cameraRGBD->currentIndex() == kSrcK4W2 - kSrcRGBD); _ui->groupBox_k4a->setVisible(_ui->comboBox_sourceType->currentIndex() == 0 && _ui->comboBox_cameraRGBD->currentIndex() == kSrcK4A - kSrcRGBD); _ui->groupBox_realsense->setVisible(_ui->comboBox_sourceType->currentIndex() == 0 && _ui->comboBox_cameraRGBD->currentIndex() == kSrcRealSense - kSrcRGBD); _ui->groupBox_realsense2->setVisible(_ui->comboBox_sourceType->currentIndex() == 0 && _ui->comboBox_cameraRGBD->currentIndex() == kSrcRealSense2 - kSrcRGBD); + _ui->groupBox_phase->setVisible(_ui->comboBox_sourceType->currentIndex() == 0 && _ui->comboBox_cameraRGBD->currentIndex() == kSrcPhase - kSrcRGBD); _ui->groupBox_cameraRGBDImages->setVisible(_ui->comboBox_sourceType->currentIndex() == 0 && _ui->comboBox_cameraRGBD->currentIndex() == kSrcRGBDImages-kSrcRGBD); _ui->groupBox_openni->setVisible(_ui->comboBox_sourceType->currentIndex() == 0 && _ui->comboBox_cameraRGBD->currentIndex() == kSrcOpenNI_PCL - kSrcRGBD); @@ -6005,9 +6041,9 @@ Camera * PreferencesDialog::createCamera( } ((CameraK4A*)camera)->setIRDepthFormat(_ui->checkbox_k4a_irDepth->isChecked()); - ((CameraK4A*)camera)->setPreferences(_ui->comboBox_k4a_rgb_resolution->currentIndex(), - _ui->comboBox_k4a_framerate->currentIndex(), - _ui->comboBox_k4a_depth_resolution->currentIndex()); + ((CameraK4A*)camera)->setPreferences(_ui->comboBox_k4a_rgb_resolution->currentIndex(), + _ui->comboBox_k4a_framerate->currentIndex(), + _ui->comboBox_k4a_depth_resolution->currentIndex()); } else if (driver == kSrcRealSense) { @@ -6064,6 +6100,27 @@ Camera * PreferencesDialog::createCamera( } } } + else if (driver == kSrcPhase || driver == kSrcStereoPhase) + { + camera = new CameraPhase( + device.isEmpty()&&driver == kSrcStereoPhase?"T265":device.toStdString(), + this->getGeneralInputRate(), + this->getSourceLocalTransform()); + if(driver == kSrcStereoPhase) + { + // ((CameraPhase*)camera)->setImagesRectified(!useRawImages); + } + else + { + // ((CameraPhase*)camera)->setEmitterEnabled(_ui->checkbox_rs2_emitter->isChecked()); + // ((CameraPhase*)camera)->setIRFormat(_ui->checkbox_rs2_irMode->isChecked(), _ui->checkbox_rs2_irDepth->isChecked()); + // ((CameraPhase*)camera)->setResolution(_ui->spinBox_rs2_width->value(), _ui->spinBox_rs2_height->value(), _ui->spinBox_rs2_rate->value()); + // ((CameraPhase*)camera)->setDepthResolution(_ui->spinBox_rs2_width_depth->value(), _ui->spinBox_rs2_height_depth->value(), _ui->spinBox_rs2_rate_depth->value()); + // ((CameraPhase*)camera)->setGlobalTimeSync(_ui->checkbox_rs2_globalTimeStync->isChecked()); + // ((CameraPhase*)camera)->setDualMode(_ui->comboBox_odom_sensor->currentIndex()==1, Transform::fromString(_ui->lineEdit_odom_sensor_extrinsics->text().toStdString())); + // ((CameraPhase*)camera)->setJsonConfig(_ui->lineEdit_rs2_jsonFile->text().toStdString()); + } + } else if (driver == kSrcStereoMyntEye) { if(driver == kSrcStereoMyntEye && useRawImages) @@ -7015,7 +7072,7 @@ void PreferencesDialog::calibrateOdomSensorExtrinsics() return; } - + // 3 steps calibration: RGB -> IR -> Extrinsic QMessageBox::StandardButton button = QMessageBox::question(this, tr("Calibration"), tr("We will calibrate the extrinsics. Important: Make sure " diff --git a/guilib/src/ui/aboutDialog.ui b/guilib/src/ui/aboutDialog.ui index 8b32ff9431..66a41e0c9b 100644 --- a/guilib/src/ui/aboutDialog.ui +++ b/guilib/src/ui/aboutDialog.ui @@ -162,9 +162,9 @@ p, li { white-space: pre-wrap; } 0 - -636 - 596 - 981 + -913 + 584 + 1198 @@ -185,31 +185,48 @@ p, li { white-space: pre-wrap; } - - + + - + GPLv3 - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + true + + + + + + + GPLv2 true - - + + - Apache v2 and/or GPLv2 + With TORO : true - - + + + + With OpenNI2 : + + + true + + + + + @@ -221,8 +238,18 @@ p, li { white-space: pre-wrap; } - - + + + + With K4A : + + + true + + + + + @@ -234,50 +261,50 @@ p, li { white-space: pre-wrap; } - - + + - With libpointmatcher : + Qt version : true - - + + - MPL2 + With cvsba : true - - + + - With loam_velodyne : + MPL2 true - - + + - With K4W2 : + PCL version : true - - + + - GPLv3 + With CPU-TSDF : true @@ -294,38 +321,38 @@ p, li { white-space: pre-wrap; } - - + + - GPLv2 + Apache v2 true - - + + - With Freenect : + With stereo FlyCapture2 : true - - + + - With K4A : + GPLv2 true - - + + @@ -337,31 +364,34 @@ p, li { white-space: pre-wrap; } - - + + - GPLv3 + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + - <html><head/><body><p><span style=" font-weight:600;">Third Party Libraries</span></p></body></html> + - - Qt::RichText + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + BSD @@ -370,70 +400,58 @@ p, li { white-space: pre-wrap; } - - + + - Open Source or Commercial + BSD true - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + With ORB Octree : true - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + With RealSense2 : true - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + With GTSAM : true - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + With ORB SLAM 2 : true - - + + @@ -445,87 +463,78 @@ p, li { white-space: pre-wrap; } - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + With MYNTEYE S : true - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + BSD true - - + + - With CCCoreLib : + With Freenect : true - - + + - BSD + With DepthAI : true - - + + - MIT + GPLv3 true - - + + - Creative Commons [Attribution-NonCommercial-ShareAlike] + With Zed SDK : true - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + Apache-2 true - - + + @@ -537,8 +546,8 @@ p, li { white-space: pre-wrap; } - - + + @@ -550,28 +559,31 @@ p, li { white-space: pre-wrap; } - - + + - BSD + With CCCoreLib : true - - + + - Apache v2 + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + @@ -583,134 +595,131 @@ p, li { white-space: pre-wrap; } - - + + - With RealSense : + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + - With MYNTEYE S : + PSF true - - + + - BSD + With RealSense : true - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + <html><head/><body><p><span style=" font-weight:600;">License</span></p></body></html> true - - + + - With Octomap : + With Freenect2 : true - - + + - With GTSAM : + With Python3 : true - - + + - With Freenect2 : + BSD true - - + + - With stereo dc1394 : + GPLv3 true - - + + - With OpenChisel : + With g2o : true - - + + - BSD + GPLv3 true - - + + - PCL version : + With SuperPoint Torch : true - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + BSD true - - + + @@ -722,8 +731,8 @@ p, li { white-space: pre-wrap; } - - + + @@ -735,8 +744,8 @@ p, li { white-space: pre-wrap; } - - + + @@ -748,68 +757,61 @@ p, li { white-space: pre-wrap; } - - + + - With VINS-Fusion : + BSD true - - + + - With FOVIS : - - - true + - - - - - - GPLv3 + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + - With TORO : + With stereo dc1394 : true - - + + - BSD + With Octomap : true - - + + - With RealSense2 : + With OpenChisel : true - - + + @@ -821,61 +823,64 @@ p, li { white-space: pre-wrap; } - - + + - LGPL + With FastCV : true - - + + - + <html><head/><body><p><span style=" font-weight:600;">Third Party Libraries</span></p></body></html> - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + Qt::RichText true - - + + - With OpenNI2 : + With Zed Open Capture : true - - + + - With AliceVision : + VTK version : true - - + + - With Zed Open Capture : + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + @@ -887,58 +892,51 @@ p, li { white-space: pre-wrap; } - - + + - With DepthAI : - - - true + - - - - - - Apache v2 + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + - Apache-2 + Penn Software License true - - + + - BSD + With OpenVINS : true - - + + - MIT + GPLv3 true - - + + @@ -950,28 +948,31 @@ p, li { white-space: pre-wrap; } - - + + - With ORB SLAM 2 : + With libpointmatcher : true - - + + - With SuperPoint Torch : + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + @@ -983,28 +984,28 @@ p, li { white-space: pre-wrap; } - - + + - Qt version : + Creative Commons [Attribution-NonCommercial-ShareAlike] true - - + + - With cvsba : + With AliceVision : true - - + + @@ -1016,8 +1017,8 @@ p, li { white-space: pre-wrap; } - - + + @@ -1029,48 +1030,70 @@ p, li { white-space: pre-wrap; } - - + + - Apache v2 and/or GPLv2 + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + - Penn Software License + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + - With ORB Octree : + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + - GPLv3 + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + + + With Viso2 : + + + true + + + + + @@ -1082,48 +1105,48 @@ p, li { white-space: pre-wrap; } - - + + - With FastCV : + Apache v2 and/or GPLv2 true - - + + - With Zed SDK : + With K4W2 : true - - + + - BSD + Apache-2 true - - + + - OpenCV version : + With VINS-Fusion : true - - + + @@ -1135,8 +1158,8 @@ p, li { white-space: pre-wrap; } - - + + @@ -1148,41 +1171,41 @@ p, li { white-space: pre-wrap; } - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + GPLv3 true - - + + - GPLv2 + Open Source or Commercial true - - + + - With MSCKF : + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + @@ -1194,48 +1217,54 @@ p, li { white-space: pre-wrap; } - - + + - GPLv3 + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + - GPLv2 + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + - BSD + Apache v2 and/or GPLv2 true - - + + - With stereo FlyCapture2 : + MIT true - - + + @@ -1247,18 +1276,21 @@ p, li { white-space: pre-wrap; } - - + + - VTK version : + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + @@ -1270,170 +1302,151 @@ p, li { white-space: pre-wrap; } - - + + - BSD + GPLv2 true - - + + - GPLv3 - - - true + - - - - - - With g2o : + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + - With OKVIS : + OpenCV version : true - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + With MSCKF : true - - + + - PSF + With FOVIS : true - - + + - With Viso2 : + With loam_velodyne : true - - + + - <html><head/><body><p><span style=" font-weight:600;">License</span></p></body></html> + BSD true - - + + - MIT + GPLv3 true - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + BSD true - - + + - Apache-2 + With Ceres : true - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + With OKVIS : true - - + + - BSD + MIT true - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + Apache v2 true - - + + - With CPU-TSDF : + MIT true - - + + @@ -1445,69 +1458,70 @@ p, li { white-space: pre-wrap; } - - + + - With Ceres : + BSD true - - + + - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + BSD true - - + + - With Python3 : + BSD true - - + + - GPLv3 + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true - - + + - With OpenVINS : + LGPL true - - + + - + With Phase - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true + + + + + + Apache-2 diff --git a/guilib/src/ui/mainWindow.ui b/guilib/src/ui/mainWindow.ui index fd438855cc..4cc31d41e7 100644 --- a/guilib/src/ui/mainWindow.ui +++ b/guilib/src/ui/mainWindow.ui @@ -229,6 +229,16 @@ + + + Phase + + + + :/images/l515.png:/images/l515.png + + + Orbbec Astra @@ -302,6 +312,16 @@ + + + Phase + + + + :/images/t265.png:/images/t265.png + + + Mynt Eye S @@ -1669,6 +1689,14 @@ RealSense2 + + + true + + + Phase + + true diff --git a/guilib/src/ui/preferencesDialog.ui b/guilib/src/ui/preferencesDialog.ui index ae22f532bf..2d6c97f0db 100644 --- a/guilib/src/ui/preferencesDialog.ui +++ b/guilib/src/ui/preferencesDialog.ui @@ -3195,6 +3195,11 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki RealSense2 + + + Phase + + Kinect for Azure @@ -4797,6 +4802,11 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki RealSense2 + + + Phase + + MyntEyeS diff --git a/tools/Calibration/main.cpp b/tools/Calibration/main.cpp index 5fb7f14659..40c7d2c677 100644 --- a/tools/Calibration/main.cpp +++ b/tools/Calibration/main.cpp @@ -49,6 +49,7 @@ void showUsage() " 6=DC1394 (Bumblebee2)\n" " 7=FlyCapture2 (Bumblebee2)\n" " 11=RealSense2 (T265)\n" + " 12=Phase\n" " --device # Device id\n" " --debug Debug log\n" " --stereo Stereo: assuming device provides \n" @@ -266,6 +267,18 @@ int main(int argc, char * argv[]) dialog.setStereoMode(true); dialog.setFisheyeImages(true); } + else if(driver == 12) + { + if(!rtabmap::CameraPhase::available()) + { + UERROR("Not built with Phase support..."); + exit(-1); + } + camera = new rtabmap::CameraPhase(); + ((rtabmap::CameraPhase*)camera)->setImagesRectified(false); + dialog.setStereoMode(true); + dialog.setFisheyeImages(true); + } else { UFATAL("Calibration for driver %d not available.", driver); diff --git a/tools/CameraRGBD/main.cpp b/tools/CameraRGBD/main.cpp index ccec63b510..eff1774605 100644 --- a/tools/CameraRGBD/main.cpp +++ b/tools/CameraRGBD/main.cpp @@ -65,6 +65,7 @@ void showUsage() " 13=MYNT EYE S\n" " 14=ZED Open Capture\n" " 15=depthai-core\n" + " 16=Phase\n" " Options:\n" " -rate #.# Input rate Hz (default 0=inf)\n" " -device # Device ID (number or string)\n" @@ -334,6 +335,15 @@ int main(int argc, char * argv[]) } camera = new rtabmap::CameraDepthAI(deviceId); } + else if (driver == 16) + { + if (!rtabmap::CameraPhase::available()) + { + UERROR("Not built with Phase support..."); + exit(-1); + } + camera = new rtabmap::CameraPhase(deviceId); + } else { UFATAL("");