Codice controller personalizzato in VEXcode EXP

L'uso del controller può semplificare la guida e lo spostamento del robot per completare un'attività. Tuttavia, esistono limitazioni all'utilizzo del programma Drive e, a seconda della costruzione del robot o dell'attività da svolgere, potresti volere controlli diversi. La codifica del controller consente di ottimizzare il controller per adattarlo meglio al robot e all'attività da svolgere. Esistono diversi modi per codificare il controller in VEXcode EXP. Ognuno ha i suoi vantaggi e limiti e alcuni metodi sono più adatti a determinate situazioni a seconda del risultato desiderato.

Questo articolo ti guiderà attraverso tre diverse opzioni per la codifica personalizzata del controller in VEXcode EXP. Ogni metodo verrà descritto con i suoi vantaggi, limiti e un caso d'uso di esempio per guidarti nella scelta di un metodo. Ai fini di questo articolo, tutti gli esempi di codice mostrati sono stati creati per Clawbot. Tuttavia, gli stessi concetti potrebbero essere applicati a numerose altre build presenti su builds.vex.come a build personalizzate.

Opzione 1: Assegnazione dei pulsanti nella configurazione del dispositivo

Questa opzione è ottima quando utilizzi una build standard, come BaseBot o Clawbot, e desideri essere subito operativo.

Questa opzione consente di assegnare motori, una trasmissione o gruppi di motori ai pulsanti sul controller nella configurazione del dispositivo. Per ulteriori informazioni su come assegnare i pulsanti al controller nella configurazione del dispositivo, visualizza questo articolo.

Menu Dispositivi VEXcode EXP con le opzioni del Controller visualizzate. Lo schema dei comandi a pulsanti mostra che i due joystick guidano il robot in una configurazione di guida a carro armato. I pulsanti Su e Giù controllano un ArmMotorGroup, mentre i pulsanti dell'asse R controllano un ClawMotor.

Riepilogo dell'opzione 1: assegnazione dei pulsanti nella configurazione del dispositivo

Vantaggi

Limitazioni

Esempio di situazione

  • Configurazione rapida senza necessità di codifica
  • Metodo più semplice
  • Facilmente regolabile
  • È possibile assegnare ai pulsanti singoli motori, una trasmissione standard e gruppi di motori
  • Le assegnazioni dei pulsanti sono limitate al numero di pulsanti sul Controller
  • La trasmissione non può superare i 4 motori o essere personalizzata (è supportata solo un'unità standard, non un'unità H, olonomica o altra trasmissione personalizzata)
  • Manipolazione di una build standard come BaseBot, Clawbot o una semplice modifica di tali build standard. Ad esempio, un BaseBot con un'aspirazione attaccata alla parte anteriore controllata da un gruppo motore.
  • Manipolare rapidamente quali pulsanti corrispondono a diversi comportamenti sul robot senza molta codifica

Opzione 2: utilizzo di un ciclo infinito

Se stai utilizzando una build personalizzata invece di una build standard o desideri poter avere una maggiore personalizzazione nel tuo controller, questa opzione è buona. L'utilizzo di un ciclo Forever è un'ottima introduzione per creare codice personalizzato per il controller.

Questa opzione inserisce tutte le condizioni per il Controller e i pulsanti associati in un ciclo Forever. Ciò fornisce maggiore flessibilità, soprattutto con progetti di build personalizzati, ma richiede anche una certa esperienza di codifica. Tuttavia, una considerazione quando si utilizza questa opzione è la lunghezza e la complessità del progetto. Più condizioni vengono aggiunte, più lungo può diventare lo stack di codice. Ciò significa che più blocchi devono essere eseguiti in ordine e, quando ci sono molti blocchi, ciò può rallentare l'esecuzione del progetto. Un'esecuzione più lenta del progetto può creare un ritardo tra la pressione dei pulsanti del controller e la visualizzazione del comportamento del robot.

L'esempio specifico mostrato di seguito è un modo in cui puoi utilizzare un ciclo Forever con un robot di progettazione personalizzato (come un robot con una trasmissione personalizzata) per guidare il robot e manipolare l'artiglio e il braccio per interagire con gli oggetti.

Area di lavoro VEXcode EXP con il progetto dei blocchi Opzione 2 aperto. Il progetto è costituito da una pila di blocchi e da dispositivi configurati. Il menu Dispositivi si apre lateralmente ed elenca i seguenti dispositivi: ArmMotor sulla porta 3, ClawMotor sulla porta 4, Controller, LeftMotor sulla porta 6 e RightMotor sulla porta 10. Infine c'è la pila di blocchi per gestire l'input del controller. Lo stack riporta: All'avvio, imposta l'arresto di ArmMotor su hold e imposta l'arresto di ClawMotor su hold. Il resto dello stack è contenuto in un ciclo Forever. Si legge Forever, imposta la velocità del motore sinistro sulla posizione % del controller 3, fai girare il motore sinistro in avanti, imposta la velocità del motore destro sulla posizione % del controller 2 e fai girare il motore destro in avanti. Successivamente, se si preme Controller Up, allora ArmMotor gira verso l'alto, altrimenti se si preme Controller E Down, allora ArmMotor gira verso il basso, altrimenti ArmMotor si ferma. Infine, se il Controller A viene premuto, allora ClawMotor si apre, altrimenti se il Controller B viene premuto, allora ClawMotor si chiude, altrimenti ClawMotor si ferma.

Scarica il file di progetto VEXcode EXP "Opzione 2" >

Spiegazione del codice opzione 2.

Pezzo di codice

Spiegazione

Primo piano della pila di blocchi nel progetto VEXcode EXP Opzione 2. Sono evidenziati due blocchi che si trovano all'esterno del ciclo Forever dello stack: imposta ArmMotor stopping to hold e imposta ClawMotor stopping to hold.

Per questo esempio di codice è stato utilizzato un Clawbot. Quando si utilizzano i pulsanti sul Controller per sollevare e abbassare il braccio, non appena il pulsante viene rilasciato, a causa della gravità il braccio ricadrà verso il basso. Impostando sia il braccio che l'artiglio su "mantieni" si garantirà che sia il braccio che l'artiglio rimarranno in posizione anche dopo che i pulsanti sul controller saranno stati rilasciati.

Primo piano della pila di blocchi nel progetto VEXcode EXP Opzione 2. All'interno del ciclo Forever dello stack sono evidenziati quattro blocchi. Leggono Forever, impostano la velocità del motore sinistro sulla posizione % del Controller 3, fanno girare il motore sinistro in avanti, impostano la velocità del motore destro sulla posizione % del Controller 2 e fanno girare il motore destro in avanti. Schema dell'EXP Controller con i suoi pulsanti e joystick etichettati. La vista è dalla parte anteriore del controller. Gli assi del joystick sinistro sono etichettati come 3 e 4. Il pulsante centrale del joystick sinistro è etichettato L3. I due pulsanti rotondi sotto il joystick sinistro sono etichettati Su e Giù. Gli assi del joystick destro sono etichettati come 1 e 2. Il pulsante centrale del joystick destro è etichettato R3. I due pulsanti rotondi sotto il joystick destro sono etichettati A e B.

Per questo esempio di codice è stato utilizzato un Clawbot. Quando si utilizzano i pulsanti sul Controller per sollevare e abbassare il braccio, non appena il pulsante viene rilasciato, a causa della gravità il braccio ricadrà verso il basso. Impostando sia il braccio che l'artiglio su "mantieni" si garantirà che sia il braccio che l'artiglio rimarranno in posizione anche dopo che i pulsanti sul controller saranno stati rilasciati.

Viene utilizzato un ciclo Forever per verificare continuamente quali pulsanti vengono premuti sul Controller.

I blocchi [Imposta velocità motore] vengono utilizzati per impostare la velocità del motore sulla posizione corrente del controller lungo gli assi 2 e 3. Ciò equivale a impostare un'auto in modalità guida. Ciò non fa necessariamente muovere l'auto, la regola e basta.

Ciascun asse del joystick restituisce un valore compreso tra -100 e +100 e restituisce un valore zero quando centrato. Ciò significa quindi che gli assi del joystick, quando premuti, equivalgono a una variazione compresa tra -100% e 100%. Più gli assi vengono spinti verso 100 o -100, più velocemente girerà il motore.

Il blocco [Spin] viene quindi utilizzato per spostare effettivamente il motore. Ciò equivale a premere il gas sull'auto una volta impostata la direzione. Ciò consente a ciascun motore di essere controllato da uno dei quattro assi del controller.

Primo piano della pila di blocchi nel progetto VEXcode EXP Opzione 2. Un blocco if, else if, else è evidenziato all'interno del ciclo Forever dello stack. Legge se viene premuto Controller Su, allora ArmMotor gira verso l'alto, altrimenti se viene premuto Controller Giù, allora ArmMotor gira verso il basso, altrimenti ArmMotor si ferma.

Per questo esempio di codice è stato utilizzato un Clawbot. Quando si utilizzano i pulsanti sul Controller per sollevare e abbassare il braccio, non appena il pulsante viene rilasciato, a causa della gravità il braccio ricadrà verso il basso. Impostando sia il braccio che l'artiglio su "mantieni" si garantirà che sia il braccio che l'artiglio rimarranno in posizione anche dopo che i pulsanti sul controller saranno stati rilasciati.

Il blocco [If then else if then else] viene utilizzato per mappare determinati comportamenti ai pulsanti premuti o rilasciati sul Controller. In questa sezione del codice, le condizioni impostate sono se vengono premuti i pulsanti Su o Giù. Se è così, si verificheranno determinati comportamenti, come il braccio che si alza e si abbassa. C'è anche la parte else della condizione, se nessuno dei due pulsanti viene premuto, il braccio è impostato per smettere di muoversi.

Nota che la seguente sezione di codice nel progetto Claw segue la stessa spiegazione.

Riepilogo dell'opzione 2: utilizzo di un ciclo infinito

Vantaggi

Limitazioni

Situazione di esempio

  • Può ospitare costruzioni personalizzate, in particolare trasmissioni con più di 4 motori
  • Può assegnare più comportamenti a un singolo pulsante
  • Può assegnare comportamenti a diversi assi sul controller (a differenza delle uniche opzioni Left Arcade, Right Arcade, Split Arcade e Tank Drive nella configurazione del dispositivo)
  • Richiede una certa conoscenza della codifica (condizionali, loop e conoscenza dei pulsanti/joystick sul controller)
  • Potenziale rallentamento dell'esecuzione del progetto o ritardo nel tempo di risposta dei pulsanti. Poiché tutti i comandi sono contenuti in un singolo ciclo Forever, l'esecuzione del codice potrebbe essere lenta a seconda delle condizioni impostate e della lunghezza del codice.
  • Utilizzo del controller con un robot personalizzato, in particolare con una trasmissione non standard
  • Quando si desidera assegnare più comportamenti a un singolo pulsante. Ad esempio, quando si preme il pulsante Su, l'Artiglio può aprirsi, avanzare e quindi chiudersi attorno a un oggetto.

Opzione 3: Utilizzo degli eventi

Se desideri molta personalizzazione per il tuo controller, l'utilizzo degli eventi è l'opzione migliore per te. La semplice pressione di un pulsante può attivare più comportamenti del robot, come premere un pulsante per aprire l'artiglio, sollevare il braccio e avanzare per una distanza prestabilita. Cercare di codificare più comportamenti per pulsante all'interno di un ciclo Forever causerebbe un notevole rallentamento dell'esecuzione del progetto: l'utilizzo di Eventi ti consente di farlo in modo più efficace.

