Commit Graph
3672 Commits
Author SHA1 Message Date
matlabbeandClaude Opus 4.8 d39733b995 CI(macos): install orbbec/depthai to /usr/local so find_package finds them
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]>
2026-06-28 16:05:23 -07:00
matlabbeandClaude Opus 4.8 a260d7e832 CI(macos): extract source deps into composite action with per-dep caches
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]>
2026-06-28 15:36:27 -07:00
matlabbeandClaude Opus 4.8 75f4fa6bd5 CameraRGBD: guard QVTKRenderWidget.h include for VTK < 9
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]>
2026-06-28 14:55:53 -07:00
matlabbe ecda4f5e81 orbbec ci 2026-06-28 14:41:35 -07:00
matlabbeandClaude Opus 4.8 143f4a744b Cameras: clarify on macOS that Orbbec/RealSense2 need sudo (not udev)
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]>
2026-06-28 14:38:28 -07:00
matlabbeandClaude Opus 4.8 f7d855e798 CameraRGBD: fall back to Qt viewer for -pcl on macOS
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]>
2026-06-28 14:15:23 -07:00
matlabbeandClaude Opus 4.8 80b537b2e4 CameraRGBD: set VTK QSurfaceFormat before QApplication
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]>
2026-06-28 14:15:06 -07:00
matlabbeandClaude Opus 4.8 e646b1cd79 CameraOrbbecSDK: harden capture path against crashes
- 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]>
2026-06-28 14:00:15 -07:00
matlabbeandClaude Opus 4.8 8d55ce44f6 macOS: add Info.plist with NSCameraUsageDescription to app bundle
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]>
2026-06-28 13:16:40 -07:00
matlabbeandClaude Opus 4.8 21b50306cf CameraOrbbecSDK: catch ob::Error in init() instead of crashing
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]>
2026-06-28 13:16:40 -07:00
matlabbeandClaude Opus 4.8 703dc3a380 macOS bundle: add library output dir to fixup_bundle search dirs
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]>
2026-06-27 15:57:17 -07:00
matlabbeandClaude Opus 4.8 febbb49523 CI(macos): build source deps from source with caching
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]>
2026-06-27 14:45:09 -07:00
matlabbe 3bc13cab98 fixing packaging on mac 2026-06-27 14:30:06 -07:00
matlabbe f7a70cd19d Update cmake-macos.yml 2026-06-27 14:30:06 -07:00
matlabbe f382938c3f artifacts only for tahoe 2026-06-27 14:30:06 -07:00
matlabbe b7bd1c0811 CI: caching app artifacts for macos builds 2026-06-27 14:30:06 -07:00
matlabbe bc724a2125 iOS CI (#1722)
* iOS CI

* g2o hard-coded path

* bump ios version

* Fixed opencv 4.10.0 build on docker resolute
0.23.7
2026-06-21 12:44:03 -07:00
matlabbe 1a3beebcbb CI Ubuntu 26.04 / ROS2 Lyrical and Rolling (#1716)
* 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
2026-06-20 18:06:55 -07:00
matlabbe a9dcc52d4c Reprocess: adding --stop_loop option (#1720) 2026-06-16 16:21:38 -07:00
matlabbe 9f464db7c9 OpenVINS config file support (#1719) 2026-06-13 16:20:37 -07:00
matlabbe 1dddb350b9 TORO: adding support to load 2d graph (#1718)
* TORO: adding support to load 2d graph

* making marker detection with multicam less verbose

* wrong edge index size

* skip landmarks
2026-06-09 12:05:30 -07:00
matlabbe 468f6e6f28 Fixing empty descriptors on bad signatures (#1714), (bug from #1698) (#1717)
* 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).
2026-06-07 13:19:31 -07:00
matlabbe f29676deb0 PyDetector: adding check if returned descriptors are empty (#1715)
* 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)
2026-06-01 21:04:08 -07:00
matlabbe 6f34498651 rtabmap-info: fixing empty parameter strings showing of as NA (#1712)
* rtabmap-info: fixing empty parameter strings showing of as NA

* show all strings with quotes
2026-05-29 13:09:21 -07:00
matlabbe bb95cc081a Fixed backward compatibility with bionic (Qt::ItemFlags) (#1710)
* Fixed backward compatibility with bionic (Qt::ItemFlags)

* dont remove occupancy grid with not publish last signature data
2026-05-27 17:42:21 -07:00
matlabbe 4756474367 Adding support for AprilTag v3 library (#1702)
* 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
2026-05-26 17:43:34 -07:00
matlabbe 49aa566613 Fixed empty global map on ros (regression from #1698) (#1709) 2026-05-23 13:36:15 -07:00
matlabbe a9146f5be6 Fix #1698 (#1708) 2026-05-22 09:33:17 -07:00
matlabbe 27ca7ec058 Fixing libpng warning: iCCP: known incorrect sRGB profile (#1703) 2026-05-15 07:18:15 -07:00
matlabbeandBorong Yuan 8d0692eab0 Save intermediate node input features (#1698)
* 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]>
2026-05-14 09:20:09 -07:00
matlabbe afe8aadff1 Remove macos ci cache (#1701)
* removed macos caching
2026-05-10 21:46:37 -07:00
matlabbe 440e143d87 Adding CI Macos status in readme (#1700)
* 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
2026-05-10 20:07:46 -07:00
matlabbe 72833c89bb Adding macos CI (#1699)
* 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
2026-05-10 20:04:30 -07:00
matlabbe f04067fa16 Fixing Rolling CI on Noble (#1696)
* Fixing Rolling CI on Noble

* setup env var correctly
2026-05-05 11:15:34 -07:00
matlabbe c1ef13a8d6 Various QoL (refactored RTABMAP_VERSION_COMPARE) (#1695) 2026-05-04 20:12:31 -07:00
matlabbe 37f8fa63c5 Auto graph repairing (#1691)
* 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.
2026-05-04 16:02:55 -07:00
Borong Yuan 0cf2e45c81 Preserve the attributes of intermediate nodes when retrieving data from the database (#1694) 2026-04-29 08:04:37 -07:00
matlabbe f48db0ee51 Fixing GUI warning when SIFT/MaxGaussianThreshold=0 2026-04-26 15:43:04 -07:00
matlabbe 2314c4dfa5 Updated noble dev container with nvidia runtime example 2026-04-26 15:40:26 -07:00
Borong Yuanandmatlabbe ebba7e4878 Correct the Jacobian calculation of GravityFactor (#1692)
* 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]>
2026-04-26 15:33:05 -07:00
matlabbe aa6d20775f Init python interface if built with python (related to #1693) 2026-04-25 14:55:59 -07:00
matlabbe 9cbe84e445 Support intermediate nodes with memory management enabled (#1687)
* 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.
2026-04-19 16:08:03 -07:00
matlabbe cc86af4399 GraphViewer: Fixed ground truth and gps context menu option disabled even if there are there, after hiding them, saving and reopening UI 2026-04-18 12:57:35 -07:00
matlabbe 79ff91d293 Added Statisics: Loop/Optimization_max_error_from_id and Loop/Optimization_max_error_to_id to help with debugging rejected loop closures 2026-04-16 17:39:58 -07:00
matlabbe aa7546ec62 Enable WITH_PYTHON on CI (#1689)
* 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
2026-04-14 12:09:41 -07:00
matlabbe a8fd7f043d CloudViewer: fixed rendering camera rotation not normalized warning 2026-04-13 01:16:58 +00:00
Abhijithandmatlabbe a9f63bd5fd Add LIO-SAM as an odometry strategy (#1684)
* 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]>
2026-04-12 18:06:44 -07:00
matlabbe 8fd701aabe Fixing prior and gravity constraints support for SBA with orbslam dep… (#1683)
* Fixing prior and gravity constraints support for SBA with orbslam dependency

* Updated an error log msg
2026-04-05 12:36:54 -07:00
matlabbe 1ea8fa2e06 New rtabmap-reduceGraph CLI tool (#1655)
* 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
2026-04-04 19:48:03 -07:00
matlabbe 51cfc37923 Update CI badges (#1681)
* 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
2026-03-29 12:34:09 -07:00