Sendable ile Robot Telemetrisi
WPILib gösterge paneli API’ları, kullanıcıların robot kodundan ufak verileri gösterge paneline göndermesine olanak tanıyor olsa da robotun işlemsel mantığından telemetri değerlerinin yayınlanması için elle kod yazmak uğraştırıcı bir işlemdir.
Daha basit bir yaklaşım, declarative programming - bildirimsel programlama tarzında telemetri veri kaydı adına önemli veri alanlarının işaretlenmesi için kullanıcı kodunun varolan nesne odaklı yapısından faydalanmaktır. Bunu takiben WPILib çerçevesi, kullanıcının yazması gereken toplam kod miktarını düşürüp kodun okunabilirliğini arttırarak, işlemin zorlayıcı/sıkıntılı kısmı olan veri alanlarının doğru bir şekilde okunması (ve bu alanlara yazım) işlemlerini sizin adınıza üstlenebilmektedir.
WPILib bu işlevselliği Sendable arayüzüyle sağlamaktadır. Sendable içeren sınıflar, kendiliğinden gösterge paneline veri gönderen, ve bazı durumlarda panelden geri veri alan, değer dinleyicilerini algılayabilmektedir. Bu sınıflar, takımların güncelleme göndermek/oylamak için kendi kodlarını yazma ihtiyacını ortadan kaldırarak, (sıradan bir veri alanı gibi) bildirimsel olarak herhangi bir WPILib gösterge paneline gönderilebilmektedir.
Sendable nedir?
Sendable (Java, C++, Python) is an interface provided by WPILib to facilitate robot telemetry. Classes that implement Sendable can declaratively send their state to the dashboard - once declared, WPILib will automatically send the telemetry values every robot loop. This removes the need for teams to handle the iteration-to-iteration logic of sending and receiving values from the dashboard, and also allows teams to separate their telemetry code from their robot logic.
(Commands gibi) birçok WPILib sınıfı çoktan Sendable içermektedir ve bu sebeple herhangi bir kullanıcı değişikliği olmadan gösterge paneline gönderilebilmektedir. Kullanıcılar aynı zamanda kendi sınıflarını Sendable içerecek şekilde genişletebilmektedir.
Sendable arayüzü yalnızca bir metod içermektedir: initSendable. Dahil edilen sınıflar, kod içerisindeki veri değerlerinin yapılandırılmış JSON verilerine bağlanması için, bu metodu devre dışı bırakmaktadır. Bağlanılan veriler ardından NetworkTables üzerinden robot gösterge paneline kendiliğinden gönderilmektedir. Sendable arayüzünün nasıl dahil edildiği bir sonraki yazıda ele alınmaktadır.
Gösterge Paneline bir Sendable Gönderilmesi
Not
Basit veri türlerinin aksinde Sendable’lar herhangi ek bir kullanıcı kodu olmadan, “kur ve unut” mantığıyla WPILib tarafından gösterge panelinde kendiliğinden güncellenmektedir. Bu doğrultuda Sendable’lar gösterge paneline periyodik bir fonksiyon yerine bir başlangıç bloku veya constructor içerisinde gönderilmelidir.
Gösterge paneline bir Sendable nesnesi göndermek için sadece gösterge panelinin putData metodunu kullanmanız yeterli olacaktır. Örneğin, PID Kontrolörü kullanan bir “kol” sınıfı, aşağıdaki constructor’ı çağırarak kontrolörden gelen telemetri verilerini kendiliğinden kaydedebilmektedir:
SmartDashboard.putData("Arm PID", armPIDController);
frc::SmartDashboard::PutData("Arm PID", &armPIDController);
from wpilib import SmartDashboard
SmartDashboard.putData("Arm PID", armPIDController)
Bunlara ek olarak bazı Sendable sınıfları, belirleyicileri gösterge panelinden robota gönderilen veri değerlerine bağlayabilmekte, böylece robot parametrelerinin uzaktan ayralanmasına olanak tanıyabilmektedir.