跳到主要内容

使用MegaTag进行机器人定位

如果您的Limelight的机器人空间姿态已在Web界面中配置,并且通过Web界面上传了场地地图,那么机器人在场地空间中的位置 将通过getBotpose()函数和"botpose"网络表数组(x,y,z单位为米,roll、pitch、yaw单位为度)获得。

我们的机器人定位算法称为MegaTag。如果视野中有多个标签,它对单个标签的模糊性和图像中的噪声具有弹性。 如果所有关键点都共面,仍然存在一些翻转模糊的风险。

  • 绿色圆柱体:单个标签的机器人姿态
  • 蓝色圆柱体:旧的BotPose
  • 白色圆柱体:MegaTag Botpose

注意这里明显的姿态模糊性:

注意新的botpose(白色圆柱体)与旧的botpose(蓝色圆柱体)相比非常稳定。您也可以观察tx和ty值。

这不仅限于平面标签。它可以扩展到任何数量的标签,适用于完整的3D空间和任何方向。地板标签和天花板标签都能完美工作。

这里有一个图表,展示了这种工作方式在简单平面情况下的一个方面。 实际结果比图中描述的更好,因为图中描示的MegaTag对三个点而不是一个点应用了显著的误差。 随着3D组合MegaTag的尺寸和关键点数量的增加,其稳定性也会提高。

megatag botpose示例:

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

配置您的Limelight的机器人空间姿态

LL Forward、LL Right和LL Up代表沿机器人前进、右侧和向上向量的距离(如果您站在机器人的位置)(单位为米)。 LL Roll、Pitch和Yaw代表Limelight的旋转角度(单位为度)。您可以修改这些值,并在3D查看器中观察Limelight 3D模型的变化。 Limelight内部使用此配置将相机空间中的目标姿态转换为场地空间中的机器人姿态。