akıllı sürücü#

giriiş#

smartdrive sınıfı, motorlar, tekerlekler ve bir jiroskop sensörü kullanarak bir robotun nasıl hareket ettiğini ve döndüğünü kontrol eder. smartdrive yön ve dönüşü izlemek için bağlı bir Jiroskop Sensörü kullanır.

A smartdrive robotun hassas bir şekilde hareket etmesine ve dönmesine yardımcı olmak için jiroskop sensörünü kullanır. Her projenin başlangıcında, tahrik sistemi jiroskop sensörünü otomatik olarak kalibre eder. Kalibrasyon sırasında robotu yaklaşık 2 saniye boyunca hareketsiz tutun, böylece robot doğru şekilde hareket edebilir ve dönebilir.

smartdrive sınıfı, smartdrive sınıfına dayanmaktadır. Bir drivetrain drivetrain ile aynı tahrik ve dönüş fonksiyonlarını kullanabilir ve ayrıca turnToHeading ve turnToRotation gibi sensör tabanlı fonksiyonlar da ekler.

Bu sayfada örnek akıllı sürücü adı olarak myDrivetrain kullanılmıştır. Gerektiğinde kendi yapılandırdığınız adla değiştirin.

Sınıf Oluşturucuları#

1 — Mevcut motor_group nesnelerini sol ve sağ taraflar için ve bir Jiroskop Sensörü ile birlikte kullanarak akıllı bir sürücü oluşturur.

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 — Mevcut motor nesnelerini sol ve sağ taraflar için ve bir Jiroskop Sensörü ile birlikte kullanarak akıllı bir sürücü oluşturur.

smartdrive(
    motor           &l,
    motor           &r,
    gyro            &g,
    double          wheelTravel = 320,
    double          trackWidth  = 320,
    double          wheelBase   = 130,
    distanceUnits   unit = mm,
    double          externalGearRatio = 1.0 );

Sınıf Yıkıcısı#

smartdrive nesnesini yok eder ve ilişkili kaynakları serbest bırakır.

~smartdrive();

Parametreler#

Parametre

Tip

Tanım

&l / &r

motor_group / motor

Sol ve sağ motorlar veya motor grupları. Her iki parametre de aynı türü kullanmalıdır: ya iki adet motor_group nesnesi ya da iki adet motor nesnesi.

&g

gyro

Akıllı sürücü tarafından kullanılan Jiroskop Sensörü.

wheelTravel

double

Tahrik sistemi tekerleklerinin çevresi. Varsayılan değer 320.

trackWidth

double

Sol ve sağ tekerlekler arasındaki mesafe. Varsayılan değer 320.

wheelBase

double

Ön ve arka tekerlekler arasındaki mesafe. Varsayılan değer 130.

unit

distanceUnits

wheelTravel, trackWidthve wheelBaseiçin birim: mm (varsayılan) veya inches.

externalGearRatio

double

Vites kullanılıyorsa, sürüş mesafelerini ayarlamak için kullanılan vites oranı. Varsayılan değer 1.0.

Örnek#

