Đóng gói các chuyển động cơ bản của Robot trong 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.

Mục tiêu chính là chỉ cho bạn cách gói gọn một số mã chuyển động cơ bản thành các hàm chứ không phải để tính toán bộ mã hóa và thao tác chuyển động.

Các hàm chuyển động mẫu sau đây sẽ giúp tạo mã chuyển động cơ bản của bạn:

  • Có tổ chức hơn
  • Dễ đọc hơn
  • Ít bị lỗi hơn

Trước hết, bạn sẽ cần xác định các biến cơ bản sau:

bánh phao = 10,16;
phao WB = 36,75; //dựa trên cấu hình V5 Clawbot

Lưu ý: Nếu bạn thay đổi tỷ số truyền, phép tính sau có thể thay đổi một chút dựa trên tỷ số truyền.

Điều này sẽ được thảo luận trong một bài viết khác tập trung vào bộ mã hóa động cơ:

float EncPerCm = 360/(bánh xe* M_PI);
phao EncPerDeg = WB/Bánh xe;

Mẫu này chỉ dành cho xoay trục. Ví dụ động cơ bên phải = 100, động cơ bên trái = -100, v.v.

Thứ hai, khi xem lại các mẫu sau, bạn nên tra cứu tài liệu tham khảo API trực tuyến để biết các tham số và thông số kỹ thuật của chúng. Truy cập:https://api.vexcode.cloud/v5/html/và tìm kiếm, ví dụ:rotateTođể làm quen với các tham số.


Mẫu 1: Gói gọn chuyển động đi thẳng dựa trên các khoảng cách khác nhau

bánh phao = 10,16; 
phao WB = 36,75; 
phao EncPerCm = 360,0 / (Bánh xe* 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)); 
}

// khoảng cách tính bằng centimet
void goStraight( khoảng cách nổi ){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float TotalEnc = khoảng cách * EncPerCm;
	
	// lưu ý: “deg” là từ không gian tên vex::. Vì vậy, bạn không nên 
        // tạo một biến khác cũng có tên là “deg”. 

       LeftMotor.setVelocity(50,0, phần trăm);
LeftMotor.spinToPosition(totalEnc, deg, false);

RightMotor.setVelocity(50,0, phần trăm);
RightMotor.spinToPosition(totalEnc, deg, false); trong khi (LeftMotor.isSpinning() || RightMotor.isSpinning() ) chờ(50, msec); trở về; } int main() { vexcodeInit(); goStraight(100.0); Brain.Screen.printAt(5,60, "Xong"); báo cáoMotionValues(LeftMotor, 30); báo cáoMotionValues(RightMotor, 60); }

Mẫu 2: Tóm tắt các lượt rẽ trái dựa trên nhiều mức độ khác nhau

bánh phao = 10,16; 
phao WB = 36,75; 
phao EncPerCm = 360,0 / (Bánh xe* M_PI); 
phao EncPerDeg = WB/Bánh xe;

void TurnRight( độ nổi){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float TotalEnc = độ * EncPerDeg;
	
       // lưu ý: “deg” này là từ không gian tên vex
       LeftMotor.setVelocity(100.0, phần trăm);
LeftMotor.spinToPosition(totalEnc, deg, false);

RightMotor.setVelocity(-100,0, phần trăm);
RightMotor.spinToPosition(-totalEnc, deg, false); while(LeftMotor.isSpinning() || RightMotor.isSpinning() ) chờ(50, msec); trở về; } int main(){ ... TurnRight(90.0); ... }

Mẫu 3: Đóng gói cả trái và phải trong một hàm duy nhất

void doTurning( float độ ) {
	// mã hoàn toàn giống với TurnRight trên
}

int main() {
...
   doTurn(90.0); // Xoay phải quay
...
   doTurn(-90.0); // Quay trục trái
}

Để lập trình nâng cao hơn, nếu bạn muốn làm cho mã của mình dễ đọc hơn nhiều, bạn có thể thử cách sau:

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

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

#defineđược gọi là biểu thức macro tiền xử lý. Hãy xem biểu thức này như một biểu tượng. Bất cứ nơi nào ký hiệu này xuất hiện trong mã, nósẽ được thay thếbằng biểu thứcdoTurn(giá trị được chỉ định).

Macro tiền xử lý là một chủ đề mở rộng khác và sẽ không được thảo luận trong bài viết này.

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

Last Updated: