[photonlibpy] add mypy to ci (#1570)

Co-authored-by: James Ward <james@thedropbears.org.au>
This commit is contained in:
Lucien Morey
2024-11-14 02:39:02 +11:00
committed by GitHub
parent a7319ce1d6
commit a64491a59e
21 changed files with 116 additions and 51 deletions

View File

@@ -128,7 +128,6 @@ class OpenCVHelp:
alt: Transform3d | None = None
reprojectionError: cv.typing.MatLike | None = None
best: Transform3d = Transform3d()
alt: Transform3d | None = None
for tries in range(2):
retval, rvecs, tvecs, reprojectionError = cv.solvePnPGeneric(

View File

@@ -18,6 +18,8 @@ class TargetModel:
verts: List[Translation3d] | None = None
):
self.vertices: List[Translation3d] = []
if (
width is not None
and height is not None
@@ -88,7 +90,7 @@ class TargetModel:
self.isSpherical = False
if len(verts) <= 2:
self.vertices: List[Translation3d] = []
self.vertices = []
self.isPlanar = False
else:
cornersPlaner = True

View File

@@ -16,10 +16,10 @@ class VisionEstimation:
id = tag.getFiducialId()
maybePose = layout.getTagPose(id)
if maybePose:
tag = AprilTag()
tag.ID = id
tag.pose = maybePose
retVal.append(tag)
aprilTag = AprilTag()
aprilTag.ID = id
aprilTag.pose = maybePose
retVal.append(aprilTag)
return retVal
@staticmethod

View File

@@ -20,8 +20,14 @@
## --> DO NOT MODIFY <--
###############################################################################
from typing import TYPE_CHECKING
from ..packet import Packet
from ..targeting import *
from ..targeting import * # noqa
if TYPE_CHECKING:
from ..targeting import MultiTargetPNPResult # noqa
from ..targeting import PnpResult # noqa
class MultiTargetPNPResultSerde:

View File

@@ -20,8 +20,13 @@
## --> DO NOT MODIFY <--
###############################################################################
from typing import TYPE_CHECKING
from ..packet import Packet
from ..targeting import *
from ..targeting import * # noqa
if TYPE_CHECKING:
from ..targeting import PhotonPipelineMetadata # noqa
class PhotonPipelineMetadataSerde:

View File

@@ -20,8 +20,16 @@
## --> DO NOT MODIFY <--
###############################################################################
from typing import TYPE_CHECKING
from ..packet import Packet
from ..targeting import *
from ..targeting import * # noqa
if TYPE_CHECKING:
from ..targeting import MultiTargetPNPResult # noqa
from ..targeting import PhotonPipelineMetadata # noqa
from ..targeting import PhotonPipelineResult # noqa
from ..targeting import PhotonTrackedTarget # noqa
class PhotonPipelineResultSerde:

View File

@@ -20,8 +20,14 @@
## --> DO NOT MODIFY <--
###############################################################################
from typing import TYPE_CHECKING
from ..packet import Packet
from ..targeting import *
from ..targeting import * # noqa
if TYPE_CHECKING:
from ..targeting import PhotonTrackedTarget # noqa
from ..targeting import TargetCorner # noqa
class PhotonTrackedTargetSerde:

View File

@@ -20,8 +20,13 @@
## --> DO NOT MODIFY <--
###############################################################################
from typing import TYPE_CHECKING
from ..packet import Packet
from ..targeting import *
from ..targeting import * # noqa
if TYPE_CHECKING:
from ..targeting import PnpResult # noqa
class PnpResultSerde:

View File

@@ -20,8 +20,13 @@
## --> DO NOT MODIFY <--
###############################################################################
from typing import TYPE_CHECKING
from ..packet import Packet
from ..targeting import *
from ..targeting import * # noqa
if TYPE_CHECKING:
from ..targeting import TargetCorner # noqa
class TargetCornerSerde:

View File

@@ -41,7 +41,9 @@ class PhotonCameraSim:
self.videoSimRawEnabled: bool = False
self.videoSimWireframeEnabled: bool = False
self.videoSimWireframeResolution: float = 0.1
self.videoSimProcEnabled: bool = True
self.videoSimProcEnabled: bool = (
False # TODO switch this back to default True when the functionality is enabled
)
self.heartbeatCounter: int = 0
self.nextNtEntryTime = int(wpilib.Timer.getFPGATimestamp() * 1e6)
self.tagLayout = AprilTagFieldLayout.loadField(AprilTagField.k2024Crescendo)
@@ -191,19 +193,19 @@ class PhotonCameraSim:
self.maxSightRange = range
def enableRawStream(self, enabled: bool) -> None:
self.videoSimRawEnabled = enabled
raise Exception("Raw stream not implemented")
# self.videoSimRawEnabled = enabled
def enableDrawWireframe(self, enabled: bool) -> None:
self.videoSimWireframeEnabled = enabled
raise Exception("Wireframe not implemented")
# self.videoSimWireframeEnabled = enabled
def setWireframeResolution(self, resolution: float) -> None:
self.videoSimWireframeResolution = resolution
def enableProcessedStream(self, enabled: bool) -> None:
self.videoSimProcEnabled = enabled
raise Exception("Processed stream not implemented")
# self.videoSimProcEnabled = enabled
def process(
self, latency: seconds, cameraPose: Pose3d, targets: list[VisionTargetSim]
@@ -321,13 +323,13 @@ class PhotonCameraSim:
)
# Video streams disabled for now
if self.enableRawStream:
if self.videoSimRawEnabled:
# VideoSimUtil::UpdateVideoProp(videoSimRaw, prop);
# cv::Size videoFrameSize{prop.GetResWidth(), prop.GetResHeight()};
# cv::Mat blankFrame = cv::Mat::zeros(videoFrameSize, CV_8UC1);
# blankFrame.assignTo(videoSimFrameRaw);
pass
if self.enableProcessedStream:
if self.videoSimProcEnabled:
# VideoSimUtil::UpdateVideoProp(videoSimProcessed, prop);
pass

View File

@@ -49,6 +49,8 @@ class SimCameraProperties:
raise Exception("not a correct function sig")
if has_fov_args:
# really convince python we are doing the right thing
assert fovDiag is not None
if fovDiag.degrees() < 1.0 or fovDiag.degrees() > 179.0:
fovDiag = Rotation2d.fromDegrees(
max(min(fovDiag.degrees(), 179.0), 1.0)

View File

@@ -228,8 +228,8 @@ class VisionSystemSim:
camResult = camSim.process(latency, lateCameraPose, allTargets)
camSim.submitProcessedFrame(camResult, timestampNt)
for target in camResult.getTargets():
trf = target.getBestCameraToTarget()
for tgt in camResult.getTargets():
trf = tgt.getBestCameraToTarget()
if trf == Transform3d():
continue

View File

@@ -2,7 +2,7 @@ from dataclasses import dataclass
from typing import TYPE_CHECKING, ClassVar
if TYPE_CHECKING:
from .. import generated
from ..generated.TargetCornerSerde import TargetCornerSerde
@dataclass
@@ -10,4 +10,4 @@ class TargetCorner:
x: float = 0
y: float = 9
photonStruct: ClassVar["generated.TargetCornerSerde"]
photonStruct: ClassVar["TargetCornerSerde"]

View File

@@ -4,7 +4,8 @@ from typing import TYPE_CHECKING, ClassVar
from wpimath.geometry import Transform3d
if TYPE_CHECKING:
from .. import generated
from ..generated.MultiTargetPNPResultSerde import MultiTargetPNPResultSerde
from ..generated.PnpResultSerde import PnpResultSerde
@dataclass
@@ -15,7 +16,7 @@ class PnpResult:
bestReprojErr: float = 0.0
altReprojErr: float = 0.0
photonStruct: ClassVar["generated.PnpResultSerde"]
photonStruct: ClassVar["PnpResultSerde"]
@dataclass
@@ -25,4 +26,4 @@ class MultiTargetPNPResult:
estimatedPose: PnpResult = field(default_factory=PnpResult)
fiducialIDsUsed: list[int] = field(default_factory=list)
photonStruct: ClassVar["generated.MultiTargetPNPResultSerde"]
photonStruct: ClassVar["MultiTargetPNPResultSerde"]

View File

@@ -5,7 +5,8 @@ from .multiTargetPNPResult import MultiTargetPNPResult
from .photonTrackedTarget import PhotonTrackedTarget
if TYPE_CHECKING:
from .. import generated
from ..generated.PhotonPipelineMetadataSerde import PhotonPipelineMetadataSerde
from ..generated.PhotonPipelineResultSerde import PhotonPipelineResultSerde
@dataclass
@@ -20,7 +21,7 @@ class PhotonPipelineMetadata:
timeSinceLastPong: int = -1
photonStruct: ClassVar["generated.PhotonPipelineMetadataSerde"]
photonStruct: ClassVar["PhotonPipelineMetadataSerde"]
@dataclass
@@ -69,4 +70,4 @@ class PhotonPipelineResult:
return None
return self.getTargets()[0]
photonStruct: ClassVar["generated.PhotonPipelineResultSerde"]
photonStruct: ClassVar["PhotonPipelineResultSerde"]

View File

@@ -7,7 +7,7 @@ from ..packet import Packet
from .TargetCorner import TargetCorner
if TYPE_CHECKING:
from .. import generated
from ..generated.PhotonTrackedTargetSerde import PhotonTrackedTargetSerde
@dataclass
@@ -63,4 +63,4 @@ class PhotonTrackedTarget:
retList.append(TargetCorner(cx, cy))
return retList
photonStruct: ClassVar["generated.PhotonTrackedTargetSerde"]
photonStruct: ClassVar["PhotonTrackedTargetSerde"]