A simplified driver for Velodyne VLP16 (PUCK) based on the official ROS velodyne driver.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
velodyne_puck_driver Change to PLUGINLIB_EXPORT_CLASS Nov 9, 2018



Build Status

Picture of Velodyne Puck

The velodyne_puck package is a linux ROS driver for velodyne puck only of VELODYNE LIDAR. The user manual for the device can be found here or the LTE version here.

The major difference between this driver and the ROS velodyne driver is that the start of each revolution is detected using azimuth.

The package is tested on Ubuntu 14.04 with ROS indigo.


This driver is developed based on ROS velodyne driver, which originally has the BSD license. The COPYING file is kept in this package. However, the changed files have the GNU General Public License V3.0.


This is a Catkin package. Make sure the package is on ROS_PACKAGE_PATH after cloning the package to your workspace. And the normal procedure for compling a catkin package will work.

cd your_work_space
catkin_make --pkg velodyne_puck_driver velodyne_puck_decoder --cmake-args -DCMAKE_BUILD_TYPE=Release

Example Usage



device_ip (string, default:

By default, the IP address of the device is

frame_id (string, default: velodyne)

The frame ID entry for the sent messages.

Published Topics

velodyne_packets (velodyne_puck_msgs/VelodynePuckPacket)

Each message corresponds to a velodyne packet sent by the device through the Ethernet. For more details on the definition of the packet, please refer to the user manual.



min_range (double, 0.3)

max_range (double, 100.0)

Points outside this range will be removed.

frequency (frequency, 20.0)

Note that the driver does not change the frequency of the sensor. If needed, the RPM of the sensor should be set through the brower (see user manual for more details). And the frequency parameter in the launch file should be set accordingly.

publish_point_cloud (bool, false)

If set to true, the decoder will additionally send out a local point cloud consisting of the points in each revolution.

Published Topics

velodyne_sweep (velodyne_puck_msgs/VelodynePuckSweep)

The message arranges the points within each sweep based on its scan index and azimuth.

velodyne_point_cloud (sensor_msgs/PointCloud2)

This is only published when the publish_point_cloud is set to true in the launch file.


roslauch velodyne_puck_decoder velodyne_puck_decoder_nodelet.launch

Note that this launch file launches both the driver and the decoder, which is the only launch file needed to be used.


Bug Report

Prefer to open an issue. You can also send an E-mail to sunke.polyu@gmail.com.