在 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;
浮动WB = 36.75; //基于V5 Clawbot配置

注意:如果更改齿轮比,则以下计算可能会根据齿轮比略有变化。

这将在另一篇关注电机编码器的文章中讨论:

浮动EncPerCm = 360/(轮* M_PI);
float EncPerDeg = WB/车轮;

该示例仅适用于旋转。 例如 右电机 = 100,左电机 = -100,依此类推。

其次,当您查看以下示例时,建议您查找在线 API 参考以获取参数及其规格。 访问:https://api.vexcode.cloud/v5/html/并搜索,例如以熟悉参数。


示例1:封装基于不同距离的直线运动

浮轮=10.16; 
浮动WB = 36.75; 
浮点数 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();
	左电机.resetRotation();
	右电机.resetPosition();
	RightMotor.resetRotation();
  	
	float TotalEnc = 距离 * EncPerCm;
	
	// 注意:“deg”来自 vex:: 命名空间。 因此,您不应该 
        // 创建另一个也命名为“deg”的变量。 

       LeftMotor.setVelocity(50.0, 百分比);
LeftMotor.spinToPosition(totalEnc, deg, false);

RightMotor.setVelocity(50.0, 百分比);
RightMotor.spinToPosition(totalEnc, deg, false); while (LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, 毫秒); 返回; } int main() { vexcodeInit(); 直行(100.0); Brain.Screen.printAt(5,60, "完成"); 报告运动值(左电机,30); 报告运动值(RightMotor, 60); }

示例2:根据不同度数封装左转

浮轮=10.16; 
浮动WB = 36.75; 
浮点数 EncPerCm = 360.0 / (车轮* M_PI); 
float EncPerDeg = WB / 轮;

void TurnRight( float Degrees){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float TotalEnc = 度 * EncPerDeg;
	
       // 注意:这个“deg”来自vex命名空间
       LeftMotor.setVelocity(100.0,%);
LeftMotor.spinToPosition(totalEnc, deg, false);

RightMotor.setVelocity(-100.0, 百分比);
RightMotor.spinToPosition(-totalEnc, deg, false); while(LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, 毫秒); 返回; } int main(){ ... 右转(90.0); ... }

示例 3:将 Left 和 Right 封装在一个函数中

void doTurning( float Degrees ) {
	// 与上面的turnRight 完全相同的代码
}

int main() {
...
   doTurning(90.0); // 右枢轴转动
...
   doTurning(-90.0); // 左枢转
}

对于更高级的编程,如果您想让代码更具可读性,您可以尝试以下操作:

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

int main() {
...
   左转(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: