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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]
Messages
Services
Plugins
Recent questions tagged nebula_hesai at Robotics Stack Exchange
Package Summary
| Version | 1.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
Maintainers
- David Wong
- Max Schmeller
Authors
- TIER IV
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
Package Dependencies
System Dependencies
| Name |
|---|
| boost |
Dependant Packages
| Name | Deps |
|---|---|
| nebula |
Launch files
- launch/hesai_launch_all_hw.xml
-
- sensor_model
- launch_hw [default: true]
- config_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- launch/hesai_offline.xml
-
- sensor_model
- return_mode [default: Dual]
- frame_id [default: hesai]
- scan_phase [default: 0.0]
- calibration_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).csv]
- correction_file [default: $(find-pkg-share nebula_hesai_decoders)/calibration/$(var sensor_model).dat]
- bag_path [default: path to bag dir]
- storage_id [default: sqlite3]
- out_path [default: path to output dir]
- format [default: cdr]
- target_topic [default: /pandar_packets]
- launch/hesai_offline_bag_pcd.xml
-
- output_pcd [default: true]
- output_rosbag [default: true]
- forward_packets_to_rosbag [default: false]
- sensor_model
- lidar_parameter_file [default: $(find-pkg-share nebula_hesai)/config/$(var sensor_model).param.yaml]
- out_num [default: 0]
- skip_num [default: 0]
- bag_path
- input_topic [default: /pandar_packets]
- output_topic [default: /pandar_points]
- out_path
- storage_id [default: sqlite3]
- format [default: cdr]
- only_xyz [default: true]