Skip to content

feat(ouster): add native Ouster lidar driver#440

Open
guthabharadwaj wants to merge 1 commit into
tier4:mainfrom
ub-cavas:add-ouster-support
Open

feat(ouster): add native Ouster lidar driver#440
guthabharadwaj wants to merge 1 commit into
tier4:mainfrom
ub-cavas:add-ouster-support

Conversation

@guthabharadwaj
Copy link
Copy Markdown

Adds a new nebula_ouster package providing native support for Ouster OS-0, OS-1, and OS-2 sensors with any beam count (32/64/128). Decodes Ouster UDP packets directly without depending on ouster-sdk, supporting LEGACY, RNG19 single-return, and RNG19 dual-return profiles, plus IMU output.

PR Type

  • New Feature

Related Links

Description

Adds native Ouster LiDAR support to Nebula without depending on ouster-sdk, keeping the dependency footprint minimal and consistent with how other vendors (Hesai, Velodyne, Robosense) are implemented.

Packages added:

  • nebula_ouster_common — sensor configuration types, packet profile enums, per-beam calibration structures
  • nebula_ouster_hw_interfaces — UDP socket handling for lidar and IMU packet streams
  • nebula_ouster_decoders — packet parsing for LEGACY, RNG19 single-return, and RNG19 dual-return profiles; per-beam XYZ lookup table generation; metadata (sensor_info) parsing
  • nebula_ouster — ROS 2 wrapper node, launch files, example YAML config, IMU publisher

Key design choices:

  • No ouster-sdk dependency — all packet parsing, projection math, and metadata handling implemented natively
  • Supports any beam count (32/64/128) by driving geometry from the sensor's sensor_info JSON at runtime rather than compile-time constants
  • Dual-threaded, mutex-free architecture for lidar and IMU packet paths
  • Works with live sensors and offline rosbag replay

Also updated:

  • Top-level package registration to include the new packages
  • .gitignore for Ouster-specific build artifacts

Review Procedure

  1. Build: colcon build --packages-up-to nebula_ouster --symlink-install
  2. Live sensor test (OS-0/OS-1/OS-2, any beam count): ros2 launch nebula_ouster ouster_launch_all_hw.xml — verify /pointcloud_raw and /imu/data publish at expected rates and point cloud renders correctly in RViz2.
  3. Offline test: replay a rosbag containing raw Ouster UDP packets and confirm point cloud reconstruction.
  4. Config: see nebula_ouster/config/Ouster.param.yaml for an example configuration.

Remarks

  • Happy to split this into smaller stacked PRs (common → hw_interfaces → decoders → ROS wrapper) if preferred for review. Opened as a single PR first to make the overall design visible before splitting.
  • Unit tests not yet included — planning to mirror the decoder test pattern used by other vendors (recorded packet fixtures → assert point count, XYZ, timestamps, ring index). Will add based on reviewer guidance on scope.
  • Happy to rebase onto a different base branch if needed.
  • Tested against a physical OS-128 sensor integrated into the full Autoware preprocessing pipeline (driver → crop box filters → distortion correction → ring outlier filter) on ROS 2 Humble. Point cloud output validated in RViz.

Pre-Review Checklist for the PR Author

PR Author should check the checkboxes below when creating the PR.

  • Assign PR to reviewer

Checklist for the PR Reviewer

Reviewers should check the checkboxes below before approval.

  • Commits are properly organized and messages are according to the guideline
  • (Optional) Unit tests have been written for new behavior
  • PR title describes the changes

Post-Review Checklist for the PR Author

PR Author should check the checkboxes below before merging.

  • All open points are addressed and tracked via issues or tickets

CI Checks

  • Build and test for PR: Required to pass before the merge.

Add nebula_ouster package for OS-0/OS-1/OS-2 sensors (any beam count).
Decodes Ouster UDP packets natively without ouster-sdk, supporting LEGACY,
RNG19 single-return, and RNG19 dual-return profiles, plus IMU output.

Includes four sub-packages (common, decoders, hw_interfaces, main ROS wrapper),
launch files, example config, README, and updates to the top-level package
registration and gitignore.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant