smartdrive#
Perkenalan#
Kelas smartdrive mengontrol bagaimana robot bergerak dan berbelok menggunakan motor, roda, dan sensor. smartdrive dapat menggunakan Sensor Inersia, Sensor Giroskop, atau Sensor GPS untuk melacak arah dan rotasi.
A smartdrive uses the sensor to help the robot move and turn precisely. At the start of each project, the drivetrain calibrates the sensor automatically. Keep the robot still for about 2 seconds during calibration, so the robot can move and turn correctly.
Kelas smartdrive didasarkan pada kelas drivetrain. Kelas ini dapat menggunakan fungsi penggerak dan belok yang sama dengan drivetrain, dan juga menambahkan fungsi berbasis sensor seperti turnToHeading dan turnToRotation.
Konstruktor Kelas#
1 — Membuat smartdrive menggunakan objek motor_group
motor_groupsudah ada untuk sisi kiri (&l) dan kanan (&r), beserta Sensor Inersia, Sensor Giroskop, atau Sensor 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 — Membuat smartdrive menggunakan objek
motoryang sudah ada untuk sisi kiri (&l) dan kanan (&r), beserta Sensor Inersia, Sensor Giroskop, atau Sensor GPS.smartdrive( motor &l, motor &r, inertial &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 sensor dapat berupa inertial, gyro, atau gps objek.
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Referensi ke instance |
|
|
Referensi ke instance |
|
|
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 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
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 Inersia, Sensor Giroskop, atau Sensor GPS yang dikonfigurasi pada drivetrain.
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, instance smartdrive harus dibuat dahulu, seperti yang ditunjukkan di bawah ini:
/* 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#
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 sistem penggerak ke arah yang ditentukan menggunakan kecepatan putar yang dikonfigurasi saat ini.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Mengarahkan sistem penggerak ke arah yang ditentukan pada 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 rotasi: |
|
|
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 (seperti
turnataudrive) sementaraturnToHeadingsedang berlangsung akan mengganggu pergerakan saat ini.Karena
turnToHeadingberbasis target (menggunakan parameterangle), fungsi sepertiisDonedanisMovingbekerja denganturnToHeading.
// 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 sistem penggerak ke arah putaran yang ditentukan menggunakan kecepatan putar yang dikonfigurasi saat ini.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Memutar sistem penggerak ke arah putaran yang ditentukan pada 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 (seperti
turnataudrive) sementaraturnToRotationsedang berlangsung akan mengganggu pergerakan saat ini.Karena
turnToRotationberbasis target (menggunakan parameterangle), fungsi sepertiisDonedanisMovingbekerja denganturnToRotation.
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain mengkalibrasi Sensor Inersia, Sensor Giroskop, atau Sensor GPS yang dikonfigurasi dengan smartdrive.
Kalibrasi membantu sensor mengukur pergerakan dengan benar. Jaga agar robot tetap diam selama sekitar 2 detik selama kalibrasi. Jika robot bergerak selama kalibrasi, sensor mungkin tidak mengukur pergerakan dengan benar.
Proyek akan menunggu hingga kalibrasi selesai sebelum baris kode berikutnya dijalankan.
calibrateDrivetrain dihasilkan secara otomatis oleh VEXcode ketika sebuah drivetrain dikonfigurasi dengan Sensor Inersia, Sensor GPS, atau Sensor Gyro. Ini disediakan sebagai bagian dari kode sumber proyek dan bukan bagian dari API C++ VEX V5.
void calibrateDrivetrain();
Fungsi ini tidak menerima parameter apa pun.
Return ValuesFungsi ini tidak mengembalikan nilai.
NotesRobot tersebut melakukan kalibrasi secara otomatis di awal setiap proyek.
Jaga agar robot tetap diam selama kurang lebih 2 detik selama kalibrasi.
Berikut ini adalah 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("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#
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 arah: |
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();