ổ đĩa thông minh#

Giới thiệu#

Lớp smartdrive điều khiển cách robot di chuyển và quay bằng động cơ, bánh xe và cảm biến. Một smartdrive có thể sử dụng Cảm biến quán tính, Cảm biến con quay hồi chuyển hoặc Cảm biến GPS để theo dõi hướng và vòng quay.

Bộ truyền động thông minh A smartdrive sử dụng cảm biến để giúp robot di chuyển và xoay chính xác. Khi bắt đầu mỗi dự án, hệ thống truyền động sẽ tự động hiệu chỉnh cảm biến. Giữ robot đứng yên khoảng 2 giây trong quá trình hiệu chỉnh để robot có thể di chuyển và xoay chính xác.

Lớp smartdrive dựa trên lớp drivetrain. Nó có thể sử dụng các chức năng lái và rẽ giống như drivetrain, và nó cũng bổ sung các chức năng dựa trên cảm biến như turnToHeading và turnToRotation.

Hàm tạo lớp#

1 — Tạo một smartdrive sử dụng motor_group hiện có cho phía bên trái (&l) và bên phải (&r), cùng với Cảm biến quán tính, Cảm biến con quay hồi chuyển hoặc Cảm biến GPS.

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 — Creates a smartdrive using existing motor objects for the left (&l) and right (&r) sides, along with an Inertial Sensor, Gyro Sensor, or GPS Sensor.

smartdrive(
    motor           &l,
    motor           &r,
    inertial        &g,
    double          wheelTravel = 320,
    double          trackWidth  = 320,
    double          wheelBase   = 130,
    distanceUnits   unit = mm,
    double          externalGearRatio = 1.0 );

Lớp Destructor#

Hủy đối tượng smartdrive và giải phóng các tài nguyên liên quan.

~smartdrive();

Thông số#

Tham số cảm biến có thể là inertial, gyrohoặc gps.

Tham số

Kiểu

Sự miêu tả

&l / &r

motor_group / motor

Tham chiếu đến các thể hiện motor hoặc motor_group hiện có. Cả hai tham số phải cùng loại: hoặc hai thể hiện motor_group hoặc hai thể hiện motor Tham số &l đề cập đến động cơ hoặc nhóm động cơ bên trái, và &r đề cập đến động cơ hoặc nhóm động cơ bên phải.

&g

gyro&

Tham chiếu đến một trường hợp gps, gyro, hoặc inertial hiện có.

wheelTravel

double

Chu vi của các bánh xe truyền động. Giá trị mặc định là 320.

trackWidth

double

Khoảng cách giữa bánh xe bên trái và bên phải. Giá trị mặc định là 320.

wheelBase

double

Khoảng cách giữa bánh trước và bánh sau. Giá trị mặc định là 130.

unit

distanceUnits

Đơn vị cho wheelTravel, trackWidthvà wheelBase: mm (milimét, mặc định) hoặc inches.

externalGearRatio

double

Tỷ số truyền được sử dụng để điều chỉnh quãng đường di chuyển nếu có sử dụng hộp số. Giá trị mặc định là 1.0.

Ví dụ#

/* 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

Chức năng thành viên#

Lớp smartdrive bao gồm các hàm thành viên sau:

Thao tác — Xoay robot bằng cách điều chỉnh hướng hoặc góc quay.

Cài đặt — Điều chỉnh giá trị hướng và xoay.

  • setHeading — Thay đổi hướng hiện tại của robot thành một hướng mới.

  • setRotation — Thay đổi hướng quay hiện tại của robot thành hướng quay mới.

Giá trị — Kiểm tra hướng và độ xoay.

  • heading — Trả về hướng hiện tại của robot từ 0 đến 359 độ.

  • rotation — Trả về góc xoay hiện tại của robot.

Một smartdrive cũng có thể sử dụng các hàm thành viên kế thừa từ drivetrain, chẳng hạn như drive, driveFor, turn, turnFor, stop, isDone, và isMoving.

Trước khi gọi bất kỳ hàm thành viên nào của smartdrive smartdrive , cần phải tạo một thể hiện smartdrive smartdrive , như hình bên dưới:

/* 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#

Hướng quay là hướng mà robot đang đối mặt, được đo bằng độ. Lệnh turnToHeading sẽ xoay robot để hướng về một hướng cụ thể từ -359 đến 359 độ. Robot sẽ quay theo hướng ngắn nhất để đạt được hướng mục tiêu.

Hướng di chuyển ban đầu của robot là 0 độ.

Dự án sẽ chờ cho đến khi robot hoàn thành việc quay trước khi dòng mã tiếp theo được thực thi.

Available Functions

1 — Turns the drivetrain to the specified heading using the currently configured turn velocity.

bool turnToHeading(
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

2 — Xoay hệ thống truyền động theo hướng đã chỉ định với vận tốc đã chỉ định.

bool turnToHeading(
    double        angle,
    rotationUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

Parameters

Tham số

Kiểu

Sự miêu tả

angle

double

Hướng mà robot nên quay mặt, tính bằng độ. Giá trị này có thể từ -359 đến 359 khi sử dụng deg hoặc degrees.

units

rotationUnits

Đơn vị quay: deg (độ), rev (vòng quay), hoặc raw (đơn vị quay). Một vòng quay bằng 360 độ.

velocity

double

Tốc độ quay từ 0% đến 100% khi sử dụng velocityUnits::pct, từ 0 đến 600 vòng/phút khi sử dụng rpm, hoặc từ 0 đến 3600 độ/giây khi sử dụng dps. Nếu không cung cấp tốc độ, robot sẽ quay với tốc độ quay hiện tại.

units_v

velocityUnits

Đơn vị vận tốc: velocityUnits::pct (phần trăm), rpm (vòng quay mỗi phút), hoặc dps (độ mỗi giây).

waitForCompletion

bool

true (mặc định) khiến dự án chờ cho đến khi robot quay xong trước khi dòng mã tiếp theo được thực thi. false khiến dòng mã tiếp theo được thực thi ngay lập tức.

Return Values

Trả về giá trị Boolean cho biết robot đã đạt được hướng mục tiêu hay chưa.

  • true — Robot đã đạt được hướng mục tiêu.

  • false — Robot không hoàn thành lượt chơi, hoặc hàm trả về trước khi lượt chơi hoàn tất vì waitForCompletion được đặt thành false.

Notes
  • Việc thực hiện một chức năng di chuyển hệ thống truyền động khác (chẳng hạn như turn hoặc drive) trong khi turnToHeading đang diễn ra sẽ làm gián đoạn chuyển động hiện tại.

  • Vì turnToHeading dựa trên mục tiêu (sử dụng tham số angle ), nên các hàm như isDone và isMoving hoạt động với turnToHeading.

Examples
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

turnToRotation#

turnToRotation xoay robot theo một hướng cụ thể.

Góc quay là mức độ robot đã quay, được đo bằng độ hoặc vòng quay. Khi bắt đầu một dự án, giá trị góc quay được đặt là 0 độ. Góc quay cũng có thể được đặt bằng cách sử dụng hàm setRotation.

Các giá trị xoay là tuyệt đối. Điều này có nghĩa là hướng quay phụ thuộc vào góc xoay hiện tại của robot. Xoay sang phải sẽ làm tăng góc xoay, và xoay sang trái sẽ làm giảm góc xoay.

Ví dụ, nếu robot bắt đầu ở 0 độ và bạn xoay nó một góc 720 độ, nó sẽ quay sang phải hai lần. Nếu sau đó bạn xoay nó một góc 360 độ, nó sẽ quay sang trái một lần, vì 360 nhỏ hơn 720.

Dự án sẽ chờ cho đến khi robot hoàn thành việc quay trước khi dòng mã tiếp theo được thực thi.

Available Functions

1 — Turns the drivetrain to the specified rotation using the currently configured turn velocity.

bool turnToRotation(
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

2 — Xoay hệ thống truyền động đến hướng quay đã chỉ định với vận tốc đã chỉ định.

bool turnToRotation(
    double        angle,
    rotationUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

Parameters

Tham số

Kiểu

Sự miêu tả

angle

double

Giá trị góc quay mà robot sẽ thực hiện.

units

rotationUnits

Đơn vị quay: deg (độ), rev (vòng quay), hoặc raw (đơn vị quay). Một vòng quay bằng 360 độ.

velocity

double

Tốc độ quay từ 0% đến 100% khi sử dụng velocityUnits::pct, từ 0 đến 600 vòng/phút khi sử dụng rpm, hoặc từ 0 đến 3600 độ/giây khi sử dụng dps. Nếu không cung cấp tốc độ, robot sẽ quay với tốc độ quay hiện tại.

units_v

velocityUnits

Đơn vị vận tốc: velocityUnits::pct (phần trăm), rpm (vòng quay mỗi phút), hoặc dps (độ mỗi giây).

waitForCompletion

bool

true (mặc định) khiến dự án chờ cho đến khi robot quay xong trước khi dòng mã tiếp theo được thực thi. false khiến dòng mã tiếp theo được thực thi ngay lập tức.

Return Values

Trả về giá trị Boolean cho biết robot đã đạt được góc quay mục tiêu hay chưa.

  • true — Robot đã đạt được vòng quay mục tiêu.

  • false — Robot không hoàn thành lượt chơi, hoặc hàm trả về trước khi lượt chơi hoàn tất vì waitForCompletion được đặt thành false.

Notes
  • Việc thực hiện một chức năng chuyển động hệ thống truyền động khác (chẳng hạn như turn hoặc drive) trong khi turnToRotation đang diễn ra sẽ làm gián đoạn chuyển động hiện tại.

  • Vì turnToRotation dựa trên mục tiêu (sử dụng tham số angle ), nên các hàm như isDone và isMoving hoạt động với turnToRotation.

Examples
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);

calibrateDrivetrain#

calibrateDrivetrain hiệu chỉnh Cảm biến quán tính, Cảm biến con quay hồi chuyển hoặc Cảm biến GPS được cấu hình với smartdrive.

Hiệu chuẩn giúp cảm biến đo chuyển động chính xác. Giữ robot đứng yên khoảng 2 giây trong quá trình hiệu chuẩn. Nếu robot di chuyển trong quá trình hiệu chuẩn, cảm biến có thể không đo được chuyển động chính xác.

Dự án sẽ chờ đến khi quá trình hiệu chuẩn hoàn tất trước khi dòng mã tiếp theo được thực thi.

Biến môi trường calibrateDrivetrain được VEXcode tự động tạo ra khi hệ thống truyền động được cấu hình với Cảm biến quán tính, Cảm biến GPS hoặc Cảm biến con quay hồi chuyển. Biến này được cung cấp như một phần của mã nguồn dự án và không phải là một phần của API C++ của VEX V5.

Available Functions
void calibrateDrivetrain();

Parameters

Hàm này không chấp nhận bất kỳ tham số nào.

Return Values

Hàm này không trả về giá trị nào.

Notes
  • Robot tự động hiệu chỉnh khi bắt đầu mỗi dự án.

  • Giữ robot đứng yên trong khoảng 2 giây trong quá trình hiệu chỉnh.

Function Implementation

Sau đây là phần triển khai tự động của lệnh calibrateDrivetrain được tạo bởi VEXcode:

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#

Hướng di chuyển là hướng mà robot đang đối mặt, được đo bằng độ. Lệnh setHeading thay đổi hướng di chuyển hiện tại của robot thành một giá trị hướng di chuyển mới.

Ví dụ, nếu robot đã quay mặt sang phải, việc đặt hướng quay về 0 độ sẽ biến vị trí quay mặt sang phải đó thành 0 độ mới. Sau đó, robot có thể quay đến các vị trí khác dựa trên hướng quay mới đó.

Available Functions
void  setHeading(
  double value,
  rotationUnits units);

Parameters

Tham số

Kiểu

Sự miêu tả

value

double

Giá trị hướng cần thiết lập cho robot. Giá trị này có thể nằm trong khoảng từ -359 đến 359 khi sử dụng deg hoặc degrees.

units

rotationUnits

Đơn vị đo góc: deg (độ), rev (vòng/phút), hoặc raw (đơn vị quay). Một vòng quay bằng 360 độ.

Return Values

Hàm này không trả về giá trị nào.

Examples
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

setRotation#

Góc quay là mức độ robot đã xoay, được đo bằng độ hoặc vòng quay. Khi bắt đầu một dự án, giá trị góc quay được đặt là 0 độ. Lệnh setRotation thay đổi góc quay hiện tại của robot thành một giá trị mới.

Ví dụ, nếu robot đã quay hai vòng hoàn chỉnh sang phải, giá trị góc quay của nó sẽ là 720 độ. Việc đặt góc quay về 0 độ sẽ thiết lập lại góc quay từ 720 độ về 0 độ. Sau đó, robot có thể quay theo các hướng dựa trên giá trị mới đó.

Available Functions
void  setRotation(
  double value,
  rotationUnits units);

Parameters

Tham số

Kiểu

Sự miêu tả

value

double

Giá trị xoay cần thiết lập cho robot.

units

rotationUnits

Đơn vị đo góc: deg (độ), rev (vòng/phút), hoặc raw (đơn vị quay). Một vòng quay bằng 360 độ.

Return Values

Hàm này không trả về giá trị nào.

Examples
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);

heading#

Hướng quay là hướng mà robot đang đối mặt, được đo bằng độ. Lệnh heading trả về hướng quay hiện tại của robot từ 0 đến 359 độ.

Hướng di chuyển ban đầu của robot là 0 độ.

Available Functions
double heading( rotationUnits units = rotationUnits::deg );

Parameters

Tham số

Kiểu

Sự miêu tả

units

rotationUnits

Tùy chọn. Đơn vị để trả về hướng: degrees, deg (mặc định), rev, hoặc rawMột vòng quay tương đương với 360 độ.

Return Values

Trả về hướng hiện tại của robot dưới dạng số thực double theo đơn vị đã chọn.

Examples
// 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#

Góc quay thể hiện mức độ robot đã xoay, được đo bằng độ hoặc vòng quay. Khi bắt đầu một dự án, giá trị góc quay được đặt là 0 độ. Lệnh rotation trả về góc quay hiện tại của robot.

Xoay sang phải sẽ làm tăng góc quay, và xoay sang trái sẽ làm giảm góc quay. Ví dụ, xoay hai vòng sang phải sẽ tạo ra góc quay 720 độ.

Available Functions
double rotation( rotationUnits units = rotationUnits::deg );

Parameters

Tham số

Kiểu

Sự miêu tả

units

rotationUnits

Tùy chọn. Đơn vị quay ngược lại: degrees, deg (mặc định), rev, hoặc rawMột vòng quay tương đương 360 độ.

Return Values

Trả về góc quay hiện tại của robot dưới dạng số thực double theo đơn vị đã chọn.

Examples
// 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();