[Documentation] [TitleIndex] [WordIndex

  Show EOL distros: 

Package Summary

Unofficial driver and ROS node for Razer Hydra

Package Summary

Unofficial driver and ROS node for Razer Hydra

Package Summary

Unofficial driver and ROS node for Razer Hydra

  • Maintainer status: maintained
  • Maintainer: Adam Leeper <adamleeper AT gmail DOT com>
  • Author: Adam Leeper
  • License: Public Domain



This package provides an unofficial, open-source driver for the Sixense Razer Hydra Controller. The driver opens a connection to the device using /dev/hidraw*, a feature of Linux kernel 3.0.0+. A ROS node opens the device and publishes custom messages with the state of the buttons, joysticks, and 3D poses.

Please report bugs and request features on the github issue tracker: https://github.com/aleeper/razer_hydra_ros/issues

Supported Distributions

This package has been tested on Ubuntu Precise 12.04. Based on the hidraw interface in use, it should also work with Ubuntu Oneiric 11.10; verification would be appreciated.


Install the udev rules for the Razer Hydra by running the configure script in the razer_hydra directory:

roscd razer_hydra

Then launch the device node:

roslaunch razer_hydra hydra.launch publish_tf:=true/false

You can check if things are working either by looking at the TF tree in Rviz, or by doing:

rostopic echo /hydra_calib

Frames and Offsets

The default frame location for the Razer Hydra (at least, as reported raw over USB) seems to be far back along the paddles, behind where the cord attaches to each paddle. This leads to un-intuitive motion.

To correct for this, two frames are computed from the transform reported by the hydra driver, a "pivot" frame and a "grab" frame. Parameters can be specified to define a translation to each frame from the raw frame along the local coordinate axes. Another parameter specifies which of the two frames should be used in the hydra messages.

An appropriate offset will be dependent on each user (e.g. size of hands and how the paddles are held) as well as the interaction paradigm that the hydra paddles represent and the resulting location of a virtual center-of-rotation (e.g. imagining the paddles are at the wrist of a long end-effector, vs. imagining that the point under the joystick is a "grab point" for manipulating objects, etc.).

(Note: The existence of two frames is useful for debugging while looking at the tf tree. Otherwise, it would be sufficient to just have a single offset frame.)


The raw position data for the hydra is rather jittery. To overcome this, a low-pass biquad filter is used on position, and a low-pass one-pole filter is used on the orientation.

The corner/cutoff frequency for the filters is specified at launch, with a default value of 2.5 Hz.

roslaunch razer_hydra hydra.launch corner_hz:=2.5



Driver node for Razer Hydra controller.

Published Topics

hydra_calib (razer_hydra/Hydra) hydra_raw (razer_hydra/HydraRaw) hydra_joy (sensor_msgs/Joy)


~device (string, default: /dev/hydra) ~publish_tf (bool, default: false) ~polling_ms (int, default: 10) ~corner_hz (double, default: 2.5) ~use_grab_frame (bool, default: false) ~px,py,pz (double, default: 0) ~gx,gy,gz (double, default: 0)

2020-01-25 13:02