Étape 2 : Saisie des constantes calculées

Note

En C++, il est important que les constantes de la commande prédictive soient saisies dans le type d’unité approprié. Pour plus d’informations sur les unités C++, voir La librairie d’unités C++.

Maintenant que nous avons nos constantes de caractérisation, c’est le moment de les placer dans notre code. L’endroit recommandé pour cela est le fichier Constants de la structure standard de projet command-based.

Les parties pertinentes du fichier des constantes de l’exemple de projet RamseteCommand (Java, C++) peuvent être vue ci-dessous.

Gains Prédicitif/Rétroactif

Tout d’abord, nous devons entrer les gains prédictif et rétroactif que nous avons obtenus à l’aide de l’outil de caractérisation.

Note

Les gains prédictif et rétroactif ne se transfèrent pas, en général, entre les robots. Aussi, n’utilisez pas les gains de ce tutoriel sur votre propre robot.

44
45
46
47
48
49
50
51
52
53
54
    // These are example values only - DO NOT USE THESE FOR YOUR OWN ROBOT!
    // These characterization values MUST be determined either experimentally or theoretically
    // for *your* robot's drive.
    // The Robot Characterization Toolsuite provides a convenient tool for obtaining these
    // values for your robot.
    public static final double ksVolts = 0.22;
    public static final double kvVoltSecondsPerMeter = 1.98;
    public static final double kaVoltSecondsSquaredPerMeter = 0.2;

    // Example value only - as above, this must be tuned for your drive!
    public static final double kPDriveVel = 8.5;

DifferentialDriveKinematics

En outre, nous devons créer une instance de la classe DifferentialDriveKinematics , qui nous permet d’utiliser la trackwidth (c’est-à-dire la distance horizontale entre les roues) du robot pour la conversion des vitesses du châssis aux vitesses des roues. Comme partout ailleurs, nous gardons nos unités en mètres.

32
33
34
    public static final double kTrackwidthMeters = 0.69;
    public static final DifferentialDriveKinematics kDriveKinematics =
        new DifferentialDriveKinematics(kTrackwidthMeters);

Vitesse/accélération max sur la trajectoire

Nous devons également décider d’une accélération nominale max et d’une vitesse maximale du robot pendant le suivi de la trajectoire. La valeur maximale de la vitesse doit être choisie légèrement en dessous de la vitesse libre nominale du robot. En raison de l’utilisation ultérieure du DifferentialDriveVoltageConstraint, la valeur maximale de l’accélération n’est pas extrêmement cruciale.

62
63
    public static final double kMaxSpeedMetersPerSecond = 3;
    public static final double kMaxAccelerationMetersPerSecondSquared = 3;

Paramètres Ramsete

Enfin, nous devons inclure une paire de paramètres pour le contrôleur RAMSETE. Les valeurs indiquées ci-dessous devraient bien fonctionner pour la plupart des robots, à condition que les distances aient été correctement mesurées en mètres - pour plus d’informations sur le réglage de ces valeurs (si nécessaire), voir Construire l’objet contrôleur Ramsete.

65
66
67
    // Reasonable baseline values for a RAMSETE follower in units of meters and seconds
    public static final double kRamseteB = 2;
    public static final double kRamseteZeta = 0.7;