@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.
- package/LICENSE.md +21 -0
- package/README.md +34 -0
- package/dist/balanceFootprintDefinition.d.ts +7 -0
- package/dist/balanceFootprintDefinition.d.ts.map +1 -0
- package/dist/balanceFootprintDefinition.js +2 -0
- package/dist/balanceFootprintDefinition.js.map +1 -0
- package/dist/diagnosticContactDefinition.d.ts +7 -0
- package/dist/diagnosticContactDefinition.d.ts.map +1 -0
- package/dist/diagnosticContactDefinition.js +2 -0
- package/dist/diagnosticContactDefinition.js.map +1 -0
- package/dist/handTipDefinition.d.ts +13 -0
- package/dist/handTipDefinition.d.ts.map +1 -0
- package/dist/handTipDefinition.js +2 -0
- package/dist/handTipDefinition.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/jointHandleDefinition.d.ts +23 -0
- package/dist/jointHandleDefinition.d.ts.map +1 -0
- package/dist/jointHandleDefinition.js +2 -0
- package/dist/jointHandleDefinition.js.map +1 -0
- package/dist/ledPlacementDefinition.d.ts +38 -0
- package/dist/ledPlacementDefinition.d.ts.map +1 -0
- package/dist/ledPlacementDefinition.js +2 -0
- package/dist/ledPlacementDefinition.js.map +1 -0
- package/dist/ledReferenceFrame.d.ts +26 -0
- package/dist/ledReferenceFrame.d.ts.map +1 -0
- package/dist/ledReferenceFrame.js +2 -0
- package/dist/ledReferenceFrame.js.map +1 -0
- package/dist/ledRingCalibration.d.ts +22 -0
- package/dist/ledRingCalibration.d.ts.map +1 -0
- package/dist/ledRingCalibration.js +2 -0
- package/dist/ledRingCalibration.js.map +1 -0
- package/dist/renderer/AnimationLoop.d.ts +18 -0
- package/dist/renderer/AnimationLoop.d.ts.map +1 -0
- package/dist/renderer/AnimationLoop.js +39 -0
- package/dist/renderer/AnimationLoop.js.map +1 -0
- package/dist/renderer/CameraController.d.ts +154 -0
- package/dist/renderer/CameraController.d.ts.map +1 -0
- package/dist/renderer/CameraController.js +469 -0
- package/dist/renderer/CameraController.js.map +1 -0
- package/dist/renderer/NavigationPhysicsObservation.d.ts +25 -0
- package/dist/renderer/NavigationPhysicsObservation.d.ts.map +1 -0
- package/dist/renderer/NavigationPhysicsObservation.js +81 -0
- package/dist/renderer/NavigationPhysicsObservation.js.map +1 -0
- package/dist/renderer/ObservedRobotGroundingProjection.d.ts +206 -0
- package/dist/renderer/ObservedRobotGroundingProjection.d.ts.map +1 -0
- package/dist/renderer/ObservedRobotGroundingProjection.js +522 -0
- package/dist/renderer/ObservedRobotGroundingProjection.js.map +1 -0
- package/dist/renderer/ObservedRobotPresentationBuffer.d.ts +71 -0
- package/dist/renderer/ObservedRobotPresentationBuffer.d.ts.map +1 -0
- package/dist/renderer/ObservedRobotPresentationBuffer.js +226 -0
- package/dist/renderer/ObservedRobotPresentationBuffer.js.map +1 -0
- package/dist/renderer/PerformanceMonitor.d.ts +38 -0
- package/dist/renderer/PerformanceMonitor.d.ts.map +1 -0
- package/dist/renderer/PerformanceMonitor.js +84 -0
- package/dist/renderer/PerformanceMonitor.js.map +1 -0
- package/dist/renderer/ProjectileInteraction.d.ts +57 -0
- package/dist/renderer/ProjectileInteraction.d.ts.map +1 -0
- package/dist/renderer/ProjectileInteraction.js +152 -0
- package/dist/renderer/ProjectileInteraction.js.map +1 -0
- package/dist/renderer/RobotComparisonVisibilityTransition.d.ts +12 -0
- package/dist/renderer/RobotComparisonVisibilityTransition.d.ts.map +1 -0
- package/dist/renderer/RobotComparisonVisibilityTransition.js +23 -0
- package/dist/renderer/RobotComparisonVisibilityTransition.js.map +1 -0
- package/dist/renderer/RobotPoseTransition.d.ts +34 -0
- package/dist/renderer/RobotPoseTransition.d.ts.map +1 -0
- package/dist/renderer/RobotPoseTransition.js +66 -0
- package/dist/renderer/RobotPoseTransition.js.map +1 -0
- package/dist/renderer/RobotPostureCompensation.d.ts +31 -0
- package/dist/renderer/RobotPostureCompensation.d.ts.map +1 -0
- package/dist/renderer/RobotPostureCompensation.js +60 -0
- package/dist/renderer/RobotPostureCompensation.js.map +1 -0
- package/dist/renderer/SelectionController.d.ts +24 -0
- package/dist/renderer/SelectionController.d.ts.map +1 -0
- package/dist/renderer/SelectionController.js +68 -0
- package/dist/renderer/SelectionController.js.map +1 -0
- package/dist/renderer/TemporalProjectionModel.d.ts +71 -0
- package/dist/renderer/TemporalProjectionModel.d.ts.map +1 -0
- package/dist/renderer/TemporalProjectionModel.js +363 -0
- package/dist/renderer/TemporalProjectionModel.js.map +1 -0
- package/dist/renderer/Viewer3DRenderer.d.ts +1137 -0
- package/dist/renderer/Viewer3DRenderer.d.ts.map +1 -0
- package/dist/renderer/Viewer3DRenderer.js +10655 -0
- package/dist/renderer/Viewer3DRenderer.js.map +1 -0
- package/dist/renderer/ViewerExperimentCollector.d.ts +27 -0
- package/dist/renderer/ViewerExperimentCollector.d.ts.map +1 -0
- package/dist/renderer/ViewerExperimentCollector.js +2 -0
- package/dist/renderer/ViewerExperimentCollector.js.map +1 -0
- package/dist/renderer/ViewerExperimentPort.d.ts +19 -0
- package/dist/renderer/ViewerExperimentPort.d.ts.map +1 -0
- package/dist/renderer/ViewerExperimentPort.js +2 -0
- package/dist/renderer/ViewerExperimentPort.js.map +1 -0
- package/dist/renderer/ViewerFrameSignals.d.ts +13 -0
- package/dist/renderer/ViewerFrameSignals.d.ts.map +1 -0
- package/dist/renderer/ViewerFrameSignals.js +73 -0
- package/dist/renderer/ViewerFrameSignals.js.map +1 -0
- package/dist/renderer/ViewerHistoryData.d.ts +59 -0
- package/dist/renderer/ViewerHistoryData.d.ts.map +1 -0
- package/dist/renderer/ViewerHistoryData.js +2 -0
- package/dist/renderer/ViewerHistoryData.js.map +1 -0
- package/dist/renderer/ViewerHistoryPort.d.ts +15 -0
- package/dist/renderer/ViewerHistoryPort.d.ts.map +1 -0
- package/dist/renderer/ViewerHistoryPort.js +2 -0
- package/dist/renderer/ViewerHistoryPort.js.map +1 -0
- package/dist/renderer/ViewerIncarnationHealth.d.ts +14 -0
- package/dist/renderer/ViewerIncarnationHealth.d.ts.map +1 -0
- package/dist/renderer/ViewerIncarnationHealth.js +13 -0
- package/dist/renderer/ViewerIncarnationHealth.js.map +1 -0
- package/dist/renderer/ViewerInputBindings.d.ts +19 -0
- package/dist/renderer/ViewerInputBindings.d.ts.map +1 -0
- package/dist/renderer/ViewerInputBindings.js +44 -0
- package/dist/renderer/ViewerInputBindings.js.map +1 -0
- package/dist/renderer/ViewerMetadata.d.ts +11 -0
- package/dist/renderer/ViewerMetadata.d.ts.map +1 -0
- package/dist/renderer/ViewerMetadata.js +8 -0
- package/dist/renderer/ViewerMetadata.js.map +1 -0
- package/dist/renderer/ViewerPlaybackCompletionPolicy.d.ts +29 -0
- package/dist/renderer/ViewerPlaybackCompletionPolicy.d.ts.map +1 -0
- package/dist/renderer/ViewerPlaybackCompletionPolicy.js +27 -0
- package/dist/renderer/ViewerPlaybackCompletionPolicy.js.map +1 -0
- package/dist/renderer/ViewerProjectileParticleRenderer.d.ts +21 -0
- package/dist/renderer/ViewerProjectileParticleRenderer.d.ts.map +1 -0
- package/dist/renderer/ViewerProjectileParticleRenderer.js +134 -0
- package/dist/renderer/ViewerProjectileParticleRenderer.js.map +1 -0
- package/dist/renderer/ViewerResizePresentation.d.ts +16 -0
- package/dist/renderer/ViewerResizePresentation.d.ts.map +1 -0
- package/dist/renderer/ViewerResizePresentation.js +12 -0
- package/dist/renderer/ViewerResizePresentation.js.map +1 -0
- package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.d.ts +34 -0
- package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.d.ts.map +1 -0
- package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.js +130 -0
- package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.js.map +1 -0
- package/dist/renderer/ViewerTemporalScheduler.d.ts +6 -0
- package/dist/renderer/ViewerTemporalScheduler.d.ts.map +1 -0
- package/dist/renderer/ViewerTemporalScheduler.js +12 -0
- package/dist/renderer/ViewerTemporalScheduler.js.map +1 -0
- package/dist/renderer/VisualGroundLayer.d.ts +110 -0
- package/dist/renderer/VisualGroundLayer.d.ts.map +1 -0
- package/dist/renderer/VisualGroundLayer.js +576 -0
- package/dist/renderer/VisualGroundLayer.js.map +1 -0
- package/dist/renderer/displayFrameRate.d.ts +5 -0
- package/dist/renderer/displayFrameRate.d.ts.map +1 -0
- package/dist/renderer/displayFrameRate.js +23 -0
- package/dist/renderer/displayFrameRate.js.map +1 -0
- package/dist/renderer/index.d.ts +20 -0
- package/dist/renderer/index.d.ts.map +1 -0
- package/dist/renderer/index.js +18 -0
- package/dist/renderer/index.js.map +1 -0
- package/dist/renderer/physics/ViewerJointResolution.d.ts +19 -0
- package/dist/renderer/physics/ViewerJointResolution.d.ts.map +1 -0
- package/dist/renderer/physics/ViewerJointResolution.js +24 -0
- package/dist/renderer/physics/ViewerJointResolution.js.map +1 -0
- package/dist/renderer/physics/ViewerPhysicsFrame.d.ts +9 -0
- package/dist/renderer/physics/ViewerPhysicsFrame.d.ts.map +1 -0
- package/dist/renderer/physics/ViewerPhysicsFrame.js +26 -0
- package/dist/renderer/physics/ViewerPhysicsFrame.js.map +1 -0
- package/dist/renderer/physics/ViewerPhysicsJointMapping.d.ts +11 -0
- package/dist/renderer/physics/ViewerPhysicsJointMapping.d.ts.map +1 -0
- package/dist/renderer/physics/ViewerPhysicsJointMapping.js +20 -0
- package/dist/renderer/physics/ViewerPhysicsJointMapping.js.map +1 -0
- package/dist/renderer/physics/ViewerPhysicsMetadata.d.ts +20 -0
- package/dist/renderer/physics/ViewerPhysicsMetadata.d.ts.map +1 -0
- package/dist/renderer/physics/ViewerPhysicsMetadata.js +49 -0
- package/dist/renderer/physics/ViewerPhysicsMetadata.js.map +1 -0
- package/dist/renderer/robotViewerMotion.d.ts +49 -0
- package/dist/renderer/robotViewerMotion.d.ts.map +1 -0
- package/dist/renderer/robotViewerMotion.js +253 -0
- package/dist/renderer/robotViewerMotion.js.map +1 -0
- package/dist/supportDefinition.d.ts +11 -0
- package/dist/supportDefinition.d.ts.map +1 -0
- package/dist/supportDefinition.js +2 -0
- package/dist/supportDefinition.js.map +1 -0
- 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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"}
|