Skip to main content

Lezione 2: Utilizzo degli operatori di confronto

In questa lezione, ti appoggerai agli operatori di confronto e li utilizzerai in un progetto con i dati del sensore di distanza. Quindi creerai un progetto che guidi il robot VR verso la lettera "A" utilizzando il sensore di distanza con cicli mentre da e l'operatore maggiore di (>). Nella mini-sfida, applicherai queste abilità per navigare dall'inizio del Labirinto del Muro al numero "1".

Una vista dall'alto verso il basso del Wall Maze Playground con il robot VR nella posizione di partenza nella parte centrale inferiore del parco giochi. La lettera A si trova direttamente a sinistra del robot, separata da una parete corta. Il numero 1 è verso l'angolo destro del robot, separato da una parete verticale e orizzontale.

Risultati di apprendimento

  • Identificare che maggiori di (>), minori di (<) e uguali a (==) sono operatori di confronto che confrontano due valori, noti come operandi.  
  • Identifica che l' operatore maggiore di (>) confronta due valori e riporta True se il valore sinistro è maggiore del valore destro.
  • Identifica che l'operatore minore di (<) confronta due valori e riporta True se il valore sinistro è inferiore al valore destro.
  • Identifica che gli operatori maggiore di (>) o minore di (<) riportano un valore Vero o Falso quando vengono utilizzati come condizione in un ciclo while.
  • Descrivere come creare un progetto che ha un robot VR che avanza fino a quando il valore del sensore di distanza è inferiore a una certa quantità.

Operatori di confronto

Gli operatori minore di (<), maggiore di (>) e uguale a (==) confrontano due valori, noti anche come operandi. Il valore a sinistra dell'operatore è il primo operando e il valore a destra è il secondo operando. Gli operatori riportano i valori booleani e restituiscono un valore True quando il confronto è corretto e False quando il confronto NON è corretto.

  • In questi esempi utilizzando l'operatore minore di (<), quando l'istruzione è numericamente corretta, riporterà True.Alle righe di meno di operatori - la riga superiore legge 50 meno di 25 ed è etichettata come "segnala falso". La riga in basso riporta 25 meno di 50 ed è etichettata come "report true".
  • Allo stesso modo, in questi esempi che utilizzano l'operatore maggiore di (>), l'istruzione numericamente corretta riporterà True.Alle righe di operatori maggiori di - la riga superiore legge 50 maggiori di 25 ed è etichettata come "report true". La riga in basso riporta 25 più di 50 ed è etichettata come "rapporti falsi".
  • L'operatore uguale a (==) riporta True quando i due valori sono esattamente uguali e False quando non lo sono.Alle righe di operatori uguali - la riga superiore legge 50 = = 50 ed è etichettata come "report true". La riga in basso recita 25 = =  50 ed è etichettata come "rapporti falsi".
    • Si noti che il doppio segno di uguale significa "uguale a" e confronta i due valori. Un singolo segno di uguale è un operatore di assegnazione che assegna un valore a una variabile.

Gli operatori di confronto possono confrontare decimali, numeri interi o comandi di reporting numerico.

Utilizzo di operatori di confronto con dati del sensore di distanza

Gli operatori di confronto sono particolarmente utili quando si utilizzano dati numerici da un sensore, come il sensore di distanza, per prendere una decisione con il robot VR. Nell'unità precedente, i dati del sensore paraurti sono stati utilizzati per far girare il robot VR quando il sensore paraurti è stato premuto. Tuttavia, con un operatore di confronto, possiamo utilizzare i dati del sensore di distanza per far girare il robot VR in una posizione più precisa. Ciò è utile per evitare di guidare contro i muri o per far navigare il robot VR verso un luogo specifico in un parco giochi. 

I dati del sensore di distanza possono essere utilizzati come uno dei valori nell'operatore di confronto.

front_distance.get_distance(MM) > 50

Ad esempio, se volessimo che il robot VR si dirigesse verso un oggetto, come un muro, e poi si fermasse quando è vicino all'oggetto, potremmo farlo utilizzando un operatore di confronto e la funzione get _distance. In sostanza, stiamo chiedendo al robot VR di guidare mentre la distanza tra il robot e l'oggetto è maggiore di un valore di soglia, come 50 millimetri (mm).Una vista ravvicinata del centro in basso del Wall Maze Playground, con il robot VR sul quadrato di partenza. Una freccia verde si estende dalla parte anteriore del robot a circa 50 mm dalla prima parete opposta, illustrando dove la distanza percorsa maggiore di 50 mm è vera. Una freccia rossa si estende dalla parte anteriore della freccia verde alla parete, illustrando dove la distanza percorsa superiore a 50 mm risulta falsa.

