Instructions to use Juxi-Technology/soarm_amazing_hand_act with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use Juxi-Technology/soarm_amazing_hand_act with LeRobot:
- Notebooks
- Google Colab
- Kaggle
SO-ARM101 + AmazingHand β ACT Grasping Policy
An ACT (Action Chunking Transformer) imitation-learning policy trained on an SO-ARM101 follower arm equipped with an AmazingHand dexterous hand, performing a cube pick-up task.
Hardware
| Component | Model | Notes |
|---|---|---|
| Follower arm | SO-ARM101 | 5 Γ STS3215 (IDs 1β5); original gripper servo #6 removed |
| End-effector | AmazingHand | 8 Γ SCS0009 (IDs 1β8); dedicated serial port + separate power supply |
| Leader arm | SO-ARM101 | Full 6 servos; servo #6 (gripper) drives the hand's open/close |
| Cameras | 2 Γ USB camera | top (overhead) + wrist, 640Γ480 @ 30 fps |
Implementation notes: The hand is driven through
rustypot(Scs0009PyController) rather than lerobot's Feetech bus β SCS0009 (protocol 1) and STS3215 (protocol 0) cannot share a bus. The leader gripper position is mapped linearly onto the hand's open/close pose.
Training Data
- Dataset:
Juxi-Technology/soarm_amazing_hand_pick - 20 teleoperated demonstrations, 18,538 frames, 30 fps
- Task:
Pick up the cube with the dexterous hand - The cube was recorded at 4 different table positions, 5 episodes each, to cover positional variation
Training Details
| Setting | Value |
|---|---|
| Policy | ACT |
| Steps | 60,000 |
| Batch size | 8 |
| Optimizer | AdamW, lr 1e-5, weight decay 1e-4, grad clip 10.0 |
| Vision backbone | ResNet-18 (ImageNet pretrained) |
| chunk_size / n_action_steps | 100 / 100 |
| Inputs | observation.state (6) + 2 RGB images |
| Output | action (6) |
Joint order (6-dim):
shoulder_pan.pos, shoulder_lift.pos, elbow_flex.pos, wrist_flex.pos, wrist_roll.pos, gripper.pos
gripper.posis a virtual dimension β the leader gripper opening, mapped to the hand's grasp pose.
Usage
Requires an environment matching this project (a customized lerobot that includes the so_amazing_hand robot definition):
pip install -e ".[amazinghand,training]"
lerobot-rollout \
--strategy.type=base \
--policy.path=Juxi-Technology/soarm_amazing_hand_act \
--device=cuda \
--robot.type=so101_amazing_hand \
--robot.port=<follower-port> \
--robot.hand_port=<hand-port> \
--robot.id=amazing_hand_follower \
--robot.cameras='{
top: {type: opencv, index_or_path: <top-camera-index>, width: 640, height: 480, fps: 30},
wrist: {type: opencv, index_or_path: <wrist-camera-index>, width: 640, height: 480, fps: 30}
}' \
--task="Pick up the cube with the dexterous hand" \
--duration=60
Preconditions:
--taskmust match the trainingsingle_taskstring exactly- Camera names and index order must match training
- The robot must already be calibrated (
hand_angles.json, per-joint arm calibration files) - The hand must be on its own serial port with an independent power supply
Limitations
- Limited positional generalization: performs well near the 4 recorded cube positions; success rate drops noticeably elsewhere
- Single-shot policy: does not loop autonomously after completing a grasp β the object and the arm must be reset manually
- Environment sensitive: collected under a single scene and lighting condition; changes to camera pose, lighting, or background degrade performance
- GPU deployment required: CPU inference runs at ~4 Hz (against a 30 Hz target), making motion visibly slow β use an NVIDIA GPU (
--device=cuda)
Related
- LeRobot β training and deployment framework
- SO-ARM101 β open-source 6-DoF robotic arm
- AmazingHand β open-source dexterous hand
- Downloads last month
- 21