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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro kilted showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro lyrical showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro rolling showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro ardent showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro bouncy showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro crystal showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro eloquent showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro dashing showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro galactic showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro foxy showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro iron showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro lunar showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro jade showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro indigo showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro hydro showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro kinetic showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro melodic showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange

No version for distro noetic showing humble. Known supported distros are highlighted in the buttons above.

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

Nebula Hesai ROS Wrapper

Maintainers

  • David Wong
  • Max Schmeller

Authors

  • TIER IV
README
No README found. See repository README.
CHANGELOG

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

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

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged nebula_hesai at Robotics Stack Exchange