Skip to content

UniBwTAS/velodyne

 
 

Repository files navigation

Overview

Velodyne1 is a collection of ROS2 packages supporting Velodyne high definition 3D LIDARs3.

Warning:

The master branch normally contains code being tested for the next ROS release. It will not always work with every previous release. To check out the source for the most recent release, check out the tag <version> with the highest version number.

The current master branch works with ROS Kinetic and Melodic. CI builds are currently run for Kinetic and Melodic.

Point Fields Explanation

Name Range Definition
x Position on the X-axis of the Target frame (which is the sensor frame if there is no target frame configured).
y Position on the Y-axis of the Target frame (which is the sensor frame if there is no target frame configured).
z Position on the Z-axis of the Target frame (which is the sensor frame if there is no target frame configured).
distance [min_range,max_range] Distance from the sensor origin to the reflecting surface.
time Time of the firing of the point: This is calculated using the timestamp (the timestamp of the first UDP packet in the scan) and the timestamp of the packet that contains the point. The timestamp of the UDP packets corresponds to the time when the packet was received by the UDP-bridge node (ros::Time::now()). The difference between the start time of the scan and the time of the packet is used as the basis to calculate the time between the start of the scan and the time of the reported azimuth for the firing sequence to which the point belongs. This time is then corrected using the timing offsets according to the firing order of the group to which the point's laser belongs. So, this value is just the time difference between when the first UDP of the scan was received (the timestamp of the scan) and when the laser that measured the point was fired. To get the time at which the point was taken, these two values have to be added.
sub_segment from 0 to approx 219000 for 600 RPM Calculated as corrections.laser_ring + calibration_.num_lasers * rotation_segment. This is a legacy from the RTBD world driver. I believe it is an index used to assign a single unique vertical index to each point in a full rotation, ordered according to the ring number.
azimuth [0,36000] Rotation Corrected Azimuth: This means it takes into account the rotation of the sensor during the firing. This is not the azimuth of the fire sequence. It is calculated using the azimuth of the firing sequence, correcting it by considering the azimuth difference between one firing and the next (strong and last) or a packet and the previous (dual and confidence) and the time it takes the sensor to fire the complete 128 lasers. Not all 128 lasers fire at the same time to avoid crosstalk and saturation. There is a specific timing sequence to fire 15 groups of 8 lasers. The correction is done considering this firing order. After this correction, another correction is applied according to the direction of the laser. This information is fixed for each laser and sensor and is in the calibration YAML.
rotation_segment from 0 to approx 1712 for 600 RPM This can be viewed as the column indexes of a deep image. It moves in increments of 1 (remember that a packet does not contain column-wise points; the points in a packet are shifted in this dimension by intervals of 9 units like this: 63, 54, 45, 36, 27, 18, 9, 0. The next 8 points start again at 63, 54, 45, 36, 27, 18, 9, 0, and so on).
firing_bin from 0 to approx 1712 for 600 RPM Calculated as: packet_pos_in_scan * (BLOCKS_PER_PACKET / VLS128_BLOCKS_PER_FIRING_SEQ) + firing_seq_in_package. This represents the number of the firing sequence used to measure the point in the scan.
ring [0,127] Starting with the lowest horizontal angle (pointing to the floor) to the highest (pointing to the sky).
intensity [0,255] Value of the calibrated intensity: Ranges from 0 to 110 for diffuse surfaces and from 110 to 255 for retroreflective surfaces.
laser_id [0,127] ID of the laser in the laser array: This is different from the ring number.
first_return_flag [0,1] 0 if the point is a second return, 1 if it is the first return (see return modes in the manual for an explanation). In LAST and STRONGEST modes, all points are 1.
Confidence* 0-3 Low Confidence
4-5 Medium Confidence
6-7 High Confidence
Confidence determined by SNR and other factors internal to the sensor.
Sun Level* 0 No-Sun Detection
1-3 Range of Sun-Detection
Detection of sun saturation.
Interference* 0 High-Probability Interferer
1 Medium Probability Interferer
2 Low Probability Interferer
3 High Probability Non-interferer Authentic Return
Interference mitigation detection.
Retro Ghost* 0 Not Detected as False Return
1 Detected as False Return
False returns associated with retro firing transitions.
Range Limited* 0 Return Not Limited
1 Return Limited to 16m
Identification of returns that are expected to be limited in range to 16m.
Retro Shadow* 0 Not in Retro Shadow
1 In Shadow of Retro
False returns associated with retro firing transitions not in the shadow of retro.
Drop* 1 Recommend Drop Global recommendation for "dropping" the return based on confidence information.

*Only available in Dual+Confidence return mode.

Packages

No packages published

Languages

  • C++ 78.9%
  • Python 16.3%
  • CMake 4.7%
  • Shell 0.1%