Perché abbiamo lo stato "in esecuzione" negli alberi di comportamento?

1

Sto seguendo il documento: Verso un quadro di alberi di comportamento unificato per il controllo dei robot e tentando di implementare il mio albero di comportamento. Credo di avere la logica corretta per i nodi principali: Sequenza , Selettore , Condizione e Azione , ma sto solo permettendo ai nodi di restituire Success o Failure per ora. Inoltre, non sono sicuro di aver capito perché hai bisogno di uno stato In esecuzione .

La mia distillazione dei due nodi principali delle diramazioni, Selettore e Sequenza , è come tale:

Sequenza

  1. Iterate tutti i bambini
  2. Interrompi se child fallisce o è in esecuzione
  3. Restituzione di errori o in esecuzione se a seconda del figlio
  4. Restituisce successo se tutti i bambini hanno avuto successo

Selector

  1. Iterate tutti i bambini
  2. Interrompi se il figlio ha successo o è in esecuzione
  3. Restituisci successo o esegui in base al figlio
  4. Restituisce false se nessun figlio ha avuto successo o sta girando

Per me, In esecuzione è solo sinonimo di Successo o Errore a seconda che venga utilizzato in un Selettore o Sequenza rispettivamente. Quando In esecuzione conta davvero?

    
posta zero298 30.12.2015 - 20:58
fonte

1 risposta

2

Ecco un albero di esempio:

Selector
    Sequence
         Roll Forward 1 foot
         Beep
    Panic

L'idea qui è che il robot dovrebbe rotolare in avanti e quindi emettere un segnale acustico. Se qualcosa va storto, dovrebbe andare nel panico.

Mentre il robot sta avanzando, cosa restituisce il nodo di roll forward?

Il modo corretto è di farlo tornare in esecuzione, perché è ancora in rotazione. Quindi tre assomiglia a:

Selector [RUNNING]
    Sequence [RUNNING]
         Roll Forward 1 foot [RUNNING]
         Beep
    Panic

In questo stato, tutto è in esecuzione e Beep e Panic non si verificano.

In alternativa, potremmo usare SUCCESS invece di RUNNING? In tal caso, l'albero sarebbe:

Selector [SUCCESS]
    Sequence [SUCCESS]
         Roll Forward 1 foot [SUCCESS]
         Beep [SUCCESS]
    Panic

Ma questo non va bene, perché non si suppone che emetta un segnale acustico fino a dopo aver rotolato in avanti.

Forse avremmo dovuto usare FAILURE?

Selector [SUCCESS]
    Sequence [FAILURE]
         Roll Forward 1 foot [FAILURE]
         Beep
    Panic [SUCCESS]

Ma questo è di nuovo brutto, perché ci siamo fatti prendere dal panico, quando avremmo dovuto aspettare per vedere se il forward forward funzionasse.

Pertanto, abbiamo bisogno di RUNNING per indicare quando un'attività non è ancora terminata.

    
risposta data 31.12.2015 - 01:50
fonte

Leggi altre domande sui tag