Run Inferencerun-inference.mp4 |
Camera Viewscamera-video.mp4 |
This repository demonstrates how to train an AI robot arm (SO-ARM101) to perform a gum pickup task using Hugging Face's LeRobot framework. The project covers the complete workflow from data collection through teleoperation to training and autonomous execution.
- ๐ฎ Teleoperation: Intuitive leader-follower configuration for demonstration recording
- ๐น Multi-camera System: Dual camera setup with overhead and hand-view perspectives
- ๐ง Imitation Learning: Training with ACT (Action Chunking with Transformers) policy
- ๐ Open Dataset: Publicly available dataset and model on Hugging Face Hub
- Robot: SO-ARM101 (Leader-Follower configuration)
- SO-ARM101 AI Arm Motor Kit Pro - Motor kit from Seeed Studio
- SO-ARM101 3D Printed Parts - 3D printed enclosure from Seeed Studio
- Cameras:
- USB camera (overhead view)
- Intel RealSense D435i (hand view with depth sensing)
- OS: Ubuntu 24.0
- Kernel: Linux-6.14.0-27-generic-x86_64-with-glibc2.39
- Python: 3.10
- GPU: NVIDIA GeForce RTX 4070
# Create a Conda environment for LeRobot
conda create -y -n lerobot python=3.10
conda activate lerobotReference: https://huggingface.co/docs/lerobot/installation
Reference: https://huggingface.co/docs/lerobot/so101
python -m lerobot.calibrate \
--robot.type=so101_follower \
--robot.port=/dev/tty.usbserial_lerobot_follower \
--robot.id=lerobot_follower_armpython -m lerobot.calibrate \
--teleop.type=so101_leader \
--teleop.port=/dev/tty.usbserial_lerobot_leader \
--teleop.id=lerobot_leader_armpython -m lerobot.teleoperate \
--robot.type=so101_follower \
--robot.port=/dev/tty.usbserial_lerobot_follower \
--robot.id=lerobot_follower_arm \
--teleop.type=so101_leader \
--teleop.port=/dev/tty.usbserial_lerobot_leader \
--teleop.id=lerobot_leader_armpython kanata_record.py- Number of episodes: 10
- Episode duration: 20 seconds
- Reset time: 10 seconds between episodes
- Task: Pick up gum and place it on a white plate
python -m lerobot.scripts.train \
--dataset.repo_id=CreatorKanata/gum-pickup-so-arm101 \
--policy.type=act \
--output_dir=outputs/train/act-gum-pickup-so-arm101 \
--job_name=gum-pickup-so-arm101 \
--policy.device=cuda \
--wandb.enable=true \
--policy.repo_id=CreatorKanata/act-gum-pickup-so-arm101python kanata_control.pyWandB Overview: https://wandb.ai/takehide22-hapt-lab-llc/lerobot/overview
Training Charts: https://wandb.ai/takehide22-hapt-lab-llc/lerobot/workspace?nw=nwusertakehide22
- Dataset: CreatorKanata/gum-pickup-so-arm101
- Trained Model: CreatorKanata/act-gum-pickup-so-arm101
gum-pickup-so-arm101/
โโโ kanata_record.py # Data collection script
โโโ kanata_control.py # Inference execution script
โโโ images/ # Documentation images
โ โโโ gum-pickup.jpg
โ โโโ system-structure.jpg
โ โโโ camera-visions.jpg
โ โโโ wandb-overview.png
โ โโโ wandb-train-charts.png
โ โโโ huggingface-*.png
โโโ videos/ # Demo videos
โ โโโ run-inference.mp4
โ โโโ camera-video.mp4
โโโ CLAUDE.md # Guidelines for Claude Code
โโโ README.md # This file
Adjust in the camera_config section of both scripts:
- USB camera index:
index_or_path=6 - RealSense serial number:
serial_number_or_name="841612072123"
NUM_EPISODES: Number of episodes to record/evaluateEPISODE_TIME_SEC: Duration of each episodeRESET_TIME_SEC: Reset time between episodesFPS: Frame rate



