Reflex SF

The ReFlex SF provides a simple interface to the passive mechanics behind i-HY, in a package that is designed to be easy to install and easy to interface.

The system consists of: a 3D-printed palm filled with Dynamixel servos, a palm, three compliant fingers, an interface circuit board, and a basic software driver to publish motor commands and read sensor values. It does not provide joint encoders or tactile sensors, but provides direct USB access to the dynamixel servos using the standard ROS packages.


Buy it with a mounting kit that includes everything you need to get up and running quickly.

For inquiries, please contact

Mounting on Robot


The hand connects to the robot with a mounting plate — designs are provided for a number of the most popular research platforms including the UR5 and the Baxter Robot.

Baxter - reflex_baxter_interfaceplate.stl
UR5 - reflex_ur5_interfaceplate.stl

1.) Screw the adaptor plate to the arm.


2.) Remove the backshell by unscrewing the bolt in the center of the palm. Ground yourself first to avoid static discharge.


3.) Screw the backshell to the adaptor plate using the three included bolts


4.) Thread the USB interface cable and the power supply through the backshell and plug them into the circuitboard. Attach the USB cable and power supply to the arm, being sure to leave enough slack for full range of motion (for the Baxter, the air hose mounting points work conveniently).

5.) Re-attach the hand to the backshell (be careful not to pinch any wires), and re-tighten the single central bolt that holds it on.

Installing Software

1.) Install the ROS dynamixel-controllers package

sudo apt-get install ros-indigo-dynamixel-controllers

2.) On your host machine, create a catkin workspace if you do not already have one, say ~/catkin_ws

3.) Clone the ReFlex SF github repository into the 'src' folder

cd ~/catkin_ws/src
git clone

4.) Make the package

cd ~/catkin_ws

We don't yet provide a standalone URDF, but some customers find the version from the ReFlex Beta helpful:

Operating the ReFlex SF

First, launch the motor controllers. Running reflex_sf.launch starts the dynamixel-controllers for each motor, starts topics for motor states, and creates subscribers for each topic position. By publishing commands to the motor subscribers the motors are driven.

roslaunch reflex_sf reflex_sf.launch

Naming: f1 corresponds to the right-hand index finger, f2 corresponds to the right-hand middle finger, and f3 corresponds to the thumb. Preshape controls the opposition of the two fingers.


Before commanding the fingers to any positions, calibrate the tendon positions. Calibration reads the current position of the motors, allows you to adjust them from the terminal, and stores the finger position in a yaml file as the reference "zero" point. Note this must be done for each individual hand, and must be repeated if the tendons are changed or stretch.

After reflex_sf.launch is run, in a new terminal run the calibrate script

rosrun reflex_sf

The calibrate script will prompt you to adjust the position of each motor using the keyboard and will then exit. The hand is now ready to run.

Commanding Positions

To command the hand, run script. This script sets up subscribers
that will wait for you to give them commands and will move the motors when commanded.

rosrun reflex_sf

For the fingers, 0 corresponds to completely open, and completely closed is approximately 4.

For the preshape motor, 0 corresponds to fingers parallel (cylindrical power grasp configuration), and 2.5 corresponds to antiparallel (two-finger pinch configuration).

You can now command them either by command line:

rostopic pub /reflex_sf/command reflex_sf_msgs/SFPose 3.1 3.1 3.1 0.

or inside a script:

import rospy
from reflex_sf_msgs.msg import Pose
pub = rospy.Publisher('/reflex_sf/command', Pose, queue_size=10)
# hand open
pub.publish(0, 0, 0, 0)
# hand closed in cylindrical power grasp
pub.publish(4.5, 4.5, 4.5, 0)
# hand open
pub.publish(0, 0, 0, 0)
# preshape hand for pinch
pub.publish(0, 0, 0, 2.5)
# pinch grasp
pub.publish(3.5, 3.5, 0, 2.5)
# hand open (pinch grasp)
pub.publish(0, 0, 0, 2.5)
# hand open (cylindrical grasp)
pub.publish(0, 0, 0, 0)

For support, please contact

RightHand Robotics Inc (c) 2014