ổ đĩa thông minh#
Giới thiệu#
The smartdrive class controls how a robot drives and turns using motors, wheels, and a sensor. A smartdrive can use a connected Gyro Sensor or the Brain’s built-in Inertial Sensor.
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.
Trang này sử dụng myDrivetrain làm ví dụ về tên smartdrive. Hãy thay thế bằng tên đã cấu hình của riêng bạn nếu cần.
Hàm tạo lớp#
1 — Tạo một smartdrive sử dụng
motor_grouphiện có cho phía bên trái và bên phải, cùng với Cảm biến Con quay hồi chuyển hoặc Cảm biến Quán tính.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 — Tạo một hệ thống truyền động thông minh bằng cách sử dụng
motorđối tượng hiện có cho phía bên trái và bên phải, cùng với Cảm biến Con quay hồi chuyển hoặc Cảm biến Quán tính.smartdrive( motor &l, motor &r, gyro &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à gyro hoặc inertial vật thể.
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
Các động cơ hoặc nhóm động cơ bên trái và bên phải. Cả hai tham số phải sử dụng cùng một kiểu: hoặc hai đối tượng |
|
|
Cảm biến Gyro Sensor hoặc Inertial Sensor được sử dụng bởi smartdrive. |
|
|
Chu vi của các bánh xe truyền động. Giá trị mặc định là |
|
|
Khoảng cách giữa bánh xe bên trái và bên phải. Giá trị mặc định là |
|
|
Khoảng cách giữa bánh trước và bánh sau. Giá trị mặc định là |
|
|
Đơn vị cho |
|
|
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à |
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 objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the Inertial Sensor object.
inertial myInertial = inertial(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myInertial, // Inertial Sensor
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.
turnToHeading— Xoay robot để hướng về một hướng cụ thể từ -359 đến 359 độ. Robot sẽ xoay theo hướng ngắn nhất để đạt được hướng mục tiêu.turnToRotation— Xoay robot theo hướng cụ thể.calibrateDrivetrain— Hiệu chỉnh cảm biến được cấu hình với smartdrive.
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 smartdrive , một đối tượng smartdrive phải được tạo.
/* 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 Inertial Sensor object.
inertial myInertial = inertial(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myInertial, // Inertial Sensor
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 Functions1 — Xoay robot theo hướng đã chỉ định bằng vận tốc quay hiện tại.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Xoay robot 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 );
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
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 |
|
|
Đơn vị đo góc: |
|
|
Tốc độ quay từ 0% đến 100% khi sử dụng |
|
|
Đơn vị vận tốc: |
|
|
|
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ànhfalse.
Việc chạy một chức năng chuyển động hệ thống truyền động khác trong khi lệnh
turnToHeadingđang chạy sẽ làm gián đoạn chuyển động hiện tại.turnToHeadingsử dụng hướng mục tiêu, vì vậyisDonevàisMovingcó thể được sử dụng với nó.
// 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 Functions1 — Xoay robot theo hướng quay được chỉ định bằng vận tốc quay hiện tại.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Xoay robot theo 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 );
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
Giá trị góc quay mà robot sẽ thực hiện. |
|
|
Đơn vị quay: |
|
|
Tốc độ quay từ 0% đến 100% khi sử dụng |
|
|
Đơn vị vận tốc: |
|
|
|
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ànhfalse.
Việc chạy một chức năng chuyển động hệ thống truyền động khác trong khi hàm
turnToRotationđang chạy sẽ làm gián đoạn chuyển động hiện tại.turnToRotationsử dụng phép quay mục tiêu, vì vậyisDonevàisMovingcó thể được sử dụng với nó.
// 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 Con quay hồi chuyển được kết nối hoặc Cảm biến Quán tính tích hợp của Bộ điều khiển trung tâm đượ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.
Lưu ý: 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 Con quay hồi chuyển hoặc Cảm biến Quán tính. Nó đượ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 IQ.
void calibrateDrivetrain();
Hàm này không chấp nhận bất kỳ tham số nào.
Return ValuesHàm này không trả về giá trị nào.
NotesRobot sẽ tự động hiệu chỉnh khi bắt đầu mỗi dự án khi cấu hình smartdrive trong VEXcode.
Giữ robot đứng yên trong khoảng 2 giây trong quá trình hiệu chỉnh.
Sau đây là một ví dụ về cách 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 Functionsvoid setHeading(
double value,
rotationUnits units);
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
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 |
|
|
Đơn vị đo góc: |
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 Functionsvoid setRotation(
double value,
rotationUnits units);
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
Giá trị xoay cần thiết lập cho robot. |
|
|
Đơn vị quay: |
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 (heading) là hướng mà robot đang đối mặt, được đo bằng độ. Lệnh heading trả về hướng hiện tại của robot từ 0 đến 359 độ.
Hướng di chuyển ban đầu của robot là 0 độ.
Available Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
Tùy chọn. Đơn vị để trả về hướng: |
Trả về hướng hiện tại của robot dưới dạng số thực double theo đơn vị đã chọn.
// 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 Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
Tùy chọn. Đơn vị quay ngược lại: |
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.
// 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();