Skip to content

Teaching robot arm SO-ARM101 to automate breakfast tasks using imitation learning - toast handling, plating, and yogurt feeding with custom 3D-printed tools

Notifications You must be signed in to change notification settings

CreatorKanata/future-breakfast-so-arm101

Repository files navigation

๐Ÿž Future Breakfast: Teaching Robot Arm SO-ARM101 to Make Breakfast

Never Make Breakfast Again - Let AI Robot Arm Do It For You!

Hugging Face Models Hugging Face Datasets WandB

๐ŸŽฌ Demo Video

๐ŸŽฏ Overview

Tired of making breakfast every morning? This project demonstrates how to teach a robot arm to automate your entire breakfast routine using custom 3D-printed tools and machine learning. The SO-ARM101 robot arm learns through imitation to:

  • ๐Ÿž Toast Handling: Pick toast from basket and insert into toaster
  • ๐Ÿฝ๏ธ Plating: Retrieve toasted bread and place on plate
  • ๐Ÿฅ„ Yogurt Feeding: Scoop yogurt and feed directly to you

Key Features

  • ๐ŸŽฎ Teleoperation: Leader-follower configuration for intuitive demonstration recording
  • ๐Ÿ”ง Custom End-Effectors: 3D-printed grippers and spoon holders designed for food handling
  • ๐Ÿง  Imitation Learning: Training with ACT (Action Chunking with Transformers) policy
  • ๐Ÿ“Š Open Source: All models, datasets, and CAD files publicly available

๐Ÿ› ๏ธ System Requirements

Hardware

  • Robot: SO-ARM101 (Leader-Follower configuration)
  • Cameras:
    • USB camera (overhead view)
    • Intel RealSense D435i (hand view with depth sensing)
  • 3D Printed Components:
    • Custom gripper for toast handling
    • Spoon holder for yogurt feeding
    • Food-safe materials recommended

Software Environment

  • OS: Ubuntu 24.0
  • Kernel: Linux-6.14.0-27-generic-x86_64-with-glibc2.39
  • Python: 3.10
  • GPU: NVIDIA GeForce RTX 4070
  • Framework: Hugging Face LeRobot

๐Ÿš€ Quick Start

1. Environment Setup

# Create a Conda environment for LeRobot
conda create -y -n lerobot python=3.10
conda activate lerobot

# Install LeRobot
pip install lerobot

2. Robot Arm Calibration

Follower Arm (for execution)

python -m lerobot.calibrate \
  --robot.type=so101_follower \
  --robot.port=/dev/tty.usbserial_lerobot_follower \
  --robot.id=lerobot_follower_arm

Leader Arm (for teleoperation)

python -m lerobot.calibrate \
  --teleop.type=so101_leader \
  --teleop.port=/dev/tty.usbserial_lerobot_leader \
  --teleop.id=lerobot_leader_arm

3. Data Collection

Record demonstrations for each breakfast task:

# Toast insertion task
python breakfast_toast_insertion_record.py

# Toast retrieval and plating
python breakfast_toast_retrieval_plating_record.py

# Yogurt feeding
python breakfast_yogurt_feeding_record.py
  • Episodes per task: 10+
  • Episode duration: 20-30 seconds
  • Reset time: 10 seconds between episodes

4. Model Training

Train separate models for each breakfast task:

# Toast insertion
python -m lerobot.scripts.train \
  --dataset.repo_id=CreatorKanata/breakfast-toast-insertion \
  --policy.type=act \
  --output_dir=outputs/train/act-breakfast-toast-insertion \
  --policy.device=cuda \
  --wandb.enable=true \
  --policy.repo_id=CreatorKanata/act-breakfast-toast-insertion

# Toast retrieval & plating
python -m lerobot.scripts.train \
  --dataset.repo_id=CreatorKanata/breakfast-toast-retrieval-plating \
  --policy.type=act \
  --output_dir=outputs/train/act-breakfast-toast-retrieval-plating \
  --policy.device=cuda \
  --wandb.enable=true \
  --policy.repo_id=CreatorKanata/act-breakfast-toast-retrieval-plating

# Yogurt feeding
python -m lerobot.scripts.train \
  --dataset.repo_id=CreatorKanata/breakfast-yogurt-feeding \
  --policy.type=act \
  --output_dir=outputs/train/act-breakfast-yogurt-feeding \
  --policy.device=cuda \
  --wandb.enable=true \
  --policy.repo_id=CreatorKanata/act-breakfast-yogurt-feeding

5. Run Breakfast Automation

Run each task independently with the trained models:

# Toast insertion
python breakfast_toast_insertion_control.py

# Toast retrieval and plating
python breakfast_toast_retrieval_plating_control.py

# Yogurt feeding
python breakfast_yogurt_feeding_control.py

๐Ÿค— Hugging Face Resources

Trained Models

Training Datasets

Training Experiments (WandB)

๐Ÿ”ง 3D Printing & Custom Tools

End-Effectors

All custom end-effectors are designed for FDM 3D printing:

stls/
โ”œโ”€โ”€ jaw-toast.stl            # Toast gripper jaw component
โ”œโ”€โ”€ roll-toast.stl           # Toast handling roller
โ”œโ”€โ”€ toast-dish.stl           # Dish for toast placement
โ””โ”€โ”€ toast-holder.stl         # Toast holder attachment

Printing Recommendations

  • Material: Food-safe PLA or PETG
  • Layer Height: 0.2mm
  • Infill: 20-30%
  • Support: Required for gripper components

๐Ÿ“ Project Structure

future-breakfast-so-arm101/
โ”œโ”€โ”€ breakfast_toast_insertion_record.py      # Record toast insertion demonstrations
โ”œโ”€โ”€ breakfast_toast_insertion_control.py     # Run toast insertion with trained model
โ”œโ”€โ”€ breakfast_toast_retrieval_plating_record.py   # Record toast retrieval demonstrations
โ”œโ”€โ”€ breakfast_toast_retrieval_plating_control.py  # Run toast retrieval with trained model
โ”œโ”€โ”€ breakfast_yogurt_feeding_record.py       # Record yogurt feeding demonstrations
โ”œโ”€โ”€ breakfast_yogurt_feeding_control.py      # Run yogurt feeding with trained model
โ”œโ”€โ”€ breakfast_test.py                        # Test script for debugging
โ”œโ”€โ”€ stls/                                    # 3D printable components
โ”‚   โ”œโ”€โ”€ jaw-toast.stl                       # Toast gripper jaw
โ”‚   โ”œโ”€โ”€ roll-toast.stl                      # Toast handling roller
โ”‚   โ”œโ”€โ”€ toast-dish.stl                      # Toast placement dish
โ”‚   โ””โ”€โ”€ toast-holder.stl                    # Toast holder attachment
โ”œโ”€โ”€ images/                                  # Documentation images
โ”‚   โ”œโ”€โ”€ future-breakfast.jpg                # Main project image
โ”‚   โ”œโ”€โ”€ toast-insertion.jpg                 # Toast insertion demo
โ”‚   โ”œโ”€โ”€ toast-retrieval-plating.jpg         # Toast retrieval demo
โ”‚   โ”œโ”€โ”€ tongs.jpg                           # Gripper detail
โ”‚   โ””โ”€โ”€ wandb.png                           # Training visualization
โ”œโ”€โ”€ videos/                                  # Demo videos
โ”œโ”€โ”€ docs/                                    # Additional documentation
โ”‚   โ”œโ”€โ”€ youtube.md                          # YouTube video description
โ”‚   โ””โ”€โ”€ gum-README.md                       # Reference project
โ””โ”€โ”€ README.md                                # This file

๐Ÿ”ง Customization

Camera Configuration

Adjust camera settings in the scripts:

camera_config = {
    "usb_camera": {
        "index_or_path": 6,  # Adjust based on your system
    },
    "realsense": {
        "serial_number_or_name": "841612072123",  # Your RealSense serial
    }
}

Task Parameters

  • NUM_EPISODES: Number of episodes to record/evaluate
  • EPISODE_TIME_SEC: Duration of each episode
  • RESET_TIME_SEC: Reset time between episodes
  • FPS: Frame rate (default: 30)

๐Ÿ† Maker Faire Bay Area 2025

This project was created for the Maker Faire Two-Minute Film Festival with the theme "Future Makers." It showcases:

  • Practical AI applications for everyday problems
  • Integration of 3D printing, robotics, and machine learning
  • Open-source collaboration and reproducible research

๐Ÿ“š References

๐Ÿค Contributing

Contributions are welcome! Feel free to:

  • Submit issues or feature requests
  • Share your breakfast automation improvements
  • Add new end-effector designs
  • Contribute to the datasets

๐Ÿ“„ License

This project is open source and available under the MIT License.


Made with โ˜• by a maker who really doesn't like making breakfast

GitHub โ€ข Hugging Face โ€ข WandB

About

Teaching robot arm SO-ARM101 to automate breakfast tasks using imitation learning - toast handling, plating, and yogurt feeding with custom 3D-printed tools

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages