Skip to content

ReactorX Wrist

image

Reactor X Wrist

Created by: Hello Robot Inc

Here we describe how to modify an Interbotx ReactorX 150 Dynamixel arm to add a Pitch-Roll wrist plus parallel jaw gripper to Stretch, giving you a Yaw-Pitch-Roll wrist!

The ReactorX 150 comes standard with Dynamixel XM430-W350-T servos for the shoulder joints and XL430-W250-T servos for its wrist and gripper. We're going to disassemble the arm and then rebuild it so that the Pitch and Roll DOF use the stronger XM430-W350-T servos.

View the 3D assembly

image

image

Parts List

Item Qty Vendor
ReactorX 150 Robot Arm 1 Trossen Robotics
Robotis FR12-S101K Frame 1 Robotis
M2x4mm SHCS 10 McMaster Carr

Wrist Build

image

Start with a ReactorX 150

image

Detach the the wrist unit from the arm. This includes the final pitch / roll /gripper DOFs with the XL430 servos.

image

Remove the XM430 servos from the shoulder of the arm. The XM430s have the metal horns as shown.

image

No replace the pitch and roll servos with the XM430s. Pay attention to how the cables route and which ports they plug into so you can recable the wrist correctly.

To attach the two side plates to the pitch servo (above, right), you'll want to use the shorter M2x4mm screws. The ones that came off of the XL430s are too long and will cause the servo to bind up if used.

image

Recable the servos and attach the pitch and roll joints to the gripper. You're done!

Other Modifications

The FR12-S101K frame doesn't allow a X-Series TTL connector to pass through by default. You will need to drill out one of the 8mm holes on a drill press to 10mm. This will allow the cable routing to go through the center of Wrist Yaw rotation (recommended)

Dynamixel Configuration

The Dynamixel servos that come with the Reactor arm need to be reprogrammed with the correct IDs and baudrate. Out of the box, the Reactor servos use a baudrate of 1Mbps while Stretch requires 115200Kbps. To reconfigure the servos:

  1. Download and install the Dynamixel Wizard 2.0 from Robotis
  2. Attach your 3 DOF gripper-wrist to a PC using a U2D2 adapter from Robotis
  3. Launch the Wizard and click Scan. It should identify the three servos.
  4. Select each servo from the left hand drop down menu and set its baudrate and ID. Hit save.

By convention we use Dynamixel IDs of:

  • Wrist PITCH: 14
  • Wrist ROLL: 15
  • Gripper: 16

image

Assembly instructions

image

image

Now attach your wrist to the Stretch tool plate using the Robotis Frame and their provided hardware, as shown above.

Code

You're ready to start using your wrist. Once it is plugged into the robot you will want to:

Install Stretch Tool Share

>>$ pip install -U hello-robot-stretch-tool-share

Backup User YAML

$ cd $HELLO_FLEET_PATH/$HELLO_FLEET_ID
$ cp stretch_user_params.yaml stretch_user_params.yaml.bak

Update User YAML

   robot:
     tool: tool_reactor_wrist
     params: ['stretch_tool_share.reactorx_wrist_v1.params']
   lift:
     i_feedforward: 0.75
   hello-motor-lift:
     gains:
       i_safety_feedforward: 0.75

Set the Baud Rate

The default YAML for the Reactor wrist is set to 115200. Your robot may be running at 57600.

You can check the current baud settings by:

>>$ stretch_params.py | grep baud
stretch_body.robot_params.nominal_params   param.end_of_arm.baud                                                  115200                        
stretch_body.robot_params.nominal_params   param.head.baud                                                        115200                        
stretch_body.robot_params.nominal_params   param.head_pan.baud                                                    115200                        
stretch_body.robot_params.nominal_params   param.head_tilt.baud                                                   115200                        
stretch_body.robot_params.nominal_params   param.stretch_gripper.baud                                             115200                        
stretch_body.robot_params.nominal_params   param.tool_none.baud                                                   115200                        
stretch_body.robot_params.nominal_params   param.tool_stretch_gripper.baud                                        115200                        
stretch_body.robot_params.nominal_params   param.wrist_yaw.baud                                                   115200  

You can change the baud for a joint (eg ID 15)

>>$ REx_dynamixel_set_baud.py /dev/hello-dynamixel-wrist 15 115200

Ensure that all baud rates are at 115200 for the end-of-arm (IDs 13, 14, 15, 16)

Jog the Wrist

Try out the jog tool

>>$ reactor_wrist_jog.py

Important Notes

With the release of the Stretch Dex Wrist, the Reactor Wrist build is not being actively supported by Hello Robot. Parameters describing the range of motion of the wrist pitch, roll, and gripper were most recently updated by Kavya Puthuveetil from RCHI Lab @ CMU for an independent research project using the Reactor X Wrist in September 2022. As a result, these values may not match the convention used for other end of arm tools in Stretch Tool Share created by Hello Robot. We provide visualizations of the updated range of motion and zero position of each joint here for your reference.

Wrist Pitch

image Pitch Angle = 0 → Pitch Angle = π/2

Wrist Roll

image Roll Angle = 0 → Roll Angle = π

image Roll Angle = 0 → Roll Angle = -π

Gripper

image Gripper Angle = π/2 → Gripper Angle = 0

Example: All Joints Zeroed

image Pitch, Roll, Gripper Angle = 0

Modifying Reactor X Wrist Parameters

To customize the range of motion or zero position of any of the gripper joints for your own application, you can modify the 'range_t' and 'zero_t' parameters, respectively, defined in stretch_tool_share/python/stretch_tool_share/reactorx_wrist_v1/params.py.

Note that your changes will not be applied unless you override the system version of the Python package hello-robot-stretch-tool-share with a local install. To do this, execute the file stretch_tool_share/python/local_install.sh by navigating to the stretch_tool_share/python directory and running:

./ local_install.sh