@konitif/viewer-3d 0.284.1

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.
Files changed (175) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +34 -0
  3. package/dist/balanceFootprintDefinition.d.ts +7 -0
  4. package/dist/balanceFootprintDefinition.d.ts.map +1 -0
  5. package/dist/balanceFootprintDefinition.js +2 -0
  6. package/dist/balanceFootprintDefinition.js.map +1 -0
  7. package/dist/diagnosticContactDefinition.d.ts +7 -0
  8. package/dist/diagnosticContactDefinition.d.ts.map +1 -0
  9. package/dist/diagnosticContactDefinition.js +2 -0
  10. package/dist/diagnosticContactDefinition.js.map +1 -0
  11. package/dist/handTipDefinition.d.ts +13 -0
  12. package/dist/handTipDefinition.d.ts.map +1 -0
  13. package/dist/handTipDefinition.js +2 -0
  14. package/dist/handTipDefinition.js.map +1 -0
  15. package/dist/index.d.ts +41 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +19 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/jointHandleDefinition.d.ts +23 -0
  20. package/dist/jointHandleDefinition.d.ts.map +1 -0
  21. package/dist/jointHandleDefinition.js +2 -0
  22. package/dist/jointHandleDefinition.js.map +1 -0
  23. package/dist/ledPlacementDefinition.d.ts +38 -0
  24. package/dist/ledPlacementDefinition.d.ts.map +1 -0
  25. package/dist/ledPlacementDefinition.js +2 -0
  26. package/dist/ledPlacementDefinition.js.map +1 -0
  27. package/dist/ledReferenceFrame.d.ts +26 -0
  28. package/dist/ledReferenceFrame.d.ts.map +1 -0
  29. package/dist/ledReferenceFrame.js +2 -0
  30. package/dist/ledReferenceFrame.js.map +1 -0
  31. package/dist/ledRingCalibration.d.ts +22 -0
  32. package/dist/ledRingCalibration.d.ts.map +1 -0
  33. package/dist/ledRingCalibration.js +2 -0
  34. package/dist/ledRingCalibration.js.map +1 -0
  35. package/dist/renderer/AnimationLoop.d.ts +18 -0
  36. package/dist/renderer/AnimationLoop.d.ts.map +1 -0
  37. package/dist/renderer/AnimationLoop.js +39 -0
  38. package/dist/renderer/AnimationLoop.js.map +1 -0
  39. package/dist/renderer/CameraController.d.ts +154 -0
  40. package/dist/renderer/CameraController.d.ts.map +1 -0
  41. package/dist/renderer/CameraController.js +469 -0
  42. package/dist/renderer/CameraController.js.map +1 -0
  43. package/dist/renderer/NavigationPhysicsObservation.d.ts +25 -0
  44. package/dist/renderer/NavigationPhysicsObservation.d.ts.map +1 -0
  45. package/dist/renderer/NavigationPhysicsObservation.js +81 -0
  46. package/dist/renderer/NavigationPhysicsObservation.js.map +1 -0
  47. package/dist/renderer/ObservedRobotGroundingProjection.d.ts +206 -0
  48. package/dist/renderer/ObservedRobotGroundingProjection.d.ts.map +1 -0
  49. package/dist/renderer/ObservedRobotGroundingProjection.js +522 -0
  50. package/dist/renderer/ObservedRobotGroundingProjection.js.map +1 -0
  51. package/dist/renderer/ObservedRobotPresentationBuffer.d.ts +71 -0
  52. package/dist/renderer/ObservedRobotPresentationBuffer.d.ts.map +1 -0
  53. package/dist/renderer/ObservedRobotPresentationBuffer.js +226 -0
  54. package/dist/renderer/ObservedRobotPresentationBuffer.js.map +1 -0
  55. package/dist/renderer/PerformanceMonitor.d.ts +38 -0
  56. package/dist/renderer/PerformanceMonitor.d.ts.map +1 -0
  57. package/dist/renderer/PerformanceMonitor.js +84 -0
  58. package/dist/renderer/PerformanceMonitor.js.map +1 -0
  59. package/dist/renderer/ProjectileInteraction.d.ts +57 -0
  60. package/dist/renderer/ProjectileInteraction.d.ts.map +1 -0
  61. package/dist/renderer/ProjectileInteraction.js +152 -0
  62. package/dist/renderer/ProjectileInteraction.js.map +1 -0
  63. package/dist/renderer/RobotComparisonVisibilityTransition.d.ts +12 -0
  64. package/dist/renderer/RobotComparisonVisibilityTransition.d.ts.map +1 -0
  65. package/dist/renderer/RobotComparisonVisibilityTransition.js +23 -0
  66. package/dist/renderer/RobotComparisonVisibilityTransition.js.map +1 -0
  67. package/dist/renderer/RobotPoseTransition.d.ts +34 -0
  68. package/dist/renderer/RobotPoseTransition.d.ts.map +1 -0
  69. package/dist/renderer/RobotPoseTransition.js +66 -0
  70. package/dist/renderer/RobotPoseTransition.js.map +1 -0
  71. package/dist/renderer/RobotPostureCompensation.d.ts +31 -0
  72. package/dist/renderer/RobotPostureCompensation.d.ts.map +1 -0
  73. package/dist/renderer/RobotPostureCompensation.js +60 -0
  74. package/dist/renderer/RobotPostureCompensation.js.map +1 -0
  75. package/dist/renderer/SelectionController.d.ts +24 -0
  76. package/dist/renderer/SelectionController.d.ts.map +1 -0
  77. package/dist/renderer/SelectionController.js +68 -0
  78. package/dist/renderer/SelectionController.js.map +1 -0
  79. package/dist/renderer/TemporalProjectionModel.d.ts +71 -0
  80. package/dist/renderer/TemporalProjectionModel.d.ts.map +1 -0
  81. package/dist/renderer/TemporalProjectionModel.js +363 -0
  82. package/dist/renderer/TemporalProjectionModel.js.map +1 -0
  83. package/dist/renderer/Viewer3DRenderer.d.ts +1137 -0
  84. package/dist/renderer/Viewer3DRenderer.d.ts.map +1 -0
  85. package/dist/renderer/Viewer3DRenderer.js +10655 -0
  86. package/dist/renderer/Viewer3DRenderer.js.map +1 -0
  87. package/dist/renderer/ViewerExperimentCollector.d.ts +27 -0
  88. package/dist/renderer/ViewerExperimentCollector.d.ts.map +1 -0
  89. package/dist/renderer/ViewerExperimentCollector.js +2 -0
  90. package/dist/renderer/ViewerExperimentCollector.js.map +1 -0
  91. package/dist/renderer/ViewerExperimentPort.d.ts +19 -0
  92. package/dist/renderer/ViewerExperimentPort.d.ts.map +1 -0
  93. package/dist/renderer/ViewerExperimentPort.js +2 -0
  94. package/dist/renderer/ViewerExperimentPort.js.map +1 -0
  95. package/dist/renderer/ViewerFrameSignals.d.ts +13 -0
  96. package/dist/renderer/ViewerFrameSignals.d.ts.map +1 -0
  97. package/dist/renderer/ViewerFrameSignals.js +73 -0
  98. package/dist/renderer/ViewerFrameSignals.js.map +1 -0
  99. package/dist/renderer/ViewerHistoryData.d.ts +59 -0
  100. package/dist/renderer/ViewerHistoryData.d.ts.map +1 -0
  101. package/dist/renderer/ViewerHistoryData.js +2 -0
  102. package/dist/renderer/ViewerHistoryData.js.map +1 -0
  103. package/dist/renderer/ViewerHistoryPort.d.ts +15 -0
  104. package/dist/renderer/ViewerHistoryPort.d.ts.map +1 -0
  105. package/dist/renderer/ViewerHistoryPort.js +2 -0
  106. package/dist/renderer/ViewerHistoryPort.js.map +1 -0
  107. package/dist/renderer/ViewerIncarnationHealth.d.ts +14 -0
  108. package/dist/renderer/ViewerIncarnationHealth.d.ts.map +1 -0
  109. package/dist/renderer/ViewerIncarnationHealth.js +13 -0
  110. package/dist/renderer/ViewerIncarnationHealth.js.map +1 -0
  111. package/dist/renderer/ViewerInputBindings.d.ts +19 -0
  112. package/dist/renderer/ViewerInputBindings.d.ts.map +1 -0
  113. package/dist/renderer/ViewerInputBindings.js +44 -0
  114. package/dist/renderer/ViewerInputBindings.js.map +1 -0
  115. package/dist/renderer/ViewerMetadata.d.ts +11 -0
  116. package/dist/renderer/ViewerMetadata.d.ts.map +1 -0
  117. package/dist/renderer/ViewerMetadata.js +8 -0
  118. package/dist/renderer/ViewerMetadata.js.map +1 -0
  119. package/dist/renderer/ViewerPlaybackCompletionPolicy.d.ts +29 -0
  120. package/dist/renderer/ViewerPlaybackCompletionPolicy.d.ts.map +1 -0
  121. package/dist/renderer/ViewerPlaybackCompletionPolicy.js +27 -0
  122. package/dist/renderer/ViewerPlaybackCompletionPolicy.js.map +1 -0
  123. package/dist/renderer/ViewerProjectileParticleRenderer.d.ts +21 -0
  124. package/dist/renderer/ViewerProjectileParticleRenderer.d.ts.map +1 -0
  125. package/dist/renderer/ViewerProjectileParticleRenderer.js +134 -0
  126. package/dist/renderer/ViewerProjectileParticleRenderer.js.map +1 -0
  127. package/dist/renderer/ViewerResizePresentation.d.ts +16 -0
  128. package/dist/renderer/ViewerResizePresentation.d.ts.map +1 -0
  129. package/dist/renderer/ViewerResizePresentation.js +12 -0
  130. package/dist/renderer/ViewerResizePresentation.js.map +1 -0
  131. package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.d.ts +34 -0
  132. package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.d.ts.map +1 -0
  133. package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.js +130 -0
  134. package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.js.map +1 -0
  135. package/dist/renderer/ViewerTemporalScheduler.d.ts +6 -0
  136. package/dist/renderer/ViewerTemporalScheduler.d.ts.map +1 -0
  137. package/dist/renderer/ViewerTemporalScheduler.js +12 -0
  138. package/dist/renderer/ViewerTemporalScheduler.js.map +1 -0
  139. package/dist/renderer/VisualGroundLayer.d.ts +110 -0
  140. package/dist/renderer/VisualGroundLayer.d.ts.map +1 -0
  141. package/dist/renderer/VisualGroundLayer.js +576 -0
  142. package/dist/renderer/VisualGroundLayer.js.map +1 -0
  143. package/dist/renderer/displayFrameRate.d.ts +5 -0
  144. package/dist/renderer/displayFrameRate.d.ts.map +1 -0
  145. package/dist/renderer/displayFrameRate.js +23 -0
  146. package/dist/renderer/displayFrameRate.js.map +1 -0
  147. package/dist/renderer/index.d.ts +20 -0
  148. package/dist/renderer/index.d.ts.map +1 -0
  149. package/dist/renderer/index.js +18 -0
  150. package/dist/renderer/index.js.map +1 -0
  151. package/dist/renderer/physics/ViewerJointResolution.d.ts +19 -0
  152. package/dist/renderer/physics/ViewerJointResolution.d.ts.map +1 -0
  153. package/dist/renderer/physics/ViewerJointResolution.js +24 -0
  154. package/dist/renderer/physics/ViewerJointResolution.js.map +1 -0
  155. package/dist/renderer/physics/ViewerPhysicsFrame.d.ts +9 -0
  156. package/dist/renderer/physics/ViewerPhysicsFrame.d.ts.map +1 -0
  157. package/dist/renderer/physics/ViewerPhysicsFrame.js +26 -0
  158. package/dist/renderer/physics/ViewerPhysicsFrame.js.map +1 -0
  159. package/dist/renderer/physics/ViewerPhysicsJointMapping.d.ts +11 -0
  160. package/dist/renderer/physics/ViewerPhysicsJointMapping.d.ts.map +1 -0
  161. package/dist/renderer/physics/ViewerPhysicsJointMapping.js +20 -0
  162. package/dist/renderer/physics/ViewerPhysicsJointMapping.js.map +1 -0
  163. package/dist/renderer/physics/ViewerPhysicsMetadata.d.ts +20 -0
  164. package/dist/renderer/physics/ViewerPhysicsMetadata.d.ts.map +1 -0
  165. package/dist/renderer/physics/ViewerPhysicsMetadata.js +49 -0
  166. package/dist/renderer/physics/ViewerPhysicsMetadata.js.map +1 -0
  167. package/dist/renderer/robotViewerMotion.d.ts +49 -0
  168. package/dist/renderer/robotViewerMotion.d.ts.map +1 -0
  169. package/dist/renderer/robotViewerMotion.js +253 -0
  170. package/dist/renderer/robotViewerMotion.js.map +1 -0
  171. package/dist/supportDefinition.d.ts +11 -0
  172. package/dist/supportDefinition.d.ts.map +1 -0
  173. package/dist/supportDefinition.js +2 -0
  174. package/dist/supportDefinition.js.map +1 -0
  175. package/package.json +52 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RobotComparisonVisibilityTransition.js","sourceRoot":"","sources":["../../src/renderer/RobotComparisonVisibilityTransition.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wCAAwC,GAAG,IAAI,CAAC;AAO7D,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAU,EAAE,CACjD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAErE;;;;GAIG;AACH,MAAM,UAAU,gDAAgD,CAC9D,QAAgB,EAChB,SAAkB,EAClB,WAAW,GAAG,wCAAwC;IAEtD,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,CAAC,GAAG,eAAe,CAAC;IAEzC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,cAAc,EAAE,aAAa,CAAC,UAAU,GAAG,eAAe,CAAC;YAC3D,eAAe,EAAE,aAAa,CAAC,CAAC,UAAU,GAAG,eAAe,CAAC,GAAG,YAAY,CAAC;SAC9E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,eAAe,EAAE,aAAa,CAAC,UAAU,GAAG,YAAY,CAAC;QACzD,cAAc,EAAE,aAAa,CAAC,CAAC,UAAU,GAAG,YAAY,CAAC,GAAG,eAAe,CAAC;KAC7E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,34 @@
