ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

How is tf data handled by velodyne_driver?

asked 2016-07-19 13:28:10 -0500

OMC gravatar image


I am going to use a Velodyne VPL16 along with the velodyne_driver to publish a PoinCloud2 message to ROS.

I have seen that the velodyne_node has the velodyne's frame_id as a parameter and I wanted to know if this is used just to include the frame_id in the header or if any transformation is being performed while the packages are being read from the raw data provided by the actual Velodyne.

Let me explain: if the Velodyne turns at 10Hz, it means that it takes 0.1s to perform a full revolution. If the Velodyne moves at just 20 Km/h (~5.6m/s), by the time it finishes the revolution it will have moved about 0.56m since it started.

So, if points are passed to ROS via the velodyne_points topic after having completed a 360º sweep, what odometry information should I use? The sensor's position at the beginning of the revolution, at the end, in the middle?

That's why I asked if any transformation was being performed by the velodyne_driver to compensate its own displacement.

I think it just reads the relative coordinates and publishes them converted to PointCloud2, but isn't the movement of the Velodyne introducing a big error?

edit retag flag offensive close merge delete

1 Answer

Sort by » oldest newest most voted

answered 2016-07-19 13:50:47 -0500

joq gravatar image

That is a problem, if you wait for a full revolution and transform the whole cloud at once.

That is why the transform nodelet and node exist. It transforms each packet to the odom frame, using the robot's pose at the time that packet was acquired.

edit flag offensive delete link more


I am afraid I did not understand the purpose of the transform nodelet.

So, it will be listening to the /odom frame while velodyne_node is gathering all points and when a full revolution is completed, the transform nodelet will use those transforms to correct the robot's displacement. Is that right?

OMC gravatar image OMC  ( 2016-07-19 15:13:00 -0500 )edit

I have just realised that the velodyne_driver has the option to publish a number of packets per message, I thought it would always send a full revolution. Is this how you suggested transform each single package? I think this would publish each packet into ROS, and I intend to publish 360º at once.

OMC gravatar image OMC  ( 2016-07-20 09:06:21 -0500 )edit

Each packet has its own time stamp, and the velodyne -> odom transform is applied as of that moment.

joq gravatar image joq  ( 2016-07-21 14:32:29 -0500 )edit

Oh, I see! I have just discovered the transform listeners. When I tried to understand the code two days ago I thought the transform was done using just the latest tf and that didn't make sense. Now I imagine the transformpointcloud pcl reads the tf buffer and transforms into /odom.

Thanks a lot.

OMC gravatar image OMC  ( 2016-07-21 16:18:45 -0500 )edit

Question Tools



Asked: 2016-07-19 13:28:10 -0500

Seen: 1,182 times

Last updated: Jul 19 '16