스마트드라이브#
소개#
smartdrive 클래스는 모터, 휠 및 자이로 센서를 사용하여 로봇의 주행 및 회전 방식을 제어합니다. smartdrive 연결된 자이로 센서를 사용하여 방향과 회전을 추적합니다.
A smartdrive uses the Gyro Sensor to help the robot move and turn precisely. At the start of each project, the drivetrain calibrates the Gyro Sensor automatically. Keep the robot still for about 2 seconds during calibration, so the robot can move and turn correctly.
smartdrive 클래스는 smartdrive 클래스를 기반으로 합니다. drivetrain drivetrain과 동일한 드라이브 및 회전 기능을 사용할 수 있으며, turnToHeading 및 turnToRotation 과 같은 센서 기반 기능도 추가합니다.
이 페이지에서는 예시 스마트 드라이브 이름으로 myDrivetrain 사용합니다. 필요에 따라 구성한 이름으로 변경하십시오.
클래스 생성자#
1 — 기존의
motor_group객체(좌우)와 자이로 센서를 사용하여 스마트 드라이브를 생성합니다.smartdrive( motor_group &l, motor_group &r, gyro &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
2 — 기존의
motor객체(좌우측)와 자이로 센서를 사용하여 스마트 드라이브를 생성합니다.smartdrive( motor &l, motor &r, gyro &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
클래스 소멸자#
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 objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the Gyro Sensor object.
gyro myGyro = gyro(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myGyro, // Gyro Sensor
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.
Before calling any smartdrive member functions, a smartdrive object must be created.
/* 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 objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the Gyro Sensor object.
gyro myGyro = gyro(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myGyro, // Gyro Sensor
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실행 중인 동안 다른 구동계 동작 기능을 실행하면 현재 동작이 중단됩니다.turnToHeading대상 방향을 사용하므로isDone및isMoving을 함께 사용할 수 있습니다.
// 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실행 중인 동안 다른 구동계 동작 기능을 실행하면 현재 동작이 중단됩니다.turnToRotation대상 회전을 사용하므로isDone및isMoving을 함께 사용할 수 있습니다.
// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain 스마트드라이브로 구성된 자이로 센서를 보정합니다.
보정은 자이로 센서가 움직임을 정확하게 측정하는 데 도움이 됩니다. 보정하는 동안 로봇을 약 2초 동안 움직이지 않도록 고정하십시오. 보정 중에 로봇이 움직이면 자이로 센서가 움직임을 정확하게 측정하지 못할 수 있습니다.
프로젝트는 보정 작업이 완료될 때까지 기다린 후 다음 코드 줄을 실행합니다.
calibrateDrivetrain 자이로 센서로 구동계를 구성할 때 VEXcode에서 자동으로 생성됩니다. 이는 프로젝트 소스 코드의 일부로 제공되며 VEX IQ C++ API의 일부는 아닙니다.
void calibrateDrivetrain();
이 함수는 매개변수를 받지 않습니다.
Return Values이 함수는 값을 반환하지 않습니다.
NotesVEXcode에서 스마트드라이브를 구성하면 로봇은 각 프로젝트 시작 시 자동으로 보정됩니다.
보정 과정 동안 로봇을 약 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("Gyro");
DrivetrainGyro.calibrate();
while (DrivetrainGyro.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();