@blueyerobotics/protocol-definitions 3.2.0-a48e4638 → 3.2.0-a57cd215

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -90,6 +90,8 @@ export declare enum InstructionType {
90
90
  INSTRUCTION_TYPE_GO_TO_SEABED = 11,
91
91
  /** INSTRUCTION_TYPE_GO_TO_HOME - Returning to home. */
92
92
  INSTRUCTION_TYPE_GO_TO_HOME = 12,
93
+ /** INSTRUCTION_TYPE_SURVEY - Execute a survey pattern over a polygon area. */
94
+ INSTRUCTION_TYPE_SURVEY = 13,
93
95
  UNRECOGNIZED = -1
94
96
  }
95
97
  export declare function instructionTypeFromJSON(object: any): InstructionType;
@@ -166,6 +168,8 @@ export interface Instruction {
166
168
  goToSeabedCommand?: GoToSeabedCommand | undefined;
167
169
  /** Go to home position. */
168
170
  goToHomeCommand?: GoToHomeCommand | undefined;
171
+ /** Execute a survey pattern over a polygon area. */
172
+ surveyCommand?: SurveyCommand | undefined;
169
173
  }
170
174
  /** Depth set point is used to describe a depth set-point relative to the surface or the seabed. */
171
175
  export interface DepthSetPoint {
@@ -245,6 +249,55 @@ export interface GoToHomeCommand {
245
249
  /** Desired speed to home (m/s). */
246
250
  desiredSpeed: number;
247
251
  }
252
+ /**
253
+ * A SurveyCommand defines a survey (lawn-mower) pattern over a polygon area.
254
+ * The planner generates waypoints from the polygon + parameters and stores them
255
+ * in the waypoints field. The drone executes these pre-computed waypoints directly
256
+ * without re-running the survey algorithm. The polygon and parameters remain
257
+ * editable in the planner — regenerate waypoints when they change.
258
+ * Planners SHOULD validate that the polygon is simple (non-self-intersecting)
259
+ * before generating waypoints, as behavior is undefined for invalid polygons.
260
+ */
261
+ export interface SurveyCommand {
262
+ /**
263
+ * Polygon vertices defining the survey area boundary (decimal degrees).
264
+ * The polygon is implicitly closed: the last vertex connects back to the first.
265
+ * Clients MUST NOT repeat the first vertex at the end of the list.
266
+ * Vertices should be ordered clockwise when viewed from above.
267
+ * The boundary must form a simple polygon (no self-intersections).
268
+ * At least three distinct vertices are required.
269
+ */
270
+ vertices: LatLongPosition[];
271
+ /**
272
+ * Survey line heading relative to north in degrees (0-360).
273
+ * NOTE: Unlike PathSegment.course_to_target (which uses radians), this field
274
+ * uses degrees to match compass convention. Convert radians before assigning.
275
+ */
276
+ surveyLineHeading: number;
277
+ /** Distance between parallel scan lines (m). */
278
+ laneSpacing: number;
279
+ /** Overshoot distance past polygon boundary at each turn (m). */
280
+ turnaroundDistance: number;
281
+ /** Desired speed over ground during survey (m/s). */
282
+ cruiseSpeed: number;
283
+ /** Radius of acceptance circle for generated waypoints (m). */
284
+ circleOfAcceptance: number;
285
+ /** Optional depth set point for all generated waypoints. */
286
+ depthSetPoint: DepthSetPoint | undefined;
287
+ /** If true, reverse the scan line order (swap start and end points). */
288
+ reverse: boolean;
289
+ /**
290
+ * Pre-computed waypoints generated by the planner from the polygon and parameters.
291
+ * The drone executes these directly. Individual waypoint parameters (speed, CoA,
292
+ * depth) can be tweaked after generation without modifying the survey shape.
293
+ * Regenerated automatically when polygon or survey parameters change.
294
+ */
295
+ waypoints: Waypoint[];
296
+ /** Sensor swath width (m). When set with overlap_percent, overrides lane_spacing. */
297
+ swathWidth: number;
298
+ /** Desired overlap between adjacent scan lines (0-100%). Used with swath_width. */
299
+ overlapPercent: number;
300
+ }
248
301
  /** Path segment used to describe segments of a mission as a line between to waypoints. */
249
302
  export interface PathSegment {
250
303
  /** Path segment id starting at 0, -1 for inactive. */
@@ -328,6 +381,7 @@ export declare const CameraCommand: MessageFns<CameraCommand>;
328
381
  export declare const GoToSurfaceCommand: MessageFns<GoToSurfaceCommand>;
329
382
  export declare const GoToSeabedCommand: MessageFns<GoToSeabedCommand>;
330
383
  export declare const GoToHomeCommand: MessageFns<GoToHomeCommand>;
384
+ export declare const SurveyCommand: MessageFns<SurveyCommand>;
331
385
  export declare const PathSegment: MessageFns<PathSegment>;
332
386
  export declare const ReferenceAutoPilot: MessageFns<ReferenceAutoPilot>;
333
387
  export declare const MissionStatus: MessageFns<MissionStatus>;
@@ -5,7 +5,7 @@
5
5
  // protoc v3.21.12
6
6
  // source: mission_planning.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.MissionStatus = exports.ReferenceAutoPilot = exports.PathSegment = exports.GoToHomeCommand = exports.GoToSeabedCommand = exports.GoToSurfaceCommand = exports.CameraCommand = exports.WaitForCommand = exports.TiltMultibeamCommand = exports.TiltMainCameraCommand = exports.DepthSetPointCommand = exports.WaypointCommand = exports.ControlModeCommand = exports.Waypoint = exports.DepthSetPoint = exports.Instruction = exports.Mission = exports.MissionState = exports.InstructionType = exports.CameraAction = exports.ControlModeHorizontal = exports.ControlModeVertical = exports.DepthZeroReference = void 0;
8
+ exports.MissionStatus = exports.ReferenceAutoPilot = exports.PathSegment = exports.SurveyCommand = exports.GoToHomeCommand = exports.GoToSeabedCommand = exports.GoToSurfaceCommand = exports.CameraCommand = exports.WaitForCommand = exports.TiltMultibeamCommand = exports.TiltMainCameraCommand = exports.DepthSetPointCommand = exports.WaypointCommand = exports.ControlModeCommand = exports.Waypoint = exports.DepthSetPoint = exports.Instruction = exports.Mission = exports.MissionState = exports.InstructionType = exports.CameraAction = exports.ControlModeHorizontal = exports.ControlModeVertical = exports.DepthZeroReference = void 0;
9
9
  exports.depthZeroReferenceFromJSON = depthZeroReferenceFromJSON;
10
10
  exports.depthZeroReferenceToJSON = depthZeroReferenceToJSON;
11
11
  exports.controlModeVerticalFromJSON = controlModeVerticalFromJSON;
@@ -258,6 +258,8 @@ var InstructionType;
258
258
  InstructionType[InstructionType["INSTRUCTION_TYPE_GO_TO_SEABED"] = 11] = "INSTRUCTION_TYPE_GO_TO_SEABED";
259
259
  /** INSTRUCTION_TYPE_GO_TO_HOME - Returning to home. */
260
260
  InstructionType[InstructionType["INSTRUCTION_TYPE_GO_TO_HOME"] = 12] = "INSTRUCTION_TYPE_GO_TO_HOME";
261
+ /** INSTRUCTION_TYPE_SURVEY - Execute a survey pattern over a polygon area. */
262
+ InstructionType[InstructionType["INSTRUCTION_TYPE_SURVEY"] = 13] = "INSTRUCTION_TYPE_SURVEY";
261
263
  InstructionType[InstructionType["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
262
264
  })(InstructionType || (exports.InstructionType = InstructionType = {}));
263
265
  function instructionTypeFromJSON(object) {
@@ -301,6 +303,9 @@ function instructionTypeFromJSON(object) {
301
303
  case 12:
302
304
  case "INSTRUCTION_TYPE_GO_TO_HOME":
303
305
  return InstructionType.INSTRUCTION_TYPE_GO_TO_HOME;
306
+ case 13:
307
+ case "INSTRUCTION_TYPE_SURVEY":
308
+ return InstructionType.INSTRUCTION_TYPE_SURVEY;
304
309
  case -1:
305
310
  case "UNRECOGNIZED":
306
311
  default:
@@ -335,6 +340,8 @@ function instructionTypeToJSON(object) {
335
340
  return "INSTRUCTION_TYPE_GO_TO_SEABED";
336
341
  case InstructionType.INSTRUCTION_TYPE_GO_TO_HOME:
337
342
  return "INSTRUCTION_TYPE_GO_TO_HOME";
343
+ case InstructionType.INSTRUCTION_TYPE_SURVEY:
344
+ return "INSTRUCTION_TYPE_SURVEY";
338
345
  case InstructionType.UNRECOGNIZED:
339
346
  default:
340
347
  return "UNRECOGNIZED";
@@ -627,6 +634,7 @@ function createBaseInstruction() {
627
634
  goToSurfaceCommand: undefined,
628
635
  goToSeabedCommand: undefined,
629
636
  goToHomeCommand: undefined,
637
+ surveyCommand: undefined,
630
638
  };
631
639
  }
632
640
  exports.Instruction = {
@@ -670,6 +678,9 @@ exports.Instruction = {
670
678
  if (message.goToHomeCommand !== undefined) {
671
679
  exports.GoToHomeCommand.encode(message.goToHomeCommand, writer.uint32(106).fork()).join();
672
680
  }
681
+ if (message.surveyCommand !== undefined) {
682
+ exports.SurveyCommand.encode(message.surveyCommand, writer.uint32(114).fork()).join();
683
+ }
673
684
  return writer;
674
685
  },
675
686
  decode(input, length) {
@@ -770,6 +781,13 @@ exports.Instruction = {
770
781
  message.goToHomeCommand = exports.GoToHomeCommand.decode(reader, reader.uint32());
771
782
  continue;
772
783
  }
784
+ case 14: {
785
+ if (tag !== 114) {
786
+ break;
787
+ }
788
+ message.surveyCommand = exports.SurveyCommand.decode(reader, reader.uint32());
789
+ continue;
790
+ }
773
791
  }
774
792
  if ((tag & 7) === 4 || tag === 0) {
775
793
  break;
@@ -805,6 +823,7 @@ exports.Instruction = {
805
823
  ? exports.GoToSeabedCommand.fromJSON(object.goToSeabedCommand)
806
824
  : undefined,
807
825
  goToHomeCommand: isSet(object.goToHomeCommand) ? exports.GoToHomeCommand.fromJSON(object.goToHomeCommand) : undefined,
826
+ surveyCommand: isSet(object.surveyCommand) ? exports.SurveyCommand.fromJSON(object.surveyCommand) : undefined,
808
827
  };
809
828
  },
810
829
  toJSON(message) {
@@ -848,6 +867,9 @@ exports.Instruction = {
848
867
  if (message.goToHomeCommand !== undefined) {
849
868
  obj.goToHomeCommand = exports.GoToHomeCommand.toJSON(message.goToHomeCommand);
850
869
  }
870
+ if (message.surveyCommand !== undefined) {
871
+ obj.surveyCommand = exports.SurveyCommand.toJSON(message.surveyCommand);
872
+ }
851
873
  return obj;
852
874
  },
853
875
  create(base) {
@@ -889,6 +911,9 @@ exports.Instruction = {
889
911
  message.goToHomeCommand = (object.goToHomeCommand !== undefined && object.goToHomeCommand !== null)
890
912
  ? exports.GoToHomeCommand.fromPartial(object.goToHomeCommand)
891
913
  : undefined;
914
+ message.surveyCommand = (object.surveyCommand !== undefined && object.surveyCommand !== null)
915
+ ? exports.SurveyCommand.fromPartial(object.surveyCommand)
916
+ : undefined;
892
917
  return message;
893
918
  },
894
919
  };
@@ -1672,6 +1697,223 @@ exports.GoToHomeCommand = {
1672
1697
  return message;
1673
1698
  },
1674
1699
  };
1700
+ function createBaseSurveyCommand() {
1701
+ return {
1702
+ vertices: [],
1703
+ surveyLineHeading: 0,
1704
+ laneSpacing: 0,
1705
+ turnaroundDistance: 0,
1706
+ cruiseSpeed: 0,
1707
+ circleOfAcceptance: 0,
1708
+ depthSetPoint: undefined,
1709
+ reverse: false,
1710
+ waypoints: [],
1711
+ swathWidth: 0,
1712
+ overlapPercent: 0,
1713
+ };
1714
+ }
1715
+ exports.SurveyCommand = {
1716
+ encode(message, writer = new wire_1.BinaryWriter()) {
1717
+ for (const v of message.vertices) {
1718
+ message_formats_1.LatLongPosition.encode(v, writer.uint32(10).fork()).join();
1719
+ }
1720
+ if (message.surveyLineHeading !== 0) {
1721
+ writer.uint32(21).float(message.surveyLineHeading);
1722
+ }
1723
+ if (message.laneSpacing !== 0) {
1724
+ writer.uint32(29).float(message.laneSpacing);
1725
+ }
1726
+ if (message.turnaroundDistance !== 0) {
1727
+ writer.uint32(37).float(message.turnaroundDistance);
1728
+ }
1729
+ if (message.cruiseSpeed !== 0) {
1730
+ writer.uint32(45).float(message.cruiseSpeed);
1731
+ }
1732
+ if (message.circleOfAcceptance !== 0) {
1733
+ writer.uint32(53).float(message.circleOfAcceptance);
1734
+ }
1735
+ if (message.depthSetPoint !== undefined) {
1736
+ exports.DepthSetPoint.encode(message.depthSetPoint, writer.uint32(58).fork()).join();
1737
+ }
1738
+ if (message.reverse !== false) {
1739
+ writer.uint32(64).bool(message.reverse);
1740
+ }
1741
+ for (const v of message.waypoints) {
1742
+ exports.Waypoint.encode(v, writer.uint32(74).fork()).join();
1743
+ }
1744
+ if (message.swathWidth !== 0) {
1745
+ writer.uint32(85).float(message.swathWidth);
1746
+ }
1747
+ if (message.overlapPercent !== 0) {
1748
+ writer.uint32(93).float(message.overlapPercent);
1749
+ }
1750
+ return writer;
1751
+ },
1752
+ decode(input, length) {
1753
+ const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
1754
+ const end = length === undefined ? reader.len : reader.pos + length;
1755
+ const message = createBaseSurveyCommand();
1756
+ while (reader.pos < end) {
1757
+ const tag = reader.uint32();
1758
+ switch (tag >>> 3) {
1759
+ case 1: {
1760
+ if (tag !== 10) {
1761
+ break;
1762
+ }
1763
+ message.vertices.push(message_formats_1.LatLongPosition.decode(reader, reader.uint32()));
1764
+ continue;
1765
+ }
1766
+ case 2: {
1767
+ if (tag !== 21) {
1768
+ break;
1769
+ }
1770
+ message.surveyLineHeading = reader.float();
1771
+ continue;
1772
+ }
1773
+ case 3: {
1774
+ if (tag !== 29) {
1775
+ break;
1776
+ }
1777
+ message.laneSpacing = reader.float();
1778
+ continue;
1779
+ }
1780
+ case 4: {
1781
+ if (tag !== 37) {
1782
+ break;
1783
+ }
1784
+ message.turnaroundDistance = reader.float();
1785
+ continue;
1786
+ }
1787
+ case 5: {
1788
+ if (tag !== 45) {
1789
+ break;
1790
+ }
1791
+ message.cruiseSpeed = reader.float();
1792
+ continue;
1793
+ }
1794
+ case 6: {
1795
+ if (tag !== 53) {
1796
+ break;
1797
+ }
1798
+ message.circleOfAcceptance = reader.float();
1799
+ continue;
1800
+ }
1801
+ case 7: {
1802
+ if (tag !== 58) {
1803
+ break;
1804
+ }
1805
+ message.depthSetPoint = exports.DepthSetPoint.decode(reader, reader.uint32());
1806
+ continue;
1807
+ }
1808
+ case 8: {
1809
+ if (tag !== 64) {
1810
+ break;
1811
+ }
1812
+ message.reverse = reader.bool();
1813
+ continue;
1814
+ }
1815
+ case 9: {
1816
+ if (tag !== 74) {
1817
+ break;
1818
+ }
1819
+ message.waypoints.push(exports.Waypoint.decode(reader, reader.uint32()));
1820
+ continue;
1821
+ }
1822
+ case 10: {
1823
+ if (tag !== 85) {
1824
+ break;
1825
+ }
1826
+ message.swathWidth = reader.float();
1827
+ continue;
1828
+ }
1829
+ case 11: {
1830
+ if (tag !== 93) {
1831
+ break;
1832
+ }
1833
+ message.overlapPercent = reader.float();
1834
+ continue;
1835
+ }
1836
+ }
1837
+ if ((tag & 7) === 4 || tag === 0) {
1838
+ break;
1839
+ }
1840
+ reader.skip(tag & 7);
1841
+ }
1842
+ return message;
1843
+ },
1844
+ fromJSON(object) {
1845
+ return {
1846
+ vertices: gt.Array.isArray(object?.vertices) ? object.vertices.map((e) => message_formats_1.LatLongPosition.fromJSON(e)) : [],
1847
+ surveyLineHeading: isSet(object.surveyLineHeading) ? gt.Number(object.surveyLineHeading) : 0,
1848
+ laneSpacing: isSet(object.laneSpacing) ? gt.Number(object.laneSpacing) : 0,
1849
+ turnaroundDistance: isSet(object.turnaroundDistance) ? gt.Number(object.turnaroundDistance) : 0,
1850
+ cruiseSpeed: isSet(object.cruiseSpeed) ? gt.Number(object.cruiseSpeed) : 0,
1851
+ circleOfAcceptance: isSet(object.circleOfAcceptance) ? gt.Number(object.circleOfAcceptance) : 0,
1852
+ depthSetPoint: isSet(object.depthSetPoint) ? exports.DepthSetPoint.fromJSON(object.depthSetPoint) : undefined,
1853
+ reverse: isSet(object.reverse) ? gt.Boolean(object.reverse) : false,
1854
+ waypoints: gt.Array.isArray(object?.waypoints) ? object.waypoints.map((e) => exports.Waypoint.fromJSON(e)) : [],
1855
+ swathWidth: isSet(object.swathWidth) ? gt.Number(object.swathWidth) : 0,
1856
+ overlapPercent: isSet(object.overlapPercent) ? gt.Number(object.overlapPercent) : 0,
1857
+ };
1858
+ },
1859
+ toJSON(message) {
1860
+ const obj = {};
1861
+ if (message.vertices?.length) {
1862
+ obj.vertices = message.vertices.map((e) => message_formats_1.LatLongPosition.toJSON(e));
1863
+ }
1864
+ if (message.surveyLineHeading !== 0) {
1865
+ obj.surveyLineHeading = message.surveyLineHeading;
1866
+ }
1867
+ if (message.laneSpacing !== 0) {
1868
+ obj.laneSpacing = message.laneSpacing;
1869
+ }
1870
+ if (message.turnaroundDistance !== 0) {
1871
+ obj.turnaroundDistance = message.turnaroundDistance;
1872
+ }
1873
+ if (message.cruiseSpeed !== 0) {
1874
+ obj.cruiseSpeed = message.cruiseSpeed;
1875
+ }
1876
+ if (message.circleOfAcceptance !== 0) {
1877
+ obj.circleOfAcceptance = message.circleOfAcceptance;
1878
+ }
1879
+ if (message.depthSetPoint !== undefined) {
1880
+ obj.depthSetPoint = exports.DepthSetPoint.toJSON(message.depthSetPoint);
1881
+ }
1882
+ if (message.reverse !== false) {
1883
+ obj.reverse = message.reverse;
1884
+ }
1885
+ if (message.waypoints?.length) {
1886
+ obj.waypoints = message.waypoints.map((e) => exports.Waypoint.toJSON(e));
1887
+ }
1888
+ if (message.swathWidth !== 0) {
1889
+ obj.swathWidth = message.swathWidth;
1890
+ }
1891
+ if (message.overlapPercent !== 0) {
1892
+ obj.overlapPercent = message.overlapPercent;
1893
+ }
1894
+ return obj;
1895
+ },
1896
+ create(base) {
1897
+ return exports.SurveyCommand.fromPartial(base ?? {});
1898
+ },
1899
+ fromPartial(object) {
1900
+ const message = createBaseSurveyCommand();
1901
+ message.vertices = object.vertices?.map((e) => message_formats_1.LatLongPosition.fromPartial(e)) || [];
1902
+ message.surveyLineHeading = object.surveyLineHeading ?? 0;
1903
+ message.laneSpacing = object.laneSpacing ?? 0;
1904
+ message.turnaroundDistance = object.turnaroundDistance ?? 0;
1905
+ message.cruiseSpeed = object.cruiseSpeed ?? 0;
1906
+ message.circleOfAcceptance = object.circleOfAcceptance ?? 0;
1907
+ message.depthSetPoint = (object.depthSetPoint !== undefined && object.depthSetPoint !== null)
1908
+ ? exports.DepthSetPoint.fromPartial(object.depthSetPoint)
1909
+ : undefined;
1910
+ message.reverse = object.reverse ?? false;
1911
+ message.waypoints = object.waypoints?.map((e) => exports.Waypoint.fromPartial(e)) || [];
1912
+ message.swathWidth = object.swathWidth ?? 0;
1913
+ message.overlapPercent = object.overlapPercent ?? 0;
1914
+ return message;
1915
+ },
1916
+ };
1675
1917
  function createBasePathSegment() {
1676
1918
  return {
1677
1919
  id: 0,
@@ -1,6 +1,6 @@
1
1
  import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
2
2
  import { AquaTrollProbeMetadata, AquaTrollSensorMetadataArray, AquaTrollSensorParametersArray } from "./aquatroll";
3
- import { Altitude, Attitude, Battery, BatteryBQ40Z50, CalibrationState, CanisterHumidity, CanisterTemperature, ConnectedClient, ControlForce, ControllerHealth, ControlMode, CpProbe, CPUInfo, CPUTemperature, Depth, DiveTime, DroneInfo, DvlVelocity, ErrorFlags, ForwardDistance, GenericServo, GuestPortCurrent, Imu, IperfStatus, KernelLogEntry, Laser, LatLongPosition, Lights, LogEntry, MagneticDeclination, MedusaSpectrometerData, MultibeamConfig, MultibeamDiscovery, MultibeamPing, MultibeamServo, Notification, NStreamers, PositionEstimate, RecordState, Reference, RemovableStorageDevice, StorageSpace, SurfaceUnitBatteryInfo, SurfaceUnitVersionInfo, SystemTime, ThicknessGauge, TiltAngle, TiltStabilizationState, TimeLapseState, WaterTemperature } from "./message_formats";
3
+ import { Altitude, Attitude, Battery, BatteryBQ40Z50, CalibrationState, CameraPanTiltZoom, CanisterHumidity, CanisterTemperature, ConnectedClient, ControlForce, ControllerHealth, ControlMode, CpProbe, CPUInfo, CPUTemperature, Depth, DiveTime, DroneInfo, DvlVelocity, ErrorFlags, FilterMessage, ForwardDistance, GenericServo, GuestPortCurrent, Imu, IperfStatus, KernelLogEntry, Laser, LatLongPosition, Lights, LogEntry, MagneticDeclination, MedusaSpectrometerData, MultibeamConfig, MultibeamDiscovery, MultibeamPing, MultibeamServo, Notification, NStreamers, ObjectDetections, PositionEstimate, RecordState, Reference, RemovableStorageDevice, StorageSpace, SurfaceUnitBatteryInfo, SurfaceUnitVersionInfo, SystemPerformanceInfo, SystemTime, ThicknessGauge, TiltAngle, TiltStabilizationState, TimeLapseState, WaterTemperature } from "./message_formats";
4
4
  import { MissionStatus, ReferenceAutoPilot } from "./mission_planning";
5
5
  /**
6
6
  * Telemetry
@@ -300,11 +300,21 @@ export interface MultibeamDiscoveryTel {
300
300
  /** Discovery data from a multibeam sonar. */
301
301
  discovery: MultibeamDiscovery | undefined;
302
302
  }
303
- /** Information about cpu and memory usage. */
303
+ /** Information about CPU and memory usage (deprecated, use SystemPerformanceInfoTel instead). */
304
304
  export interface CPUInfoTel {
305
305
  /** CPU information. */
306
306
  cpuInfo: CPUInfo | undefined;
307
307
  }
308
+ /**
309
+ * System performance telemetry message.
310
+ *
311
+ * Comprehensive performance metrics including per-core CPU, GPU, DLA,
312
+ * memory, thermals, and video codec utilization.
313
+ */
314
+ export interface SystemPerformanceInfoTel {
315
+ /** System performance information. */
316
+ systemPerformanceInfo: SystemPerformanceInfo | undefined;
317
+ }
308
318
  /** Surface Unit telemetry message. */
309
319
  export interface SurfaceUnitTel {
310
320
  /** Battery information. */
@@ -319,6 +329,30 @@ export interface LogEntryTel {
319
329
  /** Kernel log entry. */
320
330
  kernel?: KernelLogEntry | undefined;
321
331
  }
332
+ /** Object detections from a computer vision model. */
333
+ export interface ObjectDetectionsTel {
334
+ /** List of object detections from a video frame. */
335
+ objectDetections: ObjectDetections | undefined;
336
+ }
337
+ /**
338
+ * Turbidity filter settings telemetry message.
339
+ *
340
+ * Message is published when the filter settings are changed.
341
+ */
342
+ export interface TurbidityFilterTel {
343
+ /** Turbidity filter settings. */
344
+ turbidityFilter: FilterMessage | undefined;
345
+ }
346
+ /**
347
+ * Digital pan, tilt, and zoom telemetry from the main camera.
348
+ *
349
+ * Reports the actual pan, tilt, and zoom state of the camera.
350
+ * Only supported on X3 Ultra.
351
+ */
352
+ export interface CameraPanTiltZoomTel {
353
+ /** Current pan, tilt, and zoom state. */
354
+ cameraPanTiltZoom: CameraPanTiltZoom | undefined;
355
+ }
322
356
  export declare const AttitudeTel: MessageFns<AttitudeTel>;
323
357
  export declare const MagneticDeclinationTel: MessageFns<MagneticDeclinationTel>;
324
358
  export declare const AltitudeTel: MessageFns<AltitudeTel>;
@@ -376,8 +410,12 @@ export declare const MultibeamPingTel: MessageFns<MultibeamPingTel>;
376
410
  export declare const MultibeamConfigTel: MessageFns<MultibeamConfigTel>;
377
411
  export declare const MultibeamDiscoveryTel: MessageFns<MultibeamDiscoveryTel>;
378
412
  export declare const CPUInfoTel: MessageFns<CPUInfoTel>;
413
+ export declare const SystemPerformanceInfoTel: MessageFns<SystemPerformanceInfoTel>;
379
414
  export declare const SurfaceUnitTel: MessageFns<SurfaceUnitTel>;
380
415
  export declare const LogEntryTel: MessageFns<LogEntryTel>;
416
+ export declare const ObjectDetectionsTel: MessageFns<ObjectDetectionsTel>;
417
+ export declare const TurbidityFilterTel: MessageFns<TurbidityFilterTel>;
418
+ export declare const CameraPanTiltZoomTel: MessageFns<CameraPanTiltZoomTel>;
381
419
  type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
382
420
  type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
383
421
  [K in keyof T]?: DeepPartial<T[K]>;