1
+ export interface RobotPoseTransitionTrack {
2
+ target: string;
3
+ startValue: number;
4
+ targetValue: number;
5
+ }
6
+ export interface RobotPoseTransition {
7
+ startedAtMs: number;
8
+ durationMs: number;
9
+ tracks: readonly RobotPoseTransitionTrack[];
10
+ }
11
+ export interface RobotPoseTransitionSample {
12
+ progress: number;
13
+ completed: boolean;
14
+ jointValues: Readonly<Record<string, number>>;
15
+ }
16
+ export declare function resolveRobotPoseEntryTransitionEndTime(input: {
17
+ startTimeSeconds: number;
18
+ firstKeyTimeSeconds: number;
19
+ minimumDurationSeconds: number;
20
+ }): number;
21
+ export declare function resolveRobotPoseExitTransitionStartTime(input: {
22
+ endTimeSeconds: number;
23
+ lastKeyTimeSeconds: number;
24
+ minimumDurationSeconds: number;
25
+ }): number;
26
+ export declare function createRobotPoseTransition(input: {
27
+ startedAtMs: number;
28
+ durationMs: number;
29
+ targets: Iterable<string>;
30
+ sourcePose: Readonly<Record<string, number>>;
31
+ targetPose: Readonly<Record<string, number>>;
32
+ }): RobotPoseTransition | null;
33
+ export declare function sampleRobotPoseTransition(transition: RobotPoseTransition, observedAtMs: number): RobotPoseTransitionSample;
34
+ //# sourceMappingURL=RobotPoseTransition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RobotPoseTransition.d.ts","sourceRoot":"","sources":["../../src/renderer/RobotPoseTransition.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,wBAAwB,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC/C;AAED,wBAAgB,sCAAsC,CAAC,KAAK,EAAE;IAC5D,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;CAChC,GAAG,MAAM,CAUT;AAED,wBAAgB,uCAAuC,CAAC,KAAK,EAAE;IAC7D,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;CAChC,GAAG,MAAM,CAUT;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC9C,GAAG,mBAAmB,GAAG,IAAI,CA6B7B;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,mBAAmB,EAC/B,YAAY,EAAE,MAAM,GACnB,yBAAyB,CAgB3B"}
@@ -0,0 +1,66 @@
1
+ export function resolveRobotPoseEntryTransitionEndTime(input) {
2
+ const startTimeSeconds = Number.isFinite(input.startTimeSeconds) ? input.startTimeSeconds : 0;
3
+ const firstKeyTimeSeconds = Number.isFinite(input.firstKeyTimeSeconds)
4
+ ? input.firstKeyTimeSeconds
5
+ : startTimeSeconds;
6
+ const minimumDurationSeconds = Number.isFinite(input.minimumDurationSeconds)
7
+ ? Math.max(0, input.minimumDurationSeconds)
8
+ : 0;
9
+ return Math.max(firstKeyTimeSeconds, startTimeSeconds + minimumDurationSeconds);
10
+ }
11
+ export function resolveRobotPoseExitTransitionStartTime(input) {
12
+ const endTimeSeconds = Number.isFinite(input.endTimeSeconds) ? Math.max(0, input.endTimeSeconds) : 0;
13
+ const lastKeyTimeSeconds = Number.isFinite(input.lastKeyTimeSeconds)
14
+ ? Math.max(0, Math.min(endTimeSeconds, input.lastKeyTimeSeconds))
15
+ : endTimeSeconds;
16
+ const minimumDurationSeconds = Number.isFinite(input.minimumDurationSeconds)
17
+ ? Math.max(0, input.minimumDurationSeconds)
18
+ : 0;
19
+ return Math.min(lastKeyTimeSeconds, Math.max(0, endTimeSeconds - minimumDurationSeconds));
20
+ }
21
+ export function createRobotPoseTransition(input) {
22
+ const tracks = [...new Set(input.targets)]
23
+ .sort()
24
+ .flatMap((target) => {
25
+ const startValue = input.sourcePose[target];
26
+ const targetValue = input.targetPose[target];
27
+ if (typeof startValue !== 'number' ||
28
+ !Number.isFinite(startValue) ||
29
+ typeof targetValue !== 'number' ||
30
+ !Number.isFinite(targetValue) ||
31
+ Math.abs(startValue - targetValue) <= 0.000001) {
32
+ return [];
33
+ }
34
+ return [{ target, startValue, targetValue }];
35
+ });
36
+ if (tracks.length === 0) {
37
+ return null;
38
+ }
39
+ return {
40
+ startedAtMs: Number.isFinite(input.startedAtMs) ? input.startedAtMs : 0,
41
+ durationMs: Math.max(1, Number.isFinite(input.durationMs) ? input.durationMs : 1),
42
+ tracks
43
+ };
44
+ }
45
+ export function sampleRobotPoseTransition(transition, observedAtMs) {
46
+ const elapsedMs = Math.max(0, observedAtMs - transition.startedAtMs);
47
+ const progress = clampUnit(elapsedMs / transition.durationMs);
48
+ const easedProgress = progress * progress * (3 - 2 * progress);
49
+ const jointValues = {};
50
+ for (const track of transition.tracks) {
51
+ jointValues[track.target] =
52
+ track.startValue + (track.targetValue - track.startValue) * easedProgress;
53
+ }
54
+ return {
55
+ progress,
56
+ completed: progress >= 1,
57
+ jointValues
58
+ };
59
+ }
60
+ function clampUnit(value) {
61
+ if (!Number.isFinite(value)) {
62
+ return 0;
63
+ }
64
+ return Math.max(0, Math.min(1, value));
65
+ }
66
+ //# sourceMappingURL=RobotPoseTransition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RobotPoseTransition.js","sourceRoot":"","sources":["../../src/renderer/RobotPoseTransition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { PhysicsQuaternion } from '@konitif/physics';
2
+ export interface RobotSagittalPostureCompensationChannel {
3
+ jointName: string;
4
+ proportionalGain: number;
5
+ velocityGain: number;
6
+ maxOffsetRadians: number;
7
+ minimumTargetRadians?: number;
8
+ maximumTargetRadians?: number;
9
+ }
10
+ export interface RobotSagittalPostureCompensationOptions {
11
+ referenceBodyName: string;
12
+ referenceTiltRadians?: number;
13
+ deadbandRadians?: number;
14
+ maxTiltRadians?: number;
15
+ maxTiltVelocityRadiansPerSecond?: number;
16
+ channels: readonly RobotSagittalPostureCompensationChannel[];
17
+ }
18
+ export interface RobotSagittalPostureCompensationResult {
19
+ tiltRadians: number;
20
+ tiltVelocityRadiansPerSecond: number;
21
+ targets: Readonly<Record<string, number>>;
22
+ }
23
+ export declare function resolveRobotSagittalTiltRadians(rotation: PhysicsQuaternion): number;
24
+ export declare function resolveRobotSagittalPostureCompensation(input: {
25
+ options: RobotSagittalPostureCompensationOptions;
26
+ rotation: PhysicsQuaternion;
27
+ authoredTargets: Readonly<Record<string, number>>;
28
+ previousTiltRadians?: number | null;
29
+ elapsedSeconds: number;
30
+ }): RobotSagittalPostureCompensationResult;
31
+ //# sourceMappingURL=RobotPostureCompensation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RobotPostureCompensation.d.ts","sourceRoot":"","sources":["../../src/renderer/RobotPostureCompensation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,WAAW,uCAAuC;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,uCAAuC;IACtD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,QAAQ,EAAE,SAAS,uCAAuC,EAAE,CAAC;CAC9D;AAED,MAAM,WAAW,sCAAsC;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B,EAAE,MAAM,CAAC;IACrC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC3C;AAED,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAenF;AAED,wBAAgB,uCAAuC,CAAC,KAAK,EAAE;IAC7D,OAAO,EAAE,uCAAuC,CAAC;IACjD,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,sCAAsC,CAiDzC"}
@@ -0,0 +1,60 @@
1
+ export function resolveRobotSagittalTiltRadians(rotation) {
2
+ const magnitude = Math.hypot(rotation.x, rotation.y, rotation.z, rotation.w);
3
+ if (!Number.isFinite(magnitude) || magnitude <= Number.EPSILON) {
4
+ return 0;
5
+ }
6
+ const x = rotation.x / magnitude;
7
+ const y = rotation.y / magnitude;
8
+ const z = rotation.z / magnitude;
9
+ const w = rotation.w / magnitude;
10
+ const upX = 2 * (x * z + w * y);
11
+ const upZ = 1 - 2 * (x * x + y * y);
12
+ return Math.atan2(upX, upZ);
13
+ }
14
+ export function resolveRobotSagittalPostureCompensation(input) {
15
+ const measuredTilt = resolveRobotSagittalTiltRadians(input.rotation);
16
+ const referenceTilt = finiteOr(input.options.referenceTiltRadians, 0);
17
+ const maxTilt = Math.max(0, finiteOr(input.options.maxTiltRadians, Math.PI / 6));
18
+ const deadband = Math.max(0, finiteOr(input.options.deadbandRadians, 0));
19
+ const tiltRadians = clamp(measuredTilt - referenceTilt, -maxTilt, maxTilt);
20
+ const compensatedTilt = applyDeadband(tiltRadians, deadband);
21
+ const elapsedSeconds = Math.max(0, finiteOr(input.elapsedSeconds, 0));
22
+ const rawVelocity = input.previousTiltRadians === null ||
23
+ input.previousTiltRadians === undefined ||
24
+ elapsedSeconds <= Number.EPSILON
25
+ ? 0
26
+ : (tiltRadians - input.previousTiltRadians) / elapsedSeconds;
27
+ const maxVelocity = Math.max(0, finiteOr(input.options.maxTiltVelocityRadiansPerSecond, Math.PI * 2));
28
+ const tiltVelocityRadiansPerSecond = clamp(rawVelocity, -maxVelocity, maxVelocity);
29
+ const targets = {};
30
+ for (const channel of input.options.channels) {
31
+ const authoredTarget = input.authoredTargets[channel.jointName];
32
+ if (typeof authoredTarget !== 'number' || !Number.isFinite(authoredTarget)) {
33
+ continue;
34
+ }
35
+ const maxOffset = Math.max(0, finiteOr(channel.maxOffsetRadians, 0));
36
+ const velocityCorrection = compensatedTilt === 0
37
+ ? 0
38
+ : finiteOr(channel.velocityGain, 0) * tiltVelocityRadiansPerSecond;
39
+ const offset = clamp(finiteOr(channel.proportionalGain, 0) * compensatedTilt + velocityCorrection, -maxOffset, maxOffset);
40
+ targets[channel.jointName] = clamp(authoredTarget + offset, finiteOr(channel.minimumTargetRadians, Number.NEGATIVE_INFINITY), finiteOr(channel.maximumTargetRadians, Number.POSITIVE_INFINITY));
41
+ }
42
+ return {
43
+ tiltRadians,
44
+ tiltVelocityRadiansPerSecond,
45
+ targets
46
+ };
47
+ }
48
+ function applyDeadband(value, deadband) {
49
+ if (Math.abs(value) <= deadband) {
50
+ return 0;
51
+ }
52
+ return value - Math.sign(value) * deadband;
53
+ }
54
+ function finiteOr(value, fallback) {
55
+ return typeof value === 'number' && Number.isFinite(value) ? value : fallback;
56
+ }
57
+ function clamp(value, minimum, maximum) {
58
+ return Math.min(maximum, Math.max(minimum, value));
59
+ }
60
+ //# sourceMappingURL=RobotPostureCompensation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RobotPostureCompensation.js","sourceRoot":"","sources":["../../src/renderer/RobotPostureCompensation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface PoseHandleSelectionState {
2
+ hoveredPoseHandleId: string | null;
3
+ hoveredPoseHandleAxisId: string | null;
4
+ hoveredPoseHandleAxisIds: string[];
5
+ selectedPoseHandleId: string | null;
6
+ selectedPoseHandleAxisId: string | null;
7
+ selectedPoseHandleAxisIds: string[];
8
+ }
9
+ export declare class SelectionController {
10
+ hoveredPoseHandleId: string | null;
11
+ hoveredPoseHandleAxisId: string | null;
12
+ hoveredPoseHandleAxisIds: string[];
13
+ externalHoveredJointTargets: string[];
14
+ selectedPoseHandleId: string | null;
15
+ selectedPoseHandleAxisId: string | null;
16
+ selectedPoseHandleAxisIds: string[];
17
+ hasFocus(): boolean;
18
+ setHover(handleId: string | null, axisIds: string[]): boolean;
19
+ select(handleId: string, axisIds: string[]): void;
20
+ clearHover(): boolean;
21
+ clearFocus(): boolean;
22
+ setExternalHoveredJointTargets(jointTargets: readonly string[]): boolean;
23
+ }
24
+ //# sourceMappingURL=SelectionController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionController.d.ts","sourceRoot":"","sources":["../../src/renderer/SelectionController.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,yBAAyB,EAAE,MAAM,EAAE,CAAC;CACrC;AAED,qBAAa,mBAAmB;IAC9B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1C,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9C,wBAAwB,EAAE,MAAM,EAAE,CAAM;IACxC,2BAA2B,EAAE,MAAM,EAAE,CAAM;IAC3C,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3C,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/C,yBAAyB,EAAE,MAAM,EAAE,CAAM;IAEzC,QAAQ,IAAI,OAAO;IAWnB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO;IAe7D,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAWjD,UAAU,IAAI,OAAO;IAWrB,UAAU,IAAI,OAAO;IAYrB,8BAA8B,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO;CAczE"}
@@ -0,0 +1,68 @@
1
+ export class SelectionController {
2
+ hoveredPoseHandleId = null;
3
+ hoveredPoseHandleAxisId = null;
4
+ hoveredPoseHandleAxisIds = [];
5
+ externalHoveredJointTargets = [];
6
+ selectedPoseHandleId = null;
7
+ selectedPoseHandleAxisId = null;
8
+ selectedPoseHandleAxisIds = [];
9
+ hasFocus() {
10
+ return Boolean(this.hoveredPoseHandleId ||
11
+ this.hoveredPoseHandleAxisId ||
12
+ this.hoveredPoseHandleAxisIds.length > 0 ||
13
+ this.selectedPoseHandleId ||
14
+ this.selectedPoseHandleAxisId ||
15
+ this.selectedPoseHandleAxisIds.length > 0);
16
+ }
17
+ setHover(handleId, axisIds) {
18
+ const nextAxisId = axisIds.length === 1 ? axisIds[0] ?? null : null;
19
+ const nextAxisSignature = axisIds.join('|');
20
+ const currentAxisSignature = this.hoveredPoseHandleAxisIds.join('|');
21
+ if (this.hoveredPoseHandleId === handleId && currentAxisSignature === nextAxisSignature) {
22
+ return false;
23
+ }
24
+ this.hoveredPoseHandleId = handleId;
25
+ this.hoveredPoseHandleAxisId = nextAxisId;
26
+ this.hoveredPoseHandleAxisIds = axisIds;
27
+ return true;
28
+ }
29
+ select(handleId, axisIds) {
30
+ const selectedAxisId = axisIds.length === 1 ? axisIds[0] ?? null : null;
31
+ this.selectedPoseHandleId = handleId;
32
+ this.selectedPoseHandleAxisId = selectedAxisId;
33
+ this.selectedPoseHandleAxisIds = axisIds;
34
+ this.hoveredPoseHandleId = handleId;
35
+ this.hoveredPoseHandleAxisId = selectedAxisId;
36
+ this.hoveredPoseHandleAxisIds = axisIds;
37
+ }
38
+ clearHover() {
39
+ if (!this.hoveredPoseHandleId && !this.hoveredPoseHandleAxisId && this.hoveredPoseHandleAxisIds.length === 0) {
40
+ return false;
41
+ }
42
+ this.hoveredPoseHandleId = null;
43
+ this.hoveredPoseHandleAxisId = null;
44
+ this.hoveredPoseHandleAxisIds = [];
45
+ return true;
46
+ }
47
+ clearFocus() {
48
+ const hadFocus = this.hasFocus();
49
+ this.hoveredPoseHandleId = null;
50
+ this.hoveredPoseHandleAxisId = null;
51
+ this.hoveredPoseHandleAxisIds = [];
52
+ this.selectedPoseHandleId = null;
53
+ this.selectedPoseHandleAxisId = null;
54
+ this.selectedPoseHandleAxisIds = [];
55
+ return hadFocus;
56
+ }
57
+ setExternalHoveredJointTargets(jointTargets) {
58
+ const nextJointTargets = Array.from(new Set(jointTargets.filter((target) => typeof target === 'string' && target.length > 0)));
59
+ const currentSignature = this.externalHoveredJointTargets.join('|');
60
+ const nextSignature = nextJointTargets.join('|');
61
+ if (currentSignature === nextSignature) {
62
+ return false;
63
+ }
64
+ this.externalHoveredJointTargets = nextJointTargets;
65
+ return true;
66
+ }
67
+ }
68
+ //# sourceMappingURL=SelectionController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionController.js","sourceRoot":"","sources":["../../src/renderer/SelectionController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import type { BodyTransform } from '@konitif/physics';
2
+ export type ViewerTemporalProjectionMode = 'raw' | 'interpolated';
3
+ export type ViewerTemporalProjectionFallbackReason = 'none' | 'insufficient_samples' | 'invalid_timestamp' | 'sample_gap' | 'discontinuity' | 'topology_change';
4
+ export interface ViewerTemporalProjectionSample {
5
+ sampleId: string;
6
+ physicsTimestampMs: number;
7
+ observedAtMs: number;
8
+ discontinuityToken: string;
9
+ bodyTransforms: readonly BodyTransform[];
10
+ jointAngles: Readonly<Record<string, number>>;
11
+ centerOfMass?: BodyTransform['position'] | null;
12
+ }
13
+ export interface ViewerTemporalProjectionConfig {
14
+ bufferDelayMs: number;
15
+ maxSampleGapMs: number;
16
+ maxSamples: number;
17
+ }
18
+ export interface ViewerTemporalProjectionMetrics {
19
+ sampleAgeMs: number;
20
+ projectionLatencyMs: number;
21
+ interpolationAlpha: number;
22
+ positionError: number;
23
+ rotationErrorRadians: number;
24
+ jointAngleErrorRadians: number;
25
+ correctionMagnitude: number;
26
+ }
27
+ export interface ViewerTemporalProjectionFrame {
28
+ mode: ViewerTemporalProjectionMode;
29
+ state: 'raw' | 'reconstructed' | 'fallback';
30
+ fallbackReason: ViewerTemporalProjectionFallbackReason;
31
+ renderTimestampMs: number;
32
+ projectedPhysicsTimestampMs: number;
33
+ projectedObservedTimestampMs: number;
34
+ sourceSampleIds: readonly string[];
35
+ discreteStateSourceSampleId: string;
36
+ discontinuityToken: string;
37
+ bodyTransforms: readonly BodyTransform[];
38
+ jointAngles: Readonly<Record<string, number>>;
39
+ centerOfMass: BodyTransform['position'] | null;
40
+ metrics: ViewerTemporalProjectionMetrics;
41
+ bufferSize: number;
42
+ }
43
+ export interface ViewerTemporalProjectionStatus {
44
+ mode: ViewerTemporalProjectionMode;
45
+ state: ViewerTemporalProjectionFrame['state'] | 'empty';
46
+ fallbackReason: ViewerTemporalProjectionFallbackReason;
47
+ sourceSampleIds: readonly string[];
48
+ sampleAgeMs: number;
49
+ projectionLatencyMs: number;
50
+ interpolationAlpha: number;
51
+ bufferSize: number;
52
+ }
53
+ export declare class ViewerTemporalProjectionBuffer {
54
+ private readonly config;
55
+ private samples;
56
+ private mode;
57
+ private pendingFallbackReason;
58
+ private status;
59
+ constructor(config?: Partial<ViewerTemporalProjectionConfig>);
60
+ setMode(mode: ViewerTemporalProjectionMode): void;
61
+ getMode(): ViewerTemporalProjectionMode;
62
+ getStatus(): ViewerTemporalProjectionStatus;
63
+ getConfig(): ViewerTemporalProjectionConfig;
64
+ reset(reason?: ViewerTemporalProjectionFallbackReason): void;
65
+ ingest(sample: ViewerTemporalProjectionSample): boolean;
66
+ project(renderTimestampMs: number): ViewerTemporalProjectionFrame | null;
67
+ private createRawFrame;
68
+ }
69
+ export declare function interpolateJointAngle(previous: number, next: number, alpha: number): number;
70
+ export declare function interpolateQuaternion(previous: BodyTransform['rotation'], next: BodyTransform['rotation'], alpha: number): BodyTransform['rotation'];
71
+ //# sourceMappingURL=TemporalProjectionModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemporalProjectionModel.d.ts","sourceRoot":"","sources":["../../src/renderer/TemporalProjectionModel.ts"],"names":[],"mappings":"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"}