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_groupnesnelerini 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
motornesnelerini 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 |
|---|---|---|
|
|
Mevcut |
|
|
Mevcut bir |
|
|
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 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.
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— Aktarma organlarının yapılandırılmış Atalet Sensörü veya Jiroskop Sensörü’ni 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, 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 Functions1 — 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 );
Parameters2 — 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 );
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
Robotun bakması gereken yön, derece cinsinden. Bu değer, |
|
|
Dönme 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 turu tamamlamadı veya fonksiyon tur tamamlanmadan önce geri döndü çünküwaitForCompletiondeğerifalseolarak ayarlanmıştı.
turnToHeadingişlemi devam ederken başka bir aktarma organı hareket fonksiyonunun (örneğinturnveyadrive) yürütülmesi mevcut hareketi kesintiye uğratacaktır.turnToHeadinghedef tabanlı olduğundan (angleparametresini kullanır),isDoneveisMovinggibi fonksiyonlarturnToHeadingile çalışır.
// 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 — 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 );
Parameters2 — 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 );
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 turu tamamlamadı veya fonksiyon tur tamamlanmadan önce geri döndü çünküwaitForCompletiondeğerifalseolarak ayarlanmıştı.
turnToRotationişlemi devam ederken başka bir aktarma organı hareket fonksiyonunun (örneğinturnveyadrive) yürütülmesi mevcut hareketi kesintiye uğratacaktır.turnToRotationhedef tabanlı olduğundan (angleparametresini kullanır),isDoneveisMovinggibi fonksiyonlarturnToRotationile çalışır.
// 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.
void calibrateDrivetrain();
Bu fonksiyon herhangi bir parametre kabul etmez.
Return ValuesBu fonksiyon bir değer döndürmez.
NotesRobot, 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 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 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 yönünün birimi: |
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();