Skip to content

23 humble support#29

Merged
alistair-english merged 13 commits intomainfrom
23-humble-support
May 4, 2026
Merged

23 humble support#29
alistair-english merged 13 commits intomainfrom
23-humble-support

Conversation

@alistair-english
Copy link
Copy Markdown
Contributor

No description provided.

Signed-off-by: Alistair English <hello@alistairenglish.com>
Signed-off-by: Alistair English <hello@alistairenglish.com>
Humble's rclcpp lacks the autostart param on create_timer/create_wall_timer
and rclcpp_lifecycle::LifecycleNode's create_service/create_client only
accept rmw_qos_profile_t. Add jig/compat.hpp with RCLCPP_VERSION_GTE gates
and use them in timer.hpp, service.hpp, and the codegen template. Also add
templates/*.jinja2 to the codegen DEPENDS so template edits invalidate
generated headers.

Signed-off-by: Alistair English <hello@alistairenglish.com>
Signed-off-by: Alistair English <hello@alistairenglish.com>
Signed-off-by: Alistair English <hello@alistairenglish.com>
Without this, sourcing the workspace setup.bash does not put PYTHON_INSTALL_DIR on PYTHONPATH on humble, so launched nodes fail with ModuleNotFoundError. Invisible on jazzy/kilted because their PYTHON_INSTALL_DIR (lib/pythonX/site-packages) is covered by the default ament_export_pythonpath; humble uses local/lib/pythonX/dist-packages which is not. See jig#28 for the proper refactor.

Signed-off-by: Alistair English <hello@alistairenglish.com>
Iron renamed rclpy.qos_event -> rclpy.event_handler and split ClockType
into rclpy.clock_type; Humble has neither. Add jig._compat that
re-exports from whichever module exists and route the existing
imports through it.

Signed-off-by: Alistair English <hello@alistairenglish.com>
…back

Humble's rclcpp rejects TRANSIENT_LOCAL durability paired with intraprocess
comms; the state heartbeat publisher in BaseNode crashed every C++ lifecycle
node at construction. Add JIG_INTRAPROCESS_TRANSIENT_LOCAL in compat.hpp that
falls back to volatile on Humble.

Also wrap user callbacks in the Python BaseNode with traceback.print_exc so
configure/activate/deactivate/cleanup/shutdown failures surface the actual
exception instead of just "Autostart failed to configure".

Signed-off-by: Alistair English <hello@alistairenglish.com>
Signed-off-by: Alistair English <hello@alistairenglish.com>
rclcpp::create_timer takes the callback by forwarding reference; passing
an lvalue deduces CallbackT to a reference type, so GenericTimer<CB&>
ends up storing a reference to the local lambda, which dies when
jig::create_timer returns. First fire after activate then segfaulted.
Same fix applied to create_wall_timer.

Signed-off-by: Alistair English <hello@alistairenglish.com>
The old name claimed transient_local, but on Humble the macro expands to
durability(Volatile) — opaque and misleading at call sites. The new name
just describes its job (pick the right durability for an intraprocess
publisher) and the comment block explains the per-distro values.

Mirror the same shim on the python side as INTRAPROCESS_DURABILITY in
_compat.py and use it from the python BaseNode heartbeat publisher, so
jig's C++ and python interfaces stay consistent. Python's BaseNode
doesn't enable intraprocess today, so this is preemptive — TL still
works on Humble — but it keeps the two interfaces in lockstep.

Add heartbeat_qos() to jig_example test helpers (matching the publisher)
and switch test_state_heartbeat_published to it. state_qos() stays
TRANSIENT_LOCAL because state_report (the other consumer) genuinely
needs latching.

Signed-off-by: Alistair English <hello@alistairenglish.com>
heartbeat_qos was just state_qos with the humble durability override —
having two near-identical helpers invites silent drift. state_qos now
*is* the distro-aware one, matching base_node's ~/state heartbeat
publisher.

state_report is the actual special case: it's published from a python
lifecycle node that doesn't enable IPC, so it stays TRANSIENT_LOCAL on
humble and the test specifically relies on latching to receive the
message published during configure. Inline that QoS at the call site
with a comment instead of carving out a second helper.

Signed-off-by: Alistair English <hello@alistairenglish.com>
@alistair-english alistair-english linked an issue May 2, 2026 that may be closed by this pull request
Signed-off-by: Alistair English <hello@alistairenglish.com>
@alistair-english alistair-english merged commit d0f7aa9 into main May 4, 2026
5 checks passed
@alistair-english alistair-english deleted the 23-humble-support branch May 4, 2026 04:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

humble support

1 participant