@konitif/viewer-3d 0.285.5 → 0.285.6

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/README.md CHANGED
@@ -44,6 +44,13 @@ const scene = createViewer3DSceneSnapshot({
44
44
  Import `@konitif/viewer-3d/renderer` only when a Three.js renderer and its
45
45
  explicit providers are required.
46
46
 
47
+ The renderer's `setIncarnationMaterialProjection(target, projection)` tunes
48
+ standard/physical materials independently for `simulated` or `observed` visual
49
+ incarnations. Scales are applied from the captured material baseline, so repeated
50
+ updates do not accumulate. The observed clone never changes the source mesh.
51
+ Color/opacity remain owned by comparison appearance. These are visual settings,
52
+ not robot commands, measured material properties or evidence of emitted light.
53
+
47
54
  ## Public entry points
48
55
 
49
56
  | Entry | Purpose |
@@ -65,6 +72,39 @@ import { resolveViewerOrientationGizmoTransform } from '@konitif/viewer-3d/orien
65
72
  const transform = resolveViewerOrientationGizmoTransform({ x: 0, y: 0, z: 0, w: 1 });
66
73
  ```
67
74
 
75
+ ## Observed pose playback
76
+
77
+ The observed robot's interpolated presentation uses a bounded buffer with a
78
+ 450 ms visual delay. It interpolates only between admitted poses;
79
+ it never changes telemetry, predicts a future motion or drives the robot.
80
+ On buffer underrun it holds the last known pose rather than inventing motion.
81
+ Hosts may explicitly declare `sourceClock: 'monotonic'` when admitting a pose.
82
+ The buffer then preserves source intervals through receipt bursts, mapping
83
+ elapsed source time to the first receipt without comparing clock epochs.
84
+ Without that guarantee it uses receipt intervals. Session changes, invalid
85
+ samples and timeline gaps over 500 ms reset its history.
86
+ The raw presentation mode remains immediate. This delay does not apply to LED
87
+ observations or other sensor readings.
88
+
89
+ Hosts may author independent `supportDefinition.soleStabilizationChains` and
90
+ set `setObservedRobotSoleStabilizationStrength(0..1)` (default: disabled).
91
+ This is an inferred geometric presentation constraint, not measured contact
92
+ or simulated friction. It corrects only rendered articulated joints, within
93
+ authored limits and 0.04 radians of each admitted pose. A lifted sole or more
94
+ than 12 mm horizontal drift releases its anchor; session changes, disabling,
95
+ raw playback and timeline gaps discard anchors. Source observations and
96
+ hardware commands are never modified.
97
+ Eligible soles are constrained to a common lowest visible surface before root
98
+ grounding. Cached convex vertices give exact directional support of rigid
99
+ foot meshes, rather than the empty corners of a rotated bounding box.
100
+ Lifted or released feet are not pulled back into the contact plane.
101
+
102
+ Buffered poses use shape-preserving Hermite interpolation between already
103
+ admitted neighbors, with continuous velocity at interior sample boundaries.
104
+ The curve stays inside each segment's angular endpoints and stops at missing
105
+ data; its provenance includes the neighboring observations used for tangents.
106
+ This does not add visual delay or extrapolate a future pose.
107
+
68
108
  ## Reference
69
109
 
70
110
  See [`reference/`](reference/) for the machine-readable capability catalog and
@@ -0,0 +1,16 @@
1
+ import { type Material } from 'three';
2
+ /** Visual-only projection; never a device command or a measured physical property. */
3
+ export interface Viewer3DIncarnationMaterialProjection {
4
+ enabled: boolean;
5
+ environmentIntensity: number;
6
+ roughnessScale: number;
7
+ metalnessScale: number;
8
+ clearcoatScale: number;
9
+ }
10
+ export declare function normalizeIncarnationMaterialProjection(value: Viewer3DIncarnationMaterialProjection): Viewer3DIncarnationMaterialProjection;
11
+ /** Baselines follow material lifetime and are never multiplied cumulatively. */
12
+ export declare class IncarnationMaterialProjector {
13
+ private readonly baselines;
14
+ apply(materials: Iterable<Material>, projection: Viewer3DIncarnationMaterialProjection): void;
15
+ }
16
+ //# sourceMappingURL=IncarnationMaterialProjection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IncarnationMaterialProjection.d.ts","sourceRoot":"","sources":["../../src/renderer/IncarnationMaterialProjection.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,QAAQ,EAAgB,MAAM,OAAO,CAAC;AAEhG,sFAAsF;AACtF,MAAM,WAAW,qCAAqC;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAaD,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,qCAAqC,GAAG,qCAAqC,CAM1I;AAED,gFAAgF;AAChF,qBAAa,4BAA4B;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiD;IAE3E,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,qCAAqC,GAAG,IAAI;CA6B9F"}
@@ -0,0 +1,45 @@
1
+ import { MeshPhysicalMaterial, MeshStandardMaterial } from 'three';
2
+ export function normalizeIncarnationMaterialProjection(value) {
3
+ for (const key of ['environmentIntensity', 'roughnessScale', 'metalnessScale', 'clearcoatScale']) {
4
+ if (!Number.isFinite(value[key]) || value[key] < 0)
5
+ throw new Error(`Invalid material projection ${key}`);
6
+ }
7
+ if (typeof value.enabled !== 'boolean')
8
+ throw new Error('Invalid material projection enabled');
9
+ return { ...value };
10
+ }
11
+ /** Baselines follow material lifetime and are never multiplied cumulatively. */
12
+ export class IncarnationMaterialProjector {
13
+ baselines = new WeakMap();
14
+ apply(materials, projection) {
15
+ const value = normalizeIncarnationMaterialProjection(projection);
16
+ for (const material of materials) {
17
+ if (!(material instanceof MeshStandardMaterial))
18
+ continue;
19
+ let baseline = this.baselines.get(material);
20
+ if (!baseline) {
21
+ baseline = {
22
+ envMap: material.envMap, environmentIntensity: material.envMapIntensity,
23
+ roughness: material.roughness, metalness: material.metalness,
24
+ clearcoat: material instanceof MeshPhysicalMaterial ? material.clearcoat : null,
25
+ iridescence: material instanceof MeshPhysicalMaterial ? material.iridescence : null,
26
+ sheen: material instanceof MeshPhysicalMaterial ? material.sheen : null,
27
+ transmission: material instanceof MeshPhysicalMaterial ? material.transmission : null
28
+ };
29
+ this.baselines.set(material, baseline);
30
+ }
31
+ material.envMap = value.enabled ? baseline.envMap : null;
32
+ material.envMapIntensity = value.enabled ? baseline.environmentIntensity * value.environmentIntensity : 0;
33
+ material.roughness = value.enabled ? Math.min(1, baseline.roughness * value.roughnessScale) : 1;
34
+ material.metalness = value.enabled ? Math.min(1, baseline.metalness * value.metalnessScale) : 0;
35
+ if (material instanceof MeshPhysicalMaterial) {
36
+ material.clearcoat = value.enabled ? Math.min(1, baseline.clearcoat * value.clearcoatScale) : 0;
37
+ material.iridescence = value.enabled ? baseline.iridescence : 0;
38
+ material.sheen = value.enabled ? baseline.sheen : 0;
39
+ material.transmission = value.enabled ? baseline.transmission : 0;
40
+ }
41
+ material.needsUpdate = true;
42
+ }
43
+ }
44
+ }
45
+ //# sourceMappingURL=IncarnationMaterialProjection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IncarnationMaterialProjection.js","sourceRoot":"","sources":["../../src/renderer/IncarnationMaterialProjection.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ export interface ObservedRobotPresentationSample {
4
4
  sampleId: string;
5
5
  connectionId: string;
6
6
  sourceObservedAtSeconds: number | null;
7
+ /** Explicit host guarantee: source timestamps are monotonic within this connection. */
8
+ sourceClock?: 'monotonic';
7
9
  receivedAtMs: number;
8
10
  jointValues: Readonly<Record<string, number>>;
9
11
  }
@@ -11,6 +13,7 @@ export interface ObservedRobotPresentationConfig {
11
13
  minimumTransitionMs: number;
12
14
  maximumTransitionMs: number;
13
15
  maximumSampleGapMs: number;
16
+ presentationDelayMs: number;
14
17
  }
15
18
  export interface ObservedRobotPresentationFrame {
16
19
  mode: ObservedRobotPresentationMode;
@@ -42,10 +45,12 @@ export interface ObservedRobotPresentationStatus {
42
45
  * telemetry samples. Source observations remain immutable and never inherit
43
46
  * values produced by this presentation buffer.
44
47
  *
45
- * The transition clock is the local receipt clock. The upstream
46
- * sourceObservedAtSeconds value is retained as provenance, but it is not used
47
- * for interpolation because its clock domain is not part of the observation
48
- * contract yet.
48
+ * Buffered playback trails the local receipt clock so both interpolation
49
+ * endpoints are already admitted observations, not predicted destinations.
50
+ * Without an explicit source-clock guarantee, timing uses local receipts.
51
+ * A declared monotonic source clock is mapped relatively onto the first local
52
+ * receipt, preserving sensor spacing through transport bursts. Clock epochs
53
+ * are never compared, and session changes discard the mapping.
49
54
  */
50
55
  export declare class ObservedRobotPresentationBuffer {
51
56
  private readonly config;
@@ -55,6 +60,10 @@ export declare class ObservedRobotPresentationBuffer {
55
60
  private transitionSourceSampleIds;
56
61
  private transitionStartedAtMs;
57
62
  private transitionDurationMs;
63
+ private receiptCadenceMs;
64
+ private bufferedSamples;
65
+ private previousBufferedSample;
66
+ private sourceClockAnchor;
58
67
  private pendingFallbackReason;
59
68
  private status;
60
69
  constructor(config?: Partial<ObservedRobotPresentationConfig>);
@@ -66,6 +75,8 @@ export declare class ObservedRobotPresentationBuffer {
66
75
  ingest(sample: ObservedRobotPresentationSample): boolean;
67
76
  project(renderedAtMs: number): ObservedRobotPresentationFrame | null;
68
77
  isActive(renderedAtMs: number): boolean;
78
+ private projectBuffered;
69
79
  private acceptFirstSample;
80
+ private resolvePresentationTime;
70
81
  }
71
82
  //# sourceMappingURL=ObservedRobotPresentationBuffer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ObservedRobotPresentationBuffer.d.ts","sourceRoot":"","sources":["../../src/renderer/ObservedRobotPresentationBuffer.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,6BAA6B,GAAG,KAAK,GAAG,cAAc,CAAC;AAEnE,MAAM,MAAM,uCAAuC,GAC/C,MAAM,GACN,sBAAsB,GACtB,gBAAgB,GAChB,YAAY,GACZ,eAAe,CAAC;AAEpB,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,+BAA+B;IAC9C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,6BAA6B,CAAC;IACpC,KAAK,EAAE,KAAK,GAAG,cAAc,GAAG,UAAU,CAAC;IAC3C,cAAc,EAAE,uCAAuC,CAAC;IACxD,UAAU,EAAE,cAAc,GAAG,uBAAuB,CAAC;IACrD,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,6BAA6B,CAAC;IACpC,KAAK,EAAE,8BAA8B,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACzD,cAAc,EAAE,uCAAuC,CAAC;IACxD,UAAU,EAAE,8BAA8B,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAChE,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;CACjB;AAmBD;;;;;;;;;GASG;AACH,qBAAa,+BAA+B;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,IAAI,CAAiD;IAC7D,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,qBAAqB,CAAwC;IACrE,OAAO,CAAC,yBAAyB,CAAyB;IAC1D,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,qBAAqB,CAAmE;IAChG,OAAO,CAAC,MAAM,CAAiD;gBAEnD,MAAM,GAAE,OAAO,CAAC,+BAA+B,CAAM;IAmBjE,OAAO,CAAC,IAAI,EAAE,6BAA6B,GAAG,IAAI;IAMlD,OAAO,IAAI,6BAA6B;IAIxC,SAAS,IAAI,+BAA+B;IAI5C,SAAS,IAAI,+BAA+B;IAI5C,KAAK,CAAC,MAAM,GAAE,uCAAyD,GAAG,IAAI;IAc9E,MAAM,CAAC,MAAM,EAAE,+BAA+B,GAAG,OAAO;IA4DxD,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,8BAA8B,GAAG,IAAI;IAmEpE,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAUvC,OAAO,CAAC,iBAAiB;CAY1B"}
1
+ {"version":3,"file":"ObservedRobotPresentationBuffer.d.ts","sourceRoot":"","sources":["../../src/renderer/ObservedRobotPresentationBuffer.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import { interpolateJointAngle } from './TemporalProjectionModel.js';
2
2
  const DEFAULT_CONFIG = {
3
3
  minimumTransitionMs: 16,
4
- maximumTransitionMs: 120,
5
- maximumSampleGapMs: 250
4
+ maximumTransitionMs: 200,
5
+ maximumSampleGapMs: 500,
6
+ presentationDelayMs: 450
6
7
  };
7
8
  const EMPTY_STATUS = {
8
9
  mode: 'interpolated',
@@ -19,10 +20,12 @@ const EMPTY_STATUS = {
19
20
  * telemetry samples. Source observations remain immutable and never inherit
20
21
  * values produced by this presentation buffer.
21
22
  *
22
- * The transition clock is the local receipt clock. The upstream
23
- * sourceObservedAtSeconds value is retained as provenance, but it is not used
24
- * for interpolation because its clock domain is not part of the observation
25
- * contract yet.
23
+ * Buffered playback trails the local receipt clock so both interpolation
24
+ * endpoints are already admitted observations, not predicted destinations.
25
+ * Without an explicit source-clock guarantee, timing uses local receipts.
26
+ * A declared monotonic source clock is mapped relatively onto the first local
27
+ * receipt, preserving sensor spacing through transport bursts. Clock epochs
28
+ * are never compared, and session changes discard the mapping.
26
29
  */
27
30
  export class ObservedRobotPresentationBuffer {
28
31
  config;
@@ -32,6 +35,10 @@ export class ObservedRobotPresentationBuffer {
32
35
  transitionSourceSampleIds = [];
33
36
  transitionStartedAtMs = 0;
34
37
  transitionDurationMs = 0;
38
+ receiptCadenceMs = [];
39
+ bufferedSamples = [];
40
+ previousBufferedSample = null;
41
+ sourceClockAnchor = null;
35
42
  pendingFallbackReason = 'insufficient_samples';
36
43
  status = EMPTY_STATUS;
37
44
  constructor(config = {}) {
@@ -40,6 +47,9 @@ export class ObservedRobotPresentationBuffer {
40
47
  this.config = {
41
48
  minimumTransitionMs,
42
49
  maximumTransitionMs,
50
+ presentationDelayMs: typeof config.presentationDelayMs === 'number' && Number.isFinite(config.presentationDelayMs)
51
+ ? clamp(config.presentationDelayMs, 0, 500)
52
+ : DEFAULT_CONFIG.presentationDelayMs,
43
53
  maximumSampleGapMs: Math.max(maximumTransitionMs, finitePositive(config.maximumSampleGapMs, DEFAULT_CONFIG.maximumSampleGapMs))
44
54
  };
45
55
  }
@@ -64,6 +74,10 @@ export class ObservedRobotPresentationBuffer {
64
74
  this.transitionSourceSampleIds = [];
65
75
  this.transitionStartedAtMs = 0;
66
76
  this.transitionDurationMs = 0;
77
+ this.receiptCadenceMs = [];
78
+ this.bufferedSamples = [];
79
+ this.previousBufferedSample = null;
80
+ this.sourceClockAnchor = null;
67
81
  this.pendingFallbackReason = reason;
68
82
  this.status = {
69
83
  ...EMPTY_STATUS,
@@ -97,10 +111,34 @@ export class ObservedRobotPresentationBuffer {
97
111
  this.acceptFirstSample(normalized, 'invalid_sample');
98
112
  return true;
99
113
  }
100
- if (sampleGapMs > this.config.maximumSampleGapMs) {
114
+ const sourceTimed = previous.sourceClock === 'monotonic' && normalized.sourceClock === 'monotonic' &&
115
+ previous.sourceObservedAtSeconds !== null && normalized.sourceObservedAtSeconds !== null;
116
+ const sourceGapMs = sourceTimed
117
+ ? (normalized.sourceObservedAtSeconds - previous.sourceObservedAtSeconds) * 1000 : sampleGapMs;
118
+ if (sourceTimed && sourceGapMs <= 0) {
119
+ this.reset('invalid_sample');
120
+ this.acceptFirstSample(normalized, 'invalid_sample');
121
+ return true;
122
+ }
123
+ if (previous.sourceClock !== normalized.sourceClock || sourceGapMs > this.config.maximumSampleGapMs) {
101
124
  this.acceptFirstSample(normalized, 'sample_gap');
102
125
  return true;
103
126
  }
127
+ if (this.mode === 'interpolated' && this.config.presentationDelayMs > 0) {
128
+ const presentationAtMs = this.resolvePresentationTime(normalized);
129
+ // Undeclared receipt-clock bursts cannot provide distinct timing.
130
+ // Source-clock bursts retain every distinct admitted pose.
131
+ if (this.bufferedSamples.at(-1)?.presentationAtMs === presentationAtMs)
132
+ this.bufferedSamples.pop();
133
+ this.bufferedSamples.push({ ...normalized, presentationAtMs });
134
+ if (this.bufferedSamples.length > 64) {
135
+ this.previousBufferedSample = this.bufferedSamples[this.bufferedSamples.length - 65];
136
+ }
137
+ this.bufferedSamples = this.bufferedSamples.slice(-64);
138
+ this.latestSample = normalized;
139
+ this.pendingFallbackReason = 'none';
140
+ return true;
141
+ }
104
142
  const currentFrame = this.project(normalized.receivedAtMs);
105
143
  this.transitionStartValues = Object.fromEntries(Object.entries(normalized.jointValues).map(([jointName, nextValue]) => [
106
144
  jointName,
@@ -109,7 +147,19 @@ export class ObservedRobotPresentationBuffer {
109
147
  this.transitionSourceSampleIds = uniqueTail([...(currentFrame?.sourceSampleIds ?? [previous.sampleId]), normalized.sampleId], 3);
110
148
  this.latestSample = normalized;
111
149
  this.transitionStartedAtMs = normalized.receivedAtMs;
112
- this.transitionDurationMs = clamp(sampleGapMs, this.config.minimumTransitionMs, this.config.maximumTransitionMs);
150
+ // A transport burst is not a new sensor cadence: keep the recent cadence
151
+ // instead of turning several queued observations into near-instant jumps.
152
+ if (sampleGapMs >= this.config.minimumTransitionMs) {
153
+ this.receiptCadenceMs = [...this.receiptCadenceMs, sampleGapMs].slice(-5);
154
+ }
155
+ const sortedCadence = [...this.receiptCadenceMs].sort((left, right) => left - right);
156
+ const middle = Math.floor(sortedCadence.length / 2);
157
+ const cadenceMs = sortedCadence.length === 0
158
+ ? sampleGapMs
159
+ : sortedCadence.length % 2 === 1
160
+ ? sortedCadence[middle]
161
+ : (sortedCadence[middle - 1] + sortedCadence[middle]) / 2;
162
+ this.transitionDurationMs = clamp(cadenceMs, this.config.minimumTransitionMs, this.config.maximumTransitionMs);
113
163
  this.pendingFallbackReason = 'none';
114
164
  return true;
115
165
  }
@@ -123,6 +173,9 @@ export class ObservedRobotPresentationBuffer {
123
173
  };
124
174
  return null;
125
175
  }
176
+ if (this.mode === 'interpolated' && this.config.presentationDelayMs > 0) {
177
+ return this.projectBuffered(renderedAtMs);
178
+ }
126
179
  if (this.mode === 'raw' || this.transitionDurationMs <= 0) {
127
180
  const fallbackReason = this.mode === 'raw' ? 'none' : this.pendingFallbackReason;
128
181
  const frame = {
@@ -167,25 +220,78 @@ export class ObservedRobotPresentationBuffer {
167
220
  return frame;
168
221
  }
169
222
  isActive(renderedAtMs) {
223
+ if (this.mode === 'interpolated' && this.config.presentationDelayMs > 0) {
224
+ return Boolean(this.latestSample && this.bufferedSamples.length > 1 &&
225
+ Number.isFinite(renderedAtMs) &&
226
+ renderedAtMs - this.config.presentationDelayMs < this.bufferedSamples.at(-1).presentationAtMs);
227
+ }
170
228
  return Boolean(this.mode === 'interpolated' &&
171
229
  this.latestSample &&
172
230
  this.transitionDurationMs > 0 &&
173
231
  Number.isFinite(renderedAtMs) &&
174
232
  renderedAtMs < this.transitionStartedAtMs + this.transitionDurationMs);
175
233
  }
234
+ projectBuffered(renderedAtMs) {
235
+ const latest = this.latestSample;
236
+ const targetMs = renderedAtMs - this.config.presentationDelayMs;
237
+ while (this.bufferedSamples.length > 2 && this.bufferedSamples[1].presentationAtMs <= targetMs) {
238
+ this.previousBufferedSample = this.bufferedSamples.shift();
239
+ }
240
+ const left = this.bufferedSamples[0];
241
+ const right = this.bufferedSamples[1];
242
+ const latestTime = this.bufferedSamples.at(-1).presentationAtMs;
243
+ const hasSegment = Boolean(right && targetMs >= left.presentationAtMs && targetMs <= right.presentationAtMs);
244
+ const endpoint = targetMs < left.presentationAtMs ? left : latest;
245
+ const durationMs = hasSegment ? right.presentationAtMs - left.presentationAtMs : 0;
246
+ const alpha = hasSegment ? clamp((targetMs - left.presentationAtMs) / durationMs, 0, 1) : 1;
247
+ const active = this.isActive(renderedAtMs);
248
+ const previous = this.previousBufferedSample;
249
+ const following = this.bufferedSamples[2];
250
+ const frame = {
251
+ mode: this.mode,
252
+ state: hasSegment ? 'interpolated' : 'fallback',
253
+ fallbackReason: hasSegment ? 'none' : targetMs > latestTime ? 'sample_gap'
254
+ : this.pendingFallbackReason === 'none' ? 'insufficient_samples' : this.pendingFallbackReason,
255
+ provenance: hasSegment ? 'observed-interpolated' : 'observed-raw',
256
+ sourceSampleIds: hasSegment ? [previous, left, right, following].filter((sample) => Boolean(sample)).map(sample => sample.sampleId) : [endpoint.sampleId],
257
+ connectionId: latest.connectionId,
258
+ sourceObservedAtSeconds: hasSegment ? right.sourceObservedAtSeconds : endpoint.sourceObservedAtSeconds,
259
+ renderedAtMs,
260
+ latestReceivedAtMs: latest.receivedAtMs,
261
+ interpolationAlpha: alpha,
262
+ transitionDurationMs: durationMs,
263
+ active,
264
+ jointValues: hasSegment ? Object.fromEntries(Object.entries(right.jointValues).map(([name, value]) => [
265
+ name, interpolateBufferedJoint(left.jointValues[name] ?? value, value, alpha, durationMs, previous?.jointValues[name], previous ? left.presentationAtMs - previous.presentationAtMs : null, following?.jointValues[name], following ? following.presentationAtMs - right.presentationAtMs : null)
266
+ ])) : { ...endpoint.jointValues }
267
+ };
268
+ this.status = createStatus(frame);
269
+ return frame;
270
+ }
176
271
  acceptFirstSample(sample, fallbackReason) {
177
272
  this.latestSample = sample;
178
273
  this.transitionStartValues = { ...sample.jointValues };
179
274
  this.transitionSourceSampleIds = [sample.sampleId];
180
275
  this.transitionStartedAtMs = sample.receivedAtMs;
181
276
  this.transitionDurationMs = 0;
277
+ this.receiptCadenceMs = [];
278
+ this.sourceClockAnchor = sample.sourceClock === 'monotonic' && sample.sourceObservedAtSeconds !== null
279
+ ? { sourceSeconds: sample.sourceObservedAtSeconds, receiptMs: sample.receivedAtMs } : null;
280
+ this.bufferedSamples = [{ ...sample, presentationAtMs: sample.receivedAtMs }];
281
+ this.previousBufferedSample = null;
182
282
  this.pendingFallbackReason =
183
283
  fallbackReason === 'none' ? 'insufficient_samples' : fallbackReason;
184
284
  }
285
+ resolvePresentationTime(sample) {
286
+ return this.sourceClockAnchor && sample.sourceClock === 'monotonic' && sample.sourceObservedAtSeconds !== null
287
+ ? this.sourceClockAnchor.receiptMs + (sample.sourceObservedAtSeconds - this.sourceClockAnchor.sourceSeconds) * 1000
288
+ : sample.receivedAtMs;
289
+ }
185
290
  }
186
291
  function normalizeSample(sample) {
187
292
  if (!sample.sampleId ||
188
293
  !sample.connectionId ||
294
+ (sample.sourceClock === 'monotonic' && sample.sourceObservedAtSeconds === null) ||
189
295
  !Number.isFinite(sample.receivedAtMs) ||
190
296
  (sample.sourceObservedAtSeconds !== null && !Number.isFinite(sample.sourceObservedAtSeconds))) {
191
297
  return null;
@@ -223,4 +329,26 @@ function finitePositive(value, fallback) {
223
329
  function clamp(value, minimum, maximum) {
224
330
  return Math.min(maximum, Math.max(minimum, value));
225
331
  }
332
+ /** Shape-preserving Hermite interpolation using only admitted neighboring poses. */
333
+ function interpolateBufferedJoint(left, right, alpha, duration, previous, previousDuration, following, followingDuration) {
334
+ const delta = interpolateJointAngle(left, right, 1) - left;
335
+ const secant = delta / duration;
336
+ const tangent = (a, b, ha, hb) => {
337
+ if (a * b <= 0)
338
+ return 0;
339
+ const w1 = 2 * hb + ha;
340
+ const w2 = hb + 2 * ha;
341
+ return (w1 + w2) / (w1 / a + w2 / b);
342
+ };
343
+ const start = previous !== undefined && previousDuration !== null && previousDuration > 0
344
+ ? tangent((interpolateJointAngle(previous, left, 1) - previous) / previousDuration, secant, previousDuration, duration)
345
+ : secant;
346
+ const end = following !== undefined && followingDuration !== null && followingDuration > 0
347
+ ? tangent(secant, (interpolateJointAngle(right, following, 1) - right) / followingDuration, duration, followingDuration)
348
+ : secant;
349
+ const t2 = alpha * alpha;
350
+ const t3 = t2 * alpha;
351
+ const offset = (-2 * t3 + 3 * t2) * delta + (t3 - 2 * t2 + alpha) * duration * start + (t3 - t2) * duration * end;
352
+ return left + clamp(offset, Math.min(0, delta), Math.max(0, delta));
353
+ }
226
354
  //# sourceMappingURL=ObservedRobotPresentationBuffer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ObservedRobotPresentationBuffer.js","sourceRoot":"","sources":["../../src/renderer/ObservedRobotPresentationBuffer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ObservedRobotPresentationBuffer.js","sourceRoot":"","sources":["../../src/renderer/ObservedRobotPresentationBuffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ type Point = readonly [number, number, number];
2
+ type Rotation = readonly [number, number, number, number];
3
+ /** Geometric presentation anchors, not physical-contact observations. */
4
+ export declare class ObservedSoleAnchors {
5
+ private connectionId;
6
+ private anchors;
7
+ private released;
8
+ reset(): void;
9
+ resolve(connectionId: string, groups: readonly {
10
+ id: string;
11
+ position: Point;
12
+ eligible: boolean;
13
+ }[], strength: number): {
14
+ id: string;
15
+ target: Point;
16
+ inferred: true;
17
+ }[];
18
+ }
19
+ export interface SolePose {
20
+ position: Point;
21
+ orientation: Rotation;
22
+ supportMinimumY?: number;
23
+ }
24
+ /** Numerical IK of a rendered copy. The caller must never supply a hardware actuator. */
25
+ export declare function projectBoundedSoleCorrection(input: {
26
+ values: readonly number[];
27
+ limits: readonly (readonly [number, number])[];
28
+ targetPosition: Point;
29
+ targetOrientation: Rotation;
30
+ /** Optional lowest rendered sole point, in the same world frame as position. */
31
+ targetSupportMinimumY?: number;
32
+ evaluate(values: readonly number[]): SolePose;
33
+ }): {
34
+ values: number[];
35
+ residualMeters: number;
36
+ iterations: number;
37
+ inferred: true;
38
+ physicsAffected: false;
39
+ };
40
+ export {};
41
+ //# sourceMappingURL=ObservedSoleStabilization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObservedSoleStabilization.d.ts","sourceRoot":"","sources":["../../src/renderer/ObservedSoleStabilization.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/C,KAAK,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE1D,yEAAyE;AACzE,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAAqB;IACrC,KAAK,IAAI,IAAI;IAEb,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,GACnH;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,EAAE;CA2BlD;AAED,MAAM,WAAW,QAAQ;IAAG,QAAQ,EAAE,KAAK,CAAC;IAAC,WAAW,EAAE,QAAQ,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE;AAE9F,yFAAyF;AACzF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IAC/C,cAAc,EAAE,KAAK,CAAC;IACtB,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,gFAAgF;IAChF,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,CAAC;CAC/C,GAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,eAAe,EAAE,KAAK,CAAA;CAAE,CAyD3G"}