Aktüatörler kullanma (motorlar, servolar ve röleler)
Last updated
Last updated
Bu bölümde speed controller, röleler veWPILib yöntemleri ile motorların ve pnömatiklerin kontrolü ele alınmaktadır.
Aktüatör tipleri
Yukarıda gösterilen grafik, WPILib aracılığıyla kontrol edilebilen aktüatör tiplerini göstermektedir. Bu bölümdeki makaleler, bu tip aktüatörlerin her birini ve bunları kontrol eden WPILib yöntemleri ve sınıflarını kapsayacaktır.
PWM kontrolörleri, kısa çalışma teorisi
Kısaltma PWM ( Pulse Width Modulation ) Sinyal Genişlik Modülasyonu anlamına gelir. Victor , Talon ve Jaguar speed controllerleri için PWM girişlerine başvurabilirsiniz bu yöntem motor hızını kontrol etmek için kullanılır. Motorun hızını kontrol etmek için kontrolör motorun algılanan giriş voltajını değiştirmelidir. Bunu yapmak için kontrolör, kontrol sinyaline dayanarak üzerinde olduğu süreyi değiştirerek, giriş voltajını çok hızlı bir şekilde açıp kapatır. FRC'DE kullanılan motor tiplerinin Mekanik Ve Elektronik zaman sabitleri nedeniyle bu hızlı anahtarlama, sabit bir düşük voltajın uygulanmasıyla eşdeğer bir etki üretir (%50 anahtarlama, ~6V ile aynı etkiyi üretir).
Denetleyicilerin giriş için kullandığı PWM sinyali biraz farklıdır. Sinyal aralığının sınırlarında bile (maksimum ileri veya maksimum geri) sinyal asla %0 veya %100'lik bir görev döngüsüne yaklaşmaz. Bunun yerine Denetleyiciler, 5 ms veya 10 ms'lik bir süre ve 1.5 ms'lik bir orta nokta darbe genişliği olan bir sinyal kullanır. Talon ve Victor kontrolörleri, 1 ms'den 2 ms'ye kadar tipik hobi RC kontrol zamanlamasını kullanır ve Jaguar, 7ms ila ~ 2.3 ms genişletilmiş bir zamanlama kullanır.
Ham ve İşlenmiş Veri
Genel olarak, WPILib'deki tüm motor kontrol sınıfları, bir aktüatöre çıkış olarak işlenmiş hali -1.0 ila 1.0 değeri almak üzere ayarlanır. FPGA'DAKİ PWM modülü, 5, 10 veya 20ms dönemleri ile PWM sinyalleri üretme yeteneğine sahiptir ve darbe genişliğini 2000 basamak aralığında değiştirebilir.Her biri orta noktanın etrafında 001ms(orta noktanın etrafındaki her yönde 1000 adım). Bu modüle gönderilen ham değerler, düşük sinyal (devre dışı) tutan özel bir durum olan 0-2000 aralığındadır. Her motor denetleyicisi için sınıf tipik bağlı değerleri (min, max ve deadband her iki tarafında) yanı sıra tipik orta noktası hakkında bilgi içerir. WPILib, işlenmiş değeri motor denetleyicisi için uygun aralığa eşlemek için bu değerleri kullanabilir. Bu kod denetleyicileri farklı türleri arasında sorunsuz geçiş ve belirli sinyal ayrıntıları özetlemelerini sağlar.
PWM ve Safe PWM Classları
PWM
PWM classı, PWM sinyalleri ile çalışan cihazlar için temel sınıftır ve roborio'daki PWM sinyal oluşturma donanımına bağlantılıdır. Doğrudan bir speed controller cihazı veya servo üzerinde kullanılmak üzere tasarlanmamıştır. PWM classı Victor, Jaguar, Talon ve Servo alt sınıfları güncelleme oranını ayarlamak için, deadband eliminasyonunu ve çıktısının profil şekillenmesini belirleyen kod çıktıları verir.
Safe PWM
PWM classının bir alt classıdır. Her nesneye detaylı bir izleme ve speed controller nesnesi ekler.
Bir Speed Controller nesnesinin oluşturulması
C++
Java
Parametreleri Ayarlama
C++
Java
Deadband Elimination-Ölçekleme algoritmaları denetleyicisi deadband ortadan kaldırmak için true olarak ayarlayın. Denetleyici varsayılan ayarlamak için false olarak ayarlayın.
Hız Ayarı
C++
Java
Daha önce belirtildiği gibi, Speed Controller nesneleri -1.0 (tam ters) ila +1.0 (tam ileri) arasında değişen tek bir hız parametresi alır.
WPILib Sürücü sınıfları, her bir aktarma organı tipi için ayrı sınıflar içerir. WPILib sınıfları tarafından desteklenen üç tip drivetrain vardır. Bu makalede üç tür açıklanmaktadır.
Differential Drive
Bu drive base genellikle iki veya daha fazla çekiş gücüne sahiptir. Aynı zamanda "skid-steer", "tank drive" veya "West Coast Drive"olarak da bilinir. Omni tekerlekler kullanarak yatay eksende hareket yapabilirsiniz. Görseldeki robot drivetrain kiti içerisinden çıkan parçalarla yapılmış differential drive örneğidir. Bu drivetrains ileri/geri sürüş yeteneğine sahiptir ve iki tarafı ters yönde sürerek tekerleklerin yanlara doğru kaymasına neden olabilir. Bu drivetrain yan öteleme hareketi yeteneğine sahip değildir.
Mecanum Drive
Mecanum drive robotun şasesi ile dönüş yapmadan tekerlekeri kullanarak herhangi bir yönde sürüş yapmanızı sağlayan yöntemdir. Bu yönteme holonomic drive da denir. Tekerlekler 45 derecelik açıda silindirlere sahiptir.
Üstten bakıldığında bir mecanum robotunun tekerlekleri X desenini oluşturmalıdır. Tekerlekleri farklı yönlerde döndürerek, kuvvet vektörlerinin çeşitli bileşenleri iptal edilir ve istenen robot hareketi ile sonuçlanır. Aşağıda, bu hareketlerin her biri için kuvvet vektörlerinin çizilmesi, bu drivetrainlerin nasıl çalıştığını anlamanızda yardımcı olabilir.
Killough Drive
Killough drive (aynı zamanda kiwi drive olarak da bilinir) birbirinden 120 derece açılı üç omni tekerlek kullanan bir holonomik drivetraindir. Mecanum sürücüye benzer şekilde, tekerlekler istenen hareketi gerçekleştirmek için farklı hızlarda çalıştırılır. Sağlanan kontrol yöntemleri Mecanum sürücüsü ile aynıdır.
Differential Drive Nesnesi Oluşturmak
C++
Java
Multi-Motor Sürüşü
Birçok FRC drivetrain, her tarafta 1'den fazla motora sahiptir. Bunları DifferentialDrive ile kullanmak için, her iki taraftaki motorlar SpeedControllerGroup sınıfı kullanılarak tek bir SpeedController'a toplanmalıdır. Aşağıdaki örneklerde 4 motor (her bir tarafta 2) aktarma organı gösterilmiştir. Daha fazla motora kadar genişletmek için, sadece ek kontrolörleri yaratın ve hepsini SpeedController grubu kontrolörüne aktarın (bu, keyfi bir giriş sayısı alır, kullandığınız motor sayısına göre ekleme yapabilirsiniz).
C++
Java
Sürüş Modları
DifferentialDrive sınıfı 3 sürücü modu içerir:
Tank Drive - Bu mod, aktarma organlarının her iki tarafını kontrol etmek için birer değer kullanır.
Arcade Drive - Bu mod, aktarma organının gaz kelebeğini (X ekseni boyunca hız) ve bir rotasyon oranını kontrol etmek için bir değer kullanır.
Curvature Drive - "Cheesy Drive" olarak da bilinir; Rotasyon argümanı, rotanın değişim oranından ziyade robotun yolunun eğriliğini kontrol eder. Bu, robotu yüksek hızlarda daha kontrol edilebilir hale getirir. Ayrıca, robotun hızlı dönüş fonksiyonunu ele alır - "hızlı dönüş", yerinde manevralar için sabit eğrilik dönüşünü geçersiz kılar.
Tank Drive
Tank Drive modu, aktarma organlarının her iki tarafını bağımsız olarak kontrol etmek için kullanılır (genellikle her 2 taraf için 2 farklı joystick ile kullanılır.). Bu örnek, aktarma organını Tank modunda çalıştırmak için iki ayrı kumanda kolunun Y ekseninin nasıl kullanılacağını gösterir.
C++
Java
Arcade Drive
Arcade Drive modu, aktarma organını hız / gaz(throttle) ve dönüş oranını kullanarak kontrol etmek için kullanılır. Bu genellikle tek bir kumanda kolundan iki eksenle ya da bir çubuktan gelen gaz kelebeği ve diğerinden dönüş ile birlikte (genellikle tek bir joystick üzerinde) joystick'lere bölünür. Bu örnek, Arcade modu ile tek bir joystick'in nasıl kullanılacağını gösterir.
C++
Java
Curvature Drive
Arcade Drive gibi, Curvature Drive modu hız / gaz ve dönüş oranını kullanarak aktarma organlarını kontrol etmek için kullanılır. Fark, rotasyon kontrolünün, başlık değişiminin hızı yerine eğrilik yarıçapını kontrol etmeye çalışmasıdır. Bu mod ayrıca, yerinde dönmeyi sağlayan bir alt modu devreye sokmak için kullanılan hızlı dönüş parametresine de sahiptir. Bu örnek Curvature moduyla tek bir joystick'in nasıl kullanılacağını gösterir.
C++
Java
Bu robotta gösterilen tekerlekler, sürücülerin, klasik bir sürüş durumunda olduğu gibi, düz ileriye doğru 45 derecelik bir açıda uygulanmasına neden olan silindirlere sahiptir. Tekerleklerin hızını değiştirmenin herhangi bir yönde hareket etmesini sağladığını tahmin edebilirsiniz. Mecanum jantların internetteki çeşitli web sitelerinde nasıl çalıştığını araştırabilirsiniz.
Mecanum Kontrolü : Cartesian vs Polar
MecanumDrive sınıfı aktarma organlarını kontrol etmek için iki yol içerir:
Kartezyen: Bu yöntem X, Y , Döndürme parametrelerini alır ve joystickleri mecanum sürüş hareketine eşleştirirken yaygın olarak kullanılır. Elde edilen robot dönüşü istenen X ve Y hareketinin birleşimidir.
Polar: Bu yöntem Büyüklük, Açı ,Döndürme parametrelerini alır ve robotu bağımsız olarak kontrol ederken yaygın olarak kullanılır. Açı, Z ekseni etrafında derece olarak belirtilmelidir (-180 ve 180 arasında).
Mecanum tekerlekler için teleop sürüş kodu
Tek bir joystick ile mecanum tekerlekleri kullanarak sürmek için minimum kodu gösteren örnek bir program. Joystick XY konumu, robotun takip etmesi gereken bir robot yön vektörünü temsil eder. Joystick üzerindeki twist (Z) ekseni, sürüş sırasında robot için dönme hızını temsil eder.
C++
Java
Alan odaklı sürüş için programın güncellenmesi
bir Gyro sensöründen döndürülen açı olan MecanumDrive_Cartesian() yönteminde isteğe bağlı 4. parametre vardır. Joystick'ten verilen X/Y değerleri robotu alana göre ayarlayacaktır. Bu yöntem mecanum sürücüsü için çok yararlıdır. çünkü sürüş için robotun gerçekten ön, arka veya yanları yoktur. Her yöne gidebilir. Bir Gyro sensöründen derece açısını ekleyerek robotun yönlerini daha doğru bir şekilde kullanabilirsiniz.
Alan odaklı sürüş kullanımı genellikle robot sürücüleri karşı karşıya olduğunda kontrolleri tersine çevrilir.
MecanumDrive_Cartesian () her çağrıldığında gyro açısını almayı unutmayın.
C++
Java
Bir Servo nesnesi oluşturmak
Servo Değerlerini Ayarlamak
WPILib'de servo değerlerini ayarlamak için iki yöntem vardır:
Scaled Değer - 0 ile 1,0 arasında bir ölçek değeri kullanarak servo konumunu ayarlar. 0, servonun bir ucuna karşılık gelir ve 1.0, diğerine karşılık gelir.
Angle - Açıyı, derece cinsinden belirterek servo konumunu ayarlayın. Bu yöntem, Hitec HS-322HD servo (0 ila 170 derece) ile aynı aralıktaki servolar için çalışacaktır.
Motorlar, solenoidler, ışıklar veya diğer özel devreler gibi diğer mekanizmaların On / Off kontrolü için, WPILib, VEX Robotics'ten Spike H-Bridge Relay'e arabirim oluşturmak için tasarlanmış röle çıkışları için destek oluşturmuştur. Bu cihazlar, bir H-Köprü konfigürasyonunda bağlanan iki rölenin durumunu bağımsız olarak kontrol etmek için 3 pinli bir çıkış (GND, Forward, Reverse) kullanır. Bu, rölenin her iki kutuptaki çıkışlara güç sağlamasına veya her iki çıkışı aynı anda açmasına izin verir.
Röle yönlerini ayarlamak WPILib röleleri içinde kBothDirections (geri dönüşlü motor veya iki yönlü solenoid), kForwardOnly (sadece ileri pimi kullanır) veya kReverseOnly (yalnızca geri pini kullanır) olarak ayarlanabilir. Yön için bir değer girilmezse, varsayılan olarak kBothDirections olarak ayarlanır. Bu, Relay sınıfındaki hangi yöntemlerin belirli bir örnekle kullanılabileceğini belirler.
Röle durumu set() yöntemi kullanılarak ayarlanır. Yöntem, aşağıdaki değerlerle bir numaralandırma parametre olarak alır:
kOff - Her iki röle çıkışını da kapatır
kForward - Röleyi ileriye doğru ayarlar (M + @ 12V, M- @ GND)
kReverse - Röleyi tersine çevirir (M + @ GND, M- @ 12V)
KOn - Her iki röle çıkışını da ayarlar (M + @ 12V, M- @ 12V).
Röle yönü, yalnızca ileri veya geri pimler etkinleştirilecek şekilde ayarlanmışsa, bu yöntemin kForward veya kReverse'ye eşdeğer olacağını unutmayın. kOn kullanılması önerilmez.
Kompresörün Uygulanması, Başlatılması ve Durdurulması
C++
Java
Kompresör durumu
C++
Java
kompresör nesnesi oluşturmanın diğer nedeni, kompresörün durumunu sorgulamaktır. Halihazırda olan veya olmayan durum, pressure switch durumu ve compressorcurrent , compressor nesnesinden sorgulanabilir.
Solenoid'e genel bakış
FRC'de kullanılan pnömatik solenoid valfler dahili pilotlu vanalardır. Dahili pilotlu solenoid valflerin çalışması hakkında daha fazla bilgi için, bu Wikipedia makalesine bakın. Valfın harekete geçmesi için gereken minimum bir giriş basıncı olmalıdır. FRC takımları tarafından yaygın olarak kullanılan vanaların çoğu için bu 20 ila 30 psi arasındadır.
PCM'nin kendisindeki LED'lere bakmak, elektrik veya hava basıncı giriş sorunlarını ortadan kaldırmak için kodun beklediğiniz gibi davrandığını doğrulamanın en iyi yoludur.
Single solenoidler, tek bir çıkış portundan basınç uygular veya havalandırır. Tipik olarak, ya harici bir kuvvet, silindirin (yay, yerçekimi, ayrı mekanizma) geri dönüş hareketini sağlayacağı ya da double solenoid olarak hareket edecek çiftler halinde kullanılır. double solenoid, iki çıkış portu arasındaki hava akışını değiştirir (aynı zamanda çıkışların ne şekilde havalandırıldığı veya girişe bağlı olmadığı bir orta konuma da sahiptir). Çift silindirli valfler, hava basıncını kullanarak bir silindirin hem uzatılması hem de geri çekilme hareketlerini kontrol etmek istediğinizde yaygın olarak kullanılır. Double solenoid valfler, solenoid koparmada iki ayrı kanala bağlanan iki elektrik girişine sahiptir.
Single Solenoid kullanımı
C++
Java
WPILib'deki single solenoidler Solenoid sınıfı kullanılarak kontrol edilir. Bir Solenoid nesnesi oluşturmak için, istenen port numarasını ( veya Node ID) ve port numarasını yazmanız yeterlidir. Solenoid çıkışını etkinleştirmek için set(true) değerini ayarlamak veya pasifleştirmek için set(false) ayarlamak gerekir.
Double Solenoid kullanımı
C++
Java
Double solenoidler WPILib'deki DoubleSolenoid sınıfı tarafından kontrol edilir. Bunlar, single solenoide benzer şekilde yapılandırılmıştır, ancak iki port numarası bulunmaktadır. Valfin durumu daha sonra kOff (çıkış etkin değildir), kForward (ileri kanal etkin) veya kReverse (ters kanal etkin) olarak ayarlanabilir.
Hareket Yönü
Sol Ön
Sağ Ön
Sol Arka
Sağ Arka
İleri
İleri
İleri
İleri
İleri
Geri
Geri
Geri
Geri
Geri
Sağ Yatay
İleri
Geri
Geri
İleri
Sol Yatay
Geri
İleri
İleri
Geri
Saat Yönünde Dönüş
İleri
Geri
İleri
Geri
Saat Yönünün Tersinde
Geri
İleri
Geri
İleri