Mentre il sensore di distanza segnala che è  superiore a 50 millimetri (mm) o il valore è maggiore di (>) 50, il robot VR può guidare liberamente. Quando il sensore di distanza segnala che è  più vicino di 50 millimetri (mm), o il valore non è superiore a (>) 50, il robot VR deve fermarsi o girare prima di entrare in collisione con la parete. 

Per tua informazione

Scegliere quale operatore di confronto utilizzare può essere una scelta stilistica. Nell'esempio precedente è stato utilizzato l'operatore maggiore di (>) per rendere il progetto il più chiaro e leggibile possibile. Mentre il robot VR si trova a una distanza superiore a 50 millimetri, avanzare. È possibile raggiungere lo stesso obiettivo invertendo l'ordine dei valori nell'operatore e utilizzando un operatore minore di (<).

mentre 50 > front_distance.get_distance(MM):

Qui, il robot VR avrebbe guidato mentre 50 millimetri era maggiore del valore riportato dal sensore di distanza. Il robot VR eseguirebbe lo stesso comportamento, tuttavia, il progetto è leggermente meno chiaro e leggibile. 

A seconda dei dati del sensore che si sta utilizzando, l'operatore uguale a (==) potrebbe non far funzionare il robot VR come previsto. Ad esempio, se l'obiettivo è quello di far fermare il Robot VR a 50 millimetri da un oggetto, si potrebbe pensare di utilizzare l'operatore uguale a (==).

mentre front_distance.get_distance(MM) == 50:

Tuttavia, nel labirinto a parete, ad esempio, l'utilizzo di un operatore uguale (==) con il sensore di distanza richiederebbe una lettura così precisa dal sensore, esattamente 50 millimetri, che la velocità del robot VR renderebbe quasi impossibile ottenere quel livello di precisione in tempo reale. Pertanto, il robot VR probabilmente continuerebbe a superare la soglia perché, indipendentemente dal fatto che stia segnalando un valore di 100 millimetri o 25 millimetri, nessuno dei due è uguale a 50 mm, quindi l'operatore non segnala mai come Vero. 

Gli operatori di confronto e il problema del labirinto a parete

Un ciclo while può essere utilizzato con operatori di confronto e il sensore di distanza, in modo che il robot VR controlli continuamente i dati del sensore e valuti il confronto. Ciò può consentire al robot VR di eseguire un comportamento mentre un valore è al di sopra o al di sotto di una determinata soglia. Nel labirinto a parete, il risultato desiderato è quello di far avanzare il robot VR mentre il sensore di distanza si trova a più di 50 millimetri (mm) dalla parete. Quindi, dovrebbe fermarsi o girare per continuare attraverso il labirinto.

def main():
    while front_distance.get_distance(MM) > 50:
        drivetrain.drive(FORWARD)
        wait(5, MSEC)
    drivetrain.stop()

In questo esempio di videoclip, il ciclo while nel progetto mostrato a sinistra manterrà il robot VR in movimento in avanti dalla posizione di partenza, finché la condizione è soddisfatta e la distanza tra il robot VR e l'oggetto più vicino (il primo muro di fronte) è segnalata come maggiore di 50 millimetri (mm). Il robot si ferma quindi quando si avvicina alla prima parete e la distanza riportata è inferiore a 50 mm.

File video

Questa immagine spiega il flusso del progetto di cui sopra:

  • Mentre il sensore di distanza è a una distanza maggiore di 50 millimetri (mm) dal muro, l'operatore segnala Vero e rimane nel ciclo mentre
  • Quando si trova a meno di 50 millimetri (mm) dalla parete, l'operatore segnala False ed esce dal ciclo while .

Diagramma di flusso del progetto del ciclo while nel progetto di cui sopra. Il ciclo while continuerà a funzionare quando la distanza dalla parete è superiore a 50 mm e tale condizione è vera, causando l'avanzamento del robot. Quando la distanza dalla parete non è superiore a 50, la condizione riporta false e il progetto esiste nel ciclo while, causando l'arresto del robot.

Selezionare il pulsante Avanti per continuare con il resto della lezione.