跳到主要内容

使用 MegaTag 进行机器人定位

如果您已在网页界面中配置了 Limelight 的机器人空间位姿,并通过网页界面上传了场地地图,那么机器人在场地空间中的位置将可通过 getBotpose() 和 "botpose" networktables 数组获取(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 在内部使用此配置将目标在相机空间中的位姿转换为机器人在场地空间中的位姿。