मुख्य कंटेंट तक स्किप करें

MegaTag के साथ लोकलाइज़ेशन

  1. सुनिश्चित करें कि आपके Limelight पर एक फील्ड मैप अपलोड किया गया है।
  2. Pipeline 0 को Apriltag Pipeline के रूप में कॉन्फ़िगर करें और 3D फंक्शनैलिटी सक्षम करें
  3. Limelight UI में अपने रोबोट के केंद्र के सापेक्ष अपने Limelight की pose कॉन्फ़िगर करें
  4. नीचे दिया गया कोड देखें। हम Limelight के अनुमानों को केवल तभी शामिल करते हैं जब एक से अधिक टैग दिखाई दे रहे हों। हम मापे गए rotation के stdev को एक बड़ी संख्या पर सेट करते हैं क्योंकि हम अपने IMU पर भरोसा कर सकते हैं कि वह हमें सही रोबोट heading देगा।
  5. हम हमेशा botpose_wpiblue माप पढ़ते हैं क्योंकि सामान्य pathplanning टूल्स ने blue-corner-always फील्ड origin रणनीति अपनाई है।
  6. यदि संभव हो तो megatag 2 का उपयोग करें।

पूरा उदाहरण प्रोजेक्ट यहाँ देखें

  public void updateOdometry() {
m_poseEstimator.update(
m_gyro.getRotation2d(),
new SwerveModulePosition[] {
m_frontLeft.getPosition(),
m_frontRight.getPosition(),
m_backLeft.getPosition(),
m_backRight.getPosition()
});


boolean useMegaTag2 = true; //MegaTag1 का उपयोग करने के लिए false सेट करें
boolean doRejectUpdate = false;
if(useMegaTag2 == false)
{
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);
}
}
else if (useMegaTag2 == true)
{
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) // यदि हमारी angular velocity 720 डिग्री प्रति सेकंड से अधिक है, तो vision updates को अनदेखा करें
{
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);
}
}
}