Un braccio robot SO-100 a basso costo su una scrivania, configurato per teleoperation e addestramento della policy
DAggerSO-100Apprendimento per ImitazioneVLATeleoperation

Esecuzione di un Loop DAgger su un SO-100 con una Policy VLA

AY-Robots ResearchAugust 27, 202615 min di lettura

Un resoconto passo-dopo-passo di un round DAgger con cancello umano su un braccio SO-100: esegui la policy e registrala, prendi il controllo quando qualcosa va male, classifica l'esecuzione come correzione, componi un dataset misto, e continua l'addestramento da un checkpoint. Include il percorso di takeover tramite braccio leader per chi non dispone di un braccio leader, e i quattro errori che rendono un round inutile.

La tua policy si esegue. Raggiunge il cubo, chiude il gripper un centimetro troppo presto, e continua come se l'avesse preso. Nulla genera errori, e nessuna quantità di sguardi fissati sulla perdita di addestramento lo spiega. La soluzione non è altri 20.000 step di gradiente sugli stessi esempi. È mettere di nuovo la mano sul braccio esattamente dove sbaglia, registrare cosa hai fatto invece, e addestrare il checkpoint successivo sui dati vecchi più quella correzione. Questo è un round DAgger, e così è come uno si esegue su un SO-100 con una policy vision-language-action.

La teoria è altrove: perché l'aggregazione del dataset funziona affatto e cosa cambia il cancello umano rispetto ad essa. Questo è il manuale operativo, e presuppone un checkpoint addestrato, una serie di telecamere funzionante, e un braccio che si muove. I sei step seguenti sono il loop così implementato su la pagina DAgger di questa piattaforma, ma la sequenza è la stessa dai tuoi script.

Un round in breve

  • Esegui la policy addestrata e registrala, con il testo dell'attività dell'esecuzione piuttosto che un'etichetta di teleoperation generica.
  • Prendi il controllo nel momento in cui il comportamento va male: un handover a specchio con un braccio leader, immediato e manuale da tastiera o slider se non ne hai uno.
  • Triage ogni esecuzione: classificala come correzione, mantienla come episodio di valutazione, o scartala.
  • Componi il mix manualmente - dimostrazioni originali più correzioni, episodi scelti per fonte. Non addestrare mai su sole correzioni.
  • Continua l'addestramento dall'ultimo checkpoint, e annota quale checkpoint ha prodotto quale mix.
  • Il numero che dice se il round vale qualcosa è l'intervention rate, non la perdita di addestramento.

Perché il secondo round non è solo più dati

Behaviour cloning si addestra sugli stati che un umano ha visitato. Al momento del test la policy visita gli stati che provoca, e piccoli errori di azione si compongono in stati che nessuna dimostrazione ha coperto. Ross, Gordon e Bagnell hanno formalizzato quel fallimento per AISTATS 2011 e lo hanno risolto con un algoritmo iterativo che addestra una policy deterministica stazionaria e, secondo la loro riduzione, deve funzionare bene sotto la distribuzione di stato che induce: esegui la policy attuale, fai etichettare gli stati che ha effettivamente raggiunto all'esperto, aggiungili al dataset, riaddestra, ripeti. Kelly et al. hanno reso la query pratica con HG-DAgger, dove l'umano decide quando prendere il controllo invece di etichettare stati senza tenere i comandi; riportano prestazioni migliori sia di DAgger che di behaviour cloning su un compito di guida autonoma simulato e reale. Il cancello umano è ciò che rende il loop tollerabile su un braccio da scrivania - muovi le mani solo quando qualcosa va male.

Due conseguenze importano più nella pratica che nella teoria. Le correzioni non sono dimostrazioni ordinarie: si concentrano nelle regioni di collo di bottiglia che Mandlekar et al. descrivono, dove una piccola deviazione getta la policy in stati che le dimostrazioni non hanno mai coperto. E un dataset fatto solo di quelle parti difficili è un dataset mal formato - Belkhale, Cui e Sadigh sostengono dal lato dei dati che la diversità di stato non è sempre vantaggiosa, e che la divergenza di azione e la diversità di transizione insieme decidono la qualità del dataset. Il dataset misto non è un compromesso, è il punto.

Congela questi prima del round uno

Un round DAgger confronta una policy con se stessa nel tempo. Qualunque cosa cambi tra i round che non sia il dataset rende quel confronto privo di significato.

  • Posizioni e montature della telecamera, inclusa la telecamera del polso. Allenta un morsetto e hai cambiato la distribuzione di osservazione, non la policy.
  • Esposizione e bilanciamento del bianco, se lo stack di acquisizione ti permette di fissarli. La deriva dell'auto-esposizione tra i round è uno shift del dominio lento e invisibile.
  • Calibrazione del braccio e posizioni zero del servo. Se devi ricalibrare, tratta tutto ciò che è stato registrato prima come un dataset separato.
  • Il testo dell'attività. Ogni VLA qui si condiziona su di esso; riformularlo a metà del loop è un'attività diversa.
  • Illuminazione, superficie del tavolo, insieme di oggetti. Un nuovo oggetto è un nuovo esperimento, non il round successivo.
  • La frequenza dei fotogrammi di registrazione. Confrontare i tassi di intervento su due raster di campionamento produce differenze che provengono dal raster.
La telecamera del polso non è un arredo opzionale

Hsu et al. hanno confrontato una vista incentrata sulla mano rispetto alla solita vista in terza persona e hanno scoperto che la prospettiva eye-in-hand ha costantemente migliorato l'efficienza dell'addestramento e la generalizzazione fuori dalla distribuzione, nonostante vedesse meno della scena. Su un braccio a cinque giunti, il timing del gripper è di solito ciò che le tue correzioni stanno risolvendo, e il timing del gripper è quello che la vista dal polso trasporta.

Il round, da capo a fondo

  1. 1
    Esegui l'inferenza e registra

    Inizia l'esecuzione rispetto al checkpoint che vuoi migliorare, poi avvia la registrazione nella radice dell'inferenza. Registrato in quel modo eredita il testo dell'attività della propria esecuzione, che è ciò su cui è stata addestrata la policy, piuttosto che l'etichetta di teleoperation predefinita. Senza la registrazione puoi guardare il fallimento ma non addestrarlo.

    bash
    # two calls, not one: the run, then its recording
    POST /inference/start      # model_id, and hf_repo_id = the checkpoint to drive
    POST /recording/start      # root=inference
    # root=inference also makes the recording inherit the run's task text
  2. 2
    Prendi il controllo quando qualcosa va male

    Premi Take over e scegli la modalità di input: braccio leader, tastiera o slider. Il runner si ferma, correggi, riconsegni. I fotogrammi registrati mentre guidavi vengono contrassegnati come interventi automaticamente.

    bash
    POST /inference/takeover/start   # input = leader | keyboard | sliders
    POST /inference/takeover/nudge   # keyboard, relative delta per call
    POST /inference/takeover/set     # sliders, absolute target
    POST /inference/takeover/stop    # back to the policy
  3. 3
    Triage gli episodi

    Decidi per ogni episodio: classifica come correzione, mantieni come valutazione, o scarta. Un'esecuzione che la policy ha completato senza aiuto è dato di valutazione.

  4. 4
    Sincronizza il dataset di correzione

    Le correzioni si raccolgono in un dataset locale per policy e vanno nello storage cloud attraverso la sincronizzazione automatica. Nulla viene mescolato che non hai messo tu.

  5. 5
    Componi il dataset misto

    Combina il dataset originale con il dataset di correzioni, scegliendo esplicitamente gli episodi per fonte. Il risultato è un dataset ordinario da quel punto in poi.

    bash
    POST /training/datasets/compose
      sources  = [ original_dataset, korrekturen_<policy> ]
      episodes = explicit selection per source
  6. 6
    Continua l'addestramento dal checkpoint

    Addestra il mix dal checkpoint precedente piuttosto che dal modello base. Annota quale checkpoint e quale mix; senza quella coppia il round non è riproducibile.

    bash
    # field on the training job
    base_checkpoint = s3://ay-robots/checkpoints/<run>/<checkpoint>
    # the platform passes it to the training pod as BASE_CKPT_S3

Step 2 in dettaglio: i due modi di prendere il controllo

Con un braccio leader

In leader-follower mode il takeover è un handover tra due bracci che non sono nella stessa postura. Premere Take over mette in pausa il runner e guida il leader sulla postura attuale del follower, così nulla salta quando il torque si trasferisce. Se quel drive di allineamento va in timeout, allinea il leader a mano e rilascia solo una volta che i due sono entro cinque gradi. Da allora teleoperi normalmente e la colonna di azione registra ciò che hai comandato.

Sii onesto su questo percorso: il drive di allineamento e l'handover di torque sono la parte meno testata del loop sull'hardware reale. Testa l'handover su una postura lenta e innocua prima di affidarti ad esso in un'esecuzione che ti interessa. Un braccio leader produce le correzioni più fluide tra le tre modalità, e anche ha il massimo che può andare male meccanicamente.

Senza un braccio leader: tastiera e slider

La maggior parte delle persone che leggono questo possiede un braccio. Quello è abbastanza. Scegli input da tastiera o slider nel momento in cui premi Take over, e il takeover è immediato e manuale - non c'è un secondo braccio da allineare, quindi non c'è alcun passo di allineamento. Il follower mantiene la sua postura e aspetta l'input.

Modalità di inputCome si muove il braccioLimite per-call applicato dal serverBloccato quando
Braccio leaderLo specchio guida il follower dagli angoli articolari del leaderNessuna nudge o set call in questa modalità; lo specchio scrive gli obiettivi del follower continuamenteMai bloccato, e il predefinito se nessuna modalità di input è data - ma ha bisogno di un secondo braccio; senza un leader id il takeover è rifiutato
TastieraNudge relativo per pressione di tasto, inviato all'endpoint nudge del takeoverHard clamp a 2 gradi per giunto, 4 gradi per il gripperRifiutato con 409 se il takeover è stato avviato in modalità leader
SliderPostura target assoluta, inviata all'endpoint set del takeoverAl massimo 6 gradi di viaggio verso il target per call; l'interfaccia continua a inviare circa dieci volte al secondoRifiutato con 409 se il takeover è stato avviato in modalità leader

I clamp sono applicati lato server, non nell'interfaccia, perché un delta errato su un braccio bus-servo è una collisione. Le correzioni da tastiera escono a step e leggermente grossolane; le correzioni da slider sono più fluide, perché il server cammina verso il target mentre l'interfaccia continua a trasmettere. In entrambi i casi la colonna di azione riceve il vettore di postura comandata completo e il contrassegno di intervento è identico al percorso del leader, così le correzioni da tastiera atterrano nello stesso dataset senza una differenza di formato.

text
Q / A   joint 1      R / F   joint 4
W / S   joint 2      T / G   joint 5
E / D   joint 3      Z / X   gripper
Lo stesso layout di tasti di tutto il resto dello stack, così la memoria muscolare dalla registrazione si trasporta.
Training guide che mostra i passaggi ordinati di un run di fine-tuning di GR00T su un dataset SO-100
Il lato di addestramento di un round è la stessa sequenza guidata di una prima esecuzione; solo il campo checkpoint differisce.

Quando premere il pulsante

Presto piuttosto che tardi. Una correzione che inizia dopo che il gripper si è chiuso sul nulla insegna il recupero da un fallimento in cui la policy non avrebbe dovuto entrare, e i dati di recupero valgono molto meno dei dati di evitamento. Interrompi nel primo momento in cui sei sicuro che la traiettoria è sbagliata, correggi attraverso la parte difficile, riconsegna non appena lo stato è uno che la policy ha gestito prima. ThriftyDAgger automatizza quella decisione cancellando gli interventi su novità e rischio stimato sotto un budget umano fisso, ma su un braccio singolo con un umano già in osservazione, il cancello umano è più economico e meglio calibrato di qualunque cosa tu sintonizzerai.

Fattibile con lo stack open-source e pochi script. Ciò che costa è contabilità, e la contabilità è dove i round DAgger muoiono.

  1. Scrivi fotogrammi dal tuo script di inferenza in un dataset LeRobot, con la stringa dell'attività su cui è stata addestrata la policy.
  2. Metti in pausa il loop della policy, cambia l'origine del comando, e contrassegna ogni fotogramma che guidi come intervento. Senza il contrassegno, le correzioni sembreranno dimostrazioni ordinarie.
  3. Decidi deliberatamente cosa succede ai fotogrammi di transizione tra il rilascio del controllo della policy e il tuo primo input.
  4. Mantieni le correzioni nel loro dataset per policy, e traccia gli indici degli episodi a mano così il mix può essere ricostruito.
  5. Punta l'entry point del fine-tuning al checkpoint precedente, e controlla nel log che abbia caricato quei pesi.

Step 3 in dettaglio: triage decide la qualità

Dopo l'esecuzione hai una registrazione con alcuni fotogrammi contrassegnati come interventi. Tre destinazioni esistono, e quella sbagliata avvelena silenziosamente il round successivo.

  • Classifica come correzione quando l'intervento è stata una vera fix: la policy stava andando da qualche parte sbagliata e il tuo input ha mostrato la cosa giusta da uno stato che la policy stessa ha prodotto.
  • Mantieni come valutazione per esecuzioni autonome pulite e per esecuzioni su cui hai preso il controllo per cautela. Gli episodi di valutazione sono come misuri il checkpoint successivo, e non devono mai essere addestrati.
  • Scarta esecuzioni rovinate da qualcosa di estraneo - un fotogramma della telecamera caduto, un servo bloccato, un oggetto che hai fatto cadere. Una correzione disordinata è peggiore di nessuna correzione.
I fotogrammi di freeze appartengono alla registrazione grezza, non ai dati di addestramento

Tra il rilascio del controllo della policy e il tuo primo input, il braccio rimane fermo mentre il registratore continua a scrivere - una serie di pose identiche abbinate a immagini leggermente diverse. Lì quei fotogrammi di handover rimangono nella registrazione grezza e fuori dal dataset di correzione. Se costruisci il loop da solo, tagliali deliberatamente: una policy addestrata su di essi impara a pausare dove dovrebbe agire.

Step 5 in dettaglio: comporre il mix

La composizione prende il dataset originale più il dataset di correzione e produce un nuovo, ordinario LeRobot dataset che si addestra come qualunque altro. La proprietà importante è che la selezione degli episodi è esplicita per fonte - nulla viene mescolato automaticamente. Questo suona minore finché la prima volta che una policy si comporta strangamente e devi ricostruire su cosa è stata addestrata.

La domanda aperta è il rapporto, e nessuno ha un numero che si trasferisce. Ciò su cui la letteratura concorda è che le correzioni dovrebbero contare per più della loro quota di fotogrammi. Mandlekar et al. riaddestrare iterativamente sui dati che il loro sistema di intervento raccoglie, così la policy impara a traversare i colli di bottiglia, e riportano che gli agenti addestrati in quel modo superano gli agenti addestrati su un numero equivalente di campioni da dimostratori non-interventisti. Sirius va oltre e ri-pesa i campioni di addestramento da trust umano approssimato, riportando un guadagno dell'8% in simulazione e del 27% su hardware reale nel tasso di successo della policy contro i metodi con cui confronta, a due volte la velocità di convergenza. Nessuno degli entry point di addestramento qui espone una manopola di ri-pesatura del campione, così il sostituto grezzo è mantenere ogni episodio di correzione mentre si sottocampionano le dimostrazioni originali - e scrivere quello che hai fatto.

Dataset recording view che mostra episodi di un dataset SO-100 con flussi di telecamere
Gli episodi di correzione sono episodi ordinari con un contrassegno di intervento per-frame, così si compongono con il dataset originale senza conversione.

Step 6 in dettaglio: cosa significa veramente continuare da un checkpoint

Addestrare il mix dal modello base funziona ma butta via il round precedente e costa un run completo. Continuare dal checkpoint precedente è più veloce e di solito migliore. È anche più limitato di quanto la frase suggerisca.

L'inizializzazione dei pesi non è un resume dell'optimizer

Un checkpoint weights-only contiene i parametri e nient'altro. Caricarlo dà al run successivo un punto di partenza migliore del modello base, ma i momenti dell'optimizer, la posizione della schedule del learning-rate e l'ordine dei dati iniziano da zero. Aspettati un loss spike all'inizio del run continuato, non leggerlo come fallimento, e non chiamare il round un resume. È un warm start.

PolicyDimensioneGPU tierInferenza per azione stepFormato datasetEpisodi prima che valga la pena provare
GR00T N1.7circa 3 B, approssimativamente 40 M addestrati durante il fine-tuningA100 80 GB o H100 80 GBcirca 152 msLeRobot v2.0 o v2.150
GR00T N1.5circa 3 BA100 80 GB o H100 80 GBcirca 165 msLeRobot v2.0 o v2.150
Pi0.5circa 3 B su una backbone PaliGemmaA100 80 GB o H100 80 GBcirca 485 msLeRobot v3.050
SmolVLAcirca 450 MRTX 4090 o qualsiasi carta 24 GBcirca 245 msLeRobot v3.030
ACTcirca 80 M, addestrato da zeroRTX 4090 o qualsiasi carta 24 GBcirca 20 msLeRobot v3.050

