使用MegaTag2进行机器人定位
MegaTag2于2024年推出,是一种精确且无歧义的基于AprilTag的移动机器人定位器。它的设计目标如下:
- 消除姿态歧义问题并提高对图像/角点噪声的鲁棒性。
- 给定单个标签时,无论视角如何,都能提供出色的姿态估计。
- 提高对物理AprilTag放置不准确的鲁棒性
- 减少获得良好姿态估计结果所需的滤波量
MegaTag2在任何距离下都能通过单个标签提供出色的结果。 这意味着完全可以只关注相关且在容差 范围内的标签,并过滤掉所有其他标签。如果标签不在正确位置,可以使用与MegaTag2一起引入的动态过滤功能将其过滤掉。
int[] validIDs = {3,4};
LimelightHelpers.SetFiducialIDFiltersOverride("limelight", validIDs);
与MT1不同,MT2假设您知道机器人的航向(偏航)。可选地,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);
}
配置Limelight的机器人空间姿态
LL Forward、LL Right和LL Up表示如果您处于机器人位置时沿机器人前进、右侧和向上向量的距离(以米为单位)。 LL Roll、Pitch和Yaw表示Limelight的旋转角度(以度为单位)。您可以修改这些值,并在3D查看器中观察Limelight 3D模型的变化。 Limelight内部使用此配置将相机空间中的目标姿态转换为场地空间中的机器人姿态。