Yörünge Kısıtlamaları

Önceki makale ‘de, yörüngeleri oluştururken hiçbir özel kısıtlamanın eklenmediğini fark etmiş olabilirsiniz. Özel kısıtlamalar, kullanıcıların konuma ve eğriliğe bağlı olarak yörünge boyunca bulunan noktalarda hız ve ivmeye daha fazla kısıtlama getirmesine olanak tanır.

Örneğin, özel bir kısıtlama, belirli bir bölgede yörüngenin hızını belirli bir eşiğin altında tutabilir veya stabilite amacıyla robotu yakın dönüşlerde yavaşlatabilir.

WPILib Tarafından Sağlanan Kısıtlamalar

WPILib, kullanıcıların yörüngeler oluştururken kullanabilecekleri önceden tanımlanmış bir dizi kısıtlama içerir. WPILib tarafından sağlanan kısıtlamaların listesi aşağıdaki gibidir:

  • CentripetalAccelerationConstraint: Robot yörünge boyunca ilerlerken merkezcil ivmesini sınırlar. Bu, robotun sıkı dönüşlerde yavaşlamasına yardımcı olabilir.

  • DifferentialDriveKinematicsConstraint: Robotun dönüşlerinin hızını, diferansiyel tahrikli bir robotun hiçbir tekerleği belirtilen maksimum hızın üzerine çıkmayacak şekilde sınırlar.

  • DifferentialDriveVoltageConstraint: Bir diferansiyel sürücü robotunun ivmesini, komut verilen hiçbir gerilimin belirtilen maksimum değeri aşmayacak şekilde sınırlar.

  • EllipticalRegionConstraint: Sahada yalnızca eliptik bir bölgede bir kısıtlama uygular.

  • MaxVelocityConstraint: Bir maksimum hız kısıtlaması uygular. Bu, robotun hızını yalnızca belirli bir bölgede sınırlamak için EllipticalRegionConstraint veya RectangularRegionConstraint ile oluşturulabilir.

  • MecanumDriveKinematicsConstraint: Robotun dönüş hızını, mecanum sürücülü bir robotun hiçbir tekerleği belirtilen maksimum hızın üzerine çıkmayacak şekilde sınırlar.

  • RectangularRegionConstraint: Alan üzerinde sadece dikdörtgen bir bölgede bir kısıtlama uygular.

  • SwerveDriveKinematicsConstraint: Robotun dönüşler sırasındaki hızını, dönüşlü bir robotun hiçbir tekerleği belirtilen maksimum hızın üzerine çıkmayacak şekilde sınırlar.

Not

DifferentialDriveVoltageConstraint, yalnızca teorik gerilim komutlarının feedforward model kullanarak belirtilen maksimum değeri aşmamasını sağlar. Robot izleme sırasında referanstan saparsa, komut verilen voltaj belirtilen maksimumdan daha yüksek olabilir.

Özel Bir Kısıtlama Oluşturma

Kullanıcılar, TrajectoryConstraint arayüzünü uygulayarak kendi kısıtlamalarını oluşturabilirler.

@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:
        ...

MaxVelocity yöntemi, herhangi bir kısıtlama olmaksızın yörüngenin verilen poz, eğrilik ve orijinal hızı için izin verilen maksimum hızı döndürmelidir. MinMaxAcceleration methodu, verilen pozda, eğrilik ve kısıtlanmış hız için izin verilen minimum ve maksimum hızlanmayı döndürmelidir.

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