Écrire le code d’un sous-système

L’ajout de code pour créer un sous-système fonctionnel est très simple. Pour les sous-systèmes qui n’utilisent pas de rétroaction, cela s’avère extrêmement simple. Dans cette section, nous allons regarder un exemple de sous-système de pince ou Claw sur un bras articulé de robot. Le sous-système Claw dispose également d’un interrupteur de fin de course pour déterminer si un objet est bien saisi.

Représentation de RobotBuilder du sous-système Claw

../../../../../_images/writing-subsystem-code-1.png

La pince à l’extrémité du bras du robot est un sous-système actionné par un seul contrôleur de moteur VictorSPX. Il y a trois choses que nous voulons que la pince fasse, commence à s’ouvrir, commencer à se fermer, et s’arrêter. C’est la responsabilité du sous-système. La prise en charge pour l’ouverture et la fermeture sera assurée par une commande plus tard dans ce didacticiel. Nous définirons également une méthode pour savoir si la pince est en train de saisir un objet.

Ajout de capacités de sous-système

12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 public class Claw extends SubsystemBase {
     // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTANTS
 public static final double PlaceDistance = 0.1;
 public static final double BackAwayDistance = 0.6;

     // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTANTS

     // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATIONS
 private PWMVictorSPX motor;
 private DigitalInput limitswitch;

     // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATIONS

     public Claw() {
         // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTRUCTORS
 motor = new PWMVictorSPX(4);
  addChild("motor",motor);
  motor.setInverted(false);

 limitswitch = new DigitalInput(4);
  addChild("limit switch",limitswitch);



         // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTRUCTORS
     }

     @Override
     public void periodic() {
         // This method will be called once per scheduler run

     }

     @Override
     public void simulationPeriodic() {
         // This method will be called once per scheduler run when in simulation

     }

     public void open() {
         motor.set(1.0);
     }

     public void close() {
         motor.set(-1.0);
     }

     public void stop() {
         motor.set(0.0);
     }

     public boolean isGripping() {
         return limitswitch.get();
     }

 }

Ajoutez des méthodes aux fichiers claw.java ou claw.cpp qui ouvriront, fermeront et empêcheront la pince de bouger et de lire l’état de l’interrupteur de fin de course de la pince. Ceux-ci seront utilisés par les commandes qui gèrent réellement le fonctionnement de la pince.

Note

Les commentaires ont été éliminés de ce fichier pour faciliter le suivi des changements de ce document.

Notez que les variables membres appelées motor et limitswitch sont créés par RobotBuilder afin qu’elles puissent être utilisées dans l’ensemble du sous-système. Chacun de vos éléments glissés dans la palette aura une variable membre avec le nom donné dans RobotBuilder.

Ajout des déclarations de méthode au fichier Header, ou d’en-tête (C ++ uniquement)

12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Claw: public frc2::SubsystemBase {
private:
    // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATIONS
frc::PWMVictorSPX m_motor{4};
frc::DigitalInput m_limitswitch{4};

    // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATIONS
public:
Claw();

    void Periodic() override;
    void SimulationPeriodic() override;
    void Open();
    void Close();
    void Stop();
    bool IsGripping();
    // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CMDPIDGETTERS

    // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CMDPIDGETTERS
    // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTANTS
static constexpr const double PlaceDistance = 0.1;
static constexpr const double BackAwayDistance = 0.6;

    // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTANTS


};

En plus d’ajouter les méthodes au fichier d’implémentation de classe, Claw.cpp, les déclarations des méthodes doivent être ajoutées au fichier d’en-tête, soit Claw.h. Les déclarations à ajouter sont indiquées ici.

Pour ajouter la fonctionnalité au sous-système Claw afin de gérer l’ouverture et la fermeture, vous devez définir des commandes.