Package Summary

Version 1.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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.3.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-09-29
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.3.0 (2026-09-29)

  • chore(nebula_core_ros): follow upstream's agnocast_wrapper layout (#495) The Hesai wrapper now registers through nebula_agnocast_wrapper_register_node(), which selects the ROS or Agnocast context at runtime instead of assuming an Agnocast-only executor.
  • fix(nebula_core_ros): build the synced agnocast_wrapper Node implementation (#494) Drops the redundant USE_AGNOCAST_ENABLED definition, now exported PUBLIC by nebula_core_ros.
  • fix(nebula_hesai_decoders): drop scans whose timestamp was never set (#493) Stops such scans from reaching the pointcloud publisher.
  • Contributors: Koichi Imai, lei.gu

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

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