2021 için yeni

FRC® için bir dizi iyileştirme yapılmıştır. 2021 için Kontrol Sistemi yazılımı. Bu makale, yeni değişiklikler ve özelliklerin kısa bir özetini ve ayrıca C++/Java WPILib değişiklikleri için daha eksiksiz bir değişiklik günlüğünü açıklayacak ve sağlayacaktır. Bu belge yalnızca son kullanıcılar için en alakalı değişiklikleri içerir, değişikliklerin tam listesi çeşitli WPILib GitHub depolarında görüntülenebilir.

Önemli

Dahili GradleRIO değişiklikleri nedeniyle, önceki yıl projelerinin güncellenmesi gerekmektedir. Sonra: Installing WPILib for 2021 uyumlu olması için tüm 2020 projeleri:doc:imported</docs/software/vscode-overview/importing-gradle-project> olmalıdır.

Başlıca Özellikler

  • Masaüstü ortamında simüle edilen robot koduna uzaktan erişime izin vermek için donanım düzeyinde bir `WebSocket interface <https://github.com/wpilibsuite/allwpilib/blob/v2021.1.1/simulation/halsim_ws_core/doc/hardware_ws_api.md>`__eklenmiştir.

  • Destek Romi robot platformu. Romi robot kodu, masaüstü simülatör ortamında çalışır ve yeni WebSocket arayüzü üzerinden Romi ile konuşur.

  • Yeni bir robot veri görselleştiricisi – Glass – eklendi. Glass, simülatör GUI’sine benzer bir UI’ye sahiptir ve aynı özelliklerin çoğunu destekler; ancak Glass, bağımsız bir kontrol paneli olarak kullanılabilir ve robot programına bağlı değildir.

  • WPILib yükleyici, macOS ve Linux’u desteklemek ve kullanım kolaylığını artırmak için yeniden yazılmıştır.

    • MacOS yükleyici, Gatekeeper baypas gereksinimini ortadan kaldırarak noter tarafından onaylanmıştır.

    • Önceki yıllardan farklı olduğu için lütfen bakınız: ref: kurulum talimatları <docs/zero-to-robot/step-2/wpilib-setup:WPILib Installation Guide>.

  • Kalman filtreleri, genişletilmiş Kalman filtreleri, kokusuz Kalman filtreleri ve doğrusal karesel düzenleyiciler ile model tabanlı kontrol için destek eklendi. Bakınız Introduction to State-Space Control daha fazla bilgi için.

WPILib

Son Dakika Değişiklikler

  • curvature_t, frc``den ``units ad alanına (C ++) taşındı

  • Yörünge kısıtlama yöntemleri artık C ++ ‘da const . Kendi özel kısıtlamalarını tanımlayan ekipler, MaxVelocity() ve MinMaxAcceleration() yöntemlerini const olarak işaretlemelidir.

  • Field2d sınıfı (2020 sezonunun ortasında eklendi) simülasyon paketinden (edu.wpi.first.wpilibj.simulation / frc/simülasyon/) SmartDashboard paketine ( edu.wpi.first.wpilibj.smartdashboard / frc/SmartDashboard/). Bu, ekiplerin robot konumlarını Glass’ta görüntülenmek üzere NetworkTables üzerinden göndermelerine olanak tanır. Field2d örneği, SmartDashboard.putData("Field", m_field2d) / frc::SmartDashboard::PutData("Field", &m_field2d) kullanılarak veya Shuffleboard methods . Simülatör GUI’de Field2d’yi görmek için bu yapılmalıdır.

  • PWM Hız Denetleyicileri get() yöntemi, ters çevirmeye bakılmaksızın set() ile aynı değeri döndürmek için değiştirildi. Ters çevirmeyi hesaba katan değer, getSpeed() yöntemi ile alınabilir. Bu, DMC60. Jaguar, PWMSparkMax, PWMTalonFX, PWMTalonSRX, PWMVenom, PWMVictorSPX, SD540 , `` Spark``, Talon, Victor ve VictorSP sınıflarını etkiler.

Yeni Komut Tabanlı Kütüphane

  • Komut zamanlayıcıya gözcü ve dönem raporlaması eklendi. Bu, ekiplerin bir döngü taşması meydana gelirse tam olarak hangi komutun veya alt sistemin sorumlu olduğunu bilmesini sağlayacaktır.

  • Java ekipleri için withName() komut dekoratörü eklendi. Bu, ekiplerin dekoratör kalıbı kullanarak belirli bir komutun adını ayarlamasını sağlar.

  • Kullanıcıların komutları tetiklemek için bir düğme olarak bir boolean NetworkTableEntry kullanmasına izin veren bir NetworkButton sınıfı eklendi.

  • Subsystem’e bir simulationPeriodic() yöntemi eklendi. Bu yöntem, normal periodic() yöntemine ek olarak simülasyon sırasında periyodik olarak çalışır.

