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
anddevice
timestamps. - Two new fields have been added to the returned point clouds (
return_type
andcolumn
).
General changes
- Sensor
model
andrpm
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
anddevice
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 withvelodyne_driver::VelodyneScan
messages. It is only available as a header and not built by default to avoid ROS-specific dependencies.