Field2d Widget - Aracı

Glass, robotunuzun sahadaki konumunu Field2d aracını kullanarak görüntülemeyi desteklemektedir. Bunun için Field2d sınıfının bir örneği oluşturulmalı, örnek NetworkTables üzerinden gönderilmeli ve robot kodunuzdaki en son robot pozuyla periyodik olarak güncellenmelidir.

Kullanıcı Kodundan Robot Pozunu Gönderme

Robotunuzun (genellikle odometry veya bir poz tahmincisi tarafından elde edilen) konumunu göndermek için, robot kodunda bir Field2d örneği oluşturulmalı ve örnek NetworkTables üzerinden gönderilmelidir. Örnek daha sonra en son robot pozuyla periyodik olarak güncellenmelidir.

private final Field2d m_field = new Field2d();
// Do this in either robot or subsystem init
SmartDashboard.putData("Field", m_field);
// Do this in either robot periodic or subsystem periodic
m_field.setRobotPose(m_odometry.getPoseMeters());
#include <frc/smartdashboard/Field2d.h>
#include <frc/smartdashboard/SmartDashboard.h>
frc::Field2d m_field;
// Do this in either robot or subsystem init
frc::SmartDashboard::PutData("Field", &m_field);
// Do this in either robot periodic or subsystem periodic
m_field.SetRobotPose(m_odometry.GetPose());
from wpilib import SmartDashboard, Field2d
self.field = Field2d()
# Do this in either robot or subsystem init
SmartDashboard.putData("Field", self.field)
# Do this in either robot periodic or subsystem periodic
self.field.setRobotPose(self.odometry.getPose())

Not

Field2d örneği daha alt seviyedeki NetworkTables API veya Shuffleboard API kullanılarak da iletilebilmektedir. Bu örnekte SmartDashboard API kullanılmıştır, diğer bir değişle Field2d aracı, SmartDashboard tablo adı altında görüntülenebilecektir.

Field2d’ye Yörüngelerin Gönderilmesi

Yörüngenizi görüntülemek, yörüngelerin istediğiniz şekilde oluşturulduğunu doğrulamak için çok iyi bir hata ayıklama - debugging adımıdır. Yörüngeler Field2d’de setTrajectory()/SetTrajectory() işlevlerini kullanarak kolayca görselleştirilebilmektedir.

44  public void robotInit() {
45    // Create the trajectory to follow in autonomous. It is best to initialize
46    // trajectories here to avoid wasting time in autonomous.
47    m_trajectory =
48        TrajectoryGenerator.generateTrajectory(
49            new Pose2d(0, 0, Rotation2d.fromDegrees(0)),
50            List.of(new Translation2d(1, 1), new Translation2d(2, -1)),
51            new Pose2d(3, 0, Rotation2d.fromDegrees(0)),
52            new TrajectoryConfig(Units.feetToMeters(3.0), Units.feetToMeters(3.0)));
53
54    // Create and push Field2d to SmartDashboard.
55    m_field = new Field2d();
56    SmartDashboard.putData(m_field);
57
58    // Push the trajectory to Field2d.
59    m_field.getObject("traj").setTrajectory(m_trajectory);
60  }
18  void AutonomousInit() override {
19    // Start the timer.
20    m_timer.Start();
21
22    // Send Field2d to SmartDashboard.
23    frc::SmartDashboard::PutData(&m_field);
24
25    // Reset the drivetrain's odometry to the starting pose of the trajectory.
26    m_drive.ResetOdometry(m_trajectory.InitialPose());
27
28    // Send our generated trajectory to Field2d.
29    m_field.GetObject("traj")->SetTrajectory(m_trajectory);
30  }
    def robotInit(self):

        # An example trajectory to follow during the autonomous period.
        self.trajectory = wpimath.trajectory.TrajectoryGenerator.generateTrajectory(
            wpimath.geometry.Pose2d(0, 0, wpimath.geometry.Rotation2d.fromDegrees(0)),
            [
                wpimath.geometry.Translation2d(1, 1),
                wpimath.geometry.Translation2d(2, -1),
            ],
            wpimath.geometry.Pose2d(3, 0, wpimath.geometry.Rotation2d.fromDegrees(0)),
            wpimath.trajectory.TrajectoryConfig(
                wpimath.units.feetToMeters(3.0), wpimath.units.feetToMeters(3.0)
            ),
        )

        # Create Field2d for robot and trajectory visualizations.
        self.field = wpilib.Field2d()

        # Create and push Field2d to SmartDashboard.
        wpilib.SmartDashboard.putData(self.field)

        # Push the trajectory to Field2d.
        self.field.getObject("traj").setTrajectory(self.trajectory)

Glass ile Yörüngelerin Görüntülenmesi

İletilen yörünge Glass ile NetworkTables -> SmartDashboard -> Field2d açılır menülerini takip ederek görüntülenebilmektedir.

Oluşturulan yörünge be Field2d'yi içeren bir resim

Not

RamseteController (Java / C++ / Python) kullanılan yukarıdaki örnekte iletilen yörünge otonom en az bir defa etkinleştirilmeden görünmeyecektir.

Robot Pozunun Glass’da Görüntülenmesi

Field2d örneğini NetworkTables üzerinden gönderdikten sonra, menü çubuğunda: guilabel: NetworkTables seçilerek, örneğin gönderildiği tablo adı seçilerek : guilabel:` Field2d` widget’ı Glass’a eklenebilir ve ardından Field düğmesine tıklayın.

../../../../_images/select-field2d.png

Widget göründüğünde, onu yeniden boyutlandırabilir ve istediğiniz gibi Glass çalışma alanına yerleştirebilirsiniz. Widget’ın üst kısmına sağ tıklamak, widget’ın adını özelleştirmenize, özel bir alan görüntüsü seçmenize, özel bir robot görüntüsü seçmenize ve alan ile robotun boyutlarını seçmenize olanak tanır.

Saha Görüntüsünün Seçilmesi

Image açılır listesi üzerinden var olan bir saha düzeni seçebilirsiniz ya da Image’ı Custom olarak ayarlayıp Choose JSON/image… seçeneğini işaretleyerek özel bir dosya seçebilirsiniz. Görüntü dosyası aynı dizinde olduğu sürece bir görüntü dosyası ya da bir PathWeaver JSON dosyasından birini kullanmayı seçebilirsiniz. JSON dosyasının seçilmesi görüntünün sahadaki doğru konumu ve sahanın doğru boyutunu kendi kendiliğinden içe aktaracaktır.

Not

You can retrieve the latest field image and JSON files from here. This is the same image and JSON that are used when generating paths using PathWeaver.

../../../../_images/field2d-options.png

Poz Stilinin Değiştirilmesi

Pozlalr Field2d menü çubuğuna sağ tıklanarak birçok farklı yöntemle özelleştirilebilmektedir. Özelleştirme örnekleri olarak çizgi genişliği, çizgi kalınlığı, stil, ok genişliği, ok kalınlığı, renk vb. verilebilmektedir.

Field2d özelleştirme ayarlarının sağ tık menüsünün bir görüntüsü

Poz stilini değiştirmenin bir kullanımı önceden gösterilmiş traj poz nesnesini, bir poz listesi yerine, bir çizgiye dönüştürmektir. Style açılır listesine tıklayıp select Line seçeneğini seçiniz. Anında yörüngenin görünümünde bir değişiklik fark edeceksinizdir.

"Style" açılır listesinden "line" seçeneğinin işaretlenmesi.

Şimdi Arrows kutucuğuna tıklayarak işaretini kaldırınız. Bu yörüngemizin güzel ve akıcı bir görünüm kazanmasını sağlayacaktır.

Akıcı çizgiyi göstermek için işareti kaldırılmış bir arrows kutucuğu.

AdvantageScope ile Poz Verilerinin Görüntülenmesi

AdvantageScope Field2d nesnesinden gelen, WPILib data logs kullanılarak bir günlük dosyasına kaydedilmiş veriler de dahil olmak üzere, poz verilerini görüntülemek için kullanılabilecek başka bir seçenektir. Hem 2 hem de 3 boyutlu görselleştrime desteği bulunmaktadır. Daha fazla bilgi için bkz. odometry ve 3D field sekmeleri.

3 boyutlu bir sahada robot yörüngesini görüntüleyen bir AdvantageScope penceresinin ekran görüntüsü.