wpilibsuite / allwpilib

Official Repository of WPILibJ and WPILibC
https://wpilib.org/
Other
1.08k stars 611 forks source link

AprilTag DetectionResult class assumes pose estimation was done #4799

Open mcm001 opened 1 year ago

mcm001 commented 1 year ago

The DetectionResult class currently makes no attempt to check if the tag pose is non-null -- because of this, it tries to orthogonalize a empty rotation matrix.

image

mcm001 commented 1 year ago

I was able to fix with this code:

        var rot1 = new MatBuilder<>(Nat.N3(), Nat.N3()).fill(pose1RotArr);
        if (rot1.normF() > 0) {
            this.m_poseResult1 =
                    new Transform3d(
                            new Translation3d(pose1TransArr[0], pose1TransArr[1], pose1TransArr[2]),
                            new Rotation3d(orthogonalizeRotationMatrix(rot1)));
        } else {
            this.m_poseResult1 = new Transform3d();
        }

        this.m_error2 = err2;
        var rot2 = new MatBuilder<>(Nat.N3(), Nat.N3()).fill(pose2RotArr);
        if (rot2.normF() > 0) {
            this.m_poseResult2 =
                    new Transform3d(
                            new Translation3d(pose2TransArr[0], pose2TransArr[1], pose2TransArr[2]),
                            new Rotation3d(orthogonalizeRotationMatrix(rot2)));
        } else {
            this.m_poseResult2 = new Transform3d();
        }

but we probably wanna actually fix by telling the detectionresult if we did pose detection at all?