Özel Bileşenler Ekleme

RobotBuilder, motorlar, kontrolörler ve sensörler için yalnızca WPILib kullanan robot programları oluşturmak için çok iyi çalışıyor. Ancak özel sınıfları kullanan ekipler için, RobotBuilder’ın bu sınıflar için herhangi bir desteği yoktur, bu nedenle bunları RobotBuilder’da kullanmak için birkaç adım atılması gerekir.

Özel Bileşen Yapısı

../../../../../_images/custom-components-1.png

Özel bileşenlerin tümü yıl olarak burada bulunur. ~/wpilib/YYYY/Robotbuilder/extensions where ~ is C:\Users\Public on Windows and YYYY is the FRC® year.

Özel bir bileşen için gereken yedi dosya ve bir klasör vardır. Klasör, bileşeni ve nasıl dışa aktarılacağını açıklayan dosyaları içerir. Bileşenle aynı ada sahip olmalıdır (örneğin, bir Kiwi sürücü denetleyicisi için “Kiwi Drive”, altı motorlu sürücü denetleyicisi için “Robot Drive 6”, vb.). Dosyalar, burada gösterilenlerle aynı adlara ve uzantılara sahip olmalıdır. Diğer dosyalar bu yedi ile birlikte klasörde olabilir, ancak yedi tanesi RobotBuilder’ın özel bileşeni tanıması için mevcut olmalıdır.

PaletteDescription.yaml

../../../../../_images/custom-components-2.png

Satır satır:

  • !Component-Bileşen: Yeni bir bileşenin başlangıcını bildirir

  • name: Bileşenin adı. Palette/ağaçta görünecek olan budur - bu aynı zamanda içeren klasörün adıyla aynı olmalıdır.

  • type-tür: bileşenin türü (bunlar daha sonra ayrıntılı olarak açıklanacaktır)

  • supports-destekler: destekleyebileceği her bileşen türünün miktarının bir haritası. RobotBuilder’daki motor kontrolörlerinin tümü PIDOutput’lardır, bu nedenle bir kivi sürücüsü üç PIDOutput’u destekleyebilir. Bir bileşen herhangi bir şeyi desteklemiyorsa (sensörler veya motor kontrol cihazları gibi), bu satırı dışarıda bırakın

  • help-yardım: bu bileşenlerden birinin üzerine geldiğinde faydalı bir mesaj veren kısa bir dize

  • properties: bu bileşenin özelliklerinin listesi. Bu kivi sürücü örneğinde, her motor için bir tane olmak üzere çok benzer üç özellik vardır. Bir ChildSelectionProperty, kullanıcının, düzenlenen bileşenin alt bileşenlerinden belirli türden bir bileşeni seçmesine olanak tanır (bu nedenle, burada, kiwi sürücüsüne eklenen bir PIDOutput - yani bir motor denetleyicisi - isteyen bir açılır menü gösterilir)

RobotBuilder’ın desteklediği bileşen türleri (bunlar büyük / küçük harfe duyarlıdır):

  • Komut

  • Alt sistem

  • PIDOutput (motor kontrolleri)

  • PIDSource (PIDSource uygulayan sensör, örneğin analog potansiyometre, kodlayıcı)

  • Sensör (PIDSource uygulamayan sensör, örneğin limit anahtarı)

  • Kontrolör (robot sürücü, PID kontrolör vb.)

  • Aktüatör (motor olmayan bir çıkış, örneğin solenoid, servo)

  • Joystick - Oyun kolu

  • Joystick Düğmesi

Properties-Özellikleri

Özel bir bileşenle ilgili özellikler:

  • StringProperty: bir bileşen bir dizeye ihtiyaç duyduğunda kullanılır, ör. bileşenin adı

  • BooleanProperty: bir bileşen bir boole değerine ihtiyaç duyduğunda kullanılır, ör. SmartDashboard’a bir düğme koymak

  • DoubleProperty: bir bileşen bir sayı değerine ihtiyaç duyduğunda kullanılır, ör. PID sabitleriSeçimlerÖzellik

  • ChildSelectionProperty: bir alt bileşen seçmeniz gerektiğinde kullanılır, ör. bir RobotDrive’daki motor kontrolörleri

  • TypeSelectionProperty: programın herhangi bir yerinden verilen türdeki herhangi bir bileşeni seçmeniz gerektiğinde kullanılır, ör. PID komutu için giriş ve çıkış

