Hermetyzacja podstawowych ruchów robota w 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.

Głównym celem jest pokazanie, jak enkapsulować niektóre podstawowe kody ruchu w funkcje, a nie na potrzeby obliczeń enkodera i manipulacji ruchem.

Poniższe przykładowe funkcje ruchu pomogą w stworzeniu podstawowego kodu ruchu:

  • Bardziej zorganizowane
  • Bardziej czytelne
  • Mniej podatna na błędy

Przede wszystkim musisz zdefiniować następujące podstawowe zmienne:

koło pływakowe = 10,16;
pływak WB = 36,75; //w oparciu o konfigurację Clawbot V5

Uwaga: Jeśli zmienisz przełożenie skrzyni biegów, poniższe obliczenia mogą się nieznacznie zmienić w zależności od przełożenia skrzyni biegów.

Zostanie to omówione w innym artykule poświęconym enkoderowi silnika:

float EncPerCm = 360/(koło* M_PI);
float EncPerDeg = WB/Koło;

Ta próbka dotyczy wyłącznie obrotu obrotowego. Np prawy silnik = 100, lewy silnik = -100 itd.

Po drugie, przeglądając poniższe próbki, zachęcamy do zapoznania się z dokumentacją API online w celu uzyskania parametrów i ich specyfikacji. Wejdź na:https://api.vexcode.cloud/v5/html/i wyszukaj np.obróćTow celu zapoznania się z parametrami.


Próbka 1: Enkapsuluj ruch prosty w oparciu o różne odległości

koło pływakowe = 10,16; 
pływak WB = 36,75; 
pływak EncPerCm = 360,0 / (Koło* M_PI); 

void reportMotionValues(motor m, int line){

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

// odległość w centymetrach
void goStraight( odległość pływająca ){
	
	LeftMotor.resetPosition();
	LewySilnik.resetRotation();
	PrawySilnik.resetPosition();
	PrawySilnik.resetRotation();
  	
	float totalEnc = odległość * EncPerCm;
	
	// uwaga: „deg” pochodzi z przestrzeni nazw vex::. Dlatego nie powinieneś 
        // tworzyć kolejnej zmiennej zwanej także „deg”. 

       LeftMotor.setVelocity(50,0, procent);
LeftMotor.spinToPosition(totalEnc, stopnie, fałsz);

RightMotor.setVelocity(50,0, procent);
RightMotor.spinToPosition(totalEnc, stopnie, fałsz); póki (LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, ms); powrót; } int main() { vexcodeInit(); goStraight(100,0); Brain.Screen.printAt(5,60, „Gotowe”); reportMotionValues ​​(Lewy Silnik, 30); raportówMotionValues ​​(RightMotor, 60); }

Próbka 2: Enkapsuluj skręty w lewo w oparciu o różne stopnie

koło pływakowe = 10,16; 
pływak WB = 36,75; 
pływak EncPerCm = 360,0 / (Koło* M_PI); 
pływaki EncPerDeg = WB / Koło;

void turnRight(stopnie pływakowe){
	
	LeftMotor.resetPosition();
	LewySilnik.resetRotation();
	PrawySilnik.resetPosition();
	PrawySilnik.resetRotation();
  	
	float totalEnc = stopnie * EncPerDeg;
	
       // uwaga: ten „stopień” pochodzi z przestrzeni nazw vex
       LeftMotor.setVelocity(100.0, percent);
LeftMotor.spinToPosition(totalEnc, stopnie, fałsz);

RightMotor.setVelocity(-100,0, procent);
RightMotor.spinToPosition(-totalEnc, stopnie, fałsz); while(LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, ms); powrót; } int main(){ ... skręć w prawo (90,0); ... }

Próbka 3: Hermetyzuj lewą i prawą stronę w jednej funkcji

void doTurning( float stopni ) {
	// dokładnie ten sam kod, co w przypadku turnRight powyżej
}

int main() {
...
   doToczenie(90,0); // Obrót obrotu w prawo
...
   doToczenie(-90,0); // Obrót w lewo
}

W przypadku bardziej zaawansowanego programowania, jeśli chcesz, aby Twój kod był znacznie bardziej czytelny, możesz spróbować wykonać następujące czynności:

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

int main() {
...
   doSkręt w lewo(90.0);  
   doRightTurning(90,0);
...
}

#definenazywane jest makrowyrażeniem preprocesora. Potraktuj to wyrażenie jako symbol. Gdziekolwiek w kodzie ten symbol wystąpi, zostanie onzastąpionywyrażeniemdoTurning(określona wartość).

Makro preprocesora to inny obszerny temat i nie będzie omawiany w tym artykule.

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

Last Updated: