Open Source Robotics

Una raccolta curata di progetti, strumenti e software di robotica open source di alta qualità per la comunità della robotica.

Behavior Tree

  • Detto anche: BT, behavior tree architecture, behaviour tree
  • Categoria: Planning & manipulation › Task-level
  • Tag: behavior-tree, decision-making, software-architecture

Architettura di controllo gerarchica che organizza le decisioni del robot come un albero modulare di nodi azione, condizione e compositi.

Definizione

Un behavior tree (BT) è un'architettura di controllo gerarchica che organizza il processo decisionale e l'esecuzione delle azioni di un robot come una struttura ad albero di nodi modulari. Sviluppati originariamente per l'IA dei videogiochi per controllare i personaggi non giocanti, i behavior tree sono diventati la principale alternativa alle macchine a stati finiti per strutturare comportamenti robotici complessi, offrendo maggiore modularità, riusabilità e leggibilità.

Un behavior tree è composto da quattro tipi di nodi. I nodi azione (foglie) eseguono comportamenti specifici del robot: spostarsi in una posizione, afferrare un oggetto, pronunciare una frase. I nodi condizione (foglie) verificano lo stato del mondo: la porta è aperta? la batteria è sopra il 20%? I nodi sequenza (compositi) eseguono i figli da sinistra a destra e hanno successo solo se tutti i figli hanno successo, come un operatore AND. I nodi fallback/selettore (compositi) provano i figli in ordine e hanno successo se almeno un figlio ha successo, come un operatore OR. Altri tipi di nodo comprendono i nodi paralleli (eseguono i figli in contemporanea) e i nodi decoratore, che modificano il comportamento del figlio (ripetizione, inversione, timeout).

L'albero riceve un "tick" a frequenza regolare (tipicamente 10–100 Hz). A ogni tick l'esecuzione scorre dal nodo radice verso il basso, e ogni nodo restituisce uno di tre stati: Success, Failure o Running (ancora in corso). Questa valutazione basata sui tick rende i behavior tree intrinsecamente reattivi: se le condizioni cambiano tra un tick e l'altro, l'albero risponde subito reindirizzando l'esecuzione al ramo appropriato.

I behavior tree risolvono problemi chiave con cui le macchine a stati finiti fanno fatica. Nelle FSM, aggiungere nuovi stati richiede di definire manualmente le transizioni da e verso ogni stato esistente, con una crescita esponenziale della complessità (il problema dell'"esplosione degli stati"). Nei behavior tree, i nuovi comportamenti si aggiungono inserendo sottoalberi senza modificare i nodi esistenti. La modularità fa sì che un sottoalbero "naviga verso il punto" possa essere riusato nei comportamenti "recupera oggetto", "pattuglia area" e "torna alla stazione di ricarica" senza modifiche.

In ROS 2, la libreria BehaviorTree.CPP e lo stack di navigazione Nav2 usano i behavior tree come architettura di controllo principale. Il behavior tree predefinito di Nav2 coordina pianificazione del percorso, evitamento degli ostacoli, comportamenti di recupero (rotazione, retromarcia, attesa) e monitoraggio dell'obiettivo in un'unica struttura ad albero leggibile, che gli utenti possono personalizzare sostituendo o aggiungendo nodi.

Le frontiere della ricerca comprendono l'apprendimento di behavior tree da dimostrazioni (costruire automaticamente la struttura dell'albero dal comportamento osservato), l'integrazione di LLM per generare strutture di behavior tree da descrizioni dei compiti in linguaggio naturale e la combinazione dei behavior tree con l'apprendimento per rinforzo, in cui l'albero fornisce la struttura e l'RL ottimizza i parametri all'interno dei nodi.

Perché è importante

I behavior tree sono diventati l'architettura standard per strutturare comportamenti robotici complessi nei sistemi in produzione. Offrono il giusto equilibrio tra reattività (rispondere immediatamente alle condizioni che cambiano) e deliberazione (eseguire sequenze di azioni pianificate). La loro modularità permette a interi team di costruire, testare e mantenere i comportamenti del robot: ogni sviluppatore può lavorare sui sottoalberi in modo indipendente. Nell'ecosistema ROS 2 in particolare, i behavior tree sono profondamente radicati: lo stack di navigazione Nav2, la pipeline di manipolazione e molte applicazioni robotiche commerciali usano BehaviorTree.CPP come spina dorsale decisionale.