La latenza si compone all'interno di un loop DAgger in un modo in cui non lo fa durante una demo: a circa 485 ms per azione step prendi il controllo perché il braccio ha esitato, non perché era sbagliato, e i dati di correzione di esitazione non sono dati di addestramento utili. Se stai iterando sui dati piuttosto che inseguire un tasso di successo finale, itera su un modello veloce. Shukor et al. descrivono SmolVLA come progettato per addestrare su una singola GPU e deployare su GPU consumer o CPU, con uno stack di inferenza asincrono che disaccoppia la predizione di azione dall'esecuzione per consentire tassi di controllo più alti - la proprietà che mantiene un loop di takeover responsivo.

I formati del dataset non sono intercambiabili neanche. GR00T prende LeRobot v2.0 o v2.1, e il repository Isaac-GR00T descrive il suo input come un sapore del formato LeRobot v2 con un file di descrizione di modalità aggiunto; i trainer più recenti qui si aspettano v3.0. Un mix composto nella versione sbagliata fallisce al tempo di carico piuttosto che produrre una policy cattiva - la modalità di fallimento migliore, comunque uno slot di coda sprecato. Il dataset documentation elenca quale formato ogni trainer prende.

Il loop, con la contabilità già fatta

Takeover con un braccio leader, tastiera o slider; contrassegno di intervento per-frame; filing runs come correzioni o valutazioni; composizione di un dataset misto con una selezione di episodi esplicita per fonte; e continuazione dell'addestramento da un checkpoint invece del modello base. Ciò che rimane tua decisione è quale run conta come correzione, cosa va nel mix, e quando l'intervention rate ha smesso di cadere.

Guarda come il loop DAgger è cablato

Quattro modi di sprecare un round

1. Addestramento solo sulle correzioni

L'errore più comune e la scorciatoia più allettante. Un dataset di sole correzioni è quasi interamente il mezzo difficile dell'attività, con approccio e ritirata mancanti; la policy migliora sulla parte difficile e dimentica come arrivarci. L'aggregazione non è un dettaglio di implementazione del metodo, è il meccanismo: i dati vecchi sono quello che mantiene il resto del comportamento mentre le correzioni spostano una parte di esso.

2. Spostamento di una telecamera tra i round

Una telecamera che cambia di due centimetri tra i round produce una policy peggiore di quella con cui hai iniziato, e una diagnosi che costa un giorno. Ogni VLA qui si condiziona su immagini; lo stato articolare da solo non disambigua dove si trova l'oggetto. Fotografa la configurazione prima del primo round e controlla quella fotografia prima di ogni round successivo.

3. Lasciare che gli artefatti di handover entrino nell'addestramento

Coperto sopra, e sulla lista perché è invisibile. Il sintomo è una policy che si ferma per una frazione di secondo esattamente dove l'operatore del round precedente ha preso il controllo. Sembra esitazione; è imitazione.

4. Chiamare un warm start un resume

Se credi che lo stato dell'optimizer si sia trasferito, lo spike di perdita iniziale si legge come un bug e vai a caccia di dati corrotti. Se sai che l'optimizer ha iniziato da zero, lo spike è previsto e guardi cosa viene dopo. Stessi numeri, conclusioni opposte.

Misurare il round

La metrica per un loop con cancello umano è l'intervention rate: fotogrammi registrati mentre eri in controllo, diviso per fotogrammi totali dell'esecuzione. È nello stato del takeover, ed è l'unico numero che risponde alla domanda che il round ha posto. La perdita di addestramento cade indipendentemente dal fatto che la policy sia migliorata; il tasso di successo è binario e rumoroso alle dimensioni del campione che un braccio da scrivania produce. L'intervention rate è continuo, misurato negli stati che la policy stessa ha causato, e diminuisce man mano che la policy ha meno bisogno di te.

