[PhotonClient] Vite and Typescript complete refactor (#884)

This commit is contained in:
Sriman Achanta
2023-08-21 01:51:35 -04:00
committed by GitHub
parent 8397b43bef
commit f623e4a1cc
119 changed files with 11821 additions and 19318 deletions

View File

@@ -0,0 +1,29 @@
export interface Pose {
x: number,
y: number,
z: number,
angle_z: number,
qw: number,
qx: number,
qy: number,
qz: number
}
export interface PhotonTarget {
yaw: number,
pitch: number,
skew: number,
area: number,
// -1 if not set
ambiguity: number,
// -1 if not set
fiducialId: number,
// undefined if 3d isn't enabled
pose?: Pose
}
export interface PipelineResult {
fps: number,
latency: number,
targets: PhotonTarget[]
}

View File

@@ -0,0 +1,244 @@
import type { WebsocketNumberPair } from "@/types/WebsocketDataTypes";
export enum PipelineType {
DriverMode=1,
Reflective=2,
ColoredShape=3,
AprilTag=4,
Aruco=5
}
export enum AprilTagFamily {
Family36h11=0,
Family25h9=1,
Family16h5=2
}
export enum RobotOffsetPointMode {
None=0,
Single=1,
Dual=2
}
export enum TargetModel {
InfiniteRechargeHighGoalOuter=0,
InfiniteRechargeHighGoalInner=1,
DeepSpaceDualTarget=2,
CircularPowerCell7in=3,
RapidReactCircularCargoBall=4,
StrongholdHighGoal=5,
Apriltag_200mm=6,
Aruco6in_16h5=7,
Apriltag6in_16h5=8
}
export interface PipelineSettings {
offsetRobotOffsetMode: RobotOffsetPointMode
streamingFrameDivisor: number
offsetDualPointBArea: number
contourGroupingMode: number
hsvValue: WebsocketNumberPair | [number, number]
cameraGain: number
cameraBlueGain: number
cameraRedGain: number
cornerDetectionSideCount: number
contourRatio: WebsocketNumberPair | [number, number]
contourTargetOffsetPointEdge: number
pipelineNickname: string
inputImageRotationMode: number
contourArea: WebsocketNumberPair | [number, number]
solvePNPEnabled: boolean
contourFullness: WebsocketNumberPair | [number, number]
pipelineIndex: number
inputShouldShow: boolean
cameraAutoExposure: boolean
contourSpecklePercentage: number
contourTargetOrientation: number
targetModel: TargetModel
cornerDetectionUseConvexHulls: boolean
outputShouldShow: boolean
outputShouldDraw: boolean
offsetDualPointA: {x: number, y: number}
offsetDualPointB: {x: number, y: number}
hsvHue: WebsocketNumberPair | [number, number]
ledMode: boolean
hueInverted: boolean
outputShowMultipleTargets: boolean
contourSortMode: number
cameraExposure: number
offsetSinglePoint: {x: number, y: number}
cameraBrightness: number
offsetDualPointAArea: number
cornerDetectionExactSideCount: boolean
cameraVideoModeIndex: number
cornerDetectionStrategy: number
cornerDetectionAccuracyPercentage: number
hsvSaturation: WebsocketNumberPair | [number, number]
pipelineType: PipelineType
contourIntersection: number
}
export type ConfigurablePipelineSettings = Partial<Omit<PipelineSettings, "offsetDualPointAArea" | "cornerDetectionSideCount" | "pipelineNickname" | "pipelineIndex" | "pipelineType" | "cornerDetectionUseConvexHulls" | "offsetDualPointA" | "offsetDualPointB" | "ledMode" | "offsetSinglePoint" | "offsetDualPointBArea" | "cornerDetectionExactSideCount" | "cornerDetectionStrategy">>
export const DefaultPipelineSettings: PipelineSettings = {
offsetRobotOffsetMode: RobotOffsetPointMode.None,
streamingFrameDivisor: 0,
offsetDualPointBArea: 0,
contourGroupingMode: 0,
hsvValue: { first: 50, second: 255 },
cameraBlueGain: 20,
cameraRedGain: 11,
cornerDetectionSideCount: 4,
contourRatio: { first: 0, second: 20 },
contourTargetOffsetPointEdge: 0,
pipelineNickname: "Placeholder Pipeline",
inputImageRotationMode: 0,
contourArea: { first: 0, second: 100 },
solvePNPEnabled: false,
contourFullness: { first: 0, second: 100 },
pipelineIndex: 0,
inputShouldShow: false,
cameraAutoExposure: false,
contourSpecklePercentage: 5,
contourTargetOrientation: 1,
cornerDetectionUseConvexHulls: true,
outputShouldShow: true,
outputShouldDraw: true,
offsetDualPointA: { x: 0, y: 0 },
offsetDualPointB: { x: 0, y: 0 },
hsvHue: { first: 50, second: 180 },
hueInverted: false,
contourSortMode: 0,
offsetSinglePoint: { x: 0, y: 0 },
cameraBrightness: 50,
offsetDualPointAArea: 0,
cornerDetectionExactSideCount: false,
cameraVideoModeIndex: 0,
cornerDetectionStrategy: 0,
cornerDetectionAccuracyPercentage: 10,
hsvSaturation: { first: 50, second: 255 },
contourIntersection: 1,
// These settings will be overridden by different pipeline types
cameraGain: -1,
targetModel: -1,
ledMode: false,
outputShowMultipleTargets: false,
cameraExposure: -1,
pipelineType: -1
};
export interface ReflectivePipelineSettings extends PipelineSettings {
pipelineType: PipelineType.Reflective
contourFilterRangeY: number
contourFilterRangeX: number
}
export type ConfigurableReflectivePipelineSettings = Partial<Omit<ReflectivePipelineSettings, "pipelineType">> & ConfigurablePipelineSettings
export const DefaultReflectivePipelineSettings: ReflectivePipelineSettings = {
...DefaultPipelineSettings,
cameraGain: 20,
targetModel: TargetModel.InfiniteRechargeHighGoalOuter,
ledMode: true,
outputShowMultipleTargets: false,
cameraExposure: 6,
pipelineType: PipelineType.Reflective,
contourFilterRangeY: 2,
contourFilterRangeX: 2
};
export interface ColoredShapePipelineSettings extends PipelineSettings {
pipelineType: PipelineType.ColoredShape
erode: boolean
cameraCalibration: null
dilate: boolean
circleAccuracy: number
contourRadius: WebsocketNumberPair | [number, number]
circleDetectThreshold: number
accuracyPercentage: number
contourShape: number
contourPerimeter: WebsocketNumberPair | [number, number]
minDist: number
maxCannyThresh: number
}
export type ConfigurableColoredShapePipelineSettings = Partial<Omit<ColoredShapePipelineSettings, "pipelineType" | "erode" | "cameraCalibration" | "dilate" | "minDist" >> & ConfigurablePipelineSettings
export const DefaultColoredShapePipelineSettings: ColoredShapePipelineSettings = {
...DefaultPipelineSettings,
cameraGain: 75,
targetModel: TargetModel.InfiniteRechargeHighGoalOuter,
ledMode: true,
outputShowMultipleTargets: false,
cameraExposure: 20,
pipelineType: PipelineType.ColoredShape,
erode: false,
cameraCalibration: null,
dilate: false,
circleAccuracy: 20,
contourRadius: { first: 0, second: 100 },
circleDetectThreshold: 5,
accuracyPercentage: 10,
contourShape: 2,
contourPerimeter: { first: 0, second: 1.7976931348623157e+308 },
minDist: 20,
maxCannyThresh: 90
};
export interface AprilTagPipelineSettings extends PipelineSettings {
pipelineType: PipelineType.AprilTag
hammingDist: number
numIterations: number
decimate: number
blur: number
decisionMargin: number
refineEdges: boolean
debug: boolean
threads: number
tagFamily: AprilTagFamily
}
export type ConfigurableAprilTagPipelineSettings = Partial<Omit<AprilTagPipelineSettings, "pipelineType" | "hammingDist" | "debug">> & ConfigurablePipelineSettings
export const DefaultAprilTagPipelineSettings: AprilTagPipelineSettings = {
...DefaultPipelineSettings,
cameraGain: 75,
targetModel: TargetModel.Apriltag6in_16h5,
ledMode: false,
outputShowMultipleTargets: true,
cameraExposure: 20,
pipelineType: PipelineType.AprilTag,
hammingDist: 0,
numIterations: 40,
decimate: 1,
blur: 0,
decisionMargin: 35,
refineEdges: true,
debug: false,
threads: 4,
tagFamily: AprilTagFamily.Family16h5
};
export interface ArucoPipelineSettings extends PipelineSettings {
pipelineType: PipelineType.Aruco
decimate: number
threads: number
numIterations: number
cornerAccuracy: number
useAruco3: boolean
}
export type ConfigurableArucoPipelineSettings = Partial<Omit<ArucoPipelineSettings, "pipelineType">> & ConfigurablePipelineSettings
export const DefaultArucoPipelineSettings: ArucoPipelineSettings = {
...DefaultPipelineSettings,
outputShowMultipleTargets: true,
targetModel: TargetModel.Aruco6in_16h5,
cameraExposure: -1,
cameraAutoExposure: true,
ledMode: false,
pipelineType: PipelineType.Aruco,
decimate: 1,
threads: 2,
numIterations: 100,
cornerAccuracy: 25,
useAruco3: true
};
export type ActivePipelineSettings = ReflectivePipelineSettings | ColoredShapePipelineSettings | AprilTagPipelineSettings | ArucoPipelineSettings
export type ActiveConfigurablePipelineSettings = ConfigurableReflectivePipelineSettings | ConfigurableColoredShapePipelineSettings | ConfigurableAprilTagPipelineSettings | ConfigurableArucoPipelineSettings

View File

@@ -0,0 +1,152 @@
import { type ActivePipelineSettings, DefaultAprilTagPipelineSettings } from "@/types/PipelineTypes";
export interface GeneralSettings {
version?: string
gpuAcceleration?: string
hardwareModel?: string
hardwarePlatform?: string
}
export interface MetricData {
cpuTemp?: string,
cpuUtil?: string,
cpuMem?: string,
gpuMem?: string,
ramUtil?: string
gpuMemUtil?: string,
cpuThr?: string,
cpuUptime?: string,
diskUtilPct?: string,
}
export enum NetworkConnectionType {
DHCP = 0,
Static = 1
}
export interface NetworkSettings {
ntServerAddress: string
connectionType: NetworkConnectionType,
staticIp: string,
hostname: string,
runNTServer: boolean
shouldMange: boolean,
networkManagerIface?: string,
physicalInterface?: string,
setStaticCommand?: string,
setDHCPcommand?: string
}
export interface LightingSettings {
supported: boolean,
brightness: number
}
export enum LogLevel {
ERROR=0,
WARN=1,
INFO=2,
DEBUG=3,
TRACE=4
}
export interface LogMessage {
level: LogLevel,
message: string
}
export interface Resolution {
width: number,
height: number
}
export interface VideoFormat {
resolution: Resolution
fps: number,
pixelFormat: string,
index?: number,
diagonalFOV?: number,
horizontalFOV?: number,
verticalFOV?: number,
standardDeviation?: number,
mean?: number
}
export interface CameraCalibrationResult {
resolution: Resolution
distCoeffs: number[],
standardDeviation: number,
perViewErrors: number[],
intrinsics: number[],
}
export interface ConfigurableCameraSettings {
fov: number
}
export interface CameraSettings {
nickname: string
fov: {
value: number,
managedByVendor: boolean
}
stream: {
inputPort: number,
outputPort: number
}
validVideoFormats: VideoFormat[]
completeCalibrations: CameraCalibrationResult[]
lastPipelineIndex?: number,
currentPipelineIndex: number,
pipelineNicknames: string[],
pipelineSettings: ActivePipelineSettings
}
export const PlaceholderCameraSettings: CameraSettings = {
nickname: "Placeholder Camera",
fov: {
value: 70,
managedByVendor: true
},
stream: {
inputPort: 0,
outputPort: 0
},
validVideoFormats: [
{
resolution: { width: 1920, height: 1080 },
fps: 60,
pixelFormat: "RGB"
},
{
resolution: { width: 1280, height: 720 },
fps: 60,
pixelFormat: "RGB"
},
{
resolution: { width: 640, height: 480 },
fps: 30,
pixelFormat: "RGB"
}
],
completeCalibrations: [],
pipelineNicknames: ["Placeholder Pipeline"],
lastPipelineIndex: 0,
currentPipelineIndex: 0,
pipelineSettings: DefaultAprilTagPipelineSettings
};
export enum CalibrationBoardTypes {
Chessboard=0,
DotBoard=1
}
export enum RobotOffsetType {
Clear=0,
Single=1,
DualFirst=2,
DualSecond=3
}

View File

@@ -0,0 +1,118 @@
import type { GeneralSettings, LightingSettings, MetricData, NetworkSettings } from "@/types/SettingTypes";
import type { ActivePipelineSettings } from "@/types/PipelineTypes";
import type { LogLevel } from "@/types/SettingTypes";
export interface WebsocketLogMessage {
logMessage: {
logLevel: LogLevel,
logMessage: string
}
}
export interface WebsocketSettingsUpdate {
general: Required<GeneralSettings>,
lighting: Required<LightingSettings>,
networkSettings: NetworkSettings
}
export interface WebsocketNumberPair {
first: number,
second: number
}
export interface WebsocketCompleteCalib {
distCoeffs: number[],
height: number,
width: number,
standardDeviation: number,
perViewErrors: number[],
intrinsics: number[]
}
export type WebsocketVideoFormat = Record<number, {
fps: number,
height: number,
width: number,
pixelFormat: string,
index?: number,
diagonalFOV?: number,
horizontalFOV?: number,
verticalFOV?: number,
standardDeviation?: number,
mean?: number
}>
export interface WebsocketCameraSettingsUpdate {
calibrations: WebsocketCompleteCalib[],
currentPipelineIndex: number,
currentPipelineSettings: ActivePipelineSettings,
fov: number,
inputStreamPort: number,
isFovConfigurable: boolean,
nickname: string,
outputStreamPort: number,
pipelineNicknames: string[],
videoFormatList: WebsocketVideoFormat
}
export interface WebsocketNTUpdate {
connected: boolean,
address?: string,
clients?: number
}
export type WebsocketPipelineResultUpdate = Record<number, {
fps: number,
latency: number,
targets: {
yaw: number,
pitch: number,
skew: number,
area: number,
ambiguity: number,
fiducialId: number,
pose: {
"angle_z": number,
"qw": number,
"qx": number,
"x": number,
"qy": number,
"y": number,
"qz": number,
"z": number
},
}[]
}>
export interface WebsocketCalibrationData {
"patternWidth": number,
"boardType": number,
"hasEnough": boolean,
"count": number,
"minCount": number,
"videoModeIndex": number,
"patternHeight": number,
"squareSizeIn": number
}
export interface IncomingWebsocketData {
log?: WebsocketLogMessage,
settings?: WebsocketSettingsUpdate,
cameraSettings?: WebsocketCameraSettingsUpdate[],
ntConnectionInfo?: WebsocketNTUpdate,
metrics?: Required<MetricData>,
updatePipelineResult?: WebsocketPipelineResultUpdate,
networkInfo?: {
possibleRios: string[],
deviceips: string[]
}
mutatePipelineSettings?: Partial<ActivePipelineSettings>,
cameraIndex?: number // Sent when mutating pipeline settings to check against currently active
calibrationData?: WebsocketCalibrationData,
}
export enum WebsocketPipelineType {
Calib3d=-2,
DriverMode=-1,
Reflective=0,
ColoredShape=1,
AprilTag=2,
Aruco=3
}