使用 MegaTag2 进行机器人定位
MegaTag2 于 2024 年推出,是一款精确且无歧义的基于 AprilTag 的移动机器人定位器。它的设计目标如下:
- 消除位姿歧义问题,提高对图像/角点噪声的鲁棒性
- 无论从什么角度,都能在单个标签的情况下提供出色的位姿估计
- 提高对 AprilTag 物理放置误差的鲁棒性
- 减少获得良好位姿估计结果所需的滤波量
MegaTag2 在任何距离下,仅凭单个标签就能提供出色的结果。 这意味着只关注相关且在容差范围内的标签,并过滤掉所有其他标签是完全可行的。如果某个标签位置不正确,可以使用与 MegaTag2 一同推出的动态过滤功能将其过滤掉。
int[] validIDs = {3,4};
LimelightHelpers.SetFiducialIDFiltersOverride("limelight", validIDs);
与 MT1 不同,MT2 假设您知道机器人的航向角(yaw)。可选地,MegaTag2 还接受完整的机器人姿态和角速度。
要求:
- 您的 Limelight 的机器人空间位姿已在 webUI 或通过 API 配置
- 已上传场地地图(.fmap)
- 在机器人端代码中每帧调用 LimelightHelpers.SetRobotOrientation(robotYawInDegrees,0,0,0,0,0)
- SetRobotOrientation 假设使用居中(参见地图生成器)或蓝色角落原点。逆时针为正,0 度 -> 在 FRC 中面向红色联盟墙
NetworkTables 键:
- botpose_orb_wpiblue
- botpose_orb_wpired
- botpose_orb
JSON 键:
- botpose_orb_wpiblue
- botpose_orb_wpired
- botpose_orb
- (每个基准目标)t6r_fs_orb - 仅基于此标签使用 megatag2 计算的场地空间中的机器人位姿(非多标签)
注意在这个高度歧义的单标签情况下,MegaTag2(红色机器人)和 MegaTag(蓝色机器人)之间的差异
- 金色圆柱体 / 红色机器人:未过滤的 MegaTag2 botpose
- 黄色圆柱体:未过滤的单标签 MegaTag2 botpose
- 白色圆柱体/蓝色机器人:MegaTag1 Botpose
- 绿色圆柱体:单个标签的机器人位姿(MT1)
- 蓝色圆柱体:单个标签机器人位姿的平均值(MT1)
信息
在 2024 年,大部分 WPILib 生态系统过渡到了单一原点坐标系统。 在 2023 年,您的坐标系统原点会根据您的联盟颜色而改变。
对于 2024 年及以后,您的坐标系统原点应始终为"蓝色"原点。FRC 团队应始终使用 botpose_orb_wpiblue 进行位姿相关功能
使用 WPILib 的位姿估计器
LimelightHelpers.SetRobotOrientation("limelight", m_poseEstimator.getEstimatedPosition().getRotation().getDegrees(), 0, 0, 0, 0, 0);
LimelightHelpers.PoseEstimate mt2 = LimelightHelpers.getBotPoseEstimate_wpiBlue_MegaTag2("limelight");
// 如果我们的角速度大于每秒 360 度,忽略视觉更新
if(Math.abs(m_gyro.getRate()) > 360)
{
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);
}