Ana içeriğe geç

MegaTag ile Robot Lokalizasyonu

Eğer Limelight'ınızın robot-uzayı pozu web arayüzünde yapılandırıldıysa ve bir saha haritası web arayüzü üzerinden yüklendiyse, robotun saha uzayındaki konumu getBotpose() ve "botpose" networktables dizisi (x,y,z metre cinsinden, yuvarlanma, yunuslama, sapma derece cinsinden) aracılığıyla kullanılabilir olacaktır.

Robot lokalizasyon algoritmamız MegaTag olarak adlandırılır. Birden fazla etiket görünüyorsa, bireysel etiket belirsizliklerine ve görüntüdeki gürültüye karşı dayanıklıdır. Eğer tüm anahtar noktalar eş düzlemse, hala bazı belirsizlik çevirme riskleri vardır.

  • Yeşil Silindir: Etiket başına bireysel bot pozu
  • Mavi Silindir: Eski BotPose
  • Beyaz Silindir: MegaTag Botpose

Buradaki açık poz belirsizliğine dikkat edin:

Yeni botpose'un (beyaz silindir) eski botpose'a (mavi silindir) kıyasla ne kadar stabil olduğuna dikkat edin. tx ve ty değerlerini de izleyebilirsiniz.

Bu sadece düzlemsel etiketlerle sınırlı değildir. Tam 3B'de ve herhangi bir yönelimde herhangi bir sayıda etikete ölçeklenebilir. Zemin etiketleri ve tavan etiketleri mükemmel çalışır.

İşte basit bir düzlemsel durumla bunun nasıl çalıştığını gösteren bir diyagram. Sonuçlar aslında gösterilenden daha iyidir, çünkü gösterilen MegaTag'de bir nokta yerine üç noktaya önemli bir hata uygulanmıştır. 3B birleşik MegaTag boyut ve anahtar nokta sayısı arttıkça, stabilitesi artar.

megatag botpose örneği:

WPILib'in Poz Tahmincisini Kullanma

bilgi

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

2024 ve sonrası için, koordinat sisteminizin kökeni her zaman "mavi" köken olmalıdır. FRC takımları poz ile ilgili işlevsellik için her zaman botpose_wpiblue kullanmalıdır

 LimelightHelpers.PoseEstimate mt1 = LimelightHelpers.getBotPoseEstimate_wpiBlue("limelight");

if(mt1.tagCount == 1 && mt1.rawFiducials.length == 1)
{
if(mt1.rawFiducials[0].ambiguity > .7)
{
doRejectUpdate = true;
}
if(mt1.rawFiducials[0].distToCamera > 3)
{
doRejectUpdate = true;
}
}
if(mt1.tagCount == 0)
{
doRejectUpdate = true;
}

if(!doRejectUpdate)
{
m_poseEstimator.setVisionMeasurementStdDevs(VecBuilder.fill(.5,.5,9999999));
m_poseEstimator.addVisionMeasurement(
mt1.pose,
mt1.timestampSeconds);
}

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

LL İleri, LL Sağ ve LL Yukarı, robotu canlandıracak olsaydınız Robotun ileri, sağ ve yukarı vektörleri boyunca mesafeleri temsil eder (metre cinsinden). LL Yuvarlanma, Yunuslama ve Sapma, Limelight'ınızın derece cinsinden dönüşünü temsil eder. Bu değerleri değiştirebilir ve 3B görüntüleyicide Limelight'ın 3B modelinin 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.