Repository Summary

Checkout URI https://github.com/ros-drivers/ros2_ouster_drivers.git
VCS Type git
VCS Version ros2
Last Updated 2024-06-18
Dev Status MAINTAINED
CI status No Continuous Integration
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Packages

Name Version
ouster_msgs 0.5.1
ros2_ouster 0.5.1

README

ROS2 Ouster Drivers

These are an implementation of ROS2 drivers for the Ouster lidar. This includes all models of the OS-x from 16 to 128 beams running the firmware 2.2-2.4. This is a legacy driver for those deploying within their applications. For new applications, we recommend checking out Ouster’s newly supported ROS 2 driver which we have also validated works well.

You can find a few videos looking over the sensor below. They both introduce the ROS1 driver but are extremely useful references regardless:

OS-1 Networking Setup OS-1 Data Overview
IMAGE ALT TEXT HERE IMAGE ALT TEXT HERE

Documentation

Documentation can be generated using Doxygen.

Run doxygen in the root of this repository. It will generate a /doc/* directory containing the documentation. Entrypoint in a browser is index.html.

Design

See design doc in design/* directory here.

ROS Interfaces

| Topic | Type | Description | |----------------------|-------------------------|--------------------------------------------------| | `scan` | sensor_msgs/LaserScan | 2D laser scan of the 0-angle ring | | `range_image` | sensor_msgs/Image | Image of the range values from the sensor | | `intensity_image` | sensor_msgs/Image | Image of the Intensity values from the sensor | | `noise_image` | sensor_msgs/Image | Image of the noise values from the sensor | | `reflectivity_image` | sensor_msgs/Image | Image of the reflectivity values from the sensor | | `points` | sensor_msgs/PointCloud2 | 3D Pointcloud generated from a 360 rotation | | `imu` | sensor_msgs/Imu | IMU values at transmission rate | | Service | Type | Description | |-------------------|-------------------------|-----------------------------------| | `reset` | std_srvs/Empty | Reset the sensor's connection | | `GetMetadata` | ouster_msgs/GetMetadata | Get information about the sensor. A optional filepath can be specified to save the metadata to a local file. | | Parameter | Type | Description | |--------------------------|---------|-------------------------------------------------------------------------------------------------------------| | `lidar_ip` | String | IP or hostname of lidar (ex. 10.5.5.87, os1-serialno.local) | | `computer_ip` | String | IP or hostname of computer to get data (ex. 10.5.5.1) or broadcast (ex. 255.255.255.255) or if using the default driver, "" for automatic detection | | `lidar_mode` | String | Mode of data capture, default `512x10` | | `imu_port` | int | Port of IMU data, default 7503 | | `lidar_port` | int | Port of laser data, default 7502 | | `sensor_frame` | String | TF frame of sensor, default `laser_sensor_frame` | | `laser_frame` | String | TF frame of laser data, default `laser_data_frame` | | `imu_frame` | String | TF frame of imu data, default `imu_data_frame` | | `ethernet_device` | String | An ethernet device (e.g. eth0 or eno1) on which the Tins driver will listen for packets. Note that this is only a parameter for the Tins driver, and is only specified in the config file for that driver. | | | `use_system_default_qos` | bool | Publish data with default QoS for rosbag2 recording, default `False` | | `timestamp_mode` | String | Method used to timestamp measurements, default `TIME_FROM_INTERNAL_OSC` | | `os1_proc_mask` | String | Mask encoding data processors to activate, default IMG | PCL | IMU | SCAN | | `pointcloud_filter_zero_points` | bool | Reduce pointcloud size by omitting (0, 0, 0) points, default `False`. If used, will make the PC2 unstructured. |

Note: TF will provide you the transformations from the sensor frame to each of the data frames.

Timestamp Modes

Referring to the parameter table above, the timestamp_mode parameter has four allowable options (as of this writing). They are: TIME_FROM_INTERNAL_OSC, TIME_FROM_SYNC_PULSE_IN, TIME_FROM_PTP_1588, TIME_FROM_ROS_RECEPTION. A description of each now follows.

TIME_FROM_INTERNAL_OSC

Use the LiDAR internal clock. Measurements are time stamped with ns since power-on. Free running counter based on the sensor’s internal oscillator. Counts seconds and nanoseconds since sensor turn on, reported at ns resolution (both a second and nanosecond register in every UDP packet), but min increment is on the order of 10 ns. Accuracy is +/- 90 ppm.

TIME_FROM_SYNC_PULSE_IN

A free running counter synced to the SYNC_PULSE_IN input counts seconds (# of pulses) and nanoseconds since sensor turn on. If multipurpose_io_mode is set to INPUT_NMEA_UART then the seconds register jumps to time extracted from a NMEA $GPRMC message read on the multipurpose_io port. Reported at ns resolution (both a second and nanosecond register in every UDP packet), but min increment is on the order of 10 ns. Accuracy is +/- 1 s from a perfect SYNC_PULSE_IN source.

TIME_FROM_PTP_1588

Synchronize with an external PTP master. A monotonically increasing counter that will begin counting seconds and nanoseconds since startup. As soon as a 1588 sync event happens, the time will be updated to seconds and nanoseconds since 1970. The counter must always count forward in time. If another 1588 sync event happens the counter will either jump forward to match the new time, or slow itself down. It is reported at ns resolution (there is both a second and nanosecond register in every UDP packet), but the minimum increment varies. Accuracy is +/- <50 us from the 1588 master.

TIME_FROM_ROS_RECEPTION

File truncated at 100 lines see the full file