Her mülkün alanları aşağıda açıklanmıştır:

../../../../../_images/custom-components-3.png

Validators.yaml

../../../../../_images/custom-components-4.png

PaletteDescription.yaml içindeki motor özelliklerinin her birinin doğrulayıcılar girişinde “KiwiDriveValidator” olduğunu fark etmiş olabilirsiniz. Yerleşik bir doğrulayıcı olmadığı için Validators.yaml’de tanımlanması gerekiyordu. Bu örnek doğrulayıcı çok basittir - sadece adlandırılmış alanların her birinin diğerlerinden farklı bir değere sahip olmasını sağlar.

Yerleşik Validator-doğrulayıcı ve ValidatorTürleri

../../../../../_images/custom-components-5.png

Yerleşik doğrulayıcılar çok kullanışlıdır (özellikle bağlantı noktası / kanal kullanımı için UniqueValidators), ancak bazen önceki adımda olduğu gibi özel bir doğrulayıcıya ihtiyaç duyulur

  • DistinctValidator: Verilen alanların her birinin değerlerinin benzersiz olduğundan emin olur

  • ExistsValidator: Bu doğrulayıcı kullanılarak cihaz için bir değerin ayarlandığından emin olur

  • UniqueValidator: Özelliğin değerinin verilen alanlar için genel olarak benzersiz olduğundan emin olur

  • ListValidator: Bir liste özelliğindeki tüm değerlerin geçerli olduğundan emin olur

C++ Export.yaml

../../../../../_images/custom-components-6.png

Dosyanın satır satır dökümü:

  • Kiwi Drive: dışa aktarılan bileşenin adı. Bu, PaletteDescription.yaml’de ayarlanan ad ve bu dosyayı içeren klasörün adıyla aynıdır.

  • Varsayılanlar: Bu bileşenin ihtiyaç duyduğu dahil etme, sınıfın adı, bir yapı şablonu ve daha fazlası için bazı varsayılan değerler sağlar. CustomComponent varsayılanı, bileşeni kullanan her oluşturulan dosyaya Custom/${ClassName}.h için bir include ekler (örneğin, RobotDrive.h, #include "Custom/KiwiDrive.h içerir. dosyanın üst kısmı)

  • ClassName: eklediğiniz özel sınıfın adı.

  • Construction : bileşenin nasıl inşa edilmesi gerektiğine dair bir talimat. Değişkenler değerleri ile değiştirilecek (“$ {ClassName}”, “KiwiDrive” ile değiştirilecektir), ardından makrolar değerlendirilecektir (örneğin,``#variable($Name)``, drivebaseKiwiDrive ile değiştirilebilir `).

Bu örnek, constructor-yapıcıyla bir KiwiDrive sınıfı beklemektedir.

KiwiDrive(SpeedController, SpeedController, SpeedController)

Ekibiniz Java kullanıyorsa, bu dosya boş olabilir.

Java Export.yaml

../../../../../_images/custom-components-7.png

C ++ dışa aktarma dosyasına çok benzer; tek fark İnşaat hattı olmalıdır. Bu örnek, yapıcıyla bir KiwiDrive sınıfı beklemektedir.

KiwiDrive(SpeedController, SpeedController, SpeedController)

Ekibiniz C ++ kullanıyorsa, bu dosya boş olabilir.

Makroları ve Değişkenleri Kullanma

Makrolar, RobotBuilder’ın değişkenleri oluşturulan koda eklenecek metne dönüştürmek için kullandığı basit işlevlerdir. Her zaman “#” simgesiyle başlarlar ve işlevlere benzer bir sözdizimine sahiptirler: ``<macro_name> (arg0, arg1, arg2, …) `` Muhtemelen kullanmanız gerekecek tek makro ``#variable (bileşen_adı)``dır.

#variable bir string alır, genellikle bir yerde tanımlanmış bir değişkendir (yani “Name”, RobotBuilder’daki bileşene verilen addır, “Kol Motoru” gibi) ve onu içinde tanımlanan bir değişkenin adına dönüştürür. üretilen kod. Örneğin, #variable("Arm Motor"), ArmMotor dizesiyle sonuçlanır

Değişkenlere, değişken adının önüne bir dolar işareti (“$”) yerleştirilerek başvurulur; bu, değişkeni dosyadaki diğer metinden kolayca ayırt etmek için isteğe bağlı olarak güzel parantez içine yerleştirilebilir. Dosya ayrıştırıldığında dolar işareti, değişken adı ve küme parantezleri değişkenin değeriyle değiştirilir (örneğin, ${ClassName}, KiwiDrive ‘’ ile değiştirilir).

Değişkenler, bileşen özellikleridir (örn. Kiwi sürücü örneğinde “Motor 1”, “Motor 2”, “Motor 3”) veya aşağıdakilerden biridir:

  1. Short_Name: RobotBuilder’daki editör panelinde bileşene verilen ad

  2. Ad: bileşenin tam adı. Bileşen bir alt sistemdeyse, bu, alt sistemin adına eklenen kısa ad olacaktır.

  3. Export-Dışa Aktar: Varsa, bu bileşenin içinde oluşturulacağı dosyanın adı. Bu, aktüatörler, kontrolörler ve sensörler gibi bileşenler için “RobotMap” olmalıdır; veya oyun kumandaları veya diğer özel OI bileşenleri gibi şeyler için “OI”. “CustomComponent” varsayılanının RobotMap’e aktarılacağını unutmayın.

  4. Import : Bu bileşenin kullanılabilmesi için dahil edilmesi veya içe aktarılması gereken dosyalar.

  5. Declaration: Bu bileşen türünde bir değişkenin nasıl beyan edileceğine dair Construction’a benzer bir talimat. Bu, varsayılan “None” olarak alınır.

  6. Construction: bu bileşenin yeni bir örneğinin nasıl oluşturulacağına ilişkin talimat

  7. LiveWindow: bu bileşenin LiveWindow’a nasıl ekleneceğine dair bir talimat

  8. Extra: kodlama türünü ayarlaması gereken kodlayıcılar gibi bu bileşenin doğru davranması için herhangi bir ekstra işlev veya yöntem çağrısı için talimatlar.

  9. Prototip (yalnızca C ++): Bileşenin bildirildiği dosyada oluşturulacak bir işlevin prototipi, tipik olarak OI sınıfında bir alıcı

  10. Function: Bileşenin bildirildiği dosyada oluşturulacak bir işlev, genellikle OI sınıfındaki bir alıcı

  11. PID: Eğer varsa, bileşenin PID çıktısının nasıl alınacağına dair bir talimat (örneğin, #variable($Short_Name)->PIDGet())

  12. ClassName: Bileşenin temsil ettiği sınıfın adı (örneğin, KiwiDrive veya Joystick)

Adında boşluklar olan değişkenleriniz varsa (“Motor 1”, “Sağ Ön Motor” vb.), Dışa aktarma dosyalarında bunları kullanırken boşlukların alt çizgi ile değiştirilmesi gerekir.

help.html

../../../../../_images/custom-components-8.png

Bileşen hakkında bilgi veren bir HTML dosyası. Bunun olabildiğince ayrıntılı olması daha iyidir, ancak programcı (lar) bileşene yeterince aşina ise veya o kadar basitse, ayrıntılı bir açıklamada çok az nokta varsa kesinlikle gerekli değildir.

config.txt

../../../../../_images/custom-components-9.png

Bileşen hakkında çeşitli bilgileri tutan bir yapılandırma dosyası. Şu anda, bu yalnızca bileşeni yerleştirmek için palet bölümüne sahiptir.

Paletin bölümleri (bunlar büyük / küçük harfe duyarlıdır):

  • Alt sistemler

  • Kontrolörler

  • Sensörler

  • Aktüatörler

  • Pnömatik

  • OI

  • Komutlar

icon.png

Palette ve yardım sayfasında görünen simge. Bu 64x64 .png dosyası olmalıdır.

Görsel dağınıklığı önlemek için içinde bulunduğu bölümün renk şemasını ve genel stilini kullanmalıdır, ancak bu tamamen isteğe bağlıdır. Simgelerin ve arka planların Photoshop .psd dosyaları src / main / icons / icons ve simgelerin ve arka planların png dosyaları src / main / resources / icons içinde yer alır.