Merangkum Pergerakan Robot Dasar dalam 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.

Tujuan utamanya adalah untuk menunjukkan kepada Anda cara merangkum beberapa kode gerak mendasar ke dalam fungsi, bukan untuk kalkulasi encoder dan manipulasi gerak.

Fungsi gerak contoh berikut akan membantu Anda membuat kode gerak dasar:

  • Lebih terorganisir
  • Lebih mudah dibaca
  • Kurang rentan terhadap kesalahan

Pertama-tama, Anda perlu mendefinisikan variabel dasar berikut:

float Wheel = 10.16;
float WB = 36.75; //berdasarkan konfigurasi V5 Clawbot

Catatan: Jika Anda mengubah rasio roda gigi, perhitungan berikut mungkin sedikit berubah berdasarkan rasio roda gigi.

Hal ini akan dibahas dalam artikel lain yang berfokus pada encoder motor:

float EncPerCm = 360/(roda* M_PI);
float EncPerDeg = WB/Roda;

Contoh ini hanya untuk putaran pivot. Misalnya Motor kanan = 100, motor kiri = -100, dst.

Kedua, saat Anda meninjau contoh berikut, Anda dianjurkan untuk mencari referensi API daring untuk parameter dan spesifikasinya. Kunjungi:https://api.vexcode.cloud/v5/html/dan cari, misalnya,rotateTountuk membiasakan diri dengan parameternya.


Contoh 1: Merangkum Gerak Lurus Berdasarkan Berbagai Jarak

float Wheel = 10.16; 
float WB = 36.75; 
float EncPerCm = 360.0 / (Wheel* 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)); 
}

// jarak dalam sentimeter
void goStraight( float distance ){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float totalEnc = distance * EncPerCm;
	
	// catatan: “deg” berasal dari namespace vex::. Oleh karena itu, Anda tidak boleh 
        // membuat variabel lain yang juga diberi nama “deg”. 

       LeftMotor.setVelocity(50,0, persen);
LeftMotor.spinToPosition(totalEnc, derajat, false);

RightMotor.setVelocity(50,0, persen);
RightMotor.spinToPosition(totalEnc, derajat, false); while (LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, mdtk); return; } int main() { vexcodeInit(); goStraight(100,0); Brain.Screen.printAt(5,60, "Selesai"); reportMotionValues(LeftMotor, 30); reportMotionValues(RightMotor, 60); }

Contoh 2: Merangkum Belok Kiri Berdasarkan Berbagai Derajat

float Wheel = 10.16; 
float WB = 36.75; 
float EncPerCm = 360.0 / (Wheel* M_PI); 
float EncPerDeg = WB / Wheel;

void turnRight( float degrees){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float totalEnc = degrees * EncPerDeg;
	
       // catatan: “deg” ini dari namespace vex
       LeftMotor.setVelocity(100.0, persen);
LeftMotor.spinToPosition(totalEnc, deg, false);

RightMotor.setVelocity(-100.0, persen);
RightMotor.spinToPosition(-totalEnc, deg, false); sementara(LeftMotor.isSpinning() || RightMotor.isSpinning() ) tunggu(50, msec); kembali; } int main(){ ... belokKanan(90.0); ... }

Contoh 3: Enkapsulasi Kiri dan Kanan dalam Satu Fungsi

void doTurning( float degrees ) {
	// kode yang sama persis dengan turnRight di atas
}

int main() {
...
   doTurning(90.0); // Putar poros kanan
...
   doTurning(-90.0); // Putar pivot kiri
}

Untuk pemrograman tingkat lanjut, jika Anda ingin membuat kode Anda lebih mudah dibaca, Anda dapat mencoba yang berikut ini:

#define putarKiri(d) putarPutar(d)
#define putarKanan(d) putarPutar(-d)

int main() {
...
   lakukanBelokKiri(90.0);  
   lakukanBelokKanan(90.0);
...
}

#definedisebut ekspresi makro praprosesor. Lihatlah ungkapan ini sebagai sebuah simbol. Di mana pun simbol ini muncul dalam kode, simbol tersebutakan digantikandengan ekspresidoTurning(nilai yang ditentukan).

Makro praprosesor adalah topik luas yang berbeda dan tidak akan dibahas dalam artikel ini.

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

Last Updated: