Aloha 2 Gripper on Stretch 3

Hi all, we have an experimental implementation of the Aloha 2 Gripper installed on Stretch 3, and we were also able to do Dex teleop with it. Here are the hardware and software instructions for installing and using the Aloha gripper on a Stretch.

Hardware Setup

The Aloha gripper body could be built using their official build guide.
Additionally, the gripper mount must be installed with the Stretch 3 quick-release compatible mount, which can be 3D-printed using this stl file.

Then, install a long 3-PIN Dynamixel cable from the Gripper Dynamixel motor to the 3-PIN port behind the roll joint.

Software Setup

  1. Uninstall existing Stretch Body
pip3 uninstall hello-robot-stretch-body
  1. Install Stretch Body Locally from the branch feature/aloha_gripper
cd ~/repos
git clone
cd stretch_body
git checkout feature/aloha_gripper
pip3 install -e body/
  1. Configure the Aloha Gripper Dynamixel Motor (XM430-W350)
  • Scan and make sure the gripper Dynamixel Motor is reachable using the tool You will also have to note its current servo ID. A total of 4 servos must be present on the wrist, and the servo IDs 13, 15, and 16 are exclusive to dex wrist joints. /dev/hello-dynamixel-wrist
# Expected Output:
Scanning bus /dev/hello-dynamixel-wrist
Checking ID 0
Checking ID 1
[Dynamixel ID:01] ping Succeeded. Dynamixel model : XM430-W350. Baud 115200  # This is the newly added servo
Checking ID 13
[Dynamixel ID:013] ping Succeeded. Dynamixel model : XC430-W240. Baud 115200
Checking ID 14
Checking ID 15
[Dynamixel ID:015] ping Succeeded. Dynamixel model : XM540-W270. Baud 115200
Checking ID 16
[Dynamixel ID:016] ping Succeeded. Dynamixel model: XM430-W350. Baud 115200
Found 4  servos on bus /dev/hello-dynamixel-wrist
  • Use the tool’’ to set a non-conflicting servo ID for the newly added gripper dynamixel. In our case, we will change the ID from 1 to 17. /dev/hello-dynamixel-wrist 1 17
  1. Configure Parameters
  • All the Aloha gripper parameters are defined within the param dictionary aloha_gripper. You can check out all the pre-defined parameters using the command | grep param.aloha_gripper
  • Set the param robot.tool to eoa_wrist_dw3_aloha_gripper
  • Manually Calibrate the Zero pose and Range parameters of the Gripper
    • This is an essential step for the gripper to function. You will use the tool to note down the internal servo position in ticks while the Gripper is wide open and fully closed. Here are the steps to get the values.
      1. Enter the dynamixel jog cli tool /dev/hello-dynamixel-wrist 17
      2. Enter h show the current homing offset and verify if it is Zero, if not enter o to set it to zero.
      3. Enter d to disable the torque, allowing you to back drive the gripper. Enter j to show the current ticks position of the servo.
      4. Note down the ticks position when the Gripper is fully open and fully closed.
      5. The Zero pose, which is basically the gripper’s homing pose, can be any value between the Fully Open and Fully Closed position ticks, depending on the user’s requirements.
  tool: eoa_wrist_dw3_aloha_gripper
  range_t: [<fully-closed-ticks>, <fully-open-ticks>]
  zero_t: <homing-ticks>

Robot API

As per the current Aloha 2 gripper design, the total rotation range of ~75 deg (1.3 rad) from the servo motor translates to the total linear range of motion of the parallel gripper. By providing radians within this range, you can control the gripper position using the standard Robot API.

from stretch_body.robot import Robot
robot = Robot()

robot.end_of_arm.move_to('aloha_gripper', 0) # Close
robot.end_of_arm.move_to('aloha_gripper', 1.3) # Open

You could also try the gamepad teleop to verify the working of the gripper.

Dex Teleop Setup

For dex teleop you will have to use the branch feature/aloha_gripper in the Stretch Dex Teleop repository.

More Background on Stretch Body software setup for custom grippers