Skip to content

lidar

Where point clouds come from and what Pelorus may assume about them.

Option Default Starter
topic "/ouster/points" yes
subscriber_mode PointCloud2
vendor NoTimestamp yes
qos.reliability Reliable yes
covariance 0.001
as_sync false
driver
  type Disabled
  velodyne
    model Vlp32c
    bind_address "0.0.0.0"
    data_port 2368
    position_port 8308
    device_ip ""
    frame_id "velodyne"
    cut_angle 0.0
    timestamp
      mode Sensor
      allow_host_hour_anchor true
      max_host_skew 20ms
      startup_timeout 15s
  robosense
    model M1
    bind_address "0.0.0.0"
    msop_port 6699
    difop_port 7788
    device_ip ""
    frame_id "rslidar"
    timestamp
      mode Sensor
      max_host_skew 20ms
      startup_timeout 15s

lidar.topic

Topic carrying sensor_msgs/msg/PointCloud2. Ignored while lidar.driver.type selects an in-process driver.

Part of the starter configuration.

lidar.subscriber_mode

Selects the input message type when using mt_pubsub. Compressed requires the default-enabled compressed-pointcloud Cargo feature. Other communication backends always subscribe to PointCloud2.

Accepted values: compressed, pointcloud2

Accepted values are case-insensitive.

lidar.vendor

Vendor whose per-point timestamp layout the incoming cloud uses. Pelorus needs this to deskew a scan, since the points of one revolution are measured at different times. NoTimestamp treats the scan as if it were instantaneous, which visibly smears geometry as soon as the platform moves.

Accepted values: velodyne, ouster, livox, livoxmid360, robosense, hesai, blickfeld, sickmultiscan, notimestamp, no_timestamp, genericnotimestamp, generic_no_timestamp

Accepted values are case-insensitive.

Part of the starter configuration.

lidar.qos.reliability

Anything other than Reliable drops messages under load and is not supported.

Accepted values: besteffort, reliable, systemdefault

Accepted values are case-insensitive.

Part of the starter configuration.

lidar.covariance

How far the filter trusts the scan match against the map. Lower values pull the estimate harder towards the registration result.

Type: number.

lidar.as_sync

Use incoming LiDAR messages as a forced synchronization trigger. This costs accuracy, but some surrounding libraries work better with it.

Type: boolean.

lidar.driver

lidar.driver.type

Disabled keeps the existing external point-cloud input configured by lidar.topic. Velodyne, Ouster and Robosense enable in-process UDP drivers and require Pelorus to be built with their matching feature (or the aggregate sensor-drivers feature).

Accepted values: disabled, velodyne, ouster, robosense

Accepted values are case-insensitive.

lidar.driver.velodyne

UDP connection to a Velodyne sensor. Only used when type = Velodyne.

lidar.driver.velodyne.model

The configured model must match the product identifier in received packets.

Accepted values: vlp16, vlp32c, pucklite, puckhires

Accepted values are case-insensitive.

lidar.driver.velodyne.bind_address

Local IPv4 or IPv6 address on which to receive UDP packets. "0.0.0.0" listens on every IPv4 interface.

lidar.driver.velodyne.data_port

UDP data-packet port. Must be in 1..=65535 and differ from position_port.

Type: integer.

Minimum: 1 (inclusive).

Maximum: 65535 (inclusive).

lidar.driver.velodyne.position_port

UDP position/NMEA packet port. Must be in 1..=65535 and differ from data_port.

Type: integer.

Minimum: 1 (inclusive).

Maximum: 65535 (inclusive).

lidar.driver.velodyne.device_ip

Optional sender-address filter. Empty accepts packets from any device. Otherwise this must be an IPv4 or IPv6 address, for example "192.168.1.201".

lidar.driver.velodyne.frame_id

Frame assigned to native scans. Coordinates follow ROS REP-103: +X forward, +Y left, +Z up.

lidar.driver.velodyne.cut_angle

Revolution boundary in radians, measured in the sensor azimuth convention. A scan is emitted whenever azimuth crosses this angle. Expected range is 0.0 (inclusive) to 2*pi (exclusive). Ratslang currently has no angle quantity type.

Type: number.

lidar.driver.velodyne.timestamp

lidar.driver.velodyne.timestamp.mode

Sensor prefers UTC reconstructed from valid position-packet NMEA. If no valid NMEA anchor is available and allow_host_hour_anchor is true, the packet's microseconds-since-hour are combined with the nearest host UTC hour. Host timestamps packets when they are received and stamps a scan from its first packet. Host is useful when sensor UTC is unavailable, but includes network and scheduling latency. Both modes keep per-point firing offsets.

Accepted values: sensor, host

Accepted values are case-insensitive.

lidar.driver.velodyne.timestamp.allow_host_hour_anchor

In Sensor mode, permit nearest-host-hour reconstruction when position/NMEA UTC is unavailable. The host clock must be synchronized to the sensor's time reference. This option has no effect in Host mode.

Type: boolean.

lidar.driver.velodyne.timestamp.max_host_skew

Maximum accepted absolute difference between reconstructed sensor UTC and host UTC. Must be positive. Used by Sensor mode. Host mode already uses host time.

Type: time.

Minimum: 0s (exclusive).

lidar.driver.velodyne.timestamp.startup_timeout

Maximum positive duration to wait for usable packets or timestamps during startup. If the configured clock mode cannot be satisfied, Pelorus fails startup and says so.

Type: time.

Minimum: 0s (exclusive).

lidar.driver.robosense

UDP connection to a RoboSense solid-state sensor. Only used when lidar.driver.type selects Robosense. The mechanical units (RS-16, RS-32, Helios, Bpearl) speak a different packet format and are not handled by this driver.

lidar.driver.robosense.model

These differ in packet length and per-point layout, so a mismatch is rejected on the first packet rather than decoded into noise.

Accepted values: m1, m2, e1, mx

Accepted values are case-insensitive.

lidar.driver.robosense.bind_address

Local IPv4 or IPv6 address on which to receive UDP packets. "0.0.0.0" listens on every IPv4 interface.

lidar.driver.robosense.msop_port

UDP point-data (MSOP) port. Must be in 1..=65535 and differ from difop_port.

Type: integer.

Minimum: 1 (inclusive).

Maximum: 65535 (inclusive).

lidar.driver.robosense.difop_port

UDP device-info (DIFOP) port. Must be in 1..=65535 and differ from msop_port. The driver reads the echo mode from it, which decides whether Mx reports one return per channel or two. Geometry never depends on it: these sensors put the direction of every point in the data packet itself.

Type: integer.

Minimum: 1 (inclusive).

Maximum: 65535 (inclusive).

lidar.driver.robosense.device_ip

Optional sender-address filter. Empty accepts packets from any device. Otherwise this must be an IPv4 or IPv6 address, for example "192.168.1.200".

lidar.driver.robosense.frame_id

Frame assigned to native scans. Coordinates follow ROS REP-103: +X forward, +Y left, +Z up.

lidar.driver.robosense.timestamp

lidar.driver.robosense.timestamp.mode

Sensor uses the UTC stamp in each packet header and requires the sensor to be time-synchronized, typically over PTP or GPS. Host stamps packets when they are received, which includes network and scheduling latency. Both modes keep per-point measurement offsets.

Accepted values: sensor, host

Accepted values are case-insensitive.

lidar.driver.robosense.timestamp.max_host_skew

Largest accepted difference between sensor UTC and host UTC in Sensor mode. Must be positive. A sensor that is not synchronized at all fails this immediately. One that is merely a few milliseconds out passes it at startup and only fails later, so the driver also measures the offset over the first seconds of a run and logs what it saw, warning when the observed drift would use up this budget within a minute.

Type: time.

Minimum: 0s (exclusive).

lidar.driver.robosense.timestamp.startup_timeout

Maximum positive duration to wait for usable packets during startup. If the configured clock mode cannot be satisfied, Pelorus fails startup and says so.

Type: time.

Minimum: 0s (exclusive).