Incapsulamento dei movimenti di base del robot in VEXcode Pro V5

The VEX Visual Studio Code Extension has replaced VEXcode Pro V5, which is now end-of-life.

VEXcode Blocks and VEXcode Text remain actively developed and supported for all VEX platforms.

L'obiettivo principale è mostrare come incapsulare alcuni dei codici di movimento fondamentali in funzioni, non per il calcolo dell'encoder e le manipolazioni del movimento.

Le seguenti funzioni di movimento di esempio ti aiuteranno a creare il codice dei movimenti di base:

  • Più organizzato
  • Più leggibile
  • Meno soggetto a errori

Prima di tutto, dovrai definire le seguenti variabili di base:

Ruota galleggiante = 10,16;
float WB = 36,75; //basato sulla configurazione V5 Clawbot

Nota: se si modifica il rapporto di trasmissione, il seguente calcolo potrebbe cambiare leggermente in base al rapporto di trasmissione.

Questo sarà discusso in un altro articolo incentrato sull'encoder del motore:

float EncPerCm = 360/(ruota* M_PI);
float EncPerDeg = WB/Rotella;

Questo esempio è solo per la rotazione con perno. Per esempio motore destro = 100, motore sinistro = -100, ecc.

In secondo luogo, quando esamini i seguenti esempi, ti invitiamo a cercare il riferimento API online per i parametri e le relative specifiche. Visita:https://api.vexcode.cloud/v5/html/e cerca, ad esempio,rotateToper familiarizzare con i parametri.


Esempio 1: incapsulare il movimento rettilineo in base a varie distanze

Ruota galleggiante = 10,16; 
float WB = 36,75; 
float EncPerCm = 360,0 / (Ruota* M_PI); 

void reportMotionValues(motor m, int line){

  Brain.Screen.printAt(5,line, "%8.2lf%8.2lf%8.2f", 
    m.position(rev), 
    m.position(deg)); 
}

// la distanza è in centimetri
void goStraight( float distance ){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float totalEnc = distanza * EncPerCm;
	
	// nota: "deg" deriva dallo spazio dei nomi vex::. Pertanto, non dovresti 
        // creare un'altra variabile denominata anche "deg". 

       LeftMotor.setVelocity(50,0, percentuale);
LeftMotor.spinToPosition(totalEnc, deg, false);

RightMotor.setVelocity(50,0, percentuale);
RightMotor.spinToPosition(totalEnc, deg, false); while (LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, msec); ritorno; } int main() { vexcodeInit(); vaiDritto(100,0); Brain.Screen.printAt(5,60, "Fatto"); reportValoriMovimento(MotoreSinistro, 30); reportValoriMovimento(MotoreDestra, 60); }

Esempio 2: incapsulare le svolte a sinistra in base a vari gradi

Ruota galleggiante = 10,16; 
float WB = 36,75; 
float EncPerCm = 360,0 / (Ruota* M_PI); 
float EncPerDeg = WB / Ruota;

void turnRight( float gradi){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float totalEnc = gradi * EncPerDeg;
	
       // nota: questo "gradi" proviene dal namespace vex
       LeftMotor.setVelocity(100.0, percent);
LeftMotor.spinToPosition(totalEnc, deg, false);

RightMotor.setVelocity(-100,0, percentuale);
RightMotor.spinToPosition(-totalEnc, deg, false); while(LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, msec); ritorno; } int principale(){ ... gira a destra(90.0); ... }

Esempio 3: incapsulare sia la sinistra che la destra in un'unica funzione

void doTurning( float Degrees ) {
	// esattamente lo stesso codice di turnRight sopra
}

int main() {
...
   fareTornitura(90.0); // Perno a destra: rotazione
...
   doTornitura(-90.0); // Gira il perno a sinistra
}

Per una programmazione più avanzata, se vuoi rendere il tuo codice molto più leggibile, puoi provare quanto segue:

#define doLeftTurn(d) doTurning(d)
#define doRigtTurn(d) doTurning(-d)

int main() {
...
   faiGirareSinistra(90.0);  
   fareTornitura a destra(90.0);
...
}

#defineè chiamata espressione macro del preprocessore. Considera questa espressione come un simbolo. Ovunque sia presente questo simbolo nel codice,verrà sostituitocon l'espressionedoTurning(il valore specificato).

La macro del preprocessore è un argomento ampio e diverso e non verrà discusso in questo articolo.

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

Last Updated: