使用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 botposes
- 白色圆柱/蓝色机器人: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");
if(Math.abs(m_gyro.getRate()) > 720) // 如果我们的角速度大于每秒720度,忽略视觉更新
{
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);
}