Questa opzione utilizza gli eventi per interrompere il flusso del progetto. Questo è simile all'utilizzo di un ciclo Forever, ma consente di organizzare meglio il codice, in modo che l'esecuzione del pulsante abbia un tempo di risposta più rapido. Un tempo di risposta più rapido significa che non vedrai un ritardo tra la pressione dei pulsanti del controller e la visualizzazione del comportamento del robot. Questo esempio mostra gli stessi comportamenti del progetto precedente, ma eseguiti utilizzando gli eventi anziché il ciclo Forever.

Area di lavoro VEXcode EXP con il progetto dei blocchi Opzione 3 aperto. Il progetto è composto da 11 piccole pile di blocchi e ha dispositivi configurati. Il menu Dispositivi si apre lateralmente ed elenca i seguenti dispositivi: ArmMotor sulla porta 3, ClawMotor sulla porta 4, Controller, LeftMotor sulla porta 6 e RightMotor sulla porta 10. Infine ci sono le 11 piccole pile di blocchi che gestiscono l'input del Controller. Il primo stack riporta: All'avvio, imposta l'arresto di ArmMotor su hold e quindi imposta l'arresto di ClawMotor su hold. La seconda pila riporta: Quando l'asse 3 del controller viene modificato, imposta la velocità del motore sinistro sulla posizione % del controller 3 e quindi fai girare il motore sinistro in avanti. La terza pila riporta: Quando l'asse 2 del controller viene modificato, imposta la velocità del motore destro sulla posizione % del controller 2 e quindi fai girare il motore destro in avanti. La quarta pila riporta la dicitura Quando si preme il pulsante Su del controller, ArmMotor ruota verso l'alto. La quinta pila riporta la dicitura Quando il pulsante Su del controller viene rilasciato, arresta ArmMotor. La sesta pila riporta la dicitura Quando si preme il pulsante Giù del controller, ArmMotor ruota verso il basso. La settima pila riporta la dicitura Quando il pulsante Giù del controller viene rilasciato, ArmMotor si arresta. L'ottava pila riporta la dicitura Quando si preme il pulsante A del controller, il ClawMotor si apre. La nona pila riporta la dicitura Quando il pulsante A del controller viene rilasciato, arresta ClawMotor. La decima pila riporta la scritta Quando si preme il pulsante B del controller, il ClawMotor si chiude. L'undicesima e ultima pila riporta la dicitura Quando il pulsante B del controller viene rilasciato, arresta ClawMotor.

Scarica il file di progetto VEXcode EXP "Opzione 3" >

Spiegazione del codice opzione 3.

Pezzo di codice

Spiegazione

Primo piano di una pila di blocchi nel progetto VEXcode EXP Opzione 3. Lo stack riporta: All'avvio, imposta l'arresto di ArmMotor su hold e quindi imposta l'arresto di ClawMotor su hold.

Per questo esempio di codice è stato utilizzato un Clawbot. Quando si utilizzano i pulsanti sul Controller per sollevare e abbassare il braccio, non appena il pulsante viene rilasciato, a causa della gravità il braccio ricadrà verso il basso. Impostando sia il braccio che l'artiglio su "mantieni" si garantirà che sia il braccio che l'artiglio rimarranno in posizione anche dopo che i pulsanti sul controller saranno stati rilasciati.

Primo piano di due pile di blocchi nel progetto VEXcode EXP Opzione 3. La prima pila riporta: Quando l'asse 3 del controller viene modificato, impostare la velocità del motore sinistro sulla posizione % del controller 3 e quindi far girare il motore sinistro in avanti. La seconda pila riporta: Quando l'asse 2 del controller viene modificato, imposta la velocità del motore destro sulla posizione % del controller 2 e quindi fai girare il motore destro in avanti. Schema dell'EXP Controller con i suoi pulsanti e joystick etichettati. La vista è dalla parte anteriore del controller. Gli assi del joystick sinistro sono etichettati come 3 e 4. Il pulsante centrale del joystick sinistro è etichettato L3. I due pulsanti rotondi sotto il joystick sinistro sono etichettati Su e Giù. Gli assi del joystick destro sono etichettati come 1 e 2. Il pulsante centrale del joystick destro è etichettato R3. I due pulsanti rotondi sotto il joystick destro sono etichettati A e B.

