使用MegaTag进行机器人定位
如果您的Limelight的机器人空间姿态已在Web界面中配置,并且通过Web界面上传了场地地图,那么机器人在场地空间中的位置 将通过getBotpose()函数和"botpose"网络表数组(x,y,z单位为米,roll, pitch, yaw单位为度)获取。
我们的机器人定位算法称为MegaTag。如果视野中有多个标签,它对单个标签的歧义和图像中的噪声具有很强的抵抗力。 如果所有关键点都共面,仍然存在一些歧义翻转的风险。
- 绿色圆柱体:单个标签的机器人姿态
- 蓝色圆柱体:旧版BotPose
- 白色圆柱体:MegaTag Botpose
注意这里明显的姿态歧义:
注意新的botpose(白色圆柱体)与旧的botpose(蓝色圆柱体)相比非常稳定。您也可以观察tx和ty值。
这不仅限于平面标签。它可以扩展到任何数量的标签,适用于完整的3D空间和任何方向。地板标签和天花板标签都能完美工作。
这是一个图表,展示了这种工作原理在简单平面情况下的一个方面。 实际结果比图中描述的更好,因为图中的MegaTag对三个点而不是一个点应用了显著的误差。 随着3D组合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);
}
配置您的Limelight的机器人空间姿态
LL Forward(前)、LL Right(右)和LL Up(上)表示沿着机器人的前进、右侧和向上向量的距离(如果您站在机器人的角度)(单位为米)。 LL Roll(横滚)、Pitch(俯仰)和Yaw(偏航)表示Limelight的旋转角度(单位为度)。您可以修改这些值,并在3D查看器中观察Limelight的3D模型变化。 Limelight内部使用此配置将相机空间中的目标姿态转换为场地空间中的机器人姿态。