A fully end-to-end framework for coordinating swarms of Unitree G1 humanoid robots to autonomously clean rooms. Robots divide the space into zones and clean independently; for tasks that require both hands or multiple agents (making a bed, moving furniture) they coordinate using a multi-robot synchronization protocol. Includes an ML training pipeline for learning from cleaning video footage and a modern silver/cyan terminal UI.
- Multi-robot swarm coordination β 2+ Unitree G1 robots divide a room into zones, clean in parallel, and merge for cooperative tasks
- LLM-powered task planning β natural language goals decomposed into task DAGs via Claude API
- Auction-based task allocation β market-based bidding assigns tasks optimally based on robot position, battery, and load
- PEFA cooperative protocol β ProposeβExecuteβFeedbackβAdjust synchronization for bimanual/multi-robot tasks like bed-making
- Video-based ML training β ingest cleaning footage β pose estimation β LeRobot HDF5 dataset β LoRA fine-tuning of OpenVLA/Diffusion Policy/ACT
- Three policy architectures β OpenVLA-7B (language-conditioned), Diffusion Policy (multimodal manipulation), ACT (dexterous bimanual)
- MuJoCo simulation β test policies before deploying to real hardware, 4 room layouts
- Modern TUI β silver/cyan Textual dashboard with real-time fleet monitoring, swarm map, task queue, training progress
- Full mock fallbacks β every module works without GPU, robot hardware, or optional deps installed
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ARGOS CLI (Textual TUI) β
β argos connect β argos fleet β argos task β argos train β argos simβ
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β Swarm Coordinator β
β LLM Planner β Dependency Graph β Auction Allocator β Monitor β
ββββββββ¬ββββββββββββββββββββββ¬βββββββββββββββββββββββ¬βββββββββββββ
β β β
ββββββββΌβββββββ βββββββββββΌββββββββ ββββββββββΌβββββββββββ
β Robot A β β Robot B β β Robot N ... β
β G1 Bridge β β G1 Bridge β β G1 Bridge β
β Policy β β Policy β β Policy β
β Navigation β β Navigation β β Navigation β
ββββββββ¬βββββββ βββββββββββ¬ββββββββ ββββββββββ¬βββββββββββ
βββββββββββββββββββββββ΄βββββββββββββββββββββββ
CycloneDDS Mesh
(Unitree SDK2 native transport)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Training Pipeline β
β Video Ingest β Preprocess β HDF5 Dataset β LoRA Fine-tune β
β OpenVLA (7B) / Diffusion Policy / ACT β Eval β Deploy β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Python 3.10+
pip install -e .
- Unitree G1 (EDU / EDU Ultimate recommended for dexterous hands)
unitree_sdk2_pythonβ install from Unitree GitHub- Both the host machine and robots on the same CycloneDDS network
pip install torch transformers peft diffusers acceleratepip install opencv-python mediapipe ultralytics open3d h5pypip install mujoco gymnasium
# or run: bash scripts/setup_sim.shpip install -e ".[dev]" # includes pytest, black, ruffNote: All hardware and ML dependencies are optional. The framework runs in mock/simulation mode automatically when they are absent.
git clone https://github.com/knoxsbyte/argos.git
cd argos
python -m venv .venv && source .venv/bin/activate
pip install -e .
argos --help# SSH-deploy the ARGOS agent daemon to the robot's Jetson Orin
argos install --robot 192.168.1.10
# or directly:
bash scripts/install_robot.sh 192.168.1.10argos connect 192.168.1.10 --name G1-Alpha
argos connect 192.168.1.11 --name G1-Betaargos fleetββ ARGOS Fleet ββββββββββββββββββββββββββββββββββ v0.1.0 βββββββββββ
β ββ Fleet Status βββββββββββ ββ Swarm Map ββββββββββββββββββββββ β
β β [G1-Alpha] β CLEANING β β βββββββββββββββββββββββββββββ β β
β β Battery: 87% β β β [A] [B] β β β
β β Task: wipe_surface β β β Zone A β Zone B β β β
β β β β βββββββββββββββββββββββββββββ β β
β β [G1-Beta] β BED-MAKING β βββββββββββββββββββββββββββββββββββ β
β β Battery: 72% β ββ Event Log ββββββββββββββββββββββ β
β β Task: cooperative β β 14:02:31 G1-Alpha β zone done β β
β βββββββββββββββββββββββββββ β 14:02:45 G1-Beta β bed start β β
β ββ Task Queue βββββββββββββ β 14:03:01 Auction: allocated β β
β β [DONE] sweep_floor β βββββββββββββββββββββββββββββββββββ β
β β [ACTIVE] wipe_surface β β
β β [ACTIVE] make_bed β [q]Quit [t]Tasks [r]Train [?]Help β
β β [QUEUE] vacuum_rug β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
argos task add "clean the bedroom"
# β LLM decomposes into: sweep_floor, wipe_surfaces, make_bed
# β Auction allocates zones to G1-Alpha and G1-Beta
# β Robots execute in parallel; PEFA sync on make_bedargos
βββ connect <ip> [--name NAME] Connect to a G1 robot
βββ disconnect <name> Disconnect a robot
βββ fleet Open TUI dashboard
β
βββ task
β βββ add "<natural language goal>" Decompose & assign task
β βββ list Show all tasks
β βββ cancel <task-id> Cancel a running task
β βββ status <task-id> Show task detail
β
βββ train
β βββ ingest --video-dir DIR Process footage β HDF5 dataset
β βββ finetune --dataset DIR LoRA fine-tune policy
β β [--epochs N]
β βββ evaluate --model PATH Eval in MuJoCo simulation
β βββ deploy --model PATH Push checkpoint to robot
β --robot NAME
β
βββ sim
β βββ start [--env mujoco|isaac] Launch simulation
β βββ reset Reset sim state
β
βββ install --robot <ip> SSH-deploy daemon to Jetson Orin
Train a policy from your own cleaning video footage:
# 1. Record cleaning demonstrations (MP4/AVI) and place in ./footage/
# Name files to hint the task: "sweep_kitchen_01.mp4", "make_bed_01.mp4"
# Optionally add a metadata.json sidecar for explicit labels.
# 2. Ingest β extract frames, estimate poses, label actions
argos train ingest --video-dir ./footage/
# Output: data/processed/dataset.h5 (LeRobot HDF5 format)
# 3. Fine-tune β LoRA fine-tune OpenVLA-7B on your dataset
argos train finetune --dataset ./data/processed/ --epochs 10
# Output: data/models/checkpoint_epoch_N/
# 4. Evaluate in simulation
argos train evaluate --model ./data/models/best.ckpt
# 5. Deploy to robot
argos train deploy --model ./data/models/best.ckpt --robot G1-Alpha| Policy | Best for | Params | Training time (RTX 4090) |
|---|---|---|---|
| OpenVLA | Language-conditioned tasks (sort_items, organize_shelf) |
7B (LoRA) | ~3h / 10 epochs |
| Diffusion Policy | Coverage tasks (sweep_floor, mop_floor) |
~80M | ~1h / 10 epochs |
| ACT | Dexterous bimanual (make_bed, wipe_surface) |
~80M | ~45min / 10 epochs |
All support 4-bit quantization via bitsandbytes for 8GB VRAM cards.
Each robot bids on every available task. Bid cost is computed from:
- Distance β Euclidean distance from robot's current position to task location
- Battery penalty β extra cost if battery < 20%
- Load penalty β robots with queued tasks bid higher
The lowest-cost robot (or team) wins each task. For cooperative tasks requiring min_robots β₯ 2, the cheapest team is selected together.
For multi-robot tasks like make_bed or move_furniture:
- Propose β lead robot computes action plan (grip positions, timing)
- Execute β all robots act simultaneously via
asyncio.gather() - Feedback β collect success signals from each robot
- Adjust β if partial failure, adjust plan and retry (max 3 attempts)
Natural language goals are decomposed by Claude into a directed acyclic task graph:
"clean the bedroom"
β
βββββββββββββββββββββββββββββββββββββββ
β sweep_floor (zone A) βββββββββββ β
β sweep_floor (zone B) βββββββββββ€ β
β β β
β wipe_surfaces βββββββββββ make_bed β
βββββββββββββββββββββββββββββββββββββββ
Tasks with no pending predecessors are immediately available for auction.
argos/
βββ comm/ Robot communication (Unitree SDK2, ROS2, registry)
βββ swarm/ Coordination (LLM planner, MRTA, PEFA, TaskDAG)
βββ tasks/ Task library (12 cleaning tasks, solo + cooperative)
βββ navigation/ Path planning (boustrophedon, zones, A* obstacle avoidance)
βββ perception/ Scene understanding (YOLO, dirt detection, LiDAR mapping)
βββ policy/ Policy inference (OpenVLA, Diffusion Policy, ACT, router)
βββ training/ ML pipeline (ingest, preprocess, HDF5, LoRA, eval, MuJoCo sim)
βββ cli/ TUI (Textual, silver/cyan theme, dashboard, training screen)
| Task | Type | Policy | Min robots |
|---|---|---|---|
sweep_floor |
solo | Diffusion Policy | 1 |
vacuum_floor |
solo | Diffusion Policy | 1 |
mop_floor |
solo | Diffusion Policy | 1 |
wipe_surface |
solo | ACT | 1 |
wipe_window |
solo | ACT | 1 |
pick_up_object |
solo | ACT | 1 |
sort_items |
solo | OpenVLA | 1 |
take_out_trash |
solo | ACT | 1 |
make_bed |
cooperative | ACT | 2 |
change_sheets |
cooperative | ACT | 2 |
move_furniture |
cooperative | Diffusion Policy | 2 |
organize_shelf |
solo | OpenVLA | 1 |
model: unitree_g1_edu_ultimate
dof: 29
communication:
protocol: cyclonedds
control_freq: 50 # Hz
sensors:
camera: intel_realsense_d435
lidar: livox_mid360
capabilities:
locomotion_speed: 2.0 # m/s
payload_kg: 3.0
dexterous_hands: true
policy:
default: openvla
fallback: actAdd new tasks by extending this file:
tasks:
my_custom_task:
type: solo # or cooperative
policy: act
min_robots: 1
duration_estimate: 120 # seconds
required_tools: [sponge]
success_criteria:
coverage_threshold: 0.90ARGOS is built on current (2024β2025) state-of-the-art research:
| Component | Method | Paper/Source |
|---|---|---|
| Policy learning | Diffusion Policy | Columbia, IJRR 2024 |
| Bimanual control | ACT | Zhao et al. 2023 |
| Language-conditioned | OpenVLA-7B | Kim et al. arXiv:2406.09246 |
| Fast tokenization | FAST tokenizer | Physical Intelligence 2024 |
| Task allocation | Auction-based MRTA | Zlot & Stentz, CMU 2006 |
| Cooperative tasks | COHERENT PEFA | arXiv:2409.15146 |
| LLM planning | RobotFleet pattern | arXiv:2510.10379 |
| Video transfer | H2R augmentation | arXiv:2505.11920 |
| Robot SDK | Unitree SDK2 | unitreerobotics/unitree_sdk2_python |
# Run tests
pytest tests/ -v
# Lint
ruff check argos/
# Format
black argos/ tests/
# Test without any hardware or GPU
pytest tests/ -v # all mocks auto-activate- Add an entry to
configs/tasks/cleaning.yaml - Subclass
BaseTaskinargos/tasks/solo.pyorargos/tasks/cooperative.py - Register in
TaskLibrary.create()inargos/tasks/library.py - Add to
PolicyRouter.TASK_POLICY_MAPinargos/policy/router.py
- Subclass
BasePolicyinargos/policy/ - Implement
load(),predict(),reset() - Register in
PolicyRouterand updateTASK_POLICY_MAP
- Real-time video streaming in TUI
- Isaac Lab high-fidelity training environment
- Multi-floor coordination with elevator navigation
- Battery management & charging dock integration
- Web dashboard (Textual web mode)
- Support for additional robot embodiments (Agility Digit, Fourier GR-1)
MIT