انتقل إلى المحتوى الرئيسي

تحديد موقع الروبوت باستخدام MegaTag

إذا تم تكوين وضعية الروبوت في الفضاء للايم لايت الخاص بك في واجهة المستخدم على الويب، وتم تحميل خريطة الميدان عبر واجهة المستخدم على الويب، فسيكون موقع الروبوت في فضاء الميدان متاحًا عبر getBotpose() ومصفوفة "botpose" في networktables (x,y,z بالأمتار، roll, pitch, yaw بالدرجات).

خوارزمية تحديد موقع الروبوت لدينا تسمى MegaTag. إذا كان هناك أكثر من علامة مرئية، فهي مقاومة للغموض الفردي للعلامات والضوضاء في الصورة. إذا كانت جميع النقاط الرئيسية مستوية، لا يزال هناك بعض خطر الانقلاب الغامض.

  • الأسطوانة الخضراء: وضعية الروبوت الفردية لكل علامة
  • الأسطوانة الزرقاء: وضعية الروبوت القديمة
  • الأسطوانة البيضاء: وضعية الروبوت MegaTag

لاحظ الغموض الواضح في الوضعية هنا:

لاحظ كيف أن وضعية الروبوت الجديدة (الأسطوانة البيضاء) مستقرة للغاية مقارنة بوضعية الروبوت القديمة (الأسطوانة الزرقاء). يمكنك أيضًا مراقبة قيم tx و ty.

هذا لا يقتصر على العلامات المستوية. إنه يتوسع ليشمل أي عدد من العلامات في الأبعاد الثلاثية الكاملة وبأي اتجاه. تعمل علامات الأرضية وعلامات السقف بشكل مثالي.

هنا رسم توضيحي يوضح جانبًا واحدًا من كيفية عمل هذا في حالة مستوية بسيطة. النتائج في الواقع أفضل مما هو موضح، حيث تم تطبيق خطأ كبير على ثلاث نقاط بدلاً من نقطة واحدة في MegaTag الموضح. مع زيادة حجم MegaTag ثلاثي الأبعاد المدمج وعدد النقاط الرئيسية، يزداد استقراره.

مثال على وضعية الروبوت megatag:

استخدام مقدر الوضعية من WPILib

معلومات

في عام 2024، انتقل معظم نظام WPILib البيئي إلى نظام إحداثيات ذو أصل واحد. في عام 2023، كان أصل نظام الإحداثيات الخاص بك يتغير بناءً على لون تحالفك.

بالنسبة لعام 2024 وما بعده، يجب أن يكون أصل نظام الإحداثيات الخاص بك دائمًا هو الأصل "الأزرق". يجب على فرق FRC دائمًا استخدام botpose_wpiblue للوظائف المتعلقة بالوضعية

 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);
}

تكوين وضعية الروبوت للايم لايت الخاص بك

تمثل LL Forward و LL Right و LL Up المسافات على طول متجهات الروبوت الأمامية واليمنى والعلوية إذا كنت ستجسد الروبوت (بالأمتار). تمثل LL Roll و Pitch و Yaw دوران اللايم لايت الخاص بك بالدرجات. يمكنك تعديل هذه القيم ومشاهدة تغير النموذج ثلاثي الأبعاد للايم لايت في العارض ثلاثي الأبعاد. يستخدم اللايم لايت هذا التكوين داخليًا للانتقال من وضعية الهدف في فضاء الكاميرا إلى وضعية الروبوت في فضاء الميدان.