ổ đĩ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 hoặc Cảm biến con quay hồi chuyển để 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_grouphiệ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 hoặc Cảm biến con quay hồi chuyển.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
motorobjects for the left (&l) and right (&r) sides, along with an Inertial Sensor or Gyro 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 hoặc gyro vật thể.
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
Tham chiếu đến các thể hiện |
|
|
Tham chiếu đến một phiên bản |
|
|
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 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.
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 quán tính hoặc Cảm biến con quay hồi chuyển đã cấu hình của hệ thống truyền động.
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 Functions1 — Turns the drivetrain to the specified heading using the currently configured turn velocity.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — 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 );
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ị 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 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 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ư
turnhoặcdrive) trong khiturnToHeadingđang diễn ra sẽ làm gián đoạn chuyển động hiện tại.Vì
turnToHeadingdựa trên mục tiêu (sử dụng tham sốangle), nên các hàm nhưisDonevàisMovinghoạt động vớiturnToHeading.
// 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 — Turns the drivetrain to the specified rotation using the currently configured turn velocity.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — 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 );
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 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ư
turnhoặcdrive) trong khiturnToRotationđang diễn ra sẽ làm gián đoạn chuyển động hiện tại.Vì
turnToRotationdựa trên mục tiêu (sử dụng tham sốangle), nên các hàm nhưisDonevàisMovinghoạt động vớiturnToRotation.
// 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 hoặc Cảm biến con quay hồi chuyển đượ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 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 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 VEX EXP C++.
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 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.
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 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ị để trả về hướng: |
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();