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
- ๐ฎ 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
- 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
- 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
# Create a Conda environment for LeRobot
conda create -y -n lerobot python=3.10
conda activate lerobot
# Install LeRobot
pip install lerobot
python -m lerobot.calibrate \
--robot.type=so101_follower \
--robot.port=/dev/tty.usbserial_lerobot_follower \
--robot.id=lerobot_follower_arm
python -m lerobot.calibrate \
--teleop.type=so101_leader \
--teleop.port=/dev/tty.usbserial_lerobot_leader \
--teleop.id=lerobot_leader_arm
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
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
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
- ๐ Toast Insertion Model
- ๐ฝ๏ธ Toast Retrieval & Plating Model
- ๐ฅ Yogurt Feeding Model
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
- Material: Food-safe PLA or PETG
- Layer Height: 0.2mm
- Infill: 20-30%
- Support: Required for gripper components
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
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
}
}
NUM_EPISODES
: Number of episodes to record/evaluateEPISODE_TIME_SEC
: Duration of each episodeRESET_TIME_SEC
: Reset time between episodesFPS
: Frame rate (default: 30)
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
- Hugging Face LeRobot Documentation
- SO-ARM101 Documentation
- Seeed Studio SO-ARM101 Wiki
- ACT: Action Chunking with Transformers
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
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