smartdrive#

Perkenalan#

Kelas smartdrive mengontrol bagaimana robot bergerak dan berbelok menggunakan motor, roda, dan sensor. smartdrive dapat menggunakan Sensor Inersia atau Sensor Giroskop 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 yang sudah ada untuk sisi kiri (&l) dan kanan (&r), beserta Sensor Inersia atau Sensor Giroskop.

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 motor yang sudah ada untuk sisi kiri (&l) dan kanan (&r), beserta Sensor Inersia atau Sensor Giroskop.

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 atau gyro objek.

Parameter

Jenis

Keterangan

&l / &r

motor_group / motor

Referensi ke instance motor atau motor_group yang sudah ada. Kedua parameter harus bertipe sama: baik dua instance motor_group atau dua instance motor Parameter &l mengacu pada motor atau grup motor kiri, dan &r mengacu pada motor atau grup motor kanan.

&g

gyro&

Referensi ke instance gyro atau inertial yang sudah ada.

wheelTravel

double

Keliling roda penggerak. Nilai defaultnya adalah 320.

trackWidth

double

Jarak antara roda kiri dan kanan. Nilai defaultnya adalah 320.

wheelBase

double

Jarak antara roda depan dan belakang. Nilai defaultnya adalah 130.

unit

distanceUnits

Satuan untuk wheelTravel, trackWidth, dan wheelBase: mm (milimeter, standar) atau inches.

externalGearRatio

double

Rasio gigi yang digunakan untuk menyesuaikan jarak penggerak jika gigi digunakan. Nilai default adalah 1.0.

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.

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 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 Functions

1 — Memutar sistem penggerak ke arah yang ditentukan menggunakan kecepatan putar yang dikonfigurasi saat ini.

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

2 — 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 );

Parameters

Parameter

Jenis

Keterangan

angle

double

Arah yang harus dihadapi robot, dalam derajat. Ini bisa dari -359 hingga 359 saat menggunakan deg atau degrees.

units

rotationUnits

Satuan rotasi: deg (derajat), rev (revolusi), atau raw (satuan mentah). Satu revolusi sama dengan 360 derajat.

velocity

double

Kecepatan untuk berbelok berkisar dari 0% hingga 100% saat menggunakan velocityUnits::pct, dari 0 hingga 600 rpm saat menggunakan rpm, atau dari 0 hingga 3600 derajat per detik saat menggunakan dpsJika tidak ada kecepatan yang diberikan, robot akan berbelok dengan kecepatan berbelok saat ini.

units_v

velocityUnits

Satuan kecepatan: velocityUnits::pct (persen), rpm (putaran per menit), atau dps (derajat per detik).

waitForCompletion

bool

true (default) membuat proyek menunggu hingga robot selesai berputar sebelum baris kode berikutnya dijalankan. false membuat baris kode berikutnya dijalankan segera.

Return Values

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 karena waitForCompletion diatur ke false.

Notes
  • Menjalankan fungsi pergerakan penggerak lainnya (seperti turn atau drive) sementara turnToHeading sedang berlangsung akan mengganggu pergerakan saat ini.

  • Karena turnToHeading berbasis target (menggunakan parameter angle ), fungsi seperti isDone dan isMoving bekerja dengan turnToHeading.

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

1 — Memutar sistem penggerak ke arah putaran yang ditentukan menggunakan kecepatan putar yang dikonfigurasi saat ini.

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

2 — 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 );

Parameters

Parameter

Jenis

Keterangan

angle

double

Nilai rotasi yang akan dicapai robot.

units

rotationUnits

Satuan rotasi: deg (derajat), rev (revolusi), atau raw (satuan mentah). Satu revolusi sama dengan 360 derajat.

velocity

double

Kecepatan untuk berbelok berkisar dari 0% hingga 100% saat menggunakan velocityUnits::pct, dari 0 hingga 600 rpm saat menggunakan rpm, atau dari 0 hingga 3600 derajat per detik saat menggunakan dpsJika tidak ada kecepatan yang diberikan, robot akan berbelok dengan kecepatan berbelok saat ini.

units_v

velocityUnits

Satuan kecepatan: velocityUnits::pct (persen), rpm (putaran per menit), atau dps (derajat per detik).

waitForCompletion

bool

true (default) membuat proyek menunggu hingga robot selesai berputar sebelum baris kode berikutnya dijalankan. false membuat baris kode berikutnya dijalankan segera.

Return Values

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 karena waitForCompletion diatur ke false.

Notes
  • Menjalankan fungsi pergerakan penggerak lainnya (seperti turn atau drive) sementara turnToRotation sedang berlangsung akan mengganggu pergerakan saat ini.

  • Karena turnToRotation berbasis target (menggunakan parameter angle ), fungsi seperti isDone dan isMoving bekerja dengan turnToRotation.

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

calibrateDrivetrain#

calibrateDrivetrain mengkalibrasi Sensor Inersia atau Sensor Giroskop 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 drivetrain dikonfigurasi dengan Sensor Inersia atau Sensor Giroskop. Ini disediakan sebagai bagian dari kode sumber proyek dan bukan bagian dari API C++ VEX EXP.

Available Functions
void calibrateDrivetrain();

Parameters

Fungsi ini tidak menerima parameter apa pun.

Return Values

Fungsi ini tidak mengembalikan nilai.

Notes
  • Robot tersebut melakukan kalibrasi secara otomatis di awal setiap proyek.

  • Jaga agar robot tetap diam selama kurang lebih 2 detik selama kalibrasi.

Function Implementation

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 Functions
void  setHeading(
  double value,
  rotationUnits units);

Parameters

Parameter

Jenis

Keterangan

value

double

Nilai haluan yang akan diatur untuk robot. Nilai ini dapat berkisar dari -359 hingga 359 saat menggunakan deg atau degrees.

units

rotationUnits

Satuan arah: deg (derajat), rev (putaran), atau raw (satuan mentah). Satu putaran sama dengan 360 derajat.

Return Values

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 Functions
void  setRotation(
  double value,
  rotationUnits units);

Parameters

Parameter

Jenis

Keterangan

value

double

Nilai rotasi yang akan diatur untuk robot.

units

rotationUnits

Satuan rotasi: deg (derajat), rev (revolusi), atau raw (satuan mentah). Satu revolusi sama dengan 360 derajat.

Return Values

Fungsi ini tidak mengembalikan nilai.

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

heading#

Heading adalah arah yang dihadapi robot, diukur dalam derajat. Perintah heading mengembalikan heading robot saat ini dari 0 hingga 359 derajat.

Arah awal pergerakan robot adalah 0 derajat.

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

Parameters

Parameter

Jenis

Keterangan

units

rotationUnits

Opsional. Satuan arah kembali: degrees, deg (standar), rev, atau raw. Satu putaran sama dengan 360 derajat.

Return Values

Mengembalikan arah haluan robot saat ini sebagai double dalam satuan yang dipilih.

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#

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 Functions
double rotation( rotationUnits units = rotationUnits::deg );

Parameters

Parameter

Jenis

Keterangan

units

rotationUnits

Opsional. Satuan arah kembali: degrees, deg (standar), rev, atau raw. Satu putaran sama dengan 360 derajat.

Return Values

Mengembalikan rotasi robot saat ini sebagai double dalam satuan yang dipilih.

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