Exwayz LiDAR decoder aims at decode LiDAR packets and produce a PointCloud2 message for later process (SLAM, relocalization etc).

Default YAML

Below is the example lidar_decoder.yaml configuration file with all parameters open to the user. The comments are the main documentation of each parameters.

<aside> 💡

We provide multiple examples to show all the configuration with the different vendor we support (Hesai, Ouster, Velodyne, Luminar, Valeo…). Please check the section corresponding to your setup

</aside>

lidar_decoder_hesai:
    # [required] LiDAR vendor identifier.
    # For each lidar vendor, possible values are (case insensitive):
    #   * hesai|pandar: Hesai
    #   * innoviz: InnovizTwo
    #   * livox|lvx: Livox
    #   * luminar: Luminar
    #   * ouster|os: Ouster
    #   * robosense|rs: Robosense (Since 1.1.0)
    #   * seyond: Seyond Falcon
    #   * sick: Sick MultiScan
    #   * valeo|scala2: Valeo Scala Gen 2
    #   * velodyne|hdl: Velodyne
    vendor: hesai

    # [required] Hesai lidar sensor model.
    # Possible values are (case sensitive): [Pandar40, Pandar40P, Pandar40M,
    # Pandar64, Pandar20A, Pandar20B, PandarQT, PandarXT-32, PandarXT-16,
    # PandarXTM, OT128, JT128, JT16, ATX, AT128]
    sensor_model: PandarXT-32
    # [optional] Path to CSV angle correction file.
    angle_correction: <path/to/corrections.csv>
    # [optional] Path to lookup table (only for OT128).
    lookup_table: <path/to/lookup_table.yaml>
    # [optional, default=0.0] Start angle in degrees.
    start_angle: 0.0

    # [optional, default=true] If set to true, the timestamp of the point_cloud 
    # output is set to the hardware timestamp of the first point of the LiDAR 
    # point cloud. If set to false (default value), the timestamp of the 
    # point_cloud output is set to the software timestamp of the first input
    # UDP packet received that composes the current LiDAR point cloud.
    output_timestamp_hw: true

    # [optional, default=0.0] Offset (can be negative) in seconds added to the
    # output point cloud message timestamp if output_timestamp_hw=true
    timestamp_hw_offset: 0.0

    # [optional] (ros only) ROS parameters
    ros:
        # [optional, default=/exwayz/lidar_decoder] Output namespace, prepends 
        # all outputs.
        namespace: /exwayz/lidar_decoder

        # [required] Input raw UDP packets settings
        input_packets:
            # [required] Input topic name.
            topic: /input/topic
            # [optional, default=exwayz_msgs/msg/Packet] (ROS2 only) Input
            # topic type. Defines the subscriber type for the input topic.
            # You should have these messages built to be able to use them.
            # Possible values are: [exwayz_msgs/msg/Packet, 
            # ouster_msgs/msg/PacketMsg, hesai_ros_driver/msg/UdpFrame,
            # velodyne_msgs/msg/VelodyneScan]
            type: exwayz_msgs/msg/Packet
            # [optional, default=5000] Subscribe queue size
            queue_size: 5000

        # [optional] Ouptut PointCloud2 settings.
        output_pointcloud2:
            # [optional, default=/pointcloud2] Output topic
            topic: /pointcloud2
            # [optional, default=lidar_decoder] Output frame_id.
            frame_id: lidar_decoder

    # [optional] (rtmaps only) RTMaps parameters
    rtmaps:
        # [optional, default=5000(Ko)] Point cloud output buffer size
        pc_buffer_size: 5000
        # [optional, default=true] If false, the output point cloud is output in
        # sensor reference frame defined by sensor documentation.
        # If true, output point cloud is rotated along z axis to match RTMaps convention.
        use_axis_convention: true

lidar_decoder_livox:
    vendor: livox

    # [optional, default=0.1] Frame accumulation duration in seconds.
    frame_duration: 0.1
    # [optional, default=false] Set to true if sensor is Mid 70.
    mid_70: false

    output_timestamp_hw: true
    timestamp_hw_offset: 0.0

    ros:
        namespace: /exwayz/lidar_decoder

        input_packets:
            topic: /input/topic
            type: exwayz_msgs/msg/Packet
            queue_size: 5000

        output_pointcloud2:
            topic: /pointcloud2
            frame_id: lidar_decoder

    rtmaps:
        pc_buffer_size: 5000
        use_axis_convention: true

lidar_decoder_luminar:
    vendor: luminar

    # [optional, default=true] Remove points albaled as artifacts.
    filter_artifacts: true

    output_timestamp_hw: true
    timestamp_hw_offset: 0.0

    ros:
        namespace: /exwayz/lidar_decoder

        input_packets:
            topic: /input/topic
            type: exwayz_msgs/msg/Packet
            queue_size: 5000

        output_pointcloud2:
            topic: /pointcloud2
            frame_id: lidar_decoder

    rtmaps:
        pc_buffer_size: 5000
        use_axis_convention: true

lidar_decoder_ouster:
    vendor: ouster

    # [required] Path to JSON meta data file or to directory than contains a 
    # .json ouster metadata file.
    metadata: <path-to-meta-file.json>
    # [optional, default=1] Use this parameter to apply row subsampling to the
    # output point cloud.
    row_stride: 1
    # [optional, default=1] Use this parameter to apply column subsampling  to
    # the output point cloud.
    col_stride: 1

    output_timestamp_hw: true
    timestamp_hw_offset: 0.0

    ros:
        namespace: /exwayz/lidar_decoder

        input_packets:
            topic: /input/topic
            type: exwayz_msgs/msg/Packet
            queue_size: 5000

        output_pointcloud2:
            topic: /pointcloud2
            frame_id: lidar_decoder

    rtmaps:
        pc_buffer_size: 5000
        use_axis_convention: true

# (Since 1.1.0)
lidar_decoder_robosense:
    vendor: robosense

    output_timestamp_hw: true
    timestamp_hw_offset: 0.0

    ros:
        namespace: /exwayz/lidar_decoder

        input_packets:
            topic: /input/topic
            type: exwayz_msgs/msg/Packet
            queue_size: 5000

        output_pointcloud2:
            topic: /pointcloud2
            frame_id: lidar_decoder

    rtmaps:
        pc_buffer_size: 5000
        use_axis_convention: true

lidar_decoder_valeo_scala2:
    vendor: valeo

    # [optional, defualt=0] Output point cloud type:
    # 0: High TDC threshold (less range, less noise)
    # 1: Low TDC threshold (more range, more noise)
    output_pc_type: 0

    # [optional, default=2] Number of consecutive accumulated point clouds.
    num_accum: 2

    output_timestamp_hw: true
    timestamp_hw_offset: 0.0

    ros:
        namespace: /exwayz/lidar_decoder

        input_packets:
            topic: /input/topic
            type: exwayz_msgs/msg/Packet
            queue_size: 5000

        output_pointcloud2:
            topic: /pointcloud2
            frame_id: lidar_decoder

    rtmaps:
        pc_buffer_size: 5000
        use_axis_convention: true

lidar_decoder_velodyne:
    vendor: velodyne

    # [optional, default=true] Remove points labeled as artifacts.
    filter_artifacts: true
    # [optional, default=1] Number of consecutive accumulated point clouds.
    num_accum: 1
  
    output_timestamp_hw: true
    timestamp_hw_offset: 0.0

    ros:
        namespace: /exwayz/lidar_decoder

        input_packets:
            topic: /input/topic
            type: exwayz_msgs/msg/Packet
            queue_size: 5000

        output_pointcloud2:
            topic: /pointcloud2
            frame_id: lidar_decoder

    rtmaps:
        pc_buffer_size: 5000
        use_axis_convention: true

Explanation

vendor

output_timestamp_hw

timestamp_hw_offset

API-specific I/O parameters

ros

rtmaps