Skip to content

Add beluga_amcl and beluga_ros (Linux, macOS, Windows) - #112

Open
Tobias-Fischer wants to merge 7 commits into
mainfrom
ports/beluga
Open

Tobias-Fischer wants to merge 7 commits into
mainfrom
ports/beluga

Conversation

@Tobias-Fischer

@Tobias-Fischer Tobias-Fischer commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

Ports RoboStack/ros-jazzy#298 by @gftabor (continuing RoboStack/ros-jazzy#267 by @Timple): adds beluga_amcl and beluga_ros (with beluga) to the shared selection, on Linux, macOS and Windows. Beluga 2.1.1 is released for humble and jazzy only, so lyrical and rolling build nothing.

  • All platforms (shared/patch/ros2-beluga.patch):
    • <Eigen/Geometry> instead of the Eigen-internal Eigen/src/Geometry/AngleAxis.h, which Eigen 5 rejects;
    • BUILD_TESTING off by default;
    • in the on_motion policy, a flag plus the pose instead of std::optional<Pose>: GCC 15 fails to instantiate std::optional<Sophus::SE3> ("initializations for multiple members"), which beluga_amcl's 3D NDT node hits too.
    • The PRs' additional recipes and sophus dummy package aren't needed: the packages are in the rosdistro, and conda-forge's sophus is rebuilt for Eigen 5 (Increase Eigen compatibility conda-forge/sophus-feedstock#5).
  • Windows (Beluga to windows as well #123 by @gftabor, merged into this branch):
    • CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS for beluga_amcl;
    • a static beluga_ros library;
    • path.string() for HDF5.
  • macOS (ros2-beluga*.osx.patch): libc++ differs from libstdc++ in three ways.
    • Its execution policies need -fexperimental-library, set as an interface option of beluga so its users get it too.
    • spatial_hash checked is_same_v<size_t, uint64_t>, which is false on macOS (unsigned long vs unsigned long long); it compares sizeof instead.
    • libc++'s execution policies can't be copied. beluga's action closures, Amcl, and the policy variants of beluga_ros and beluga_amcl copied them; they now keep pointers to the standard policies (std::execution::seq, par).

Built locally

  • jazzy, linux-64: beluga, beluga_amcl, beluga_ros.
  • jazzy, linux-aarch64 (multipass VM): beluga, beluga_amcl (with its recipe tests) and beluga_ros. Compiling beluga_amcl's 3D NDT node needs more than 6 GB of memory for one compiler process; CI's runners have more.
  • jazzy, osx-arm64: beluga, beluga_amcl, beluga_ros with the macOS patches.
  • humble, linux-64: beluga, beluga_amcl, beluga_ros with their recipe tests.
  • check-patches passes for humble and jazzy on linux-64, osx-arm64 and win-64.

Merged with main after the syncs (#60, #61, #62, #99). Not built in CI yet.

🤖 Generated with Claude Code

Tobias-Fischer and others added 2 commits October 19, 2026 09:18
Ports RoboStack/ros-jazzy#298 and #267. Beluga 2.1.1 is released for humble
and jazzy, and conda-forge's sophus works (Eigen 5), so no additional
recipes or dummy package are needed. The beluga patch includes
<Eigen/Geometry> instead of an Eigen-internal header (rejected by Eigen 5)
and defaults BUILD_TESTING to OFF (its tests hit a GCC 15 constexpr
std::optional error). macOS: libc++ lacks std::execution::sequenced_policy.

Co-authored-by: Griffin Tabor <14334346+gftabor@users.noreply.github.com>
Co-authored-by: Tim Clephas <5036851+Timple@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GCC 15 fails to instantiate std::optional<Sophus::SE3> (union storage
"initializations for multiple members"), which beluga_amcl's NDT 3D node
hits through the on_motion policy, not only the tests. Store the latest
pose as a flag plus the pose instead; same behaviour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer
Tobias-Fischer marked this pull request as ready for review October 19, 2026 01:42
Comment thread shared/vinca.yaml Outdated
Comment on lines +398 to +399
- beluga_amcl # macOS: libc++ lacks std::execution::sequenced_policy; requested in https://github.com/RoboStack/ros-jazzy/pull/298
- beluga_ros # macOS: libc++ lacks std::execution::sequenced_policy; requested in https://github.com/RoboStack/ros-jazzy/pull/298

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- beluga_amcl # macOS: libc++ lacks std::execution::sequenced_policy; requested in https://github.com/RoboStack/ros-jazzy/pull/298
- beluga_ros # macOS: libc++ lacks std::execution::sequenced_policy; requested in https://github.com/RoboStack/ros-jazzy/pull/298
- beluga_amcl # macOS: libc++ lacks std::execution::sequenced_policy
- beluga_ros # macOS: libc++ lacks std::execution::sequenced_policy

I don't think this is relevant information. And if one really wants to know, it's one search away..

@gftabor

gftabor commented Oct 20, 2026

Copy link
Copy Markdown

Ports RoboStack/ros-jazzy#298 by @gftabor (continuing RoboStack/ros-jazzy#267 by @Timple): adds beluga_amcl and beluga_ros (with beluga) to the shared selection on Linux. Beluga 2.1.1 is released for humble and jazzy.

  • The PRs' additional recipes and sophus dummy package aren't needed: the packages are in the rosdistro, and conda-forge's sophus is rebuilt for Eigen 5 (Increase Eigen compatibility conda-forge/sophus-feedstock#5).
  • beluga (shared patch): <Eigen/Geometry> instead of the Eigen-internal Eigen/src/Geometry/AngleAxis.h (rejected by Eigen 5), BUILD_TESTING off by default (beluga is a plain CMake package that builds its tests otherwise), and in the on_motion policy a flag plus the pose instead of std::optional<Pose>: GCC 15 fails to instantiate std::optional<Sophus::SE3> ("initializations for multiple members"), which beluga_amcl's NDT 3D node hits too, not only the tests.
  • macOS: libc++ lacks std::execution::sequenced_policy.

Built locally

  • jazzy, linux-64: beluga, beluga_amcl, beluga_ros with the patch.
  • jazzy, linux-aarch64 (multipass VM): beluga, beluga_amcl (with its recipe tests) and beluga_ros. Compiling beluga_amcl's 3D NDT node needs more than 6 GB of memory for a single compiler process; CI's runners have more.
  • humble, linux-64: beluga, beluga_amcl, beluga_ros with their recipe tests. lyrical and rolling have no beluga release.

Prepared and built on top of the current rosdistro syncs (#62 humble, #61 jazzy, #60 lyrical, #99 rolling) merged together, so it targets their package versions: merge after them. CI is held with [skip ci] until the syncs are in.

🤖 Generated with Claude Code

I had previously done a test build on windows of beluga and it succeeded. Here you only are building on Linux. Does Windows build? And what patch is required to get mac to build?

@gftabor

gftabor commented Oct 21, 2026

Copy link
Copy Markdown

I have a pull request to this branch adding windows support

Tobias-Fischer and others added 3 commits October 24, 2026 21:13
macOS's libc++ builds beluga with three changes, kept in .osx.patch files:
- the execution policies need -fexperimental-library (an interface option of
  beluga, so beluga_amcl and beluga_ros get it);
- spatial_hash checked is_same_v<size_t, uint64_t>, false on macOS (unsigned
  long vs unsigned long long): compare sizeof;
- libc++'s execution policies can't be copied, which beluga's action closures,
  Amcl and beluga_ros / beluga_amcl's policy variants did: they keep pointers
  to the standard policies (std::execution::seq, par) instead.

Built locally on osx-arm64 (jazzy): beluga, beluga_amcl, beluga_ros. With #123
(Windows), beluga is built everywhere.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer Tobias-Fischer changed the title Add beluga_amcl and beluga_ros (Linux) Add beluga_amcl and beluga_ros (Linux, macOS, Windows) Oct 24, 2026
@github-actions

github-actions Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

ABI check (linux-64)

About this check

Each package this pull request built, compared with its newest released build (tools/abi_check.py, libabigail):

  • compatible / additions: the package can be bumped on its own;
  • soname / incompatible: the packages that depend on it need a rebuild (build number bump) in the same pull request.

Exported symbols are compared (the released packages are stripped, so struct layouts aren't); unchanged installed headers rule out layout and inline changes, changed ones are listed for review. Dependents to rebuild are the released ones linking to a changed library. A changed pin is part of the comparison.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer Tobias-Fischer added build:humble PR build: build only humble (with other build:<distro> labels: only those) build:jazzy PR build: build only jazzy (with other build:<distro> labels: only those) labels Oct 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build:humble PR build: build only humble (with other build:<distro> labels: only those) build:jazzy PR build: build only jazzy (with other build:<distro> labels: only those)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants