Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | Apache 2 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/tier4/nebula.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-30 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
Changelog for package nebula_hesai
1.2.0 (2026-07-30)
-
feat(nebula_core_ros): make SyncToolingWorker compatible with agnocast_wrapper::Node (#469)
- feat(nebula_core_ros): make shared diagnostics/sync helpers agnocast_wrapper::Node-compatible
- feat(continental_ars548_ros_wrapper): migrate ContinentalARS548RosWrapper to agnocast_wrapper::Node (Method 2)
* fix(continental_ars548_ros_wrapper): publish pass-through messages via publish(const &) The ALLOCATE_OUTPUT + out = std::move(msg) pattern stole msg's buffer, which was allocated on the normal heap (outside the borrow window), so the payload never entered shared memory and agnocast zero-copy delivered an invalid pointer to cross-process subscribers. publish(const &) borrows inside the window and copies into shared memory, which is correct on both the rclcpp and agnocast backends.
- fix(nebula_core_ros): include renamed nebula_agnocast_wrapper.hpp in sync_tooling_worker
- feat(nebula_hesai): migrate HesaiRosWrapper to agnocast_wrapper::Node (Method 2)
- ci(pre-commit): autofix
- fix(nebula_hesai): renamed wrapper include, const-ref packets publish, restore cie thread factory
- include the post-#472 nebula_agnocast_wrapper.hpp (old autoware_agnocast_wrapper.hpp no longer exists)
- publish raw packets via publish(*msg) so the payload is materialized into shared memory (a plain std::move would leave it on the normal heap, invalid for cross-process subscribers)
- restore make_cie_thread_factory for the packets publish thread; the migration had dropped it, which would leave that non-ROS thread unmanaged by the Agnocast CIE thread configurator and lose its configured priority/affinity
* fix(continental_ars548_ros_wrapper): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends.
* fix(nebula_hesai): log the resolved packets topic again The migration replaced [packets_sub_->get_topic_name()]{.title-ref} with the relative topic literal, which hides the actual (namespaced/remapped) topic and makes troubleshooting harder. The wrapper's Subscription has no get_topic_name(), so resolve the name through the node's topics interface instead; this yields the same fully-qualified name as before on both backends. ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
-
fix(nebula_hesai): guard sensor setup with try/catch and retry (#464)
* fix(nebula_hesai): remove throwaway thread+join in check_and_set_config The sensor setup path wrapped each blocking PTC command in a std::thread that was joined immediately. This added no concurrency, but it did change error semantics: an exception escaping a std::thread's entry function calls std::terminate() instead of propagating to the joining thread. So any recoverable comms fault during setup (e.g. get_lidar_range() returning "PTC Error: Timeout;" via value_or_throw) aborted the whole component container rather than being catchable by the caller. Inline all eight thread+join constructs so these exceptions propagate normally and can be handled by the caller. std::this_thread::sleep_for usage (and the <thread> include) is retained. Also drop two now-stale "waiting for thread"/"thread finished" debug logs. Pure refactor: no behavioral change on the success path. A follow-up will add try/catch + retry around check_and_set_config() so a transient setup timeout is non-fatal. Co-Authored-By: Claude Opus 4.8 (1M context) <<noreply@anthropic.com>>
* fix(nebula_hesai): guard sensor setup with try/catch and retry Since PR #463 removed the throwaway threads from check_and_set_config, a comms fault during sensor setup now surfaces as a normal std::exception at the call site instead of calling std::terminate. But the call site did not handle it, so a transient timeout during startup would still propagate out of node construction (and out of the on_config_change parameter callback). Wrap the check_and_set_config() calls in a new configure_sensor() helper that catches std::exception and, when retry_hw is set, retries with the same 8s backoff already used for the TCP connect step. After a bounded number of failed attempts it logs and continues without applying the configuration rather than aborting, consistent with how the wrapper already tolerates get_inventory() failures and retry_hw=false connect failures.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]