Confrontalo solo su esecuzioni registrate in condizioni identiche. L'argomento completo, e come costruire un set di valutazione che sopravvive a più di due round, è in l'articolo su misurare un loop DAgger. Il round uno è realisticamente un test di fattibilità: stai controllando che il takeover funzioni sul tuo hardware, che le correzioni atterrino con i loro contrassegni, e che il run continuato ha caricato il checkpoint che hai nominato. I round due e tre sono dove il tasso dovrebbe iniziare a muoversi. Se non si è mosso entro il round quattro, il problema è a monte di DAgger.

Scrivi per roundPerché importa dopo
Checkpoint che è stato guidatoSenza di esso non puoi attribuire un miglioramento a un mix
Modalità di input usata per il takeoverLe correzioni da tastiera sono più grossolane delle correzioni da leader, e si vede nei dati
Numero di esecuzioni e come ogni una è stata triagedSe il round aveva abbastanza correzioni per importare
Intervention rate per esecuzione, e la mediaLa metrica di progresso del loop
Selezione esatta di episodi per fonteL'unico modo per riprodurre o annullare un round
Warm start o addestramento frescoSpiega la curva di perdita che guarderai tra una settimana

Se non hai ancora un checkpoint

Il loop non ha alcun entry point senza uno. Registra un primo dataset, addestra una prima policy, eseguila - recording, training e running the policy coprono quel percorso. Il client di registrazione è su the download page, i tier di GPU e le tariffe orarie su the pricing page, e che cosa un episodio usabile assomiglia nel SO-100 data collection guide. Rendi le dimostrazioni giuste prima delle correzioni: DAgger è un meccanismo di riparazione, e funziona molto meglio su qualcosa che era già quasi giusto.

Posso eseguire un loop DAgger senza un braccio leader?

Sì. Scegli input da tastiera o slider quando premi Take over: il takeover è immediato e manuale, senza un secondo braccio da allineare. La tastiera invia nudge relativi che il server clamp duro a 2 gradi per giunto e 4 per il gripper; gli slider inviano un target assoluto e il server si muove al massimo 6 gradi verso di esso per call, mentre l'interfaccia continua a trasmettere. La colonna di azione e il contrassegno di intervento sono gli stessi come in modalità leader, quindi le correzioni sono indistinguibili nel dataset.

Quante correzioni ha bisogno un round?

Non c'è un numero universale difendibile, e il conteggio dei fotogrammi importa più del conteggio degli episodi. La regola di lavoro è che le correzioni non devono essere perse nel mix: con 200 episodi originali e tre episodi di correzione, nulla si muoverà. Mira per correzioni che coprano il comportamento fallace da diverse configurazioni di partenza piuttosto che tre ripetizioni dello stesso salvataggio.

Perché l'addestramento solo sulle correzioni è una cattiva idea?

Perché le correzioni sono quasi interamente il mezzo difficile dell'attività. Approccio, allineamento e ritirata mancano, così la policy perde quello che già faceva bene mentre migliora nella parte che hai corretto. Mantenere i dati vecchi e aggiungervi è il meccanismo stesso, non un extra opzionale.

Continuare da un checkpoint resume il precedente run di addestramento?

No. Un checkpoint weights-only ripristina i parametri e nient'altro: i momenti dell'optimizer, la posizione della schedule del learning-rate e l'ordine dei dati iniziano da zero. È un warm start, e uno spike di perdita iniziale è previsto piuttosto che un sintomo. Scrivi quale dei due hai effettivamente fatto, così leggi la curva correttamente tra una settimana.

E se l'intervention rate non cade?

Smetti di aggiungere round. Un tasso piatto significa che le correzioni non stanno insegnando quello che pensi. Le cause solite sono a monte: una telecamera si è mossa, le correzioni iniziano troppo tardi per essere dati di evitamento, i fotogrammi di handover sono nel set di addestramento, o l'attività è sotto-determinata dalle osservazioni che la policy effettivamente ottiene.

Nulla di questo è un problema risolto e nulla di esso è un clic. Interactive imitation learning è un'area di ricerca attiva precisamente perché le sue domande - quando intervenire, come pesare quello che l'umano ha fatto, quanti dati vecchi mantenere - non hanno risposte stabilite; il sondaggio di Celemin et al. mappa cosa è ancora aperto. Quello che il loop ha è convergenza misurabile quando viene eseguito con cura, su hardware che costa poche centinaia di euro. Congela la configurazione, intervieni presto, triage onestamente, componi deliberatamente, e registra l'intervention rate ogni volta.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started