Only released in EOL distros:  

hrl_hardware_drivers: force_torque | hrl_hokuyo | hrl_segway_omni | hrl_tilting_hokuyo | pan_tilt_robotis | phantom_omni | robotis | zenither

Package Summary

ROS Node for Sensable Phantom Omni devices.

  • Author: Hai Nguyen, Marc Killpack, Chi-Hung King, Advisor: Prof. Charlie Kemp, Lab: Healthcare Robotics Lab at Georgia Tech
  • License: new BSD
  • Source: git (branch: master)

Note: this package doesn't seem to have been updated in several years. For a Catkinized Groovy-compatible fork, see


  • Phantom Omni device.
  • OpenHaptics SDK (download here)


Installing the OpenHaptics SDK

The script is provided as a convenient way to install the SDK. However, as of Ubuntu 10.10, this script no longer works (see notes below), so it's recommended that you install the SDK manually.

If you want to use the script anyway, place the downloaded SDK into the phantom_omni package:

mv `rospack find phantom_omni`/

Launch the installation script:

roscd phantom_omni

Compiling and Starting

Make and run the omni node with:

rosmake phantom_omni
rosrun phantom_omni omni


  • 64-bit installation: you will need to edit and replace instances of '32-bit' with '64-bit' and 'i386' with 'amd64' (someone should update this script so that the platform architecture is detected automatically). Additionally, you may get an error about missing libHD libraries when trying to run the omni node. I think this is because OpenHaptics oddly installs libraries to /usr/lib64. I think the best way to solve this is to create a file /etc/ with the line '/usr/lib64' and then run ldconfig.

  • Ubuntu versions 11.04 and later: Ubuntu no longer uses raw1394, so you cannot use the OpenHaptics v3.0 drivers out of the box. Until v3.1 is released, you have two options:

    1. (recommended) Replace the drivers with the unstable "JUJU" drivers that are available in the DSC forums.
    2. Create a "dummy" raw1394 module according to this HowTo article. One consequence of this is that the script will fail. Instead of using this script, follow the instructions at to permanently set permissions.

  • Drift: the Omni's pose will drift from time to time, to correct for this restart the node with the stylus outside the calibration well, then place the stylus in when prompted.

  • Device not found errors

    • This can happen if your Omni is not paired with your computer fix by running /usr/sbin/PHANToMConfiguration again.
    • You might not have access to /dev/raw1394 to fix execute
  • Using more than one device on one Linux machine: currently, the Linux Omni driver is restricted to operating on only one device at a time. To use two devices (i.e. for controller a humanoid robot), you will need two different machines. It's a good thing that ROS is around : )



In the below, replace OMNI_NAME with the appropriate value set for the parameter ~omni_name (defaults to omni1)

Subscribed Topics

OMNI_NAME_force_feedback (geometry_msgs/Wrench)
  • A wrench in the OMNI_NAME_sensable frame to play back on the Omni.

Published Topics

tf (tf/tfMessage)
  • OMNI_NAME_link0, OMNI_NAME_link6, and OMNI_NAME_sensable
OMNI_NAME_button (phantom_omni/PhantomButtonEvent)
  • State of the Phantom Omni's buttons.
OMNI_NAME_pose (geometry_msgs/PoseStamped)
  • A static point representing the tip of the Omni end-effector. Note that this point is being published in the frame defined by link6 so a TF will be needed to get the end-effector pose wrt to link0.


~omni_name (string, default: omni1)
  • Name for this omni device.

Wiki: phantom_omni (last edited 2013-06-19 20:00:32 by DanePowell)