تحديد موقع الروبوت باستخدام MegaTag2
تم ت قديم Megatag2 في عام 2024، وهو نظام دقيق وخالٍ من الغموض لتحديد موقع الروبوتات المتحركة باستخدام تقنية AprilTag. تم بناؤه مع الأهداف التالية:
- القضاء على مشكلة غموض الوضعية وزيادة المتانة ضد ضوضاء الصورة/الزوايا.
- توفير تقديرات ممتازة للوضعية باستخدام علامة واحدة فقط، بغض النظر عن المنظور.
- زيادة المتانة ضد عدم الدقة في وضع علامات AprilTag المادية.
- تقليل مقدار الترشيح اللازم للحصول على نتائج تقدير وضعية جيدة.
يوفر Megatag2 نتائج ممتازة على أي مسافة باستخدام علامة واحدة فقط. هذا يعني أنه من الممكن تمامًا التركيز فقط على العلامات ذات الصلة والتي تقع ضمن حدود التحمل، وتصفية جميع العلامات الأخرى. إذا لم تكن العلامة في الموقع الصحيح، قم بتصفيتها باستخدام ميزة الترشيح الديناميكي التي تم تقديمها مع MegaTag2.
int[] validIDs = {3,4};
LimelightHelpers.SetFiducialIDFiltersOverride("limelight", validIDs);
على عكس MT1، يفترض MT2 أنك تعرف اتجاه الروبوت (الانحراف). اختياريًا، يقبل Megatag2 توجيهًا كاملًا للروبوت والسرعات الزاوية.
المتطلبات:
- تم تكوين وضعية Limelight في فضاء الروبوت ف ي واجهة الويب أو عبر واجهة برمجة التطبيقات
- تم تحميل خريطة الميدان (.fmap)
- يتم استدعاء LimelightHelpers.SetRobotOrientation(robotYawInDegrees,0,0,0,0,0) في كل إطار في الكود الجانبي للروبوت
- يفترض SetRobotOrientation أصلًا مركزيًا (انظر مولد الخرائط) أو في الزاوية الزرقاء. موجب عكس اتجاه عقارب الساعة، 0 درجة -> مواجهة جدار التحالف الأحمر في FRC.
مفاتيح NetworkTables:
- botpose_orb_wpiblue
- botpose_orb_wpired
- botpose_orb
مفاتيح JSON:
- botpose_orb_wpiblue
- botpose_orb_wpired
- botpose_orb
- (لكل هدف مرجعي) t6r_fs_orb - وضعية الروبوت في فضاء الميدان باستخدام megatag2 بناءً على هذه العلامة وحدها (بدون متعدد العلامات)
لاحظ الفرق بين MegaTag2 (الروبوت الأحمر) و Megatag (الروبوت الأزرق) في هذه الحالة الغامضة للغاية لعلامة واحدة
- الأسطوانة الذهبية / الروبوت الأحمر: وضعية Megatag2 غير المفلترة للروبوت
- الأسطوانات الصفراء: وضعيات Megatag2 غير المفلترة للروبوت لعلامة واحدة
- الأسطوانة البيضاء/الروبوت الأزرق: وضعية MegaTag1 للروبوت
- الأسطوانة الخضراء: وضعية الروبوت الفردية لكل علامة (MT1)
- الأسطوانة الزرقاء: متوسط وضعيات الروبوت الفردية لكل علامة (MT1)
في عام 2024، انتقل معظم نظام WPILib البيئي إلى نظام إحداثيات ذو أصل واحد. في عام 2023، كان أصل نظام الإحداثيات الخاص بك يتغير بناءً على لون تحالفك.
بالنسبة لعام 2024 وما بعده، يجب أن يكون أصل نظام الإحداثيات الخاص بك دائمًا هو الأصل "الأزرق". يجب على فرق FRC دائمًا استخدام botpose_orb_wpiblue للوظائف المتعلقة بالوضعية
استخدام مقدر الوضعية الخاص بـ WPILib
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) // إذا كانت سرعتنا الزاوية أكبر من 720 درجة في الثانية، تجاهل تحديثات الرؤية
{
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 في فضاء الروبوت
تمثل LL Forward و LL Right و LL Up المسافات على طول متجهات الروبوت الأمامية واليمنى والعلوية إذا كنت ستجسد الروبوت (بالأمتار). تمثل LL Roll و Pitch و Yaw دوران Limelight بالدرجات. يمكنك تعديل هذه القيم ومشاهدة تغير النموذج ثلاثي الأبعاد لـ Limelight في العارض ثلاثي الأبعاد. يستخدم Limelight هذا التكوين داخليًا للانتقال من وضعية الهدف في فضاء الكاميرا -> وضعية الروبوت في فضاء الميدان.