smartdrive#

Perkenalan#

Kelas smartdrive mengontrol bagaimana robot bergerak dan berbelok menggunakan motor, roda, dan sensor. smartdrive dapat menggunakan Gyro Sensor yang terhubung atau Inertial Sensor bawaan Brain.

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.

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_group yang sudah ada untuk sisi kiri dan kanan, beserta Sensor Gyro atau Sensor Inersia.

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 motor yang sudah ada untuk sisi kiri dan kanan, beserta Sensor Gyro atau Sensor Inersia.

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 sensor dapat berupa gyro atau inertial objek.

Parameter

Jenis

Keterangan

&l / &r

motor_group / motor

Motor kiri dan kanan atau kelompok motor. Kedua parameter harus menggunakan tipe yang sama: baik dua objek motor_group atau dua objek motor.

&g

gyro / inertial

The Gyro Sensor or Inertial Sensor used by the smartdrive.

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

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

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 robot ke arah yang ditentukan menggunakan kecepatan putar saat ini.

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

2 — Memutar robot ke arah yang ditentukan dengan 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 arah: deg (derajat), rev (putaran), atau raw (satuan mentah). Satu putaran sama dengan 360 derajat.

velocity

double

Kecepatan untuk berbelok berkisar dari 0% hingga 100% saat menggunakan velocityUnits::pct, dari 0 hingga 120 rpm saat menggunakan rpm, atau dari 0 hingga 720 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 saat turnToHeading sedang berjalan akan mengganggu pergerakan saat ini.

  • turnToHeading menggunakan arah target, jadi isDone dan isMoving dapat digunakan dengannya.

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 robot ke arah rotasi yang ditentukan menggunakan kecepatan putar saat ini.

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

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

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 120 rpm saat menggunakan rpm, atau dari 0 hingga 720 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 saat turnToRotation sedang berjalan akan mengganggu pergerakan saat ini.

  • turnToRotation menggunakan rotasi target, jadi isDone dan isMoving dapat digunakan dengannya.

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

calibrateDrivetrain#

calibrateDrivetrain mengkalibrasi Sensor Gyro yang terhubung atau Sensor Inersia bawaan Brain 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.

Catatan: calibrateDrivetrain dihasilkan secara otomatis oleh VEXcode ketika drivetrain dikonfigurasi dengan Sensor Gyro atau Sensor Inersia. Ini disediakan sebagai bagian dari kode sumber proyek dan bukan bagian dari API C++ VEX IQ.

Available Functions
void calibrateDrivetrain();

Parameters

Fungsi ini tidak menerima parameter apa pun.

Return Values

Fungsi ini tidak mengembalikan nilai.

Notes
  • Robot 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.

Function Implementation

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("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#

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 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 untuk mengembalikan rotasi: degrees, deg (default), 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();