Zapouzdření základních pohybů robota ve 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.

Hlavním cílem je ukázat vám, jak zapouzdřit některé základní pohybové kódy do funkcí, nikoli pro výpočty kodéru a manipulace s pohybem.

Následující ukázkové funkce pohybu vám pomohou vytvořit základní pohybový kód:

  • Více organizované
  • Čtivější
  • Méně náchylné k chybám

Nejprve budete muset definovat následující základní proměnné:

plovákové kolo = 10,16;
plovoucí WB = 36,75; //založeno na konfiguraci V5 Clawbot

Poznámka: Pokud změníte převodový poměr, následující výpočet se může mírně změnit na základě převodového poměru.

To bude diskutováno v jiném článku zaměřeném na kodér motoru:

plovoucí EncPerCm = 360/(kolečko* M_PI);
plovoucí EncPerDeg = WB/kolo;

Tento vzorek je určen pouze pro otočné otáčení. Např pravý motor = 100, levý motor = -100 atd.

Za druhé, když si prohlédnete následující ukázky, doporučujeme vám vyhledat parametry a jejich specifikace v online referenci API. Navštivte:https://api.vexcode.cloud/v5/html/a vyhledejte např.rotationTo, abyste se seznámili s parametry.


Ukázka 1: Zapouzdření jdoucího přímého pohybu na základě různých vzdáleností

plovákové kolo = 10,16; 
plovoucí WB = 36,75; 
plovák EncPerCm = 360,0 / (Kolo* 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)); 
}

// vzdálenost je v centimetrech
void goStraight( float distance ){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float totalEnc = vzdálenost * EncPerCm;
	
	// poznámka: „deg“ je z jmenného prostoru vex::. Proto byste neměli 
        // vytvářet další proměnnou také pojmenovanou jako „deg“. 

       LeftMotor.setVelocity(50.0, procent);
LeftMotor.spinToPosition(totalEnc, deg, false);

RightMotor.setVelocity(50,0, procent);
RightMotor.spinToPosition(totalEnc, deg, false); while (LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, msec); návrat; } int main() { vexcodeInit(); goStraight(100,0); Brain.Screen.printAt(5,60, "Hotovo"); reportMotionValues(LeftMotor, 30); reportMotionValues(RightMotor, 60); }

Příklad 2: Zapouzdření levých zatáček na základě různých stupňů

plovákové kolo = 10,16; 
plovoucí WB = 36,75; 
plovák EncPerCm = 360,0 / (Kolo* M_PI); 
plovoucí EncPerDeg = WB / Kolo;

void turnRight( plovoucí stupně){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float totalEnc = stupně * EncPerDeg;
	
       // poznámka: tento „stupeň“ je z jmenného prostoru vex
       LeftMotor.setVelocity(100.0, procent);
LeftMotor.spinToPosition(totalEnc, deg, false);

RightMotor.setVelocity(-100,0, procent);
RightMotor.spinToPosition(-totalEnc, deg, false); while(LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, msec); návrat; } int main(){ ... turnRight(90.0); ... }

Ukázka 3: Zapouzdření levé i pravé strany do jediné funkce

void doTurning( float Degrees ) {
	// přesně stejný kód jako turnRight nad
}

int main() {
...
   doTurning(90.0); // Otočení pravého čepu
...
   doTurning(-90,0); // Otočení levého čepu
}

Pro pokročilejší programování, pokud chcete, aby byl váš kód mnohem čitelnější, můžete zkusit následující:

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

int main() {
...
   doLeftTurn(90.0);  
   doRightTurning(90.0);
...
}

#definese nazývá makrovýraz preprocesoru. Podívejte se na tento výraz jako na symbol. Kdekoli se v kódu vyskytuje tento symbol, budenahrazenovýrazemdoTurning (zadaná hodnota).

Makro preprocesoru je jiné rozsáhlé téma a v tomto článku se jím nebudeme zabývat.

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

Last Updated: