Инкапсуляция основных движений робота в 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.

Основная цель — показать вам, как инкапсулировать некоторые фундаментальные коды движения в функции, а не для вычислений энкодера и манипулирования движением.

Следующие примеры функций движения помогут создать базовый код движений:

  • Более организованный
  • Более читаемый
  • Меньше ошибок

Прежде всего, вам нужно будет определить следующие основные переменные:

плавающее колесо = 10,16;
плавающий ВБ = 36,75; //на основе конфигурации V5 Clawbot

Примечание. Если вы измените передаточное число, следующий расчет может немного измениться в зависимости от передаточного числа.

Это будет обсуждаться в другой статье, посвященной энкодеру двигателя:

float EncPerCm = 360/(колесо* M_PI);
float EncPerDeg = ББ/Колесо;

Этот образец предназначен только для поворота. Например правый мотор = 100, левый мотор = -100 и т. д.

Во-вторых, когда вы просматриваете следующие примеры, вам рекомендуется найти в Интернете справочник по API для параметров и их спецификаций. Посетите:https://api.vexcode.cloud/v5/html/и найдите, например,rotateTo, чтобы ознакомиться с параметрами.


Пример 1. Инкапсуляция прямолинейного движения на основе различных расстояний

плавающее колесо = 10,16; 
плавающий ВБ = 36,75; 
float EncPerCm = 360,0 / (Колесо* 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)); 
}

// расстояние в сантиметрах
void goStraight( float distance ){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float totalEnc = расстояние * EncPerCm;
	
	// примечание: «deg» из пространства имен vex::. Поэтому вам не следует 
        // создавать еще одну переменную с именем «deg». 

       LeftMotor.setVelocity(50,0, процент);
LeftMotor.spinToPosition(totalEnc, градус, ложь);

RightMotor.setVelocity(50,0, процент);
RightMotor.spinToPosition(totalEnc, градус, ложь); while (LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, мс); возврат; } int main() { vexcodeInit(); идтиПрямо(100,0); Brain.Screen.printAt(5,60, «Готово»); reportMotionValues(LeftMotor, 30); reportMotionValues(RightMotor, 60); }

Пример 2. Инкапсуляция поворотов налево на основе различных градусов

плавающее колесо = 10,16; 
плавающий ВБ = 36,75; 
float EncPerCm = 360,0 / (Колесо* M_PI); 
float EncPerDeg = ББ/Колесо;

void TurnRight (плавающие градусы) {
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float totalEnc = градусы * EncPerDeg;
	
       // примечание: этот «градус» взят из пространства имен vex
       LeftMotor.setVelocity(100.0, процентов);
LeftMotor.spinToPosition(totalEnc, градус, ложь);

RightMotor.setVelocity(-100,0, процент);
RightMotor.spinToPosition(-totalEnc, градус, ложь); while(LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, мс); возвращение; } int main(){ ... повернуть направо (90,0); ... }

Пример 3. Инкапсулируйте левую и правую стороны в одной функции

void doTurning( float градусов ) {
	// точно такой же код, как и для TurnRight выше
}

int main() {
...
   сделатьTurning(90.0); // Правый поворот поворота
...
   сделатьТочение(-90.0); // поворот влево
}

Для более сложного программирования, если вы хотите сделать свой код более читабельным, вы можете попробовать следующее:

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

int main() {
...
   сделатьLeftTurn(90.0);  
   doRightTurning(90.0);
...
}

#defineназывается макровыражением препроцессора. Посмотрите на это выражение как на символ. Везде, где этот символ встречается в коде, онбудет замененвыражениемdoTurning(указанное значение).

Макросы препроцессора — это отдельная обширная тема, которая не будет обсуждаться в этой статье.

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

Last Updated: