UI patches (#905)

- Show 0 clients when NT server props are undefined
- Add Prettier 

---------

Co-authored-by: Matthew Morley <matthew.morley.ca@gmail.com>
This commit is contained in:
Sriman Achanta
2023-08-31 16:56:58 -04:00
committed by GitHub
parent de394418f6
commit 08892b9e68
55 changed files with 3323 additions and 2808 deletions

View File

@@ -1,29 +1,29 @@
export interface Pose {
x: number,
y: number,
z: number,
angle_z: number,
qw: number,
qx: number,
qy: number,
qz: number
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
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[]
fps: number;
latency: number;
targets: PhotonTarget[];
}

View File

@@ -1,244 +1,277 @@
import type { WebsocketNumberPair } from "@/types/WebsocketDataTypes";
export enum PipelineType {
DriverMode=1,
Reflective=2,
ColoredShape=3,
AprilTag=4,
Aruco=5
DriverMode = 1,
Reflective = 2,
ColoredShape = 3,
AprilTag = 4,
Aruco = 5
}
export enum AprilTagFamily {
Family36h11=0,
Family25h9=1,
Family16h5=2
Family36h11 = 0,
Family25h9 = 1,
Family16h5 = 2
}
export enum RobotOffsetPointMode {
None=0,
Single=1,
Dual=2
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
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
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 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,
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
// 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
pipelineType: PipelineType.Reflective;
contourFilterRangeY: number;
contourFilterRangeX: number;
}
export type ConfigurableReflectivePipelineSettings = Partial<Omit<ReflectivePipelineSettings, "pipelineType">> & ConfigurablePipelineSettings
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,
...DefaultPipelineSettings,
cameraGain: 20,
targetModel: TargetModel.InfiniteRechargeHighGoalOuter,
ledMode: true,
outputShowMultipleTargets: false,
cameraExposure: 6,
pipelineType: PipelineType.Reflective,
contourFilterRangeY: 2,
contourFilterRangeX: 2
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
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 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,
...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
erode: false,
cameraCalibration: null,
dilate: false,
circleAccuracy: 20,
contourRadius: { first: 0, second: 100 },
circleDetectThreshold: 5,
accuracyPercentage: 10,
contourShape: 2,
contourPerimeter: { first: 0, second: 1.7976931348623157e308 },
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
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 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,
...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
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
pipelineType: PipelineType.Aruco;
decimate: number;
threads: number;
numIterations: number;
cornerAccuracy: number;
useAruco3: boolean;
}
export type ConfigurableArucoPipelineSettings = Partial<Omit<ArucoPipelineSettings, "pipelineType">> & ConfigurablePipelineSettings
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,
...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
decimate: 1,
threads: 2,
numIterations: 100,
cornerAccuracy: 25,
useAruco3: true
};
export type ActivePipelineSettings = ReflectivePipelineSettings | ColoredShapePipelineSettings | AprilTagPipelineSettings | ArucoPipelineSettings
export type ActiveConfigurablePipelineSettings = ConfigurableReflectivePipelineSettings | ConfigurableColoredShapePipelineSettings | ConfigurableAprilTagPipelineSettings | ConfigurableArucoPipelineSettings
export type ActivePipelineSettings =
| ReflectivePipelineSettings
| ColoredShapePipelineSettings
| AprilTagPipelineSettings
| ArucoPipelineSettings;
export type ActiveConfigurablePipelineSettings =
| ConfigurableReflectivePipelineSettings
| ConfigurableColoredShapePipelineSettings
| ConfigurableAprilTagPipelineSettings
| ConfigurableArucoPipelineSettings;

View File

@@ -1,152 +1,152 @@
import { type ActivePipelineSettings, DefaultAprilTagPipelineSettings } from "@/types/PipelineTypes";
export interface GeneralSettings {
version?: string
gpuAcceleration?: string
hardwareModel?: string
hardwarePlatform?: string
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,
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
DHCP = 0,
Static = 1
}
export interface NetworkSettings {
ntServerAddress: string
connectionType: NetworkConnectionType,
staticIp: string,
hostname: string,
runNTServer: boolean
shouldManage: boolean,
networkManagerIface?: string,
physicalInterface?: string,
setStaticCommand?: string,
setDHCPcommand?: string
ntServerAddress: string;
connectionType: NetworkConnectionType;
staticIp: string;
hostname: string;
runNTServer: boolean;
shouldManage: boolean;
networkManagerIface?: string;
physicalInterface?: string;
setStaticCommand?: string;
setDHCPcommand?: string;
}
export interface LightingSettings {
supported: boolean,
brightness: number
supported: boolean;
brightness: number;
}
export enum LogLevel {
ERROR=0,
WARN=1,
INFO=2,
DEBUG=3,
TRACE=4
ERROR = 0,
WARN = 1,
INFO = 2,
DEBUG = 3,
TRACE = 4
}
export interface LogMessage {
level: LogLevel,
message: string
level: LogLevel;
message: string;
}
export interface Resolution {
width: number,
height: number
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
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[],
resolution: Resolution;
distCoeffs: number[];
standardDeviation: number;
perViewErrors: number[];
intrinsics: number[];
}
export interface ConfigurableCameraSettings {
fov: number
fov: number;
}
export interface CameraSettings {
nickname: string
nickname: string;
fov: {
value: number,
managedByVendor: boolean
}
stream: {
inputPort: number,
outputPort: number
}
fov: {
value: number;
managedByVendor: boolean;
};
stream: {
inputPort: number;
outputPort: number;
};
validVideoFormats: VideoFormat[]
completeCalibrations: CameraCalibrationResult[]
validVideoFormats: VideoFormat[];
completeCalibrations: CameraCalibrationResult[];
lastPipelineIndex?: number,
currentPipelineIndex: number,
pipelineNicknames: string[],
pipelineSettings: ActivePipelineSettings
lastPipelineIndex?: number;
currentPipelineIndex: number;
pipelineNicknames: string[];
pipelineSettings: ActivePipelineSettings;
}
export const PlaceholderCameraSettings: CameraSettings = {
nickname: "Placeholder Camera",
fov: {
value: 70,
managedByVendor: true
nickname: "Placeholder Camera",
fov: {
value: 70,
managedByVendor: true
},
stream: {
inputPort: 0,
outputPort: 0
},
validVideoFormats: [
{
resolution: { width: 1920, height: 1080 },
fps: 60,
pixelFormat: "RGB"
},
stream: {
inputPort: 0,
outputPort: 0
{
resolution: { width: 1280, height: 720 },
fps: 60,
pixelFormat: "RGB"
},
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
{
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
Chessboard = 0,
DotBoard = 1
}
export enum RobotOffsetType {
Clear=0,
Single=1,
DualFirst=2,
DualSecond=3
Clear = 0,
Single = 1,
DualFirst = 2,
DualSecond = 3
}

View File

@@ -3,116 +3,122 @@ import type { ActivePipelineSettings } from "@/types/PipelineTypes";
import type { LogLevel } from "@/types/SettingTypes";
export interface WebsocketLogMessage {
logMessage: {
logLevel: LogLevel,
logMessage: string
}
logMessage: {
logLevel: LogLevel;
logMessage: string;
};
}
export interface WebsocketSettingsUpdate {
general: Required<GeneralSettings>,
lighting: Required<LightingSettings>,
networkSettings: NetworkSettings
general: Required<GeneralSettings>;
lighting: Required<LightingSettings>;
networkSettings: NetworkSettings;
}
export interface WebsocketNumberPair {
first: number,
second: number
first: number;
second: number;
}
export interface WebsocketCompleteCalib {
distCoeffs: number[],
height: number,
width: number,
standardDeviation: number,
perViewErrors: number[],
intrinsics: number[]
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 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
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
connected: boolean;
address?: string;
clients?: number;
}
export type WebsocketPipelineResultUpdate = Record<number, {
fps: number,
latency: 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
},
}[]
}>
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
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,
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
Calib3d = -2,
DriverMode = -1,
Reflective = 0,
ColoredShape = 1,
AprilTag = 2,
Aruco = 3
}