스마트드라이브#
소개#
smartdrive 클래스는 모터, 휠 및 센서를 사용하여 로봇의 주행 및 회전 방식을 제어합니다. smartdrive 관성 센서 또는 자이로 센서를 사용하여 방향 및 회전을 추적할 수 있습니다.
smartdrive 센서를 사용하여 로봇이 정밀하게 움직이고 회전할 수 있도록 도와줍니다. 각 프로젝트 시작 시 구동계는 센서를 자동으로 보정합니다. 보정하는 동안 로봇을 약 2초 동안 움직이지 않도록 고정해 주시면 로봇이 올바르게 움직이고 회전할 수 있습니다.
smartdrive 클래스는 drivetrain 클래스를 기반으로 합니다. drivetrain과 동일한 드라이브 및 회전 기능을 사용할 수 있으며, turnToHeading 및 turnToRotation 과 같은 센서 기반 기능도 추가합니다.
클래스 생성자#
1 — 기존의
motor_group객체를 사용하여 왼쪽(&l)과 오른쪽(&r) 측면에 관성 센서 또는 자이로 센서와 함께 스마트 드라이브를 생성합니다.smartdrive( motor_group &l, motor_group &r, inertial &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
2 — 기존의
motor객체를 사용하여 왼쪽(&l)과 오른쪽(&r) 측면에 대한 스마트 드라이브를 생성하고 관성 센서 또는 자이로 센서를 추가합니다.smartdrive( motor &l, motor &r, inertial &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
클래스 소멸자#
smartdrive 객체를 파괴하고 관련 리소스를 해제합니다.
~smartdrive();
매개변수#
센서 매개변수는 inertial 또는 gyro 객체일 수 있습니다.
매개변수 |
유형 |
설명 |
|---|---|---|
|
|
기존 |
|
|
기존 |
|
|
구동계 휠의 원주입니다. 기본값은 |
|
|
왼쪽 바퀴와 오른쪽 바퀴 사이의 거리입니다. 기본값은 |
|
|
앞바퀴와 뒷바퀴 사이의 거리입니다. 기본값은 |
|
|
|
|
|
기어를 사용하는 경우 주행 거리를 조정하는 데 사용되는 기어비입니다. 기본값은 |
예#
/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Create the left and right motor instances
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the inertial instance
inertial myInertial = inertial(PORT3);
// Create the smartdrive instance
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor object
rightMotor, // right motor object
myInertial, // inertial object
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
회원 기능#
smartdrive 클래스는 다음과 같은 멤버 함수를 포함합니다.
동작 — 방향 또는 회전을 사용하여 로봇을 회전시키세요.
turnToHeading— 로봇을 -359도에서 359도 사이의 특정 방향으로 회전시킵니다. 로봇은 목표 방향에 도달하기 위해 가장 짧은 방향으로 회전합니다.turnToRotation— 로봇을 특정 회전으로 회전시킵니다.calibrateDrivetrain— 드라이브 트레인의 구성된 관성 센서 또는 자이로 센서를 보정합니다.
설정 — 방향 및 회전 값을 조정합니다.
setHeading— 로봇의 현재 방향을 새로운 방향으로 변경합니다.setRotation— 로봇의 현재 회전을 새로운 회전으로 변경합니다.
값 — 헤딩과 회전을 확인하세요.
A smartdrive can also use the inherited member functions from drivetrain, such as drive, driveFor, turn, turnFor, stop, isDone, and isMoving.
smartdrive 멤버 함수를 호출하기 전에 아래와 같이 smartdrive 인스턴스를 생성해야 합니다.
/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Create the left and right motor instances
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the inertial instance
inertial myInertial = inertial(PORT3);
// Create the smartdrive instance
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor object
rightMotor, // right motor object
myInertial, // inertial object
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
turnToHeading#
헤딩은 로봇이 향하는 방향을 도 단위로 나타낸 것입니다. turnToHeading 명령어를 사용하면 로봇은 -359도에서 359도 사이의 특정 방향으로 회전합니다. 로봇은 목표 방향에 도달하기 위해 가장 짧은 경로로 회전합니다.
로봇의 초기 진행 방향은 0도입니다.
이 프로젝트는 로봇이 회전을 완료할 때까지 기다린 후 다음 코드 줄을 실행합니다.
Available Functions1 — 현재 구성된 회전 속도를 사용하여 구동계를 지정된 방향으로 회전시킵니다.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — 지정된 속도로 구동계를 지정된 방향으로 회전시킵니다.
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
매개변수 |
유형 |
설명 |
|---|---|---|
|
|
로봇이 향해야 할 방향을 도 단위로 지정합니다. |
|
|
회전 단위는 |
|
|
회전 속도는 |
|
|
속도 단위: |
|
|
|
로봇이 목표 방향에 도달했는지 여부를 부울 값으로 반환합니다.
true— 로봇이 목표 방향에 도달했습니다.false— 로봇이 턴을 완료하지 못했거나,waitForCompletionfalse로 설정되어 턴이 완료되기 전에 함수가 반환되었습니다.
turnToHeading이 진행 중인 동안 다른 구동계 이동 기능(예:turn또는drive)을 실행하면 현재 이동이 중단됩니다.turnToHeading대상 기반(angle매개변수 사용)이므로isDone및isMoving와 같은 함수는turnToHeading과 함께 작동합니다.
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
turnToRotation#
turnToRotation 로봇을 특정 회전 방향으로 회전시킵니다.
회전은 로봇이 회전한 정도를 도 또는 회전수로 측정한 값입니다. 프로젝트 시작 시 회전 값은 0도로 설정됩니다. 회전은 setRotation 함수를 사용하여 설정할 수도 있습니다.
회전 값은 절대값입니다. 즉, 회전 방향은 로봇의 현재 회전 각도에 따라 결정됩니다. 오른쪽으로 회전하면 회전 각도가 증가하고, 왼쪽으로 회전하면 회전 각도가 감소합니다.
예를 들어, 로봇이 0도에서 시작하여 720도 회전하면 오른쪽으로 두 번 회전합니다. 그런 다음 360도 회전하면 720도보다 360도가 작기 때문에 왼쪽으로 한 번 회전합니다.
이 프로젝트는 로봇이 회전을 완료할 때까지 기다린 후 다음 코드 줄을 실행합니다.
Available Functions1 — 현재 구성된 회전 속도를 사용하여 구동계를 지정된 회전으로 회전시킵니다.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — 구동계를 지정된 회전수와 지정된 속도로 회전시킵니다.
bool turnToRotation( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
매개변수 |
유형 |
설명 |
|---|---|---|
|
|
로봇이 회전할 회전 값입니다. |
|
|
회전 단위는 |
|
|
회전 속도는 |
|
|
속도 단위: |
|
|
|
로봇이 목표 회전수에 도달했는지 여부를 부울 값으로 반환합니다.
true— 로봇이 목표 회전수에 도달했습니다.false— 로봇이 턴을 완료하지 못했거나,waitForCompletionfalse로 설정되어 턴이 완료되기 전에 함수가 반환되었습니다.
turnToRotation이 진행 중인 동안 다른 구동계 동작 기능(예:turn또는drive)을 실행하면 현재 동작이 중단됩니다.turnToRotation대상 기반(angle매개변수 사용)이므로isDone및isMoving와 같은 함수는turnToRotation과 함께 작동합니다.
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain 스마트드라이브에 구성된 관성 센서 또는 자이로 센서를 보정합니다.
보정은 센서가 움직임을 정확하게 측정하는 데 도움이 됩니다. 보정하는 동안 로봇을 약 2초 동안 움직이지 않도록 고정하십시오. 보정 중에 로봇이 움직이면 센서가 움직임을 정확하게 측정하지 못할 수 있습니다.
프로젝트는 보정 작업이 완료될 때까지 기다린 후 다음 코드 줄을 실행합니다.
calibrateDrivetrain 관성 센서 또는 자이로 센서로 구동계를 구성할 때 VEXcode에서 자동으로 생성됩니다. 이는 프로젝트 소스 코드의 일부로 제공되며 VEX EXP C++ API의 일부는 아닙니다.
void calibrateDrivetrain();
이 함수는 매개변수를 받지 않습니다.
Return Values이 함수는 값을 반환하지 않습니다.
Notes로봇은 각 프로젝트 시작 시 자동으로 보정 작업을 수행합니다.
보정 과정 동안 로봇을 약 2초 동안 움직이지 않도록 고정하십시오.
다음은 VEXcode에서 자동 생성된 calibrateDrivetrain 구현입니다.
bool vexcode_initial_drivetrain_calibration_completed = false;
void calibrateDrivetrain() {
wait(200, msec);
Brain.Screen.print("Calibrating");
Brain.Screen.newLine();
Brain.Screen.print("Inertial");
DrivetrainInertial.calibrate();
while (DrivetrainInertial.isCalibrating()) {
wait(25, msec);
}
vexcode_initial_drivetrain_calibration_completed = true;
// Clears the screen and returns the cursor to row 1, column 1.
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
}
setHeading#
헤딩은 로봇이 바라보는 방향을 도 단위로 나타낸 것입니다. setHeading 은 로봇의 현재 헤딩 값을 새로운 헤딩 값으로 변경합니다.
예를 들어, 로봇이 오른쪽을 향하도록 회전한 상태에서 방향을 0도로 설정하면 오른쪽을 향한 위치가 새로운 0도가 됩니다. 그러면 로봇은 이 새로운 방향을 기준으로 다른 위치로 회전할 수 있습니다.
Available Functionsvoid setHeading(
double value,
rotationUnits units);
매개변수 |
유형 |
설명 |
|---|---|---|
|
|
로봇의 방향 값을 설정합니다. |
|
|
제목 단위는 |
이 함수는 값을 반환하지 않습니다.
Examples// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
setRotation#
회전은 로봇이 회전한 정도를 나타내며, 각도 또는 회전수로 측정됩니다. 프로젝트 시작 시 회전 값은 0도로 설정됩니다. setRotation 명령어를 사용하면 로봇의 현재 회전 값이 새로운 값으로 변경됩니다.
예를 들어, 로봇이 오른쪽으로 두 바퀴를 완전히 돌았다면 회전 값은 720도가 됩니다. 회전 값을 0도로 설정하면 회전 값이 720도에서 0도로 초기화됩니다. 그러면 로봇은 이 새로운 값을 기준으로 회전할 수 있습니다.
Available Functionsvoid setRotation(
double value,
rotationUnits units);
매개변수 |
유형 |
설명 |
|---|---|---|
|
|
로봇에 설정할 회전 값입니다. |
|
|
회전 단위는 |
이 함수는 값을 반환하지 않습니다.
Examples// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
heading#
헤딩은 로봇이 향하는 방향을 도 단위로 나타낸 것입니다. heading 로봇의 현재 헤딩 값을 0도에서 359도 사이의 값으로 반환합니다.
로봇의 초기 진행 방향은 0도입니다.
Available Functionsdouble heading( rotationUnits units = rotationUnits::deg );
매개변수 |
유형 |
설명 |
|---|---|---|
|
|
선택 사항입니다. 회전 방향을 나타내는 단위는 |
선택한 단위로 로봇의 현재 방향을 double 로 이루어진 double형 값으로 반환합니다.
// Show heading before and after turning
Brain.Screen.print("Before: %f", myDrivetrain.heading(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.heading(degrees));
myDrivetrain.stop();
rotation#
회전은 로봇이 회전한 정도를 나타내며, 각도 또는 회전수로 측정됩니다. 프로젝트 시작 시 회전 값은 0도로 설정됩니다. rotation 입력하면 로봇의 현재 회전 값이 반환됩니다.
오른쪽으로 돌면 회전 각도가 증가하고, 왼쪽으로 돌면 회전 각도가 감소합니다. 예를 들어, 오른쪽으로 두 바퀴를 완전히 돌면 720도 회전하게 됩니다.
Available Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
매개변수 |
유형 |
설명 |
|---|---|---|
|
|
선택 사항입니다. 회전 방향을 나타내는 단위는 |
선택한 단위로 로봇의 현재 회전 값을 double 로 이루어진 double형 값으로 반환합니다.
// Show rotation before and after turning
Brain.Screen.print("Before: %f", myDrivetrain.rotation(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.rotation(degrees));
myDrivetrain.stop();