跳到主要内容

使用MegaTag进行机器人定位

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

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

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

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

注意新的机器人位姿(白色圆柱体)与旧的机器人位姿(蓝色圆柱体)相比非常稳定。您也可以观察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在内部使用此配置将相机空间中的目标位姿转换为场地空间中的机器人位姿。