Ana içeriğe geç

MegaTag2 ile Robot Lokalizasyonu

2024'te tanıtılan Megatag2, mobil robotlar için hassas ve belirsizlik içermeyen AprilTag tabanlı bir lokalizasyon sistemidir. Aşağıdaki hedeflerle geliştirilmiştir:

  • Poz belirsizliği sorununu ortadan kaldırmak ve görüntü/köşe gürültüsüne karşı dayanıklılığı artırmak.
  • Tek bir etiket verildiğinde, perspektiften bağımsız olarak mükemmel poz tahminleri sağlamak.
  • Fiziksel AprilTag yerleşim hatalarına karşı dayanıklılığı artırmak
  • İyi poz tahmini sonuçları için gerekli filtreleme miktarını azaltmak

Megatag2, tek bir etiket verildiğinde herhangi bir mesafede mükemmel sonuçlar sağlar. Bu, yalnızca hem ilgili hem de tolerans dahilinde olan etiketlere odaklanmanın ve diğer tüm etiketleri filtrelemenin mümkün olduğu anlamına gelir. Bir etiket doğru konumda değilse, MegaTag2 ile birlikte tanıtılan dinamik filtreleme özelliğini kullanarak filtreleyebilirsiniz.

int[] validIDs = {3,4};
LimelightHelpers.SetFiducialIDFiltersOverride("limelight", validIDs);

MT1'in aksine, MT2 robotunuzun yönünü (yaw) bildiğinizi varsayar. İsteğe bağlı olarak, Megatag2 tam bir robot oryantasyonu ve açısal hızları kabul eder.

Gereksinimler:

  • Limelight'ınızın robot-uzay pozu web arayüzünde veya API aracılığıyla yapılandırılmış olmalıdır
  • Bir saha haritası (.fmap) yüklenmiş olmalıdır
  • LimelightHelpers.SetRobotOrientation(robotYawInDegrees,0,0,0,0,0) robot tarafındaki kodda her karede çağrılmalıdır
  • SetRobotOrientation, merkezlenmiş (harita oluşturucuya bakın) veya mavi köşe orijinini varsayar. Saat yönünün tersine pozitif, 0 derece -> FRC'de kırmızı ittifak duvarına bakıyor.

NetworkTables Anahtarları:

  • botpose_orb_wpiblue
  • botpose_orb_wpired
  • botpose_orb

JSON Anahtarları:

  • botpose_orb_wpiblue
  • botpose_orb_wpired
  • botpose_orb
  • (Her fiducial hedef için) t6r_fs_orb - yalnızca bu etikete dayalı olarak megatag2 kullanarak saha uzayında robot pozu (çoklu etiket yok)

Bu oldukça belirsiz tek etiketli durumda MegaTag2 (kırmızı robot) ile Megatag (mavi robot) arasındaki farka dikkat edin


  • Altın Silindir / Kırmızı Robot: Filtrelenmemiş Megatag2 botpose
  • Sarı Silindirler: Filtrelenmemiş tek etiketli Megatag2 botpose'ları

  • Beyaz Silindir/Mavi Robot: MegaTag1 Botpose
  • Yeşil Silindir: Etiket başına bireysel bot pozu (MT1)
  • Mavi Silindir: Etiket başına bireysel bot pozlarının ortalaması (MT1)

bilgi

2024'te, WPILib Ekosisteminin çoğu tek orijinli koordinat sistemine geçiş yaptı. 2023'te, koordinat sisteminizin orijini ittifak renginize göre değişiyordu.

2024 ve sonrası için, koordinat sisteminizin orijini her zaman "mavi" orijin olmalıdır. FRC takımları, poz ile ilgili işlevsellik için her zaman botpose_orb_wpiblue kullanmalıdır

WPILib'in Poz Tahmincisini Kullanma

  LimelightHelpers.SetRobotOrientation("limelight", m_poseEstimator.getEstimatedPosition().getRotation().getDegrees(), 0, 0, 0, 0, 0);
LimelightHelpers.PoseEstimate mt2 = LimelightHelpers.getBotPoseEstimate_wpiBlue_MegaTag2("limelight");
if(Math.abs(m_gyro.getRate()) > 720) // eğer açısal hızımız saniyede 720 dereceden fazlaysa, görüş güncellemelerini görmezden gel
{
doRejectUpdate = true;
}
if(mt2.tagCount == 0)
{
doRejectUpdate = true;
}
if(!doRejectUpdate)
{
m_poseEstimator.setVisionMeasurementStdDevs(VecBuilder.fill(.7,.7,9999999));
m_poseEstimator.addVisionMeasurement(
mt2.pose,
mt2.timestampSeconds);
}

Limelight'ınızın Robot-Uzay Pozunu Yapılandırma

LL İleri, LL Sağ ve LL Yukarı, robotun içinde olsaydınız robotun ileri, sağ ve yukarı vektörleri boyunca olan mesafeleri temsil eder (metre cinsinden). LL Yuvarlanma, Eğim ve Sapma, Limelight'ınızın derece cinsinden dönüşünü temsil eder. Bu değerleri değiştirebilir ve 3D görüntüleyicide Limelight'ın 3D modelinin nasıl değiştiğini izleyebilirsiniz. Limelight, kamera uzayındaki hedef pozundan -> saha uzayındaki robot pozuna geçmek için bu yapılandırmayı dahili olarak kullanır.