/* 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

Üye Fonksiyonları#

smartdrive sınıfı aşağıdaki üye işlevlerini içerir:

İşlemler — Robotu yönlendirme veya döndürme kullanarak hareket ettirin.

  • turnToHeading — Robotu -359 ile 359 derece arasında belirli bir yöne doğru döndürür. Robot, hedef yöne ulaşmak için en kısa yönde dönecektir.

  • turnToRotation — Robotu belirli bir dönüşe döndürür.

  • calibrateDrivetrain — Akıllı sürücü ile yapılandırılmış Jiroskop Sensörünü kalibre eder.

Ayarlar — Başlık ve döndürme değerlerini ayarlayın.

  • setHeading — Robotun mevcut yönünü yeni bir yöne değiştirir.

  • setRotation — Robotun mevcut dönüşünü yeni bir dönüşe değiştirir.

Değerler — Yön ve dönüşü kontrol edin.

  • heading — Robotun mevcut yönünü 0 ile 359 derece arasında döndürür.

  • rotation — Robotun mevcut dönüşünü döndürür.

Bir smartdrive ayrıca drivetrain’den miras alınan üye fonksiyonlarını da kullanabilir; örneğin drive, driveFor, turn, turnFor, stop, isDoneve isMoving.

smartdrive üye fonksiyonunu çağırmadan önce, smartdrive nesnesi oluşturulmalıdır.

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

Yön, robotun baktığı yönü derece cinsinden ifade eder. turnToHeading komutu, robotu -359 ile 359 derece arasında belirli bir yöne çevirir. Robot, hedef yöne ulaşmak için en kısa yöne dönecektir.

Robotun başlangıç ​​yönü 0 derecedir.

Proje, bir sonraki kod satırını çalıştırmadan önce robotun dönüş işlemini tamamlamasını bekleyecektir.

Available Functions

1 — Mevcut dönüş hızını kullanarak robotu belirtilen yöne döndürür.

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

2 — Robotu belirtilen yönde ve belirtilen hızda döndürür.

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

Parameters

Parametre

Tip

Tanım

angle

double

Robotun bakması gereken yön, derece cinsinden. Bu değer, deg veya degrees kullanıldığında -359 ile 359 arasında olabilir.

units

rotationUnits

Başlık birimi: deg , rev veya raw Bir devir 360 dereceye eşittir.

velocity

double

velocityUnits::pctkullanıldığında dönüş hızı %0 ile %100 arasında, rpmkullanıldığında 0 ile 120 rpm arasında veya dpskullanıldığında 0 ile 720 derece/saniye arasında değişir. Hız belirtilmezse, robot mevcut dönüş hızıyla döner.

units_v

velocityUnits

Hız birimi: velocityUnits::pct (yüzde), rpm (dakikadaki dönüş sayısı) veya dps (saniyede derece).

waitForCompletion

bool

true (varsayılan) robotun dönüşü tamamlanana kadar bir sonraki kod satırının çalışmasını bekler. false bir sonraki kod satırının hemen çalışmasını sağlar.

Return Values

Robotun hedef yöne ulaşıp ulaşmadığını Boolean değer olarak döndürür.

  • true — Robot hedef yöne ulaştı.

  • false — Robot turu tamamlamadı veya fonksiyon tur tamamlanmadan önce geri döndü çünkü waitForCompletion değeri false olarak ayarlanmıştı.

Notes
  • turnToHeading fonksiyonu çalışırken başka bir aktarma organı hareket fonksiyonunu çalıştırmak, mevcut hareketi kesintiye uğratacaktır.

  • turnToHeading hedef bir yön kullanır, bu nedenle isDone ve isMoving onunla birlikte kullanılabilir.

Examples
// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

turnToRotation#

turnToRotation , robotu belirli bir dönüşe döndürür.

Dönme, robotun ne kadar döndüğünü derece veya devir cinsinden ölçer. Bir projenin başlangıcında, dönme değeri 0 dereceye ayarlanır. Dönme ayrıca setRotation fonksiyonu kullanılarak da ayarlanabilir.

Dönme değerleri mutlaktır. Bu, dönüş yönünün robotun mevcut dönüşüne bağlı olduğu anlamına gelir. Sağa dönmek dönmeyi artırır, sola dönmek ise dönmeyi azaltır.

Örneğin, robot 0 dereceden başlarsa ve 720 derece döndürürseniz, iki kez sağa dönecektir. Ardından 360 derece döndürürseniz, 360, 720’den küçük olduğu için bir kez sola dönecektir.

Proje, bir sonraki kod satırını çalıştırmadan önce robotun dönüş işlemini tamamlamasını bekleyecektir.

Available Functions

1 — Mevcut dönüş hızını kullanarak robotu belirtilen dönüşe döndürür.

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

2 — Robotu belirtilen hızda ve belirtilen dönüş açısında döndürür.

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

Parameters

Parametre

Tip

Tanım

angle

double

Robotun döneceği dönüş değeri.

units

rotationUnits

Dönme birimi: deg , rev veya raw Bir devir 360 dereceye eşittir.

velocity

double

velocityUnits::pctkullanıldığında dönüş hızı %0 ile %100 arasında, rpmkullanıldığında 0 ile 120 rpm arasında veya dpskullanıldığında 0 ile 720 derece/saniye arasında değişir. Hız belirtilmezse, robot mevcut dönüş hızıyla döner.

units_v

velocityUnits

Hız birimi: velocityUnits::pct (yüzde), rpm (dakikadaki dönüş sayısı) veya dps (saniyede derece).

waitForCompletion

bool

true (varsayılan) robotun dönüşü tamamlanana kadar bir sonraki kod satırının çalışmasını bekler. false bir sonraki kod satırının hemen çalışmasını sağlar.

Return Values

Robotun hedef dönüş hızına ulaşıp ulaşmadığını Boolean değer olarak döndürür.

  • true — Robot hedef dönüşe ulaştı.

  • false — Robot turu tamamlamadı veya fonksiyon tur tamamlanmadan önce geri döndü çünkü waitForCompletion değeri false olarak ayarlanmıştı.

Notes
  • turnToRotation fonksiyonu çalışırken başka bir aktarma organı hareket fonksiyonunu çalıştırmak, mevcut hareketi kesintiye uğratacaktır.

  • turnToRotation hedef bir dönüş kullanır, bu nedenle isDone ve isMoving onunla birlikte kullanılabilir.

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

calibrateDrivetrain#

calibrateDrivetrain komutu, smartdrive ile yapılandırılmış jiroskop sensörünü kalibre eder.

Kalibrasyon, jiroskop sensörünün hareketi doğru şekilde ölçmesine yardımcı olur. Kalibrasyon sırasında robotu yaklaşık 2 saniye boyunca hareketsiz tutun. Robot kalibrasyon sırasında hareket ederse, jiroskop sensörü hareketi doğru şekilde ölçemeyebilir.

Proje, bir sonraki kod satırı çalıştırılmadan önce kalibrasyon işleminin tamamlanmasını bekleyecektir.

calibrateDrivetrain , bir tahrik sistemi bir Jiroskop Sensörü ile yapılandırıldığında VEXcode tarafından otomatik olarak oluşturulur. Proje kaynak kodunun bir parçası olarak sağlanır ve VEX IQ C++ API’sinin bir parçası değildir.

Available Functions
void calibrateDrivetrain();

Parameters

Bu fonksiyon herhangi bir parametre kabul etmez.

Return Values

Bu fonksiyon bir değer döndürmez.

Notes
  • VEXcode’da akıllı sürücü yapılandırıldığında robot her projenin başlangıcında otomatik olarak kalibre edilir.

  • Kalibrasyon sırasında robotu yaklaşık 2 saniye boyunca hareketsiz tutun.

Function Implementation

Aşağıda VEXcode tarafından otomatik olarak oluşturulan calibrateDrivetrain uygulamasının bir örneği verilmiştir:

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#

Yön, robotun baktığı yönü derece cinsinden ifade eder. setHeading komutu, robotun mevcut yönünü yeni bir yön değerine değiştirir.

Örneğin, robot sağa doğru dönmüşse, yönü 0 dereceye ayarlamak, sağa dönük bu pozisyonu yeni 0 derece yapar. Ardından robot, bu yeni yöne göre diğer pozisyonlara dönebilir.

Available Functions
void setHeading(
  double value,
  rotationUnits units);

Parameters

Parametre

Tip

Tanım

value

double

Robot için ayarlanacak yön değeri. Bu değer, deg veya degrees kullanıldığında -359 ile 359 arasında olabilir.

units

rotationUnits

Başlık birimi: deg , rev veya raw Bir devir 360 dereceye eşittir.

Return Values

Bu fonksiyon bir değer döndürmez.

Examples
// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

setRotation#

Dönme, robotun ne kadar döndüğünü derece veya devir cinsinden ölçer. Bir projenin başlangıcında, dönme değeri 0 dereceye ayarlanır. setRotation komutu, robotun mevcut dönme değerini yeni bir değere değiştirir.

Örneğin, robot sağa doğru iki tam tur atmışsa, dönüş değeri 720 derece olacaktır. Dönüşü 0 dereceye ayarlamak, bu dönüş değerini 720’den 0 dereceye sıfırlayacaktır. Ardından robot, bu yeni değere göre dönüş yapabilir.

Available Functions
void setRotation(
  double value,
  rotationUnits units);

Parameters

Parametre

Tip

Tanım

value

double

Robot için ayarlanacak dönüş değeri.

units

rotationUnits

Dönme birimi: deg , rev veya raw Bir devir 360 dereceye eşittir.

Return Values

Bu fonksiyon bir değer döndürmez.

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

heading#

Yön, robotun baktığı yönü derece cinsinden ifade eder. heading komutu, robotun mevcut yönünü 0 ile 359 derece arasında döndürür.

Robotun başlangıç ​​yönü 0 derecedir.

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

Parameters

Parametre

Tip

Tanım

units

rotationUnits

İsteğe bağlı. Dönme yönünün birimi: degrees, deg (varsayılan), revveya rawBir devir 360 dereceye eşittir.

Return Values

Robotun mevcut yönünü seçilen birimde double olarak döndürür.

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#

Dönme, robotun ne kadar döndüğünü derece veya devir cinsinden ölçer. Bir projenin başlangıcında, dönme değeri 0 dereceye ayarlanır. rotation komutu robotun mevcut dönme değerini döndürür.

Sağa dönmek dönüş açısını artırır, sola dönmek ise azaltır. Örneğin, sağa iki tam tur dönmek 720 derecelik bir dönüş sağlar.

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

Parameters

Parametre

Tip

Tanım

units

rotationUnits

İsteğe bağlı. Dönme birimi olarak şunlar seçilebilir: degrees, deg (varsayılan), revveya rawBir devir 360 dereceye eşittir.

Return Values

Robotun mevcut dönüşünü seçilen birimde double olarak döndürür.

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