Ask Your Question

Gabor Meszaros's profile - activity

2019-07-05 16:46:13 -0500 received badge  Good Question (source)
2017-03-21 16:31:56 -0500 received badge  Nice Question (source)
2014-09-04 20:15:30 -0500 received badge  Famous Question (source)
2013-11-03 05:48:21 -0500 received badge  Famous Question (source)
2013-10-13 05:13:56 -0500 received badge  Notable Question (source)
2013-08-09 01:03:08 -0500 received badge  Notable Question (source)
2013-08-07 01:32:39 -0500 received badge  Popular Question (source)
2013-08-03 21:33:09 -0500 asked a question LiDAR - IMU data synchronizarion

We have a Velodyne HDL-64E S2.1 LiDAR which sends its data with GPS time stamps. We have to transform this LiDAR data according to the data we get from an IMU.

In the Velodyne driver there is a transformation node that uses a published tf data to perform this transformation. My question is how can you synchronize this two data stream? We would like to process it offline, after the recording. We cannot start the two node exactly in the same time and even than the recorded/logged data may started in slightly different time.

Thank you!


We had a discussion with Jack O'Quin about this on his velodyne_driver's issue page. We continued it on the ROS drivers SIG mailing list. If you know something about time synchronization or if you have experience in Phase-locked loop implementation ,please join us.

2013-07-28 22:10:57 -0500 received badge  Popular Question (source)
2013-07-25 01:06:51 -0500 commented answer What is the base frame in velodyne's transform_nodelet?

Thank you, it works now. I also had to fix something in the code. I will create a patch as soon as possible. Update: Fixed.

2013-07-24 03:18:13 -0500 asked a question What is the base frame in velodyne's transform_nodelet?

I would like to transform the Velodyne LIDAR data before publishing it as a point cloud.

If I understand correctly the purpose of TransformNodelet in velodyne package is exactly this. In order to perform this transformation I have to publish a new frame that will be used by the TransformNodelet. For example:

rosrun tf static_transform_publisher 0.0 0.0 0.0 1.0 1.0 1.0 1.0 /what_is_this /my_frame 500

My problem is I do not know what is the base frame. Do anybody know what is its name?

2013-07-21 21:29:58 -0500 received badge  Famous Question (source)
2013-07-17 23:46:05 -0500 commented answer Packet rate of Velodyne HDL-64E in velodyne_driver

Sure, I can give it to you. I have a question about the patch, but I will ask it on the issue's github page. Thank you!

2013-07-17 23:41:38 -0500 received badge  Scholar (source)
2013-07-17 23:41:06 -0500 received badge  Supporter (source)
2013-07-17 22:51:55 -0500 received badge  Notable Question (source)
2013-07-17 07:31:12 -0500 received badge  Popular Question (source)
2013-07-17 04:09:25 -0500 received badge  Nice Question (source)
2013-07-17 03:13:30 -0500 received badge  Editor (source)
2013-07-17 03:13:30 -0500 edited question Packet rate of Velodyne HDL-64E in velodyne_driver

Hi Everyone,

I am trying to understand the velodyne_driver code where I found the following:

// get model name, validate string, determine packet rate
private_nh.param("model", config_.model, std::string("64E"));
double packet_rate;                   // packet frequency (Hz)
if (config_.model == "64E")
    packet_rate = 2600.0;
else if (config_.model == "32E")
    packet_rate = 1808.0;
    ROS_ERROR_STREAM("unknown Velodyne LIDAR model: " << config_.model);
    packet_rate = 2600.0;

I did not know why the packet rate is 2600 so I checked the Velodyne HDL-64E manual and it writes:

Data Packet Construction

The HDL-64E S2 outputs UDP Ethernet packets. Each packet contains a data payload of 1206 bytes that consists of 12 blocks of 100-byte firing data followed by six bytes at the end of each packet that contains a spin counter and firmware version information. Each packet can be for either the upper or lower laser banks (called “laser blocks”) - each bank contains 32 lasers.

The packet format is as follows:

  • 2 bytes of header info. This header indicates whether the packet is for the upper block or the lower block. The upper block will have a header of 0xEEFF and the lower block will have a header of 0xDDFF.
  • 2 bytes of rotational info. This is an integer between 0 and
    1. Divide this number by 100 to get degrees from 0.
  • 32 laser returns broken into 3 bytes each. Each return contains two bytes of distance information in .2 centimeter [2mm] increments, and one byte of intensity information (0 – 255, with 255 being the most intense return). A zero distance value within the data packet indicates there are no returns up to 120 meters, the maximum range of the device.


The HDL-64E S2 can spin at rates ranging from 300 RPM (5 Hz) to 900 RPM (15 Hz). The default is 600 RPM (10 Hz). Note that changing the spin rate does not change the data rate - the unit will send out the same number of packets (at a rate of 1.3 million data points per second) regardless of spin rate. The image resolution will increase or decrease depending on rotation speed.

And also this:

20,833 points per second, per laser x 64 = 1,333,312 total points per second therefore, the HDL-64E S2 generates greater than 1.3 million points per second.

So, according the the manual:

  • Each packet contains a data payload of 1206 bytes that consists of 12 blocks of 100-byte firing data
  • Each firing data contains 32 laser returns
  • In 1 second the device generates 1 333 312 points.

It means 1 packet contains 384 laser returns therefore the packet rate should be about 3472.

Do I misunderstand something?

Update: Thanks joq! I read both the 64E and the 64E S2 manuals and you are right, they generate different number of point per second. The 64E one generates 1 000 000 points per second meanwhile the 64E S2 generates the mentioned 1 333 312 points per second.

In case of 64E's 1 000 000 points the calculated ... (more)

2013-07-15 05:14:05 -0500 received badge  Student (source)