Applicazioni principali

  • Navigazione autonoma: Nav2 usa i behavior tree per coordinare pianificazione, inseguimento del percorso, evitamento degli ostacoli e comportamenti di recupero per i robot mobili
  • Sequenziamento dei compiti di manipolazione: organizzare compiti di pick-and-place, assemblaggio e smistamento come moduli di behavior tree riutilizzabili
  • Coordinamento multi-robot: ogni robot esegue il proprio behavior tree, che si coordina con l'assegnazione dei compiti a livello di flotta
  • Robotica di servizio: strutturare flussi di interazione complessi per robot di accoglienza, guida e consegna che devono gestire le interruzioni con eleganza
  • Automazione industriale: orchestrare processi produttivi in più fasi con recupero dagli errori e diramazioni condizionali
  • IA per videogiochi e simulazione: controllare agenti simulati e NPC in ambienti di addestramento e gemelli digitali (digital twin)

In pratica

Lo stack di navigazione Nav2 di ROS 2 usa un behavior tree come coordinatore centrale. Quando un robot riceve un obiettivo di navigazione, il behavior tree predefinito esegue una sequenza: calcolare un percorso globale, seguirlo con un controller locale e monitorare l'avanzamento. Se il controller segnala che il robot è bloccato, un ramo di fallback attiva i comportamenti di recupero: prima una rotazione controllata per eliminare gli artefatti della costmap locale, poi una retromarcia, poi un'attesa più lunga. Ogni recupero è a sua volta un sottoalbero personalizzabile per ciascun robot. Gli utenti modificano il comportamento di navigazione modificando un file XML che definisce la struttura dell'albero, sostituendo il pianificatore di percorso predefinito con uno personalizzato o aggiungendo un nodo condizione che mette in pausa la navigazione quando viene rilevata una persona nelle vicinanze.

Idee sbagliate comuni

  • I behavior tree sono solo macchine a stati sofisticate: la differenza chiave è la modularità, perché i BT si compongono inserendo sottoalberi senza modificare i nodi esistenti, mentre le FSM richiedono una gestione esplicita delle transizioni tra tutti gli stati
  • I behavior tree gestiscono solo comportamenti reattivi: con i nodi sequenza e lo stato Running, i BT gestiscono sia risposte reattive sia azioni deliberative di lunga durata; non sono limitati a schemi stimolo-risposta
  • Scrivere behavior tree richiede saper programmare: editor visuali per BT (Groot2 per BehaviorTree.CPP) permettono anche a chi non programma di costruire e modificare i comportamenti del robot posizionando i nodi con il drag-and-drop
  • I behavior tree sono sempre deterministici: i BT possono includere selezione probabilistica, punteggi basati sull'utilità e parametri appresi all'interno dei nodi per produrre un comportamento adattivo e non deterministico

Chi dovrebbe saperlo

  • Sviluppatori ROS 2 che costruiscono sistemi di navigazione autonoma o di manipolazione
  • Architetti software per la robotica che progettano i livelli di comportamento e decisione
  • Ricercatori di IA che combinano pianificazione strutturata e comportamenti appresi
  • Ingegneri QA che testano sequenze complesse di comportamenti robotici
  • Sviluppatori di videogiochi che lavorano su IA per NPC e agenti di simulazione

Tecnologie correlate

  • BehaviorTree.CPP
  • Nav2
  • Editor visuale Groot2
  • py_trees
  • Macchine a stati finiti
  • Pianificazione HTN
  • SMACH

Termini correlati

  • ROS

Progetti correlati

  • BehaviorTree.CPP: C++ behavior tree library for robot task planning, powering Nav2 and ROS 2 systems

Video

  • 5 minute Behavior Tree tutorial: Petter Ögren
  • Behavior Trees in Robotics (Part 1 - Concept): Hummingbird

Questo sito richiede JavaScript. Attiva JavaScript per esplorare i nostri progetti di robotica open source.