Carnegie Mellon University
Project Page | arXiV | FACTR | FACTR Teleop
All costs are listed in USD.
Item | Quantity | Cost per Item | Total Cost | Note |
---|---|---|---|---|
Dynamixel XM430-W210-T Servo Motor | 2 | 269.9 | 539.8 | Purchase Link |
Dynamixel XC330-T288-T Servo Motor | 6 | 89.9 | 539.4 | Purchase Link |
U2D2 Control PCB | 1 | 32.1 | 32.1 | Purchase Link |
12V 20A Power Supply | 1 | 24.99 | 24.99 | Purchase Link |
FPX330-S102 Servo Bracket | 1 | 8.7 | 8.7 | Purchase Link |
Servo Idler for XM430 Servos | 2 | 19.58 | 39.16 | Purchase Link |
Servo Idler for XC330 Servos | 1 | 10.78 | 10.78 | Purchase Link |
Polymaker PLA PRO Filament | 1 | 24.99 | 24.99 | Purchase Link |
U2D2 Power Hub Board | 1 | 19.99 | 19.99 | Purchase Link |
14AWG Cable | 1 | 23.99 | 23.99 | Purchase Link |
3/4" Bearing | 1 | 6.99 | 6.99 | Purchase Link |
M2.5×8mm | 8 | N/A | 15.99 | Purchase link |
M2×10mm | 20 | N/A | ||
M2×6mm | 14 | N/A | ||
M2×8mm (Self Tapping) | 24 | N/A | 0 | Comes with Dynamixel XC330-T288-T Servo Motor |
M2×6mm (Self Tapping) | 8 | N/A | ||
M2×4mm | 4 | N/A | 0 | Comes with FPX330-S102 Servo Bracket |
Total | 1279.89 |
The FACTR Teleoperation Franka Leader Arm assembly requires six types of screws:
- Screw A: M2.5 × 8 mm
- Screw B: M2 × 10 mm
- Screw C: M2 × 8 mm (Self-tapping)
- Screw D: M2 × 6 mm (Self-tapping)
- Screw E: M2 × 6 mm
- Screw F: M2 × 4 mm
Note:
- Screws C and D are included with the Dynamixel XC330-T288-T servos.
- Screw F is included with the FPX330-S102 servo bracket.
- Connect the 12V Power Supply to the U2D2 Power Hub Board.
- Connect the U2D2 Control PCB to the U2D2 Power Hub Board.
Note: Alternative ways of supplying power to the U2D2 Control PCB and the servos without using U2D2 Power Hub Board are available. Please refer to here for more methods.
By default, all Dynamixel servos are set to ID 1. To control multiple servos with a single U2D2 controller, each servo must be assigned a unique ID. This assignment should be done one servo at a time, starting with the servo closest to the robot base and progressing up the kinematic chain. Assign IDs sequentially from 1 up to 8, with the gripper trigger servo holding ID 8.
Joint ID | Servo Type |
---|---|
1 | Dynamixel XC330-T288-T |
2 | Dynamixel XM430-W210-T |
3 | Dynamixel XC330-T288-T |
4 | Dynamixel XM430-W210-T |
5 | Dynamixel XC330-T288-T |
6 | Dynamixel XC330-T288-T |
7 | Dynamixel XC330-T288-T |
8 | Dynamixel XC330-T288-T |
- Connect a single servo to the U2D2 Power Hub Board.
- Install and launch the Dynamixel Wizard software.
- Configure the scanning settings:
- In the top menu bar, go to Tools → Options.
- Under "Select port to scan", ensure all ports are selected.
- Under "Select baudrate to scan", choose the correct baudrate. The default is 57600 bps. If unsure, select all available options.
- Under "Set ID range to scan", you can speed up scanning by limiting the range to 0–15, unless the servo might already have an ID outside this range.
- Click the Scan icon (magnifying glass with a gear) in the top-left corner.
- If the servo is found, it will appear in the left panel of the window.
- Select the detected servo from the panel, then click ID found in the middle panel of the window.
- Select the new ID on the right panel of the window and click Save.
- Repeat the above steps for each servo.
The leader arm consists of nine 3D-printed parts. STL files for all components can be found in the /3D_printing_files
directory.
- Material: PLA
- Infill: 20%
To ensure accurate dynamic modeling, each printed part should closely match the specified mass values. These values correspond to the mass values defined in the provided URDF file. This URDF file is used to compute gravity compensation and other dynamics-related calculations.
The table below lists each part, its corresponding STL file, and its reference mass:
Part Name | STL File | Mass (g) |
---|---|---|
Base Link | factr_teleop_franka_base.STL | 150 |
Link 1 | factr_teleop_franka_l1.STL | 31 |
Link 2 | factr_teleop_franka_l2.STL | 19 |
Link 3 | factr_teleop_franka_l3.STL | 29 |
Link 4 | factr_teleop_franka_l4.STL | 28 |
Link 5 | factr_teleop_franka_l5.STL | 25 |
Link 6 | factr_teleop_franka_l6.STL | 12 |
Gripper Handle | factr_teleop_gripper_leader_handle.STL | 21 |
Gripper Trigger | factr_teleop_gripper_trigger.STL | 5 |
3/4" Bearing | N/A | 39 |
Dynamixel XM430-W210-T | N/A | 84 |
Dynamixel XC330-T288-T | N/A | 23 |
Follow the instructions below to assemble the leader arm, starting from the base link and progressing up to the gripper teleoperation device.
Secure the U2D2 Power Hub Board on the Base Link and insert the Bearing as follows.
Slide Servo 1 such that its servo horn is concentric with the Bearing.
On the under-side of the Base Link, secure Servo 1 with four Screw B screws. Connect Servo 1 to the U2D2 Power Hub Board.
Insert Link 1 fully into the bearing hole. Secure Link 1 onto the servo horn of Servo 1 using four Screw C screws.
Secure Servo 2 onto Link 1 using four Screw A screws. Connect Servo 2 to the U2D2 Power Hub Board.
Note: For the purpose of this assembly tutorial, ensure the orientation of Servo 2 matches that of the provided images, where the side of the servo horn is facing the viewer. On the other side of Servo 2, also ensure that Servo 2's idler is installed.
Slide Link 2 onto the servo horn of Servo 2 and secure it via seven Screw E screws.
Secure Servo 3 onto Link 2 with four Screw B screws. Connect Servo 3 to Servo 2.
Note: Please ensure the orientation of the servo matches the image shown below.
Secure Link 3 onto the servo horn of Servo 3 using four Screw C screws.
Note: If you choose to increase the force-feedback gain to enhance the force-feedback sensation, consider replacing Servo 3's plastic servo horn to a metal version. The default plastic horn may be prone to failure under higher loads.
Secure Servo 4 onto Link 3 using four Screw A screws. Ensure Servo 4's idler is installed. Connect Servo 4 to Servo 3.
Note: Please ensure the orientation of the servo matches the image shown below, with the side of te servo horn facing the viewer.
Slide Link 4 onto the servo horn of Servo 4 and secure it via seven Screw E screws.
Secure Servo 5 onto the Link 4 using four Screw B screws. Connect Servo 5 to Servo 4.
Secure Link 5 onto the servo horn of Servo 5 using four Screw C screws.
Secure Servo 6 onto Link 5 Using four Screw B screws. Install Servo 6's idler. Connect Servo 6 to Servo 5.
Note: Please ensure the orientation of the servo matches the image shown below, with the side of te servo horn facing the viewer and its idler facing away from the viewer.
Slide Link 6 onto the servo horn of Servo 6 and secure it using eight Screw D screws.
Secure Servo 7 onto Link 6 using four Screw B screws. Connect Servo 7 to Servo 6.
Secure Servo Bracket onto the servo horn of Servo 7 using four Screw F screws.
Secure Gripper Handle onto Servo Bracket using four Screw C screws.
Slide Servo 8 into Gripper Handle and secure it from the back using four Screw C screws. Connect Servo 8 to Servo 7.
Secure Gripper Trigger onto the servo horn of Servo 8 using four Screw C screws.
Note: The gripper teleoperation leader presented here is a simplified and lighter update of the version shown in the figures of the paper.
This source code is licensed under the Apache 2.0 liscence found in the LICENSE file in the root directory of this repository.
Special thanks to the GELLO project for serving as a source of inspiration for this work.
If you find this project useful, feel free to cite our work!
@article{factr,
title={FACTR: Force-Attending Curriculum Training for Contact-Rich Policy Learning},
author={Liu, Jason Jingzhou and Li, Yulong and Shaw, Kenneth and Tao, Tony and Salakhutdinov, Ruslan and Pathak, Deepak},
journal={arXiv preprint arXiv:2502.17432},
year={2025}
}