akıllı sürücü#
giriiş#
smartdrive sınıfı, motorlar, tekerlekler ve bir sensör kullanarak bir robotun nasıl sürüldüğünü ve döndüğünü kontrol eder. smartdrive bağlı bir Jiroskop Sensörü veya Beynin yerleşik Atalet 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.
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 — Sol ve sağ taraflar için mevcut
motor_groupnesnelerini ve bir Jiroskop Sensörü veya Atalet Sensörünü 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 — Sol ve sağ taraflar için mevcut
motornesnelerini ve bir Jiroskop Sensörü veya Atalet Sensörünü 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 ilgili kaynakları serbest bırakır.
~smartdrive();
Parametreler#
Sensör parametresi gyro veya inertial nesnesi olabilir.
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
Sol ve sağ motorlar veya motor grupları. Her iki parametre de aynı türü kullanmalıdır: ya iki adet |
|
|
Akıllı sürücü tarafından kullanılan Jiroskop Sensörü veya Atalet Sensörü. |
|
|
Tahrik sistemi tekerleklerinin çevresi. Varsayılan değer |
|
|
Sol ve sağ tekerlekler arasındaki mesafe. Varsayılan değer |
|
|
Ön ve arka tekerlekler arasındaki mesafe. Varsayılan değer |
|
|
|
|
|
Vites kullanılıyorsa, sürüş mesafelerini ayarlamak için kullanılan vites oranı. Varsayılan değer |
Ö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 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
Ü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ış sensörü 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 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#
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 Functions1 — Mevcut dönüş hızını kullanarak robotu belirtilen yöne döndürür.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — 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 );
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
Robotun bakması gereken yön, derece cinsinden. Bu değer, |
|
|
Başlık birimi: |
|
|
|
|
|
Hız birimi: |
|
|
|
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 dönüşü tamamlamadı veya fonksiyon dönüş tamamlanmadan önce geri döndü çünküwaitForCompletiondeğerifalseolarak ayarlanmıştı.
turnToHeadingfonksiyonu çalışırken başka bir aktarma organı hareket fonksiyonunu çalıştırmak, mevcut hareketi kesintiye uğratacaktır.turnToHeadinghedef bir yön kullanır, bu nedenleisDoneveisMovingonunla birlikte kullanılabilir.
// 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 Functions1 — 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 );
Parameters2 — 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 );
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
Robotun döneceği dönüş değeri. |
|
|
Dönme birimi: |
|
|
|
|
|
Hız birimi: |
|
|
|
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 dönüşü tamamlamadı veya fonksiyon dönüş tamamlanmadan önce geri döndü çünküwaitForCompletiondeğerifalseolarak ayarlanmıştı.
turnToRotationfonksiyonu çalışırken başka bir aktarma organı hareket fonksiyonunu çalıştırmak, mevcut hareketi kesintiye uğratacaktır.turnToRotationhedef bir dönüş kullanır, bu nedenleisDoneveisMovingonunla birlikte kullanılabilir.
// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain komutu, bağlı Jiroskop Sensörünü veya akıllı sürüş sistemiyle yapılandırılmış Beynin yerleşik Atalet 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.
Not: calibrateDrivetrain komutu, bir tahrik sistemi Jiroskop Sensörü veya Atalet 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.
void calibrateDrivetrain();
Bu fonksiyon herhangi bir parametre kabul etmez.
Return ValuesBu fonksiyon bir değer döndürmez.
NotesVEXcode’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.
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("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 Functionsvoid setHeading(
double value,
rotationUnits units);
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
Robot için ayarlanacak yön değeri. Bu değer, |
|
|
Başlık birimi: |
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 Functionsvoid setRotation(
double value,
rotationUnits units);
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
Robot için ayarlanacak dönüş değeri. |
|
|
Dönme birimi: |
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 Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
İsteğe bağlı. Dönme yönünün birimi: |
Robotun mevcut yönünü seçilen birimde double olarak döndürür.
// 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 Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
İsteğe bağlı. Dönme birimi olarak şunlar seçilebilir: |
Robotun mevcut dönüşünü seçilen birimde double olarak döndürür.
// 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();