Les contraintes de trajectoire

Dans l’article précédent, vous avez peut-être remarqué qu’aucune contrainte personnalisée n’a été ajoutée lors de la génération des trajectoires. Les contraintes personnalisées permettent aux utilisateurs d’imposer plus de restrictions sur la vitesse et l’accélération aux points le long de la trajectoire en fonction de l’emplacement et de la courbure.

Par exemple, une contrainte personnalisée peut maintenir la vitesse de la trajectoire sous un certain seuil dans une certaine région ou ralentir le robot près des virages à des fins de stabilité.

Les contraintes fournies par WPILib

WPILib inclut un ensemble de contraintes prédéfinies que les utilisateurs peuvent utiliser lors de la génération de trajectoires. La liste des contraintes fournies par WPILib est la suivante:

  • CentripetalAccelerationConstraint: Limite l’accélération centripète du robot lorsqu’il se déplace le long de la trajectoire. Cela peut aider à ralentir le robot dans les virages serrés.

  • DifferentialDriveKinematicsConstraint: limite la vitesse du robot autour des virages de sorte qu’aucune roue d’un robot à entraînement différentiel ne dépasse une vitesse maximale spécifiée.

  • DifferentialDriveVoltageConstraint: limite l’accélération d’un robot à entraînement différentiel de sorte qu’aucune tension de commande ne dépasse un voltage maximum spécifié.

  • EllipticalRegionConstraint: impose une contrainte uniquement dans une région elliptique du champ.

  • MaxVelocityConstraint: Impose une contrainte de vitesse maximale. Cela peut être composé avec la EllipticalRegionConstraint ou la RectangularRegionConstraint pour limiter la vitesse du robot uniquement dans une région spécifique.

  • MecanumDriveKinematicsConstraint: limite la vitesse du robot dans les virages de sorte qu’aucune roue d’un robot avec entraînement Mécanum ne dépasse une vitesse maximale spécifiée.

  • RectangularRegionConstraint: impose une contrainte uniquement dans une région spécifique du terrain (de forme rectangualire).

  • SwerveDriveKinematicsConstraint: Limite la vitesse du robot autour des virages de telle sorte qu’aucune roue d’un robot de type Swerve ne dépasse une vitesse maximale spécifiée.

Note

La DifferentialDriveVoltageConstraint garantit que les commandes de tension calculées ne dépassent pas le voltage maximum spécifié en utilisant un modèle Feedforward. Si le robot s’écarte de la référence pendant le suivi du parcours, la tension commandée pourrait être supérieure au voltage maximum spécifié.

La création d’une contrainte personnalisée

Les utilisateurs peuvent créer leur propre contrainte en appelant l’interface TrajectoryConstraint.

@Override
public double getMaxVelocityMetersPerSecond(Pose2d poseMeters, double curvatureRadPerMeter,
                                            double velocityMetersPerSecond) {
  // code here
}

@Override
public MinMax getMinMaxAccelerationMetersPerSecondSq(Pose2d poseMeters,
                                                     double curvatureRadPerMeter,
                                                     double velocityMetersPerSecond) {
  // code here
}
units::meters_per_second_t MaxVelocity(
const Pose2d& pose, units::curvature_t curvature,
units::meters_per_second_t velocity) override {
  // code here
}

MinMax MinMaxAcceleration(const Pose2d& pose, units::curvature_t curvature,
                      units::meters_per_second_t speed) override {
  // code here
}
from wpimath import units
from wpimath.geometry import Pose2d
from wpimath.trajectory.constraint import TrajectoryConstraint


class MyConstraint(TrajectoryConstraint):
    def maxVelocity(
        self,
        pose: Pose2d,
        curvature: units.radians_per_meter,
        velocity: units.meters_per_second,
    ) -> units.meters_per_second:
        ...

    def minMaxAcceleration(
        self,
        pose: Pose2d,
        curvature: units.radians_per_meter,
        speed: units.meters_per_second,
    ) -> TrajectoryConstraint.MinMax:
        ...

La méthode MaxVelocity retourne la vitesse maximale autorisée pour la pose, la courbure et la vitesse d’origine données de la trajectoire sans aucune contrainte. La méthode MinMaxAcceleration retourne l’accélération minimale et maximale autorisée pour la pose donnée, la courbure et la vitesse.

Voir le code source (Java, C++) pour les contraintes fournies par WPILib pour plus d’exemples sur la façon d’écrire vos propres contraintes de trajectoire personnalisées.