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.
- Bakış açısından bağımsız olarak tek bir etiketle mükemmel poz tahminleri sağlamak.
- Fiziksel AprilTag yerleştirme hatalarına karşı dayanıklılığı artırmak
- İyi poz tahmin sonuçları için gereken filtreleme miktarını azaltmak
Megatag2, tek bir etiketle herhangi bir mesafede mükemmel sonuçlar sağlar. Bu, hem ilgili hem de tolerans dahilinde olan etiketlere odaklanmanın ve diğer tüm etiketleri filtrelemenin tamamen uygulanabilir olduğu anlamına gelir. Bir etiket doğru konumda değilse, MegaTag2 ile birlikte tanıtılan dinamik filtre özelliğiyle onu filtreleyin.
int[] validIDs = {3,4};
LimelightHelpers.SetFiducialIDFiltersOverride("limelight", validIDs);
MT1'den farklı olarak, MT2 robotunuzun yönelimini (yaw) bildiğinizi varsayar. İsteğe bağlı olarak, Megatag2 tam robot oryantasyonunu ve açısal hızları kabul eder.
Gereksinimler:
- Limelight'ınızın robot-uzay pozu webUI'da veya API aracılığıyla yapılandırılmış olmalıdır
- Bir saha haritası (.fmap) yüklenmiş olmalıdır
- Robot tarafı kodunda her karede LimelightHelpers.SetRobotOrientation(robotYawInDegrees,0,0,0,0,0) çağrılmalıdır
- SetRobotOrientation, merkezli (harita oluşturucuya bakın) veya mavi köşe orijini varsayar. Saat yönünün tersine pozitif, 0 derece -> FRC'de kırmızı ittifak duvarına bakan.
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ı megatag2 kullanarak saha uzayında robot pozu (multitag yok)
Bu oldukça belirsiz tek etiket durumunda MegaTag2 (kırmızı robot) ve Megatag (mavi robot) arasındaki farka dikkat edin
- Altın Silindir / Kırmızı Robot: Filtrelenmemiş Megatag2 botpose
- Sarı Silindirler: Filtrelenmemiş tek etiket 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)
2024'te, WPILib Ekosisteminin çoğu tek orijinli koordinat sistemine geçti. 2023'te, koordinat sistemi orijininiz 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ı, pozla ilgili işlevsellik için her zaman botpose_orb_wpiblue kullanmalıdır
WPILib'in Pose Estimator'ını Kullanma
LimelightHelpers.SetRobotOrientation("limelight", m_poseEstimator.getEstimatedPosition().getRotation().getDegrees(), 0, 0, 0, 0, 0);
LimelightHelpers.PoseEstimate mt2 = LimelightHelpers.getBotPoseEstimate_wpiBlue_MegaTag2("limelight");
// açısal hızımız saniyede 360 dereceden büyükse, görüş güncellemelerini yoksay
if(Math.abs(m_gyro.getRate()) > 360)
{
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 Forward, LL Right ve LL Up, robotu canlandırsaydınız Robotun ileri, sağ ve yukarı vektörleri boyunca mesafeleri temsil eder (metre cinsinden). LL Roll, Pitch ve Yaw, 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 değişimini izleyebilirsiniz. Limelight, kamera uzayındaki hedef pozundan -> saha uzayındaki robot pozuna geçmek için bu yapılandırmayı dahili olarak kullanır.
Limelight 4'ün Dahili IMU'sunu "imumode_set" / SetIMUMode() ile Kullanma
Limelight 4'ün dahili bir IMU'su vardır. Dönüş sırasında daha doğru poz tahminleri elde etmek için bunu MT2 ile kullanabilirsiniz. Bunun çalışması için IMU'nun başlangıç oryantasyonunu tohumlamanız gerekir. Buna "tohumlama" denir. Limelight'ınız robotunuzun başlangıç oryantasyonunu öğrendikten sonra, MT2 hesaplamalarını gerçekleştirmek için robotunuzun oryantasyonunu kendi başına güncelleyebilecektir.
LL4 IMU'yu kullanmak için, şu anda LL'niz "yatay" modda monte edilmiş olmalıdır.
Akış şu şekildedir:
- Pigeon veya NavX gibi "harici" IMU'nuzla SetRobotOrientation() çağırın. Bu yöntemi istediğiniz sıklıkta çağırmaya devam edebilirsiniz.
- Limelight'ınızın dahili ve harici IMU'lardan gelen IMU verilerini nasıl kullandığını yapılandırmak için SetIMUMode() çağırın.
- Genel olarak, robotunuz otonom dönemin başlamasını beklerken mod 1'i kullanın. Etkinleştirildiğinde veya etkinleştirilip dönerken mod 2'ye geçin.
Sıfırlama / Tohumlama
- Dahili IMU'nun birleştirilmiş robot yaw'ını SetRobotOrientation() aracılığıyla gönderilen yaw'a sıfırlamak için, Limelight'ınızın IMU modunu LimelightHelpers.SetIMUMode() ile 1'e ayarlayın.
- Tohumlama sırasında, MegaTag2 SetRobotOrientation() aracılığıyla gönderilen yaw değerini kullanmaya devam edecektir.
Dahili IMU'yu MegaTag2 ile Kullanma
LL4'ün MT2 lokalizasyonu için dahili IMU'sunu kullanmasına izin vermek için, Limelight'ınızın IMU modunu LimelightHelpers.SetIMUMode() ile 2'ye ayarlayın.
IMU Modları:
- 0 - MT2 lokalizasyonu için SetRobotOrientation() aracılığıyla gönderilen harici IMU yaw'ını kullan. Dahili IMU tamamen yoksayılır.
- 1 - SetRobotOrientation() aracılığıyla gönderilen harici IMU yaw'ını kullan ve LL4 dahili IMU'sunun birleştirilmiş yaw'ını gönderilen yaw değeriyle eşleşecek şekilde yapılandır.
- 2 - MT2 lokalizasyonu için dahili IMU'yu kullan.
- 3 -