OrbbecSDK defaults its install prefix to /opt/OrbbecSDK and depthai-core
to <build>/install, so under DESTDIR they staged outside usr/local and
the install step (which copies only <stage>/usr/local) silently skipped
them - hence find_package(OrbbecSDK)/find_package(depthai) failed while
gtsam/libpointmatcher (which default to /usr/local) were found. Force
-DCMAKE_INSTALL_PREFIX=/usr/local for both, and bump their cache keys so
the already-cached bad-prefix stages are not restored.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Move the source-only dependency builds (GTSAM, libnabo+libpointmatcher,
OrbbecSDK, depthai) out of cmake-macos.yml into a composite action,
.github/actions/install-macos-source-deps, mirroring the existing
install-windows-deps convention. Each dependency now has its own cache
(keyed on its version + patch + the brew/Xcode hash), so bumping one
dependency no longer rebuilds the others. Patches moved next to the
action that applies them.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
QVTKRenderWidget.h only exists in VTK 9.0+, so the unconditional include
broke the build on older VTK (e.g. Ubuntu Bionic). Wrap it in the same
VTK version guard already used for the QSurfaceFormat call (and as the
main rtabmap app does).
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
On macOS both SDKs access the camera through libusb, which must seize the
USB interface from the system driver - that requires root. Make the
device-not-found / access-error messages say "run with sudo" on Apple
instead of the Linux-only "udev rules" text. Also fix a dangling %s (no
argument) in the Orbbec "device with ID not found" message.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
pcl::visualization::CloudViewer creates its render window on a background
thread, which macOS forbids (NSWindow must be created on the main
thread), aborting the process. On macOS, warn and use the default Qt
viewer instead of the legacy -pcl one.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
On macOS the embedded QVTKOpenGLNativeWidget (CameraViewer's cloud view)
crashed on first paint: VTK called a null GL function pointer
(vtkOpenGLVertexArrayObject::Bind -> 0x0) because no compatible OpenGL
context was set. Set QSurfaceFormat::setDefaultFormat(
QVTKRenderWidget::defaultFormat()) before constructing QApplication, as
the main rtabmap app already does.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
- Fix a format-string crash: the "unexpected frame count" warning used
%s with a uint32_t, dereferencing the integer as a char*.
- Wrap captureImage() in try/catch(ob::Error) so a transient frame/USB
error logs and skips the frame (empty SensorData) instead of aborting.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
macOS requires NSCameraUsageDescription to grant an app access to
USB/UVC cameras (e.g. Orbbec, RealSense); without it camera open fails
with access denied. Add a custom Info.plist for rtabmap_app and set a
bundle identifier, which TCC ties the camera permission to.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Device open can throw ob::Error (e.g. uvc_open access denied on macOS
without camera permission, or an unsupported stream config). The throw
was uncaught and aborted the whole process. Wrap the device-access body
of init() in a try/catch that logs the error and returns false so the
caller can handle the failure gracefully.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
fixup_bundle could not resolve the app's @rpath references to rtabmap's
own libraries (e.g. librtabmap_core), which are built in
CMAKE_LIBRARY_OUTPUT_DIRECTORY (build/bin). macdeployqt used to resolve
these via the executable rpath; now that it is bypassed on macOS, add
that directory to fixup_bundle's search DIRS.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Add a CI step to build GTSAM 4.2.1, libnabo 1.1.2 and libpointmatcher
1.4.4 from source (not available/usable from Homebrew), with patches
under .github/patches fixing Eigen 5 / Boost compatibility.
Installs are staged via DESTDIR into an actions/cache directory and
copied into /usr/local. The cache key includes the pinned versions, the
patch hashes, and the linked Homebrew (eigen/boost/yaml-cpp) + Xcode
toolchain versions, so the deps rebuild only when something relevant
changes. Also add yaml-cpp brew dep and drop the unused extra_deps
matrix field.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
* CI Ubuntu 26.04 / ROS2 Lyrical and Rolling
* Added resolute docker
* added skip keys
* rolling
* Disabling rolling
* Updated ci config
* Enabling docker build (no push) on PR
* cancel pr jobs on recommit
* Added resolute to docker ci matrix
* OpenGV min cmake version
* bump package.xml version
* enabling rolling
* refactored cmake ros ci jobs
* Fixing empty descriptors on bad signatures (#1714), (bug from #1698)
* PyDetector: dont assert (just error) if descriptors/keypoints don't match. SuperPoint approaches: try re-initializing superpoint detection on the provided image if descriptors could not be fetched the first time (auto recover).
* PyDetector: adding check if returned descriptors are empty (addressing #1714)
* Throwing error instead of asserting if keypoints and descriptors mistmatch
* ading error instead of warning
* lets do warnings instead (could be possible that images are blanck)
* Adding support for AprilTag v3 library
* New parameter: Marker/Strategy (default opencv-aruco as before). Optimized multicameras marker detection (do only once with stitched image)
* Exposed all AprilTag parameters. Sharing Marker/Dictionary between opencv and apriltag implementation. Added new Marker/Lengths parameter.
* Support AprilTAg library not built with aruco
* cleanup
* Added marker range support
* Make apriltag detection in same orientation than opencv
* fixed shenanigans when rendering markers with multi cameras
* Don't update odom cache (localization mode) when not moving (detecting loop/landmark or not)
* fixed some quirks (camera viewer + tag working)
* Setting quad decimate to 1 by default
* typo
* Implemented OptimizerG2O::loadGraph()
* added apriltag's aruco support info in the cmake config summary
* fixed warning
* fixed isam2 assert when using landmarks
* Fixed homography on multicam
* Adding marker detection time for convenience
* Added missing MIP 36h12 tag family in UI
* Avoid removing nodes from STM when using CreateIntermediateNodes
* Clean up the data of the intermediate node when IntermediateNodeDataKept is false
* Save intermediate node input features
* Don't delete intermediate nodes
* comment typo
* Updated parameter description, bump patch for DBReader API chang
* When ID is not udpated to new one, don't disable words because that signature is still used in the bayes filter
* updated comment
* rtabmap-reprocess: support Rtabmap/DetectionRate when intermediate nodes are created and -skip option is not used
* Fixed smallMovement when rehearsal is not trigdered at the same time
* GUI: visualize rehearsal darkblue when intermediate nodes are used
* Fixed RtabmapThread not transfering input features on intermediate nodes
* Do not override smallMovement and fastMovement when converting to intermediate nodes to keep GUI visualization color working
---------
Co-authored-by: Borong Yuan <[email protected]>
* Added macos-15-intel and macos-15 build
* Cache brew pkgs
* added tahoe build, adding debug logs
* g2o csparse optional
* removed ls
* build package on
* disabling bundle for now
* updated cache name
* Added MacOS CI status in README.md
* Auto graph repairing: detect and remove bad loop closures accepted in the past that block new good loop closures to be accepted
* Added parameter RGBD/OptimizeMaxErrorRepairRadius: added approach to repair the graph (remove bad loop closures added in the past). Refactored max optimization error function, split repairGraph to its own function.
* Handling optimization from graph end in repair
* MaxGraphErrors: changed link's pointers to copy directly to avoid seg fault down the road if not used properly
* Dont publish optimization statistics if it was not computed.
* Support intermediate nodes with memory management enabled
* Adding fix from #1686
* Fixed odomCache overlay shown in mapping mode
* Fixed local retrieval with intermediate nodes
* bumping version for updating API. Fixed getting graph error.
* Disable planning if intermediate nodes are there. Updated usage of Kp/BadSignRatio to support intermediate nodes.
* Enable WITH_PYTHON on CI
* add python-dev
* use python3-dev instead of libpython3-dev
* use action to instlal python
* pybind now missing
* Fixed python build on linux
* warning
* try to install compatible pybind
* explicitly set where to find pybind
* New rtabmap-reduceGraph CLI tool
* fixed some edge cases
* Regenerating optimized map if there was one before reducing the graph
* addMoreLoopClosures: refactored how ctrl-c is handled to stop faster when no loop closures are added
* Added kilted status
* Make offline tool always propagate neighbor merged links
* removed a parameter
* fixed disconnected graph
* fixed --help
* Added error log on Kp/NNStrategy not compatible with huge vocabulary. ReduceGraph/DetectMoreLoopClosures: Make sure original parameters are saved back on closing. g2o: fixing optimizer to Levenberg for SBA to avoid [SetJac] infinite jac fatal error.
* exposing neighbor merged ratio parameter to the tool
* show param in log
* refactored detectMoreLoopClosures to ignore too close nodes in terms of neighbor links based on Mem/STMSize parameter. Reduce graph: added direction parameter.
* Simplified: removed ratio parameter, removed recursive reduction. Just don't reduce if a NM link is longer than maxDistance.
* Removed NNStrategy override, as it was still done on closing when we changed back to original params
* DBViewer: show missing links when showing OptimizedPoses in GraphView, fixed clicking on landmark links
* DetectMoreLoopClosures: Added support for min graph distance option in MainWindow and DbViewer
* slight renaming of ROS jobs
* reprocess: added option --params_last
* OptimizerG2O: adding support for priors in SBA
* Fixed computeError
* don't fix root id roll/pitch if gravity constraints are fed (SBA)
* changed number_t to double
* forward compatibility
* cleanup
* log
* Updated CI status
* split cmake workflow in linux and windows
* bump release badge version
* uniformize name
* fixing android build
* OptimizerG2O: adding support for priors in SBA
* Fixed computeError
* don't fix root id roll/pitch if gravity constraints are fed (SBA)
* changed number_t to double
* forward compatibility
* cleanup
* log
* CudaSIFT: filter doubles
* removed fixed threshold
* SSC can be used with multicameras. Refactored CudaSIFT to support SSC. Add new parameter SIFT/MaxGaussianThreshold. DbViewer: show negative features with gray color (so that we can know which features are in the vocabulary)
* Added SIFT/MaxGaussianThreshold parameter
* Updated parameter description
* Adding OpenGV as submodule (optional)
* Remove submodule to migrate to FetchContent
* using FetchContent
* remove empty .gitmodules
* Fixing OpenGV not able to find eigen on windows
* patching opengv to adjust -march=native based on PCL
* fixing patching on windows
* eigen fix
* PR cancel on-going CI builds if new commit is added to PR
* try another approach
* updating patch with some logs
* more debug mesage
* fixing EIGEN_INCLUDE_DIR
* enable rolling_builds on appveyor
* removed rolling_builds appveyor
* fixing eigen cache
* test
* more debug logs
* another try
* cleanup
* updated appveyor to work with fetchcontent
* removed mkdir build (appveyor)
* appveyor: trying ninja to increase CI speed
* removed mkdr
* appveyor: spitting opengv and rtabmap builds to be under 60 min per job
* appveyor: caching dependencies
* using global configuration
* using baked image
* fixing wget in ps
* fixing not support for
* pip error
* reverted pip install
* fixed realsense cache
* fixing multi step build
* removing baked image
* typo
* Windows: Converted appveyor to github actions
* updated boost version
* fixing boost
* udpated boost config
* boost...
* platform_version
* install boost directly
* silent boost install
* very silent boost
* fixing ls
* added boost install dir
* showing boost install dir
* moved windows dependencies in external action file
* explicitly save boost cache to same time on iterations
* pip install gdown
* update
* caching more deps
* caching all depts
* removed explicit boost cache save
* mscv 14.0
* forcing building visual studio 14 2015
* installing v12 in 2022 instead
* setup cmd prompt
* init right toolset
* fixing system version for opengv compilation error
* fixing package and artifact
* CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
* removing cmd
* find manually psapi.lib
* resolve
* refactor psapi env
* forcing 10.0.19041.0
* using windows=2022 runner instead
* added vcpkg
* commenting windows-latest for now
* trying vcpkg instead
* search path
* updated path
* moved json
* removed deleted file for git
* adding a real version
* using version-string
* cleanup vcpkg
* building artifacts with vcpkg
* removed old windows build approach, added custom dependencies (gtsam, libpointmatcher) to vcpkg build
* udpated vcpkg version for issue https://github.com/microsoft/vcpkg/pull/49103
* try with minimal dep first
* disable opengv for now
* try vcpkg single compilation
* space
* updated link
* fixed qupote
* fixing cache name
* adding debug folder
* adjust path
* adjust path
* providing vcpkg binaries instead
* ident
* added triplet
* added BOOST_ROOT
* boost root
* boost root
* fixed path
* adding eigen headers
* try path
* cmake prefix path
* boost timer def
* libnabo fixes
* pointmatcher prefix
* disabling pointmathcer tests
* updated cmake parameters
* changed how file is downloaded
* trying curl instead
* puttoing backe InvokeWeb because it is a dropbox issue
* skipping optional deps for now
* ficing env variable
* triplet
* installing triplets
* not overriding default vcpkg env variables
* missing path
* manifet install off
* that was working locally
* missing protobuf path
* fixing tiff not found
* fixing vtk not found
* more vtk fixes
* another thy
* changing download url
* updated url
* try
* shoudl work now
* protobuf exe
* readding tiff
* explicit vcpkg installed folder
* missing commands
* try without tiff
* ficing vtk comple path
* -DPSAPI_LIBRARIES=Psapi.lib
* quoting
* fixing psapi required
* Set up MSVC Developer Command Prompt
* disabling pckaging for now
* openni.ini
* renabling packing
* Added stripped deps
* fix name
* updated binaries
* format
* updated opengv eigen path
* added tbb dep
* updatd archive name with vs version
* updated archive in action
* fixing patch error
* corrupted
* updated gtsam version / vcpkg
* removed appveyor. Set internal opengv build disabled by defaut (because build can be very long on some machines), will enable it inside the ros release branches instead.
* updated opengv patch
* gtsam mkl dep
* updated vcpkg binaries
* updated patches
* removed mkl dep
* missing eigen in gtsam dep
* disabling gtsam till we find a compatible version locally
* all working locally!
* removed ninja
* working python calls
* fixed hard symlink for python3.dll
* fixed qt missing png, fixed opengv not finding eigen with config, fixed python3.dll missing
* fixed flaoting dockwidget on start, removed cmd line window when launching bundled app
* use sub-packages cudnn
* Added cuda dev workflow
* fixed archive name
* Updated deps with pytorch cuda
* updating ci PATH
* fixing ci build without torch
* rename cuda artifacts
* cache cuda, add job to test internal opengv build
* Updated output artifacts zip name
* windows package: only zip on pull request
* Change USE_INTERNAL_OPENGV to BUILD_OPENGV
* use use-github-cache
* updated artifacts path
* Detect more loop closures from/to specific map ID only option
* default value -1
* Added elapsed time
* Avoid loading ALL signatures in RAM, only load them when necessary
* Avoid creating flann index when initializing with Kp/NNStrategy>=3
* Setting opt params by default
* Read-only localization mode
* Localization: don't update map's node timestamps if statistic after run are not saved
* Updated Mem/LocalizationReadOnly description
* Updated description of Kp/FlannIndexSaved
* rtabmap-rgbd_camera: added width/height options,
* using CameraViewer for visualization by default (use -pcl option for old visualization).
* CameraViewer: added capture and render rate.
* Note that non-TOF orbbec cameras could not be tested.
* DbViewer: coloring graph based on env sensor value (e.g., wifi signal strength)
* GraphViewer optimizations
* Fixed link memory allocation
* refactor
* more optimizations
* mainwindow keypoints optimization
* MainWindow optimizations
* Shrink graphics scene on clearAll
* Working IMU_RGBD and IMU_STEREO. Changing Inter IMU base frame is now possible.
* Output error msg when vocabulary path is wrong.
* Showing full local feature map
* Prioritize neighbor links in Optimizer::getConnectedGraph() to avoid odometry jumps.
* Fixed landmark order
* report: added search for first valid id
* Fixed non-neighbor comparison logic
* RGBD/LocalizationPriorError can now be 0 (disabled) to avoid using priors to fix the graph (https://github.com/introlab/rtabmap_ros/issues/1371)
* amend previous commit