Thanks to visit codestin.com
Credit goes to github.com

Skip to content

knoxsbyte/argos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

21 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ARGOS β€” Autonomous Robot Group Operations System

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.


Features

  • 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

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        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         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Requirements

Core (always required)

  • Python 3.10+
  • pip install -e .

Robot hardware

  • 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

ML training (GPU recommended)

pip install torch transformers peft diffusers accelerate

Full perception stack

pip install opencv-python mediapipe ultralytics open3d h5py

Simulation

pip install mujoco gymnasium
# or run: bash scripts/setup_sim.sh

Development

pip install -e ".[dev]"   # includes pytest, black, ruff

Note: All hardware and ML dependencies are optional. The framework runs in mock/simulation mode automatically when they are absent.


Installation

git clone https://github.com/knoxsbyte/argos.git
cd argos
python -m venv .venv && source .venv/bin/activate
pip install -e .
argos --help

Install on a Unitree G1 robot

# 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.10

Quick Start

1. Connect your robots

argos connect 192.168.1.10 --name G1-Alpha
argos connect 192.168.1.11 --name G1-Beta

2. Launch the fleet dashboard

argos 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     β”‚                                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3. Add a cleaning task

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_bed

CLI Reference

argos
β”œβ”€β”€ 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

Training Pipeline

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

Supported policy architectures

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.


Swarm Coordination

Task allocation (auction-based MRTA)

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.

Cooperative task protocol (PEFA)

For multi-robot tasks like make_bed or move_furniture:

  1. Propose β€” lead robot computes action plan (grip positions, timing)
  2. Execute β€” all robots act simultaneously via asyncio.gather()
  3. Feedback β€” collect success signals from each robot
  4. Adjust β€” if partial failure, adjust plan and retry (max 3 attempts)

LLM task planning

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.


Module Reference

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 library

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

Configuration

Robot config β€” configs/robots/g1.yaml

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: act

Task config β€” configs/tasks/cleaning.yaml

Add 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.90

Research Foundations

ARGOS 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

Development

# 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

Adding a new task

  1. Add an entry to configs/tasks/cleaning.yaml
  2. Subclass BaseTask in argos/tasks/solo.py or argos/tasks/cooperative.py
  3. Register in TaskLibrary.create() in argos/tasks/library.py
  4. Add to PolicyRouter.TASK_POLICY_MAP in argos/policy/router.py

Adding a new policy

  1. Subclass BasePolicy in argos/policy/
  2. Implement load(), predict(), reset()
  3. Register in PolicyRouter and update TASK_POLICY_MAP

Roadmap

  • 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)

License

MIT

About

A fully end-to-end framework for coordinating swarms of Unitree G1 humanoid robots to autonomously clean rooms

Topics

Resources

Stars

58 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors