smartdrive#
Perkenalan#
Kelas smartdrive mengontrol bagaimana robot bergerak dan berbelok menggunakan motor, roda, dan Sensor Gyro. smartdrive menggunakan Sensor Gyro yang terhubung untuk melacak arah dan rotasi.
A smartdrive menggunakan Sensor Gyro untuk membantu robot bergerak dan berbelok dengan tepat. Pada awal setiap proyek, sistem penggerak secara otomatis mengkalibrasi Sensor Gyro. Biarkan robot tetap diam selama sekitar 2 detik selama kalibrasi, agar robot dapat bergerak dan berbelok dengan benar.
Kelas smartdrive didasarkan pada kelas drivetrain. Sebuah smartdrive dapat menggunakan fungsi penggerak dan belok yang sama dengan drivetrain, dan juga menambahkan fungsi berbasis sensor seperti turnToHeading dan turnToRotation.
Halaman ini menggunakan myDrivetrain sebagai contoh nama smartdrive. Ganti dengan nama yang Anda konfigurasi sendiri sesuai kebutuhan.
Konstruktor Kelas#
1 — Membuat smartdrive menggunakan objek
motor_groupyang sudah ada untuk sisi kiri dan kanan, beserta Sensor Gyro.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 — Membuat smartdrive menggunakan objek
motoryang sudah ada untuk sisi kiri dan kanan, beserta Sensor Gyro.smartdrive( motor &l, motor &r, gyro &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
Destruktor Kelas#
Menghapus objek smartdrive dan melepaskan sumber daya terkait.
~smartdrive();
Parameter#
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Motor kiri dan kanan atau kelompok motor. Kedua parameter harus menggunakan tipe yang sama: baik dua objek |
|
|
The Gyro Sensor used by the smartdrive. |
|
|
Keliling roda penggerak. Nilai defaultnya adalah |
|
|
Jarak antara roda kiri dan kanan. Nilai defaultnya adalah |
|
|
Jarak antara roda depan dan belakang. Nilai defaultnya adalah |
|
|
Satuan untuk |
|
|
Rasio gigi yang digunakan untuk menyesuaikan jarak penggerak jika gigi digunakan. Nilai default adalah |
Contoh#
/* 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
Fungsi Keanggotaan#
Kelas smartdrive mencakup fungsi anggota berikut:
Aksi — Putar robot menggunakan arah atau rotasi.
turnToHeading— Memutar robot untuk menghadap arah tertentu dari -359 hingga 359 derajat. Robot akan berbelok ke arah terpendek untuk mencapai arah target.turnToRotation— Memutar robot ke rotasi tertentu.calibrateDrivetrain— Mengkalibrasi Sensor Gyro yang dikonfigurasi dengan smartdrive.
Pengaturan — Sesuaikan nilai arah dan rotasi.
setHeading— Mengubah arah robot saat ini ke arah yang baru.setRotation— Mengubah rotasi robot saat ini ke rotasi baru.
Nilai — Periksa judul dan rotasi.
heading— Mengembalikan arah haluan robot saat ini dari 0 hingga 359 derajat.rotation— Mengembalikan rotasi robot saat ini.
A smartdrive juga dapat menggunakan fungsi anggota yang diwarisi dari drivetrain, seperti drive, driveFor, turn, turnFor, stop, isDone, dan isMoving.
Sebelum memanggil fungsi anggota smartdrive pun, objek smartdrive harus dibuat dahulu.
/* 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#
Heading adalah arah yang dihadapi robot, diukur dalam derajat. Perintah turnToHeading memutar robot untuk menghadap heading tertentu dari -359 hingga 359 derajat. Robot akan berbelok melalui arah terpendek untuk mencapai heading target.
Arah awal pergerakan robot adalah 0 derajat.
Proyek ini akan menunggu hingga robot selesai berputar sebelum menjalankan baris kode berikutnya.
Available Functions1 — Memutar robot ke arah yang ditentukan menggunakan kecepatan putar saat ini.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Memutar robot ke arah yang ditentukan dengan kecepatan yang ditentukan.
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Arah yang harus dihadapi robot, dalam derajat. Ini bisa dari -359 hingga 359 saat menggunakan |
|
|
Satuan arah: |
|
|
Kecepatan untuk berbelok berkisar dari 0% hingga 100% saat menggunakan |
|
|
Satuan kecepatan: |
|
|
|
Mengembalikan nilai Boolean yang menunjukkan apakah robot mencapai arah target.
true— Robot mencapai arah target.false— Robot tidak menyelesaikan giliran, atau fungsi kembali sebelum giliran selesai karenawaitForCompletiondiatur kefalse.
Menjalankan fungsi pergerakan penggerak lainnya saat
turnToHeadingsedang berjalan akan mengganggu pergerakan saat ini.turnToHeadingmenggunakan arah target, jadiisDonedanisMovingdapat digunakan dengannya.
// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
turnToRotation#
turnToRotation memutar robot ke rotasi tertentu.
Rotasi adalah seberapa banyak robot telah berputar, diukur dalam derajat atau putaran. Pada awal proyek, nilai rotasi diatur ke 0 derajat. Rotasi juga dapat diatur menggunakan fungsi setRotation.
Nilai rotasi bersifat absolut. Artinya, arah putaran bergantung pada rotasi robot saat ini. Berbelok ke kanan akan meningkatkan rotasi, dan berbelok ke kiri akan mengurangi rotasi.
Sebagai contoh, jika robot mulai dari 0 derajat dan Anda memutarnya hingga mencapai rotasi 720 derajat, robot akan berbelok ke kanan dua kali. Jika kemudian Anda memutarnya hingga mencapai rotasi 360 derajat, robot akan berbelok ke kiri sekali, karena 360 kurang dari 720.
Proyek ini akan menunggu hingga robot selesai berputar sebelum menjalankan baris kode berikutnya.
Available Functions1 — Memutar robot ke arah rotasi yang ditentukan menggunakan kecepatan putar saat ini.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Memutar robot ke arah rotasi yang ditentukan dengan kecepatan yang ditentukan.
bool turnToRotation( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Nilai rotasi yang akan dicapai robot. |
|
|
Satuan rotasi: |
|
|
Kecepatan untuk berbelok berkisar dari 0% hingga 100% saat menggunakan |
|
|
Satuan kecepatan: |
|
|
|
Mengembalikan nilai Boolean yang menunjukkan apakah robot mencapai rotasi target.
true— Robot mencapai rotasi target.false— Robot tidak menyelesaikan giliran, atau fungsi kembali sebelum giliran selesai karenawaitForCompletiondiatur kefalse.
Menjalankan fungsi pergerakan penggerak lainnya saat
turnToRotationsedang berjalan akan mengganggu pergerakan saat ini.turnToRotationmenggunakan rotasi target, jadiisDonedanisMovingdapat digunakan dengannya.
// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain mengkalibrasi Sensor Gyro yang dikonfigurasi dengan smartdrive.
Kalibrasi membantu Sensor Giroskop mengukur pergerakan dengan benar. Jaga agar robot tetap diam selama sekitar 2 detik selama kalibrasi. Jika robot bergerak selama kalibrasi, Sensor Giroskop mungkin tidak mengukur pergerakan dengan benar.
Proyek akan menunggu hingga kalibrasi selesai sebelum baris kode berikutnya dijalankan.
calibrateDrivetrain dihasilkan secara otomatis oleh VEXcode ketika drivetrain dikonfigurasi dengan Sensor Gyro. Ini disediakan sebagai bagian dari kode sumber proyek dan bukan bagian dari API C++ VEX IQ.
void calibrateDrivetrain();
Fungsi ini tidak menerima parameter apa pun.
Return ValuesFungsi ini tidak mengembalikan nilai.
NotesRobot melakukan kalibrasi secara otomatis di awal setiap proyek ketika smartdrive dikonfigurasi di VEXcode.
Jaga agar robot tetap diam selama kurang lebih 2 detik selama kalibrasi.
Berikut ini adalah contoh implementasi yang dihasilkan secara otomatis dari calibrateDrivetrain yang dibuat oleh VEXcode:
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#
Heading adalah arah yang dihadapi robot, diukur dalam derajat. Perintah setHeading mengubah heading robot saat ini ke nilai heading baru.
Sebagai contoh, jika robot telah berputar menghadap ke kanan, mengatur arah menjadi 0 derajat akan menjadikan posisi menghadap ke kanan tersebut sebagai 0 derajat yang baru. Kemudian robot dapat berputar ke posisi lain berdasarkan arah yang baru tersebut.
Available Functionsvoid setHeading(
double value,
rotationUnits units);
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Nilai haluan yang akan diatur untuk robot. Nilai ini dapat berkisar dari -359 hingga 359 saat menggunakan |
|
|
Satuan arah: |
Fungsi ini tidak mengembalikan nilai.
Examples// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
setRotation#
Rotasi adalah seberapa banyak robot telah berputar, diukur dalam derajat atau putaran. Pada awal proyek, nilai rotasi diatur ke 0 derajat. Perintah setRotation mengubah rotasi robot saat ini ke nilai baru.
Sebagai contoh, jika robot telah melakukan dua putaran penuh ke kanan, nilai rotasinya akan menjadi 720 derajat. Mengatur rotasi ke 0 derajat akan mengatur ulang rotasi tersebut dari 720 menjadi 0 derajat. Kemudian robot dapat berputar berdasarkan nilai rotasi yang baru tersebut.
Available Functionsvoid setRotation(
double value,
rotationUnits units);
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Nilai rotasi yang akan diatur untuk robot. |
|
|
Satuan rotasi: |
Fungsi ini tidak mengembalikan nilai.
Examples// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
heading#
Arah haluan adalah arah yang dihadapi robot, diukur dalam derajat. Perintah heading mengembalikan arah haluan robot saat ini dari 0 hingga 359 derajat.
Arah awal pergerakan robot adalah 0 derajat.
Available Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Opsional. Satuan arah kembali: |
Mengembalikan arah haluan robot saat ini sebagai double dalam satuan yang dipilih.
// 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#
Rotasi adalah seberapa jauh robot telah berputar, diukur dalam derajat atau putaran. Pada awal proyek, nilai rotasi diatur ke 0 derajat. Perintah rotation mengembalikan rotasi robot saat ini.
Memutar ke kanan akan meningkatkan putaran, dan memutar ke kiri akan mengurangi putaran. Misalnya, melakukan dua putaran penuh ke kanan akan menghasilkan putaran sebesar 720 derajat.
Available Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Opsional. Satuan untuk mengembalikan rotasi: |
Mengembalikan rotasi robot saat ini sebagai double dalam satuan yang dipilih.
// 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();