Skip to content

Releases: valgur/velodyne_decoder

v3.0.0

26 Feb 07:31
Compare
Choose a tag to compare

This release significantly improves the ease of use of the library and precise timing info capabilities. Dual-return data is now supported as well.

As a major release, it includes a few breaking changes:

  • All config parameters are now optional and rpm, gps_time have been dropped.
  • Timestamps are now returned as a pair of host and device timestamps.
  • Two new fields have been added to the returned point clouds (return_type and column).

General changes

  • Sensor model and rpm parameters are detected automatically from the data. This means that only the raw data itself is required to use the decoder without any additional configuration parameters.
  • Added support for dual-return data. A return_type field has been added to the decoded points to indicate the type of return: 1 - strongest, 2 - last, 3 - both. This info is also included for single-return data.
  • Added a column field to the points, which provides the index of the column of simultaneous firings relative to the start of the scan.
  • Timestamps are now always returned as a pair of host and device timestamps. This replaces the previous behavior of returning only one based on a config parameter.
  • Added support for parsing of telemetry packets. This provides details about PPS time synchronization status, the time and position of last GNSS message, internal temperatures and more.
  • Precise timing info is now available for all sensor models. All of the logic and parameters related to precise timing info have been thoroughly reviewed to match the official specifications and have been validated against the ground truth dataset provided with VeloView. The existing timing parameters were not modified in the process.
  • Added a correction for a systematic error in the vertical direction for up to 2 cm, dependent on the beam angle. This correction accounts for each laser having a slight vertical offset instead of the previous implicit assumption of them all being located in the optical center. Related to ros-drivers/velodyne#518.
  • Added a cut_angle config parameter – when working with a raw packet stream, if unset (by default), the stream is split into a "scan" every time at least 360 degrees have been covered. If set, the splitting always occurs at the specified azimuth angle instead. Note that the scan might cover less than 360 degrees in this case.
  • Fixed packets at the end of a file not being decoded if they didn't form a complete scan.
  • Improved the efficiency of application of calibration parameters. Most of the parameters were only applicable to the legacy HDL-64E model and are handled on-device in all newer models.
  • The calibration parameters for all models besides HDL-64E are now stored in an embedded database. This allows for easier packaging as a C++ library by avoiding the need to access YAML files.
  • Changes specific to HDL-64E:
    • Added functionality to extract the calibration parameters embedded in a HDL-64E data stream. This is not done automatically and should be run once for each sensor to create a YAML file with the calibration parameters.
    • Improvements to HDL-64E calibration formulas:
      • Corrected the focal offset coefficient being off by 100x. ros-drivers/velodyne#499
      • Fixed two-point correction not being applied for HDL-64E, despite being recommended by the product manual. Related to ros-drivers/velodyne@16be797
      • Fixed two-point correction being applied outside its applicable range.
      • Horizontal and vertical offset corrections are applied at the last step only.
      • The vertical-direction correction now uses the mean of the horizontal-direction corrections as its basis instead of just the x-direction correction. This provides a better agreement with the VeloView ground truth dataset.
    • Note that since HDL-64E does not include model ID info in its packets, the model ID must still be provided for it.
    • Similarly, the calibration parameters for HDL-64E are not standardized and sensor-specific calibration info always needs to be provided.
    • The added precise timing parameters for HDL-64E S1 are only approximate, due to them not being provided by the product manual.
  • Changes specific to Alpha Prime (VLS-128):
    • Account for the precise timing parameters varying depending on the firmware version of the sensor. The correct values are detected automatically from the data.
    • Increased default max range from 130 to 250.
    • Fixed distance_resolution calibration param being hard-coded.

Python-specific changes

  • More robust PCAP parsing. Do not raise an exception for partial packets.
  • Minimum Python version is now 3.8 instead of 3.7.

C++-specific changes

  • Added support for use as a C++ library via Conan, Vcpkg, or as a standalone system library.
  • gsl::span is used for passing data to the decoder, which allows for zero-copy decoding.
  • Renamed PointXYZIRT -> VelodynePoint.
  • Added RosScanBatcher as for use with velodyne_driver::VelodyneScan messages. It is only available as a header and not built by default to avoid ROS-specific dependencies.

v2.3.0

20 Mar 18:49
Compare
Choose a tag to compare
  • VLS-128 has been replaced by Alpha Prime as the model identifier for that sensor, but it will still be accepted for backwards compatibility. (@flopie2009 #1)
  • Removed the broken VLS-128 calibration data file. (@flopie2009 #2)

v2.2.0

10 Dec 17:05
Compare
Choose a tag to compare

Added

  • Added time_range parameter to read_bag() and read_pcap().

Fixed

  • read_bag() no longer closes opened Bag objects passed to it.

v2.1.0

08 Dec 20:15
Compare
Choose a tag to compare

Added

  • read_bag() now optionally also includes frame_id-s from the ROS messages in the returned tuples
    when return_frame_id=True is set.

Fixed

  • Fixed Config("model") constructor not working as expected due to calibration_file missing a default value.
  • Fixed out-of-scope pointer dereferencing in the calibration parser.
  • Fixed a build error on Windows due to yaml-cpp by pinning its version to 0.7.

v2.0.0

11 Nov 15:56
Compare
Choose a tag to compare

Added

  • Support for PCAP file decoding with the read_pcap() function in Python and StreamDecoder in C++.
  • More convenient data extraction from ROS bags with read_bag().
  • Standard calibration info provided by Velodyne is now used by default and config.calibration_file can be left unset
    in most cases.
  • TIMINGS_AVAILABLE was added for details about which models support point timing info. The current list is:
    ['HDL-32E', 'VLP-16', 'VLP-32C', 'VLS-128'].

Changed

  • The decoded scans are now returned as a contiguous float32 NumPy arrays instead of PCL-compatible structs by default.
    You can pass as_pcl_structs=True to the decoding functions for the old behavior.
  • Model ID naming scheme has been updated to better match the typical forms used by Velodyne.

    Before: ['VLP16', '32C', '32E', 'VLS128'].

    After: ['HDL-32E', 'HDL-64E', 'HDL-64E_S2', 'HDL-64E_S3', 'VLP-16', 'VLP-32C', 'VLS-128'].
  • Conversion to NumPy arrays is now done without any unnecessary data copying.

Fixed

  • Fixed a Python 2 ROS message decoding error.

v1.0.1 (and test assets)

19 May 20:41
Compare
Choose a tag to compare
use setup.cfg, include long_description