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.
* correct the Jacobian calculation of GravityFactor
* reimplement GravityFactor's analytical Jacobian
* adopt some minor changes from the GTSAM mainline
* use GTSAM's native AttitudeFactor instead of GravityFactor
* add missing header file and namespace prefix
* Removed GravityFactor. Fixed build with latest GTSAM version from source. Require c++17 when building with GTSAM>=4.3.0.
* Fixed cmake error when gtsam is not installed
---------
Co-authored-by: matlabbe <[email protected]>
* 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
* Added liosam odometry integration
* Add kXYZIRT scan format with per-point ring channel for LIO-SAM integration
Introduce PointXYZIRT point type and kXYZIRT LaserScan format (x,y,z,
intensity,ring,time) so that ring indices survive the scan pipeline.
Update OdometryLIOSAM to require kXYZIRT and properly split ring/time
into the parallel buffers LIO-SAM expects. Extend deskewing to preserve
ring data and disable base-class deskew in OdometryLIOSAM since LIO-SAM
handles it internally.
* Address PR review: config file, deferred init, and GUI panel for LIO-SAM
- Add OdomLIOSAM/ConfigPath parameter to load LIO-SAM settings from a
YAML file. When set, individual params are ignored. Extrinsics from
sensor local transforms always override config file values.
- Defer LioSamCore initialization until both IMU and lidar local
transforms are available, computing T_lidar_imu from sensor data.
IMU samples are buffered and replayed after init.
- Fix deferred init for scan-only messages that arrive after IMU
local transform is already cached.
- Add LIO-SAM entry to odometry strategy combo box (index 14) with
full PreferencesDialog panel including config path browse button
and all parameter widgets.
* OdometryLIOSAM: propagate deskewed scan to SensorData
Capture the deskewed cloud produced by LIO-SAM's image projection
stage and replace the raw scan on SensorData with it, so loop closure
registration and other downstream stages operate on the motion-
compensated points instead of the raw pre-deskew input.
* Minor updates for rtabmap_ros
---------
Co-authored-by: matlabbe <[email protected]>
* 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