1. Adım: Simüle Edilmiş Donanım Örneklerinin Oluşturulması

WPILib simülasyon çerçevesi, XXX’in kodlayıcılar veya jiroskoplar gibi fiziksel donanımları temsil ettiği, birçok XXXSim sınıfı içermektedir. Bu simülasyon sınıfları, aktarma sisteminizin bir model üzerinden konumların, (kodlayıcılar için) hızların ve (jiroskoplar için) açıların belirlenmesi için kullanılabilmektedir. Bu simülasyon donanım sınıfları ve simülasyon satıcı sınıflarına dair daha fazla bilgi için bkz. Cihaz Simülasyonu yazısı.

Not

Belirli bir alt sistemle ilişkili simülasyon nesneleri, o alt sistem içerisinde bulunmalıdır. Bu durumun bir örneği StateSpaceDriveSimulation (Java, C++) örneğinde görülmektedir.

Kodlayıcıların Simüle Edilmesi

EncoderSim sınıfı, kullanıcıların belirli bir Encoder nesnesinde kodlayıcı konumlarını ve hızlarını ayarlamasına olanak tanımaktadır. Gerçek bir donanım üzerinde çalışırken, Encoder sınıfı, devirleri saymak için gerçek sensörlerle etkileşime girmekte (ve bunu yapacak şekilde yapılandırılmışsa bunları otomatik olarak mesafe birimlerine dönüştürmekte), ancak simülasyonda yapılacak böyle bir ölçüm bulunmamaktadır. EncoderSim sınıfı, aktarma sisteminizin bir modelinden simüle edilmiş bu okumaları kabul edebilmektedir.

Not

WPILib sınıflarını kullanarak doğrudan CAN motor kontrolörlerine bağlı kodlayıcıların simüle edilmesi mümkün değildir. Özel motor kontrolörleri hakkında daha fazla bilgi için lütfen satıcı belgelerine başvurunuz.

// These represent our regular encoder objects, which we would
// create to use on a real robot.
private Encoder m_leftEncoder = new Encoder(0, 1);
private Encoder m_rightEncoder = new Encoder(2, 3);
// These are our EncoderSim objects, which we will only use in
// simulation. However, you do not need to comment out these
// declarations when you are deploying code to the roboRIO.
private EncoderSim m_leftEncoderSim = new EncoderSim(m_leftEncoder);
private EncoderSim m_rightEncoderSim = new EncoderSim(m_rightEncoder);
#include <frc/Encoder.h>
#include <frc/simulation/EncoderSim.h>
...
// These represent our regular encoder objects, which we would
// create to use on a real robot.
frc::Encoder m_leftEncoder{0, 1};
frc::Encoder m_rightEncoder{2, 3};
// These are our EncoderSim objects, which we will only use in
// simulation. However, you do not need to comment out these
// declarations when you are deploying code to the roboRIO.
frc::sim::EncoderSim m_leftEncoderSim{m_leftEncoder};
frc::sim::EncoderSim m_rightEncoderSim{m_rightEncoder};

Jiroskopların Simüle Edilmesi

EncoderSim sınıfına benzer şekilde, simüle jiroskop sınıfları da yaygın kullanıma sahip WPILib jiroskopları için mevcuttur – AnalogGyroSim ve ADXRS450_GyroSim. Bu sınıflar da EncoderSim sınıfıyla aynı şekilde inşa edilmiştir.

Not

Belirli satıcı jiroskoplarının (diğer bir deyişle Pigeon IMU ve NavX’in) WPILib sınıfları kullanılarak simüle edilmesi imkansızdır. Bu jiroskopların simülasyon desteklerine dair bilgi için ilgili satıcıların belgelerine başvurunuz.

// Create our gyro object like we would on a real robot.
private AnalogGyro m_gyro = new AnalogGyro(1);
// Create the simulated gyro object, used for setting the gyro
// angle. Like EncoderSim, this does not need to be commented out
// when deploying code to the roboRIO.
private AnalogGyroSim m_gyroSim = new AnalogGyroSim(m_gyro);
#include <frc/AnalogGyro.h>
#include <frc/simulation/AnalogGyroSim.h>
...
// Create our gyro objectl ike we would on a real robot.
frc::AnalogGyro m_gyro{1};
// Create the simulated gyro object, used for setting the gyro
// angle. Like EncoderSim, this does not need to be commented out
// when deploying code to the roboRIO.
frc::sim::AnalogGyroSim m_gyroSim{m_gyro};