Reporting bugs

ROS Nodes and Nodelets


The height map nodelet reads point cloud data, publishing detected obstacles and clear space. The velodyne_pointcloud/TransformNodelet publishes data in the appropriate format.

Subscribed Topics

velodyne_points (sensor_msgs/PointCloud2)
  • 3D data points.

Published Topics

velodyne_obstacles (sensor_msgs/PointCloud2)
  • Points belonging to detected obstacles.
velodyne_clear (sensor_msgs/PointCloud2)
  • Clear space: grid squares containing laser returns and no obstacle.


cell_size (double, default: 0.5)
  • Grid cell size (meters).
full_clouds (bool, default: false)
  • Normally, height map only publishes one obstacle or clear point for each cell, significantly reducing output bandwidth while providing the information needed for most 2D navigation. When true, publish all obstacle and clear points.
grid_dimensions (int, default: 320)
  • Number of grid cells in both the X and Y dimensions.
height_threshold (double, default: 0.25)
  • Minimum height difference that counts as an obstacle (meters).


Start the height map nodelet in a separate process. Running as a standalone nodelet prevents zero-copy message sharing.

$ rosrun nodelet nodelet standalone velodyne_height_map/HeightMapNodelet

This launch file runs the height map nodelet in the same process with the Velodyne device driver and a velodyne_pointcloud nodelet which publishes the points transformed into the "/odom" frame. This approach minimizes data copying.


  <!-- start nodelet manager and driver nodelets -->
  <include file="$(find velodyne_driver)/launch/nodelet_manager.launch">
    <arg name="pcap"
           value="$(find velodyne_pointcloud)/tests/class.pcap"/>

  <!-- start transform nodelet using test calibration file -->
  <include file="$(find velodyne_pointcloud)/launch/transform_nodelet.launch">
    <arg name="calibration"
         value="$(find velodyne_pointcloud)/tests/angles.config"/>

  <!-- start heightmap nodelet -->
  <include file="$(find velodyne_height_map)/launch/heightmap_nodelet.launch"/>



The height map node works exactly like the HeightMapNodelet, running as a separate ROS node. All topics and parameters are identical.


Run the height map algorithm as a separate node.

$ rosrun velodyne_height_map heightmap_node

Run the node with a 100x100 grid of 10cm cells.

$ rosrun velodyne_height_map heightmap_node _grid_dimensions:=100 _cell_size:=0.1

Run the node with anything more than 5cm high considered an obstacle.

$ rosrun velodyne_height_map heightmap_node _height_threshold:=0.05

Wiki: velodyne_height_map (last edited 2013-05-20 22:15:21 by JackOQuin)