[Documentation] [TitleIndex] [WordIndex

laser_drivers: hokuyo_node | sicktoolbox | sicktoolbox_wrapper

Package Summary

A ROS node to provide access to SCIP 2.0-compliant Hokuyo laser range finders (including 04LX).


Supported Hardware

This driver should work with any SCIP 2.0-compliant laser range-finders.

API Stability

The ROS API of this driver should be considered stable.

Parameter Ranges

The UTM-30LX laser can report corrupt data and even crash if settings with an excessive data rate are requested. The following settings are known to work:

Intensity mode off:

Intensity mode on:

Allow Unsafe Settings Option

On the UTM-30LX, unless the ~allow_unsafe_settings option is selected, the hokuyo_node will limit the angular range to values that are known to work. The angular range limit depends on the firmware version, and is proportional to the cluster parameter.

Firmware version

Maximum angular range / cluster (deg)

hokuyo_node version



> 1.1.1



> 1.0.3



> 1.0.3



hokuyo_node is a driver for SCIP 2.0 compliant Hokuyo laser range-finders. This driver was designed primarily for the Hokuyo UTM-30LX, also known as the Hokuyo Top-URG. The driver has been extended to support some SCIP1.0 compliant range-finders such as the URG-04LX. Hokuyo scans are taken in a counter-clockwise direction. Angles are measured counter clockwise with 0 pointing directly forward.

Published Topics

scan (sensor_msgs/LaserScan) diagnostics (diagnostic_msgs/DiagnosticStatus)


~self_test (diagnostic_msgs/SelfTest)


Dynamically Reconfigurable Parameters
See the dynamic_reconfigure package for details on dynamically reconfigurable parameters. ~min_ang (double, default: -π/2) ~max_ang (double, default: π/2) ~intensity (bool, default: false) ~cluster (int, default: 1) ~skip (int, default: 0) ~port (string, default: /dev/ttyACM0) ~calibrate_time (bool, default: true) ~frame_id (string, default: laser) ~time_offset (double, default: 0.0) ~allow_unsafe_settings (bool, default: False)
Read-only parameters
~max_ang_limit (double) ~max_ang_limit (double) ~min_range (double) ~max_range (double)

Parameter interactions

Some parameter settings can cause problems, usually due to speed limitations of the laser's serial interface. For example:

Command-Line Tools

The getID and getFirmwareVersion programs can be used to get information about a hokuyo laser scanner. Each of them can be invoked in a human readable way:

$ rosrun hokuyo_node getID /dev/ttyACM0
Device at /dev/ttyACM0 has ID H0807228

or in a script friendly way:

$ rosrun hokuyo_node getID /dev/ttyACM0 --

If they fail to connect to the device they will retry for about ten seconds before giving up.

Using udev to Give Hokuyos Consistent Device Names

The getID program can be used to get the hardware ID of a Hokuyo device given its port. Combined with udev, this allows a consistent device name to be given to each device, even if the order in which they are plugged in varies. On the PR2 we use the following udev rule:

SUBSYSTEMS=="usb", KERNEL=="ttyACM[0-9]*", ATTRS{manufacturer}=="Hokuyo Data Flex for USB", ATTRS{product}=="URG-Series USB Driver", PROGRAM=="/etc/ros/run.sh hokuyo_node getID %N q", SYMLINK+="sensors/hokuyo_%c"

In this rule, run.sh is a program that sets up the ROS environment:

#!/bin/sh . /etc/ros/setup.sh rosrun $@  This udev rule sets up a device name that is based on the Hokuyo's hardware ID. The PR2 then has a symlink to that name that gets changed if the Hokuyo is replaced:

$ ls -l /etc/ros/sensors/base_hokuyo
lrwxrwxrwx 1 root root 28 2010-01-12 15:53 /etc/ros/sensors/base_hokuyo -> /dev/sensors/hokuyo_H0902620
$ ls -l /dev/sensors/hokuyo_H0902620
lrwxrwxrwx 1 root root 10 2010-04-12 12:34 /dev/sensors/hokuyo_H0902620 -> ../ttyACM1

Communication Protocol Documentation

2011-11-19 12:24