Genel Kütüphane

  • Holonomic Drive Controller - Holonomik aktarma organları (yani, sapma ve mekanizma) ile ekiplerin yörüngeleri takip etmek için kullanabileceği bir kontrolör. Bu aynı zamanda yörüngeden ayrı olan özel Rotation2d yön girdilerini de destekler çünkü yön dinamikleri, holonomik aktarma organlarındaki öteleme hareketinden ayrıştırılır.

  • TimedRobot’ta ``addPeriodic()``aracılığıyla robot döngüsünden daha sık programlama işlevleri için destek eklendi. Daha önce, ekipler geri bildirim denetleyicilerini 20 ms’lik TimedRobot döngü süresinden daha sık çalıştırmak için bir Bildirici yapmak zorundaydı (TimedRobot’u bundan daha sık çalıştırmak önerilmez). Artık kullanıcılar geri besleme denetleyicilerini ana robot döngüsünden daha sık çalıştırabilir, ancak TimedRobot periyodik işlevleriyle eşzamanlı olarak iş parçacığı güvenliği sorunu yaşamaz. Bir örneğe bakın here.

  • Solenoid ve Çift Solenoid’e ``toggle()``işlevi eklendi.

  • Listenin dinamik olarak oluşturulmasına izin veren bir std::vector<> (C++) / SpeedController[] (Java)alan bir SpeedControllerGroup kurucusu eklendi. (Ekipler bunu doğrudan kullanmamalıdır. Bu yalnızca Python gibi dillerdeki bağlamalar için tasarlanmıştır.)

  • Oyunu ve etkin durumu birlikte kontrol etmek için yöntemler (isOperatorControlEnabled() ve isAutonomousEnabled()) eklendi.

  • C ++ ekiplerinin kod parçalarını zamanlayabilmeleri için bir ScopedTracer``sınıfı eklendi. Basitçe bir kod bloğunun üstündeki ``ScopedTracer ı somutlaştırın ve örnek kapsam dışına çıktığında zaman konsola yazdırılacaktır.

  • HSV değerlerinden bir Color örneği oluşturmak için fromHSV(int h, int s, int v) statik bir yöntem eklendi.

  • C++ ‘da Notifier ‘a RT öncelik oluşturucusu eklendi. Bu, Notifier’ı destekleyen iş parçacığının gerçek zamanlı öncelikte çalışmasını sağlayarak zamanlama seğirmesini azaltır.

  • Driver Station’a bir joystick’in bağlı olup olmadığını kontrol etmek için bir DriverStation.getInstance().isJoystickConnected(int) yöntemi eklendi.

  • Bir joystick bağlı olmadığında uyarıyı susturmak için ``DriverStation.getInstance().silenceJoystickConnectionWarning(boolean)``yöntemi eklendi. Robot gerçek bir FMS’ye bağlandığında bu ayarın hiçbir etkisi yoktur (yani uyarılar yazdırılmaya devam edecektir).

  • Mesafe ve açı alan Translation2d ye bir kurucu eklendi. Bu, kutupsal koordinatlardan Kartezyen koordinatlara etkili bir şekilde dönüştürülür.

  • Alanın belirli bir bölgesinde yörünge hızının sınırlandırılmasına izin vermek için EllipticalRegionConstraint , RectangularRegionConstraint ve ``MaxVelocityConstraint``eklendi.

  • İki veya daha fazla yörüngeyi karşılaştırmak için Trajectory sınıfına eşittir () operatörü eklendi.

  • Java’daki Trajectory sınıfına boş bir yörünge oluşturan sıfır argümanlı yapıcı eklendi.

  • Yörünge kısıtlaması yanlış davranışını yakalamak için özel bir istisna eklendi. Bu, kullanıcı tanımlı kısıtlamalar yanlış davrandığında (yani minimum hızlanma maksimum hızlanmadan daha büyük olduğunda) kullanıcıları bilgilendirir.

  • Gyro arayüzüne bir getRotation2d() yöntemi eklendi. Bu yöntem otomatik olarak cayro kurallarından geometri kurallarına dönüştürme ile ilgilenir.

  • C++ ekipleri için açısal hızlandırma birimleri eklendi. Bunlar, <units/angular_acceleration.h> başlığında bulunur.

  • Java’da Pose2d - getX() ve getY() , C++ ‘da X() ‘ve Y() ‘içine X ve Y bileşen alıcıları eklendi.

  • C++ ‘da degree_t ‘den Rotation2d ‘ye örtük dönüşüm eklendi. Bu, takımların Rotation2d nin gerekli olduğu her yerde bir derece değeri (i.e. 47_deg) kullanmasına izin verir.

  • Odometrinin yörüngenin başlangıç pozisyonuna sıfırlanmadığı örneklerden sonraki örneklerdeki hata düzeltildi.

  • Doğrudan kontrol vektörlerini kullanan ileri düzey kullanıcılar için bazı spline oluşturma hataları düzeltildi.

  • Swerve örneklerinde sabit teta denetleyicisi sürekli girişi. Bu, aktarma organlarının dönüşü sırasında en kısa yolun kullanılmadığı davranışı düzeltir.

  • Kullanımdan kaldırılan units.h bunun yerine derleme sürelerini hızlandıran bireysel unit başlıkları kullanın.

Simülasyon

  • Klavye sanal oyun çubuğu simülasyon desteği eklendi.

  • Simülasyondaki mekanizmaları görselleştirmek için Mekanizma2D eklendi.

  • Yaygın robot mekanizmaları için simülasyon fizik sınıfları eklendi (DrivetrainSim, ElevatorSim, SingleJointedArmSim ve FlywheelSim)

Shuffleboard

  • Number Slider-Sayı Kaydırıcısı artık metin değerini gösterir

  • Graphing Widget artık yüksek performanslı bir grafik kitaplığı olan ChartFX’i kullanıyor

  • Büyük sayılarla sabit ondalık basamak biçimlendirmesi

  • Boyut ve konum artık Shuffleboard API’sinde ayrı ayrı ayarlanabilir

  • Analog Giriş artık bir Metin Widget’ı ile görüntülenebilir

SmartDashboard

  • Ana bilgisayar IP’si yapılandırmada belirtilebilir.

PathWeaver

  • Ters spline’lar için destek eklendi

  • Dışa aktarılan JSON’daki koordinat sistemi simülatör GUI’si ile uyumlu olacak şekilde değiştirildi. Daha fazla bilgi için Importing a PathWeaver JSON bölümüne bakın.

GradleRIO

  • Satıcı JSON’larını indirmek veya bunları kullanıcı wpilib klasöründen getirmek için bir vendordep görevi eklendi

  • Satıcı JSON klasörü için varsayılan olmayan bir konum ayarlamak için bir gradlerio.vendordep.folder.path özelliği eklendi

  • wpi görevini (WPILib ve araçların mevcut sürümlerini yazdıran) wpiVersions olarak yeniden adlandırdı

  • Simülasyon sırasında ortam değişkenlerini ayarlama kabiliyeti eklendi

    • HALSIMWS_HOST ortam değişkenini ayarlamak için şunu kullanın:

      sim {
        envVar "HALSIMWS_HOST", "10.0.0.2"
      }
      

CSCore

  • Artık yalnızca Linux platformlarındaki akışa uygun cihazları listeler.

Visual Studio Kod Uzantısı

  • Visual Studio Code, 1.52.1’e güncellendi

  • Güncellenmiş Java ve C++ dil uzantıları

  • Driverstation sim uzantısı artık varsayılan olarak etkindir

  • Proje içeri alıcısı artık orijinal projede kullanılan komut sürümünü koruyor

  • Yeni proje ve proje ithalatçı ekranlarındaki metin netleştirildi

  • Bozuk ikili dosyaları içe aktarma düzeltildi

  • C ++ build.gradle projelerinde bağlantı sırası düzeltildi

  • Birden çok sim uzantısıyla çalışmak için Change Select Default Simulate Extension Setting komutu güncellendi

RobotBuilder

  • Yeni komut tabanlı çerçeve ve PID Denetleyicisi ile uyumlu olacak şekilde güncellendi.

    • Şablonlardaki büyük değişiklikler nedeniyle, RobotBuilder önceki yıla ait bir kayıt dosyasını kabul etmeyecektir. Yaml kaydetme dosyasını yeniden oluşturmalı ve yeni bir dizine aktarmalısınız.

    • Halen eski komut tabanlı çerçeveye dışa aktaran RobotBuilder’ın bir sürümü, yükleyiciye dahil edilmiştir ve RobotBuilder-Old olarak adlandırılmıştır.

  • C++: başlıktaki nesnelerin tek tip başlatılmasını kullanın

  • C++: kodun büyük / küçük harfe duyarlı dosya sistemlerinde derlenmesi için düzeltildi

  • Dosyayı kaydetmek için proje adını varsayılan olarak kullan

  • Kablolama dosyasının dışa aktarımı düzeltildi

  • Betikler için sabit satır sonları, böylece MacOS / Linux üzerinde çalışması düzeltildi

  • XboxController eklendi

Robot Karakterizasyonu

  • LQR gecikme telafisi eklendi

  • Backend, bir yazılımda kullanıcıların görmediği kısımların tümü ve ana sistemdir. Backend, yazılımcılar için daha ulaşılabilir olacak şekilde geliştirildi. Eski JSON dosyaları artık yeni sürümle çalışmayacaktır.

  • GUI’nin askıda kalmasına neden olmaktan kaçınmak için kodu yeni bir iş parçacığına dağıtın.