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.
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.
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 https://github.com/RightHandRobotics/reflex-sf-ros-pkg.git
4.) Make the package
cd ~/catkin_ws catkin_make
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 calibrate.py
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.
To command the hand, run reflex_sf_hand.py 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 reflex_sf_hand.py
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 rospy.init_node('reflex_sf_dof_tour') pub = rospy.Publisher('/reflex_sf/command', Pose, queue_size=10) # hand open pub.publish(0, 0, 0, 0) rospy.sleep(1) # hand closed in cylindrical power grasp pub.publish(4.5, 4.5, 4.5, 0) rospy.sleep(1) # hand open pub.publish(0, 0, 0, 0) rospy.sleep(1) # preshape hand for pinch pub.publish(0, 0, 0, 2.5) rospy.sleep(1) # pinch grasp pub.publish(3.5, 3.5, 0, 2.5) rospy.sleep(1) # hand open (pinch grasp) pub.publish(0, 0, 0, 2.5) rospy.sleep(1) # hand open (cylindrical grasp) pub.publish(0, 0, 0, 0) rospy.sleep(1)
For support, please contact