feat(nebula_continental, nebula_hesai): apply agnocast_components for CIE#418
feat(nebula_continental, nebula_hesai): apply agnocast_components for CIE#418atsushi421 wants to merge 7 commits intotier4:mainfrom
Conversation
Signed-off-by: atsushi421 <atsushi.yano.2@tier4.jp>
There was a problem hiding this comment.
Pull request overview
This PR integrates autoware_agnocast_wrapper into nebula_continental so the ARS548 node can switch between the standard ROS 2 executor and CallbackIsolatedAgnocastExecutor (CIE) based on the ENABLE_AGNOCAST environment variable, supporting middleware-transparent scheduling efforts in Autoware.
Changes:
- Added
autoware_agnocast_wrapperas a package dependency. - Added
find_package(autoware_agnocast_wrapper REQUIRED)in CMake. - Switched ARS548’s component executable registration to
autoware_agnocast_wrapper_register_nodewith explicit ROS2/agnocast executor selections.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| src/nebula_continental/nebula_continental/package.xml | Adds autoware_agnocast_wrapper dependency to the package manifest. |
| src/nebula_continental/nebula_continental/CMakeLists.txt | Enables wrapper-based node registration for ARS548 and sets executor types for toggling CIE via env var. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…agnocast_components Signed-off-by: atsushi421 <atsushi.yano.2@tier4.jp>
…nal on ENABLE_AGNOCAST Align with the Hesai package pattern by guarding the agnocast_components dependency behind the ENABLE_AGNOCAST environment variable, falling back to rclcpp_components_register_node when disabled. This fixes CI failures where rosdep cannot find ros-humble-agnocast-components. Signed-off-by: atsushi421 <atsushi.yano.2@tier4.jp>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #418 +/- ##
==========================================
- Coverage 48.35% 48.34% -0.01%
==========================================
Files 156 156
Lines 12996 12997 +1
Branches 6901 6901
==========================================
Hits 6284 6284
- Misses 5325 5326 +1
Partials 1387 1387
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
…n ENABLE_AGNOCAST agnocast_components_register_node and rclcpp_components_register_node cannot coexist in the same package because both generate the same rclcpp_components resource index file via different mechanisms. Wrap SRR520 registration with the same ENABLE_AGNOCAST conditional. Signed-off-by: atsushi421 <atsushi.yano.2@tier4.jp>
mojomex
left a comment
There was a problem hiding this comment.
Hi, thank you for the PR! I'm really excited about our stack getting proper scheduling.
One question: Is there a reason you only targeted the Continental ARS548 here, and not the Hesai node as well? From what we saw internally, LiDARs would profit the most from proper real-time scheduling support.
@mojomex |
|
@atsushi421 I see. That seems like a very Pilot Auto-centric approach to me. Since Nebula is used by other projects and products, I'd suggest we add the same changes to Hesai in Nebula directly as well. Other vendors are fine right now - we can change those on-demand. |
@mojomex |
|
@atsushi421 I see, that makes sense. From a Nebula point of view, I would still prefer for you to add Hesai (in this PR is fine!). If there's any unforseen roadblocks, we can split PRs, or do Hesai later as you suggested. |
Signed-off-by: atsushi421 <atsushi.yano.2@tier4.jp>
|
@mojomex |
Description
Apply
agnocast_componentsto enableCallbackIsolatedAgnocastExecutor(CIE) for nebula_continental and nebula_hesai nodes, as part of the effort to achieve middleware-transparent scheduling and optimize end-to-end response time across Autoware.Changes
nebula_continental
agnocast_componentssupport guarded byENABLE_AGNOCASTenvironment variableENABLE_AGNOCASTis set: usesagnocast_components_register_nodewithEXECUTOR CallbackIsolatedAgnocastExecutorforcontinental_ars548_ros_wrapper, and default executor forcontinental_srr520_ros_wrapperENABLE_AGNOCASTis not set: falls back torclcpp_components_register_nodeament_export_dependencies(agnocast_components)agnocast_components_register_nodewhenENABLE_AGNOCASTis set, becauseagnocast_components_register_nodeandrclcpp_components_register_nodecannot coexist in the same package (both generate the same resource index file via different mechanisms)<depend condition="$ENABLE_AGNOCAST == 1">agnocast_components</depend>nebula_hesai
agnocast_componentsavailability check guarded byENABLE_AGNOCAST(alongside existingagnocastlibcheck)ENABLE_AGNOCASTis set: usesagnocast_components_register_nodewithEXECUTOR CallbackIsolatedAgnocastExecutorforhesai_ros_wrapperENABLE_AGNOCASTis not set: falls back torclcpp_components_register_nodeament_export_dependencies(agnocast_components)agnocastlibdependency (for publisher/subscriber wrapping vianebula_agnocast_wrapper) is preserved<depend condition="$ENABLE_AGNOCAST == 1">agnocast_components</depend>Related links
Parent Issue: Apply CallbackIsolatedAgnocastExecutor (CIE) to safety-/performance-critical nodes autowarefoundation/autoware_core#968
AutowareDiscussion about adopting CIE
How was this PR tested?
Notes for reviewers
Please review the following aspects:
Verify that all relevant
CMakeLists.txtfornebula_continentalandnebula_hesainodes have been updated (no missed files).If the node meets all of the following conditions, please check for potential race conditions (see Effects on system behavior for the reason):
rclcpp::executors::SingleThreadedExecutororrclcpp_components::component_containerInterface changes
None.
Effects on system behavior
Internally, CIE creates a dedicated
rclcpp::executors::SingleThreadedExecutorfor each callback group, so the fundamental scheduling behavior within each group remains almost identical. The key difference is that, for nodes originally usingrclcpp::executors::SingleThreadedExecutor, callback groups now run in parallel across separate threads, similar toMultiThreadedExecutor.