Per questo esempio di codice è stato utilizzato un Clawbot. Quando si utilizzano i pulsanti sul Controller per sollevare e abbassare il braccio, non appena il pulsante viene rilasciato, a causa della gravità il braccio ricadrà verso il basso. Impostando sia il braccio che l'artiglio su "mantieni" si garantirà che sia il braccio che l'artiglio rimarranno in posizione anche dopo che i pulsanti sul controller saranno stati rilasciati.

{When controller axis} I blocchi evento vengono utilizzati per attivare determinati comportamenti quando uno dei quattro assi sul Controller viene modificato utilizzando i joystick.

I blocchi [Imposta velocità motore] vengono utilizzati per impostare la velocità del motore sulla posizione corrente del controller lungo gli assi A e D. Ciò equivale a impostare un'auto in modalità guida. Ciò non fa necessariamente muovere l'auto, la regola e basta.

Ciascun asse del joystick restituisce un valore compreso tra -100 e +100 e restituisce un valore zero quando centrato. Ciò significa quindi che gli assi del joystick, quando premuti, equivalgono a una variazione compresa tra -100% e 100%. Più gli assi vengono spinti verso 100 o -100, più velocemente girerà il motore.

Il blocco [Spin] viene quindi utilizzato per spostare effettivamente il motore. Ciò equivale a premere il gas sull'auto una volta impostata la direzione. Ciò consente a ciascun motore di essere controllato da uno dei quattro assi del controller.

Primo piano di quattro pile di blocchi nel progetto VEXcode EXP Opzione 3. La prima pila riporta la scritta Quando si preme il pulsante Su del controller, ArmMotor ruota verso l'alto. La seconda pila riporta la dicitura Quando il pulsante Su del controller viene rilasciato, ArmMotor si arresta. La terza pila riporta la dicitura Quando si preme il pulsante Giù del controller, ArmMotor ruota verso il basso. La quarta pila riporta la dicitura Quando il pulsante Giù del controller viene rilasciato, ArmMotor si arresta.

Per questo esempio di codice è stato utilizzato un Clawbot. Quando si utilizzano i pulsanti sul Controller per sollevare e abbassare il braccio, non appena il pulsante viene rilasciato, a causa della gravità il braccio ricadrà verso il basso. Impostando sia il braccio che l'artiglio su "mantieni" si garantirà che sia il braccio che l'artiglio rimarranno in posizione anche dopo che i pulsanti sul controller saranno stati rilasciati.

{When controller axis} I blocchi eventi vengono utilizzati per mappare determinati comportamenti ai pulsanti premuti o rilasciati sul controller. In questa sezione del codice, le condizioni impostate sono se vengono premuti i pulsanti Su o Giù. Se è così, si verificheranno determinati comportamenti, come il braccio che si alza, si abbassa o si ferma.

Nota che l'ultima sezione di codice nel progetto per Claw segue la stessa spiegazione.

Riepilogo dell'opzione 3: utilizzo degli eventi

Vantaggi

Limitazioni

Situazione di esempio

  • Può ospitare costruzioni personalizzate, in particolare trasmissioni con più di 4 motori
  • Può assegnare più comportamenti a un singolo pulsante
  • Può assegnare comportamenti a diversi assi sul controller (a differenza delle uniche opzioni Left Arcade, Right Arcade, Split Arcade e Tank Drive nella configurazione del dispositivo)
  • Esecuzione del codice più rapida e quindi reattività dei pulsanti (poiché ciascuna condizione viene richiamata separatamente e non incorporata in un unico stack di codice)
  • Richiede la massima conoscenza della codifica delle opzioni (condizionali, loop, eventi e conoscenza dei pulsanti/joystick sul controller)
  • Utilizzo del controller con un robot personalizzato, in particolare con una trasmissione non standard
  • Quando si desidera assegnare più comportamenti a un singolo pulsante senza ritardi. Ad esempio, quando si preme il pulsante Su, l'Artiglio può aprirsi, avanzare e quindi chiudersi attorno a un oggetto.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: