Restricciones de trayectoria

En el artículo previo, es posible que haya notado que no se agregaron restricciones personalizadas al generar las trayectorias. Las restricciones personalizadas permiten a los usuarios imponer más restricciones a la velocidad y la aceleración en puntos a lo largo de la trayectoria según la ubicación y la curvatura.

Por ejemplo, una restricción personalizada puede mantener la velocidad de la trayectoria por debajo de un cierto umbral en una determinada región o ralentizar el robot cerca de los giros por motivos de estabilidad.

Restricciones proporcionadas por WPILib

WPILib incluye un conjunto de restricciones predefinidas que los usuarios pueden utilizar al generar trayectorias. La lista de restricciones proporcionadas por WPILib es la siguiente:

  • CentripetalAccelerationConstraint: Limita la aceleración centrípeta del robot a medida que atraviesa la trayectoria. Esto puede ayudar a reducir la velocidad del robot en curvas cerradas.

  • DifferentialDriveKinematicsConstraint: Limita la velocidad del robot en los giros de modo que ninguna rueda de un robot differential-drive supere una velocidad máxima especificada.

  • DifferentialDriveVoltageConstraint: Limita la aceleración de un robot de differential drive de modo que ningún voltaje comandado supere un máximo especificado.

  • EllipticalRegionConstraint: Impone una restricción solo en una región elíptica del campo.

  • MaxVelocityConstraint: Impone una restricción de velocidad máxima. Esto se puede componer con EllipticalRegionConstraint o `` RectangularRegionConstraint`` para limitar la velocidad del robot solo en una región específica.

  • MecanumDriveKinematicsConstraint: Limita la velocidad del robot en los giros de modo que ninguna rueda de un robot de mecanum-drive supere una velocidad máxima especificada.

  • RectangularRegionConstraint: Impone una restricción solo en una región rectangular del campo.

  • SwerveDriveKinematicsConstraint: Limita la velocidad del robot alrededor de los giros de manera que ninguna rueda de un robot de swerve-drive supere una velocidad máxima especificada.

Nota

El `` DifferentialDriveVoltageConstraint “” solo asegura que los comandos de voltaje teórico no superen el máximo especificado usando un feedforward model. Si el robot se desviara de la referencia durante el seguimiento, el voltaje ordenado puede ser más alto que el máximo especificado.

Crear una restricción personalizada

Los usuarios pueden crear su propia restricción implementando la 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:
        ...

El método MaxVelocity debe devolver la velocidad máxima permitida para la pose, curvatura y velocidad original de la trayectoria dadas sin ninguna restricción. El método MinMaxAcceleration debe devolver la aceleración mínima y máxima permitida para la pose, curvatura y velocidad restringidas dadas.

See the source code (Java, C++) for the WPILib-provided constraints for more examples on how to write your own custom trajectory constraints.