VEXcode Pro V5에서 기본 로봇 동작 캡슐화

주요 목표는 인코더 계산 및 모션 조작을 위한 것이 아니라 일부 기본 모션 코드를 함수로 캡슐화하는 방법을 보여주는 것입니다.

다음 샘플 모션 함수는 기본 모션 코드를 만드는 데 도움이 됩니다.

  • 더 체계적으로
  • 더 읽기 쉬움
  • 오류 발생 가능성 감소

우선, 다음과 같은 기본 변수를 정의해야 합니다.

플로트 휠 = 10.16;
플로트 WB = 36.75; //V5 Clawbot 구성 기반

참고: 기어비를 변경하면 기어비에 따라 다음 계산이 약간 변경될 수 있습니다.

이에 대해서는 모터 인코더에 초점을 맞춘 다른 기사에서 논의할 것입니다.

float EncPerCm = 360/(wheel* M_PI);
float EncPerDeg = WB/휠;

이 샘플은 피벗 회전에만 사용됩니다. 예: 오른쪽 모터 = 100, 왼쪽 모터 = -100 등

둘째, 다음 샘플을 검토할 때 매개변수 및 해당 사양에 대한 온라인 API 참조를 찾아보는 것이 좋습니다. 매개변수에 익숙해지려면https://api.vexcode.cloud/v5/html/방문하여 예를 들어을 검색하세요.


샘플 1: 다양한 거리를 기반으로 직선 운동 캡슐화

플로트 휠 = 10.16; 
플로트 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)); 
}

// 거리는 센티미터 단위입니다.
void goStraight( float distance ){
	
	LeftMotor.resetPosition();
	왼쪽모터.resetRotation();
	오른쪽모터.resetPosition();
	오른쪽모터.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, msec); 반환; } int main() { vexcodeInit(); 직진(100.0); Brain.Screen.printAt(5,60, "완료"); 보고MotionValues(LeftMotor, 30); 보고MotionValues(RightMotor, 60); }

샘플 2: 다양한 각도에 따라 좌회전 캡슐화

플로트 휠 = 10.16; 
플로트 WB = 36.75; 
float EncPerCm = 360.0 / (Wheel* M_PI); 
float EncPerDeg = WB / 휠;

voidturnRight(부동 각도){
	
	LeftMotor.resetPosition();
	왼쪽모터.resetRotation();
	오른쪽모터.resetPosition();
	오른쪽모터.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, msec); 반환; } int 메인(){ ... TurnRight(90.0); ... }

샘플 3: 왼쪽과 오른쪽을 단일 함수로 캡슐화

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() {
...
   doLeftTurn(90.0);  
   do우회전(90.0);
...
}

#define은 전처리기 매크로 표현식이라고 합니다. 이 표현을 상징으로 보세요. 코드에서 이 기호가 나타날 때마다표현식doTurning(지정된 값)로 대체됩니다.

전처리기 매크로는 다른 광범위한 주제이므로 이 기사에서는 다루지 않습니다.

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

Last Updated: