Étape 1: Création d’instances simulées du matériel (Hardware)

Le framework de simulation WPILib contient plusieurs classes XXXSim , où XXX représente du matériel physique tel que des encodeurs ou des gyroscopes. Ces classes de simulation peuvent être utilisées pour définir des positions et des vitesses (pour les encodeurs) et des angles (pour les gyroscopes) à partir d’un modèle de votre base pilotable. Voir the Article sur la simulation de composant, pour plus d’informations sur ces classes de matériel de simulation et la simulation des périphériques des fournisseur.

Note

Simulation objects associated with a particular subsystem should live in that subsystem. An example of this is in the StateSpaceDriveSimulation (Java, C++) example.

Simulation d’encodeurs

La classe EncoderSim permet aux utilisateurs de définir les positions et les vitesses de l’encodeur sur un objet Encoder donné. Lorsqu’elle fonctionne sur du matériel réel, la classe Encoder interagit avec de vrais capteurs pour compter les révolutions (et les convertir automatiquement en unités de distance si elle est configurée pour le faire); cependant, en simulation, il n’y a pas de telles mesures à faire. La classe EncoderSim peut accepter ces lectures simulées à partir d’un modèle de votre transmission.

Note

Il n’est pas possible de simuler des encodeurs directement connectés à des contrôleurs de moteur CAN à l’aide des classes WPILib. Pour plus d’informations sur votre contrôleur de moteur spécifique, veuillez lire la documentation de votre fournisseur.

// 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};

Simulation de gyroscopes

Semblable à la classe EncoderSim, des classes de gyroscopes simulés existent également pour les gyroscopes WPILib couramment utilisés - AnalogGyroSim et ADXRS450_GyroSim. Ceux-ci sont également construits de la même manière.

Note

It is not possible to simulate certain vendor gyros (i.e. Pigeon IMU and NavX) using WPILib classes. Please read the respective vendors” documentation for information on their simulation support.

// 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};