akıllı sürücü#

giriiş#

smartdrive sınıfı, motorlar, tekerlekler ve bir 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 bir Atalet Sensörü veya Jiroskop Sensörü kullanabilir.

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

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

Sınıf Oluşturucuları#

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

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

smartdrive(
    motor           &l,
    motor           &r,
    inertial        &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#

Sensör parametresi inertial veya gyro nesnesi olabilir.

Parametre

Tip

Tanım

&l / &r

motor_group / motor

Mevcut motor veya motor_group örneklerine yapılan referanslar. Her iki parametre de aynı türde olmalıdır: ya iki motor_group örneği ya da iki motor örneği. &l parametresi sol motoru veya motor grubunu, &r ise sağ motoru veya motor grubunu ifade eder.

&g

gyro&

Mevcut bir gyro veya inertial örneğine yapılan bir referans.

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

Ü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.

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, aşağıda gösterildiği gibi bir smartdrive örneği 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 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#

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 — Aktarma organlarını, mevcut yapılandırılmış dönüş hızı kullanılarak belirtilen yöne çevirir.

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

2 — Aktarma organlarını 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

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 600 rpm arasında veya dpskullanıldığında 0 ile 3600 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 işlemi devam ederken başka bir aktarma organı hareket fonksiyonunun (örneğin turn veya drive) yürütülmesi mevcut hareketi kesintiye uğratacaktır.

  • turnToHeading hedef tabanlı olduğundan ( angle parametresini kullanır), isDone ve isMoving gibi fonksiyonlar turnToHeading ile çalışır.

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 — Aktarma organlarını, mevcut yapılandırılmış dönüş hızı kullanılarak belirtilen dönüşe döndürür.

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

2 — Tahrik sistemini 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 600 rpm arasında veya dpskullanıldığında 0 ile 3600 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 işlemi devam ederken başka bir aktarma organı hareket fonksiyonunun (örneğin turn veya drive) yürütülmesi mevcut hareketi kesintiye uğratacaktır.

  • turnToRotation hedef tabanlı olduğundan ( angle parametresini kullanır), isDone ve isMoving gibi fonksiyonlar turnToRotation ile çalışır.

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ış Atalet Sensörünü veya Jiroskop Sensörünü kalibre eder.

Kalibrasyon, sensörü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, 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 aktarma organı atalet sensörü veya 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 EXP 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
  • 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 kodu yer almaktadır:

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#

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 yönünün birimi: 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();