@pollen-robotics/reachy-mini-sdk 1.13.0-dev.0.main.24f74f0 → 1.13.0-dev.0.main.55a68f6

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.
@@ -118,6 +118,7 @@ Pick the reference closest to your needs and clone its repo from Hugging Face:
118
118
  | [`pollen-robotics/emotions`](https://huggingface.co/spaces/pollen-robotics/emotions) | React 19 + MUI 7 + Vite | UI-rich app with rich components / theming |
119
119
  | [`pollen-robotics/telepresence`](https://huggingface.co/spaces/pollen-robotics/telepresence) | React 19 + MUI 7 + Vite | App with camera / media streams |
120
120
  | [`pollen-robotics/sdk-js-demo-app`](https://huggingface.co/spaces/pollen-robotics/sdk-js-demo-app) | Vanilla TS + Vite | Tour of every SDK primitive |
121
+ | [`pollen-robotics/reachy-mini-js-template`](https://huggingface.co/spaces/pollen-robotics/reachy-mini-js-template) | **Bare HTML, no build** | Smallest correct template; see §11.5 |
121
122
 
122
123
  ```bash
123
124
  # Example: start from the vanilla TS template
@@ -337,7 +338,7 @@ mountHost({
337
338
 
338
339
  **Required**: `appName`. Everything else has sensible defaults.
339
340
 
340
- **Return**: `{ dispose(): void }` - call to unmount cleanly. You
341
+ **Return**: `{ unmount(): void }` - call it to tear the shell down. You
341
342
  usually never need this; the page lifecycle handles it.
342
343
 
343
344
  ---
@@ -900,6 +901,10 @@ one-off prototype, you can deploy a single `index.html` that imports
900
901
  the SDK from a CDN. No `package.json`, no `app_build_command`, no
901
902
  build step. HF serves the repo root as-is.
902
903
 
904
+ Start from [`pollen-robotics/reachy-mini-js-template`](https://huggingface.co/spaces/pollen-robotics/reachy-mini-js-template): duplicate the
905
+ Space and edit its `index.html` — it already follows every rule in this
906
+ guide and shows the common recipes in a few lines each.
907
+
903
908
  **Trade-off summary**
904
909
 
905
910
  | | Bundled (default, §11.1-§11.4) | Bare HTML + CDN |
@@ -29,12 +29,14 @@ export interface SafelyReturnOptions {
29
29
  * Smooth, distance-scaled return to a target pose. Routes through the
30
30
  * existing SDK primitives:
31
31
  *
32
- * 1. `reachy.setMotorMode("enabled")` — safe by construction since
32
+ * 1. `reachy.stopHeadTracking()` — at weight 1 daemon-side face
33
+ * tracking overrides every app head target, this goto included.
34
+ * 2. `reachy.setMotorMode("enabled")` — safe by construction since
33
35
  * daemon PR #1138 (the daemon pins all targets to the present
34
36
  * pose before flipping torque on).
35
- * 2. Read `reachy.robotState` for the current pose snapshot.
36
- * 3. Compute `scaledDuration(current, target, preset)`.
37
- * 4. Call `reachy.gotoTarget({ ...target, duration })`.
37
+ * 3. Read `reachy.robotState` for the current pose snapshot.
38
+ * 4. Compute `scaledDuration(current, target, preset)`.
39
+ * 5. Call `reachy.gotoTarget({ ...target, duration })`.
38
40
  *
39
41
  * Returns **synchronously after dispatching** the goto — does NOT
40
42
  * await completion. Callers who want to await the move should
@@ -1 +1 @@
1
- {"version":3,"file":"safe-return.d.ts","sourceRoot":"","sources":["../../animation/safe-return.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAGH,KAAK,oBAAoB,EAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAChC,mDAAmD;IACnD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,kBAAkB,CAC9B,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,mBAAwB,GAClC,oBAAoB,CA+BtB;AAED,4CAA4C;AAC5C,MAAM,WAAW,6BAA8B,SAAQ,mBAAmB;IACtE;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,6BAAkC,GAC5C,IAAI,CAoBN"}
1
+ {"version":3,"file":"safe-return.d.ts","sourceRoot":"","sources":["../../animation/safe-return.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAGH,KAAK,oBAAoB,EAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAChC,mDAAmD;IACnD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,kBAAkB,CAC9B,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,mBAAwB,GAClC,oBAAoB,CAqCtB;AAED,4CAA4C;AAC5C,MAAM,WAAW,6BAA8B,SAAQ,mBAAmB;IACtE;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,6BAAkC,GAC5C,IAAI,CAoBN"}
@@ -20,12 +20,14 @@ import { scaledDuration } from "./distance.js";
20
20
  * Smooth, distance-scaled return to a target pose. Routes through the
21
21
  * existing SDK primitives:
22
22
  *
23
- * 1. `reachy.setMotorMode("enabled")` — safe by construction since
23
+ * 1. `reachy.stopHeadTracking()` — at weight 1 daemon-side face
24
+ * tracking overrides every app head target, this goto included.
25
+ * 2. `reachy.setMotorMode("enabled")` — safe by construction since
24
26
  * daemon PR #1138 (the daemon pins all targets to the present
25
27
  * pose before flipping torque on).
26
- * 2. Read `reachy.robotState` for the current pose snapshot.
27
- * 3. Compute `scaledDuration(current, target, preset)`.
28
- * 4. Call `reachy.gotoTarget({ ...target, duration })`.
28
+ * 3. Read `reachy.robotState` for the current pose snapshot.
29
+ * 4. Compute `scaledDuration(current, target, preset)`.
30
+ * 5. Call `reachy.gotoTarget({ ...target, duration })`.
29
31
  *
30
32
  * Returns **synchronously after dispatching** the goto — does NOT
31
33
  * await completion. Callers who want to await the move should
@@ -52,6 +54,12 @@ import { scaledDuration } from "./distance.js";
52
54
  export function safelyReturnToPose(reachy, options = {}) {
53
55
  const target = options.target ?? INIT_POSE;
54
56
  const preset = options.preset ?? DEFAULT_SCALED_DURATION_PRESET;
57
+ try {
58
+ reachy.stopHeadTracking();
59
+ }
60
+ catch {
61
+ // Data channel closed; nothing is tracking then.
62
+ }
55
63
  try {
56
64
  reachy.setMotorMode("enabled");
57
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"safe-return.js","sourceRoot":"","sources":["../../animation/safe-return.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EACH,8BAA8B,EAC9B,SAAS,GAEZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAA6B,MAAM,eAAe,CAAC;AAW1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,kBAAkB,CAC9B,MAA0B,EAC1B,UAA+B,EAAE;IAEjC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,8BAA8B,CAAC;IAEhE,IAAI,CAAC;QACD,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACL,8DAA8D;QAC9D,oDAAoD;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,UAAyB,CAAC;IACjD,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAErD,MAAM,IAAI,GAAoD;QAC1D,QAAQ,EAAE,IAAI,CAAC,QAAQ;KAC1B,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC/D,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEnE,IAAI,CAAC;QACD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACL,6DAA6D;QAC7D,4DAA4D;IAChE,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAaD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,sBAAsB,CAClC,MAA0B,EAC1B,UAAyC,EAAE;IAE3C,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC;IAC5D,mEAAmE;IACnE,sEAAsE;IACtE,sEAAsE;IACtE,sEAAsE;IACtE,0EAA0E;IAC1E,2DAA2D;IAC3D,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,IAAI,GAAG,GAAS,EAAE;QACpB,IAAI,YAAY;YAAE,OAAO;QACzB,YAAY,GAAG,IAAI,CAAC;QACpB,IAAI,iBAAiB,IAAI,MAAM,CAAC,KAAK,KAAK,WAAW;YAAE,OAAO;QAC9D,kBAAkB,CAAC,MAAM,EAAE;YACvB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;SACzB,CAAC,CAAC;IACP,CAAC,CAAC;IACF,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"safe-return.js","sourceRoot":"","sources":["../../animation/safe-return.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EACH,8BAA8B,EAC9B,SAAS,GAEZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAA6B,MAAM,eAAe,CAAC;AAW1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,kBAAkB,CAC9B,MAA0B,EAC1B,UAA+B,EAAE;IAEjC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,8BAA8B,CAAC;IAEhE,IAAI,CAAC;QACD,MAAM,CAAC,gBAAgB,EAAE,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACL,iDAAiD;IACrD,CAAC;IAED,IAAI,CAAC;QACD,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACL,8DAA8D;QAC9D,oDAAoD;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,UAAyB,CAAC;IACjD,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAErD,MAAM,IAAI,GAAoD;QAC1D,QAAQ,EAAE,IAAI,CAAC,QAAQ;KAC1B,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC/D,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEnE,IAAI,CAAC;QACD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACL,6DAA6D;QAC7D,4DAA4D;IAChE,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAaD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,sBAAsB,CAClC,MAA0B,EAC1B,UAAyC,EAAE;IAE3C,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC;IAC5D,mEAAmE;IACnE,sEAAsE;IACtE,sEAAsE;IACtE,sEAAsE;IACtE,0EAA0E;IAC1E,2DAA2D;IAC3D,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,IAAI,GAAG,GAAS,EAAE;QACpB,IAAI,YAAY;YAAE,OAAO;QACzB,YAAY,GAAG,IAAI,CAAC;QACpB,IAAI,iBAAiB,IAAI,MAAM,CAAC,KAAK,KAAK,WAAW;YAAE,OAAO;QAC9D,kBAAkB,CAAC,MAAM,EAAE;YACvB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;SACzB,CAAC,CAAC;IACP,CAAC,CAAC;IACF,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=app-dx.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-dx.test.d.ts","sourceRoot":"","sources":["../../lib/app-dx.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Small DX contracts that fresh app authors (human or agent) kept tripping on:
3
+ * - `matrixToRpy` must accept the flat `number[16]` head that `state` carries;
4
+ * - app audio reaches the robot speaker through a public method, not `_pc`;
5
+ * - `safelyReturnToPose` stops head tracking first, since tracking at
6
+ * weight 1 overrides the return-to-rest goto.
7
+ */
8
+ import { describe, expect, it, vi } from 'vitest';
9
+ import { safelyReturnToPose } from '../animation/safe-return.js';
10
+ import { matrixToRpy, rpyToMatrix } from './math.js';
11
+ import { ReachyMini } from './reachy-mini.js';
12
+ describe('matrixToRpy', () => {
13
+ it('gives the same angles for the nested and the flat form', () => {
14
+ const nested = rpyToMatrix(5, -10, 20);
15
+ const fromNested = matrixToRpy(nested);
16
+ const fromFlat = matrixToRpy(nested.flat());
17
+ expect(fromFlat.roll).toBeCloseTo(fromNested.roll);
18
+ expect(fromFlat.pitch).toBeCloseTo(fromNested.pitch);
19
+ expect(fromFlat.yaw).toBeCloseTo(fromNested.yaw);
20
+ expect(fromNested.yaw).toBeCloseTo(20);
21
+ });
22
+ });
23
+ function fakeTrack(kind, id = kind) {
24
+ return { kind, id };
25
+ }
26
+ function withAudioSender(r) {
27
+ const replaceTrack = vi.fn(async () => { });
28
+ const internals = r;
29
+ const placeholder = fakeTrack('audio', 'placeholder');
30
+ internals._micStream = { getAudioTracks: () => [placeholder] };
31
+ internals._micSupported = true;
32
+ internals._pc = {
33
+ getTransceivers: () => [
34
+ { receiver: { track: { kind: 'video' } }, sender: { replaceTrack: vi.fn() } },
35
+ { receiver: { track: { kind: 'audio' } }, sender: { replaceTrack } },
36
+ ],
37
+ };
38
+ return { replaceTrack, placeholder };
39
+ }
40
+ describe('setOutgoingAudioTrack', () => {
41
+ it('puts the app track on the audio sender', async () => {
42
+ const r = new ReachyMini();
43
+ const { replaceTrack } = withAudioSender(r);
44
+ const tts = fakeTrack('audio', 'tts');
45
+ await expect(r.setOutgoingAudioTrack(tts)).resolves.toBe(true);
46
+ expect(replaceTrack).toHaveBeenCalledWith(tts);
47
+ });
48
+ it('null goes back to the silent placeholder', async () => {
49
+ const r = new ReachyMini();
50
+ const { replaceTrack, placeholder } = withAudioSender(r);
51
+ await r.setOutgoingAudioTrack(null);
52
+ expect(replaceTrack).toHaveBeenLastCalledWith(placeholder);
53
+ });
54
+ it('resolves false before a session exists, without throwing', async () => {
55
+ const r = new ReachyMini();
56
+ await expect(r.setOutgoingAudioTrack(fakeTrack('audio'))).resolves.toBe(false);
57
+ });
58
+ it('resolves false when the robot did not offer two-way audio', async () => {
59
+ const r = new ReachyMini();
60
+ const { replaceTrack } = withAudioSender(r);
61
+ r._micSupported = false;
62
+ await expect(r.setOutgoingAudioTrack(fakeTrack('audio'))).resolves.toBe(false);
63
+ expect(replaceTrack).not.toHaveBeenCalled();
64
+ });
65
+ it('is forgotten by an explicit stopSession', async () => {
66
+ const r = new ReachyMini();
67
+ await r.setOutgoingAudioTrack(fakeTrack('audio'));
68
+ await r.stopSession();
69
+ expect(r._outgoingAudioTrack).toBeNull();
70
+ });
71
+ it('rejects non-audio tracks', async () => {
72
+ const r = new ReachyMini();
73
+ await expect(r.setOutgoingAudioTrack(fakeTrack('video'))).rejects.toThrow(TypeError);
74
+ });
75
+ });
76
+ describe('safelyReturnToPose', () => {
77
+ it('stops head tracking before re-enabling torque and sending the goto', () => {
78
+ const calls = [];
79
+ const reachy = {
80
+ robotState: {},
81
+ stopHeadTracking: () => { calls.push('stopHeadTracking'); return true; },
82
+ setMotorMode: () => { calls.push('setMotorMode'); return true; },
83
+ gotoTarget: () => { calls.push('gotoTarget'); return true; },
84
+ };
85
+ safelyReturnToPose(reachy);
86
+ expect(calls).toEqual(['stopHeadTracking', 'setMotorMode', 'gotoTarget']);
87
+ });
88
+ it('still returns to pose when the tracking command throws', () => {
89
+ const goto = vi.fn(() => true);
90
+ const reachy = {
91
+ robotState: {},
92
+ stopHeadTracking: () => { throw new Error('channel closed'); },
93
+ setMotorMode: () => true,
94
+ gotoTarget: goto,
95
+ };
96
+ safelyReturnToPose(reachy);
97
+ expect(goto).toHaveBeenCalledOnce();
98
+ });
99
+ });
100
+ //# sourceMappingURL=app-dx.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-dx.test.js","sourceRoot":"","sources":["../../lib/app-dx.test.ts"],"names":[],"mappings":"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"}
@@ -13,9 +13,10 @@ export declare function radToDeg(rad: number): number;
13
13
  */
14
14
  export declare function rpyToMatrix(rollDeg: number, pitchDeg: number, yawDeg: number): number[][];
15
15
  /**
16
- * Rotation matrix (3×3 or 4×4) → { roll, pitch, yaw } in degrees.
16
+ * Rotation matrix (3×3 or 4×4 nested, or the flat row-major `number[16]`
17
+ * of `state.head`) → { roll, pitch, yaw } in degrees.
17
18
  */
18
- export declare function matrixToRpy(m: number[][]): {
19
+ export declare function matrixToRpy(matrix: number[][] | number[]): {
19
20
  roll: number;
20
21
  pitch: number;
21
22
  yaw: number;
@@ -1 +1 @@
1
- {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../lib/math.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,MAAM,EAAE,EAAE,CAWZ;AAED;;GAEG;AACH,wBAAgB,WAAW,CACvB,CAAC,EAAE,MAAM,EAAE,EAAE,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAM9C"}
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../lib/math.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,MAAM,EAAE,EAAE,CAWZ;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACvB,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAS9C"}
package/dist/lib/math.js CHANGED
@@ -28,9 +28,13 @@ export function rpyToMatrix(rollDeg, pitchDeg, yawDeg) {
28
28
  ];
29
29
  }
30
30
  /**
31
- * Rotation matrix (3×3 or 4×4) → { roll, pitch, yaw } in degrees.
31
+ * Rotation matrix (3×3 or 4×4 nested, or the flat row-major `number[16]`
32
+ * of `state.head`) → { roll, pitch, yaw } in degrees.
32
33
  */
33
- export function matrixToRpy(m) {
34
+ export function matrixToRpy(matrix) {
35
+ const m = Array.isArray(matrix[0])
36
+ ? matrix
37
+ : [0, 1, 2, 3].map((r) => matrix.slice(r * 4, r * 4 + 4));
34
38
  return {
35
39
  roll: radToDeg(Math.atan2(m[2][1], m[2][2])),
36
40
  pitch: radToDeg(Math.asin(-m[2][0])),
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","sourceRoot":"","sources":["../../lib/math.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAChC,OAAO,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAChC,OAAO,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACvB,OAAe,EACf,QAAgB,EAChB,MAAc;IAEd,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO;QACH,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KACf,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACvB,CAAa;IAEb,OAAO;QACH,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QAChD,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QACtC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC;KAClD,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../../lib/math.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAChC,OAAO,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAChC,OAAO,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACvB,OAAe,EACf,QAAgB,EAChB,MAAc;IAEd,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO;QACH,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KACf,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACvB,MAA6B;IAE7B,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAE,MAAqB;QACxB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,MAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO;QACH,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QAChD,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QACtC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC;KAClD,CAAC;AACN,CAAC"}
@@ -29,6 +29,8 @@ export declare class ReachyMini extends EventTarget implements ReachyMiniInstanc
29
29
  private _selectedRobotId;
30
30
  private _pendingRemoteIce;
31
31
  _micStream: MediaStream | null;
32
+ private _robotAudioTrack;
33
+ private _outgoingAudioTrack;
32
34
  private _micMuted;
33
35
  private _audioMuted;
34
36
  private _micSupported;
@@ -64,6 +66,12 @@ export declare class ReachyMini extends EventTarget implements ReachyMiniInstanc
64
66
  * use — never capture it across ticks.
65
67
  */
66
68
  get peerConnection(): RTCPeerConnection | null;
69
+ /**
70
+ * The robot's microphone as a live audio track, or `null` until the
71
+ * session's audio arrives (see the `audioTrack` event). Feed it to Web
72
+ * Audio, `MediaRecorder` or `SpeechRecognition.start(track)`.
73
+ */
74
+ get robotAudioTrack(): MediaStreamTrack | null;
67
75
  /**
68
76
  * Build version of this SDK (npm package `version`), injected from
69
77
  * package.json at build time. This is the JS SDK's OWN version and is
@@ -351,6 +359,22 @@ export declare class ReachyMini extends EventTarget implements ReachyMiniInstanc
351
359
  unsubscribePose(): boolean;
352
360
  setAudioMuted(muted: boolean): void;
353
361
  setMicMuted(muted: boolean): void;
362
+ /**
363
+ * Stream an audio track to the robot's speaker in real time (TTS output,
364
+ * a WebAudio graph, the user's own mic for teleop…). Pass `null` to go
365
+ * back to silence. The track survives auto-reconnects; the app keeps
366
+ * ownership of it (the SDK never stops it).
367
+ *
368
+ * Resolves `true` once the track is on the wire, `false` when there is
369
+ * no live session yet (it is then applied as soon as one starts) or when
370
+ * the robot didn't offer two-way audio. Cleared by `stopSession()` /
371
+ * `disconnect()`. `setMicMuted()` only mutes the SDK's placeholder, not
372
+ * this track — stop or disable the track itself to go quiet.
373
+ * For clips that must stay in sync with motion, prefer
374
+ * `playMove(motion, { audioBlob })` or `uploadAudio` + `playUploadedAudio`.
375
+ */
376
+ setOutgoingAudioTrack(track: MediaStreamTrack | null): Promise<boolean>;
377
+ private _applyOutgoingAudioTrack;
354
378
  attachVideo(videoElement: HTMLVideoElement): () => void;
355
379
  playMove(motion: MoveData, { audioBlob, audioLeadMs, description, encoding, playFrequency, initialGotoDuration, startTimeoutMs, onProgress, onStarted, }?: PlayMoveOptions): Promise<PlayMoveResult>;
356
380
  cancelMove(uploadId?: string | null): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"reachy-mini.d.ts","sourceRoot":"","sources":["../../lib/reachy-mini.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reachy-mini.d.ts","sourceRoot":"","sources":["../../lib/reachy-mini.ts"],"names":[],"mappings":"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"}
@@ -81,6 +81,8 @@ export class ReachyMini extends EventTarget {
81
81
  _pendingRemoteIce = [];
82
82
  // ─── Audio ───────────────────────────────────────────────────────────
83
83
  _micStream = null;
84
+ _robotAudioTrack = null;
85
+ _outgoingAudioTrack = null;
84
86
  _micMuted = true;
85
87
  _audioMuted = true;
86
88
  _micSupported = false;
@@ -171,6 +173,12 @@ export class ReachyMini extends EventTarget {
171
173
  * use — never capture it across ticks.
172
174
  */
173
175
  get peerConnection() { return this._pc; }
176
+ /**
177
+ * The robot's microphone as a live audio track, or `null` until the
178
+ * session's audio arrives (see the `audioTrack` event). Feed it to Web
179
+ * Audio, `MediaRecorder` or `SpeechRecognition.start(track)`.
180
+ */
181
+ get robotAudioTrack() { return this._robotAudioTrack; }
174
182
  /**
175
183
  * Build version of this SDK (npm package `version`), injected from
176
184
  * package.json at build time. This is the JS SDK's OWN version and is
@@ -554,6 +562,10 @@ export class ReachyMini extends EventTarget {
554
562
  catch { /* ignore */ }
555
563
  this._emit('videoTrack', { track: e.track, stream: e.streams[0] });
556
564
  }
565
+ else if (e.track.kind === 'audio') {
566
+ this._robotAudioTrack = e.track;
567
+ this._emit('audioTrack', { track: e.track, stream: e.streams[0] });
568
+ }
557
569
  };
558
570
  this._pc.onicecandidate = async (e) => {
559
571
  if (e.candidate && this._sessionId) {
@@ -683,6 +695,7 @@ export class ReachyMini extends EventTarget {
683
695
  this._micStream.getTracks().forEach((t) => t.stop());
684
696
  this._micStream = null;
685
697
  }
698
+ this._robotAudioTrack = null;
686
699
  this._micMuted = true;
687
700
  this._micSupported = false;
688
701
  if (this._pc) {
@@ -721,6 +734,7 @@ export class ReachyMini extends EventTarget {
721
734
  this._supervisor.cancelRedial();
722
735
  this._logSubscribers.clear();
723
736
  this._updateProgressSubscribers.clear();
737
+ this._outgoingAudioTrack = null;
724
738
  const sessionId = this._closeTransport(new Error('Session stopped'));
725
739
  if (sessionId) {
726
740
  await this._sendToServer({ type: 'endSession', sessionId });
@@ -739,6 +753,7 @@ export class ReachyMini extends EventTarget {
739
753
  }
740
754
  this._logSubscribers.clear();
741
755
  this._updateProgressSubscribers.clear();
756
+ this._outgoingAudioTrack = null;
742
757
  const sessionId = this._closeTransport(new Error('Disconnected'));
743
758
  if (sessionId && this._token) {
744
759
  void this._sendToServer({ type: 'endSession', sessionId });
@@ -1271,6 +1286,36 @@ export class ReachyMini extends EventTarget {
1271
1286
  this._micStream.getAudioTracks().forEach((t) => { t.enabled = !muted; });
1272
1287
  }
1273
1288
  }
1289
+ /**
1290
+ * Stream an audio track to the robot's speaker in real time (TTS output,
1291
+ * a WebAudio graph, the user's own mic for teleop…). Pass `null` to go
1292
+ * back to silence. The track survives auto-reconnects; the app keeps
1293
+ * ownership of it (the SDK never stops it).
1294
+ *
1295
+ * Resolves `true` once the track is on the wire, `false` when there is
1296
+ * no live session yet (it is then applied as soon as one starts) or when
1297
+ * the robot didn't offer two-way audio. Cleared by `stopSession()` /
1298
+ * `disconnect()`. `setMicMuted()` only mutes the SDK's placeholder, not
1299
+ * this track — stop or disable the track itself to go quiet.
1300
+ * For clips that must stay in sync with motion, prefer
1301
+ * `playMove(motion, { audioBlob })` or `uploadAudio` + `playUploadedAudio`.
1302
+ */
1303
+ async setOutgoingAudioTrack(track) {
1304
+ if (track && track.kind !== 'audio') {
1305
+ throw new TypeError(`setOutgoingAudioTrack: expected an audio track, got "${track.kind}"`);
1306
+ }
1307
+ this._outgoingAudioTrack = track;
1308
+ return this._applyOutgoingAudioTrack();
1309
+ }
1310
+ async _applyOutgoingAudioTrack() {
1311
+ const sender = this._pc?.getTransceivers()
1312
+ .find((t) => t.receiver.track.kind === 'audio')?.sender;
1313
+ if (!sender || !this._micSupported)
1314
+ return false;
1315
+ const fallback = this._micStream?.getAudioTracks()[0] ?? null;
1316
+ await sender.replaceTrack(this._outgoingAudioTrack ?? fallback);
1317
+ return true;
1318
+ }
1274
1319
  // ─── Video helper ────────────────────────────────────────────────────
1275
1320
  attachVideo(videoElement) {
1276
1321
  this._videoElement = videoElement;
@@ -1674,6 +1719,7 @@ export class ReachyMini extends EventTarget {
1674
1719
  this._micStream.getTracks().forEach((t) => t.stop());
1675
1720
  this._micStream = null;
1676
1721
  }
1722
+ this._robotAudioTrack = null;
1677
1723
  this._iceConnected = false;
1678
1724
  this._dcOpen = false;
1679
1725
  this._micMuted = true;
@@ -1710,6 +1756,13 @@ export class ReachyMini extends EventTarget {
1710
1756
  await this._pc.setRemoteDescription(new RTCSessionDescription(sdp));
1711
1757
  const answer = await this._pc.createAnswer();
1712
1758
  await this._pc.setLocalDescription(answer);
1759
+ // Re-dials build a fresh peer connection: carry the app's
1760
+ // outgoing audio over instead of reverting to the placeholder.
1761
+ if (this._outgoingAudioTrack) {
1762
+ // Best-effort: a failed swap must not keep the answer from going out.
1763
+ await this._applyOutgoingAudioTrack()
1764
+ .catch((e) => log.warn('re-applying outgoing audio failed:', e));
1765
+ }
1713
1766
  await this._sendToServer({
1714
1767
  type: 'peer',
1715
1768
  sessionId: this._sessionId,