robopark 2.8.26 → 2.8.27
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 +63 -63
- package/bin/robopark.js +17 -17
- package/package.json +38 -38
- package/pi-client/README.md +17 -17
- package/scheduler/__pycache__/main.cpython-312.pyc +0 -0
- package/scheduler/main.py +827 -2
- package/scheduler/preview_agent.py +24 -0
- package/scheduler/requirements-robot.txt +9 -9
- package/vision/README.md +66 -66
- package/vision/requirements-demo.txt +16 -16
package/README.md
CHANGED
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
# robopark
|
|
2
|
-
|
|
3
|
-
The **RoboPark fleet control CLI** — set up, watch, and drive a room full of
|
|
4
|
-
talking robots from one command. `robopark` is the operator front-end; it rides
|
|
5
|
-
the [`infinicode`](https://www.npmjs.com/package/infinicode) device mesh, which
|
|
6
|
-
it installs as a dependency. You install and think in one name — everything else
|
|
7
|
-
is plumbing.
|
|
8
|
-
|
|
9
|
-
## Install
|
|
10
|
-
|
|
11
|
-
```sh
|
|
12
|
-
npm install -g robopark
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## The whole setup — two commands
|
|
16
|
-
|
|
17
|
-
Operators think in **scheduler / robot / laptop**; the mesh underneath thinks in
|
|
18
|
-
hub / satellite / peer. `robopark` translates, and each role turns on the right
|
|
19
|
-
defaults automatically.
|
|
20
|
-
|
|
21
|
-
```sh
|
|
22
|
-
# On the on-site hub (LiveKit Server 1) — LAN + Tailscale + dashboard on:
|
|
23
|
-
robopark setup --scheduler --gateway ws://<infinibot-gateway>:18789 --start
|
|
24
|
-
|
|
25
|
-
# On each robot Pi — accept-only, LAN-discovered:
|
|
26
|
-
robopark setup --robot --name robopanda --start
|
|
27
|
-
|
|
28
|
-
# From anywhere — a live table of the whole fleet:
|
|
29
|
-
robopark fleet --watch
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
Run `robopark setup` with no role for a guided wizard.
|
|
33
|
-
|
|
34
|
-
## Commands
|
|
35
|
-
|
|
36
|
-
| Command | Does |
|
|
37
|
-
|---|---|
|
|
38
|
-
| `robopark setup` | Configure this device's role + site and (with `--start`) launch its node. |
|
|
39
|
-
| `robopark fleet [--watch]` | Live table of every node the mesh can see. |
|
|
40
|
-
| `robopark run <node> <cmd>` | Run a command on one node (use `.` for the local node). |
|
|
41
|
-
| `robopark apply` | Publish this hub's providers / keys / policy to every satellite. |
|
|
42
|
-
| `robopark dashboard [--open]` | Open the web control panel served by the hub. |
|
|
43
|
-
|
|
44
|
-
## How it fits together
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
you ── robopark ──▶ infinicode nodes (the mesh) ──▶ InfiniBot (watch)
|
|
48
|
-
└──▶ web dashboard :47913 (watch / drive)
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
- **robopark** — the remote control. A CLI, no daemon. Writes config and calls
|
|
52
|
-
each node's HTTP API.
|
|
53
|
-
- **infinicode** — the runtime. `infinicode serve` runs on every device, forms
|
|
54
|
-
the mesh, runs agents, streams telemetry, and serves the dashboard.
|
|
55
|
-
- **InfiniBot** — the cockpit. Each node pushes its status *up* to InfiniBot;
|
|
56
|
-
you watch there (or in the built-in dashboard).
|
|
57
|
-
|
|
58
|
-
`robopark` never talks to InfiniBot directly — it drives infinicode nodes, and
|
|
59
|
-
those surface in InfiniBot.
|
|
60
|
-
|
|
61
|
-
## License
|
|
62
|
-
|
|
63
|
-
MIT
|
|
1
|
+
# robopark
|
|
2
|
+
|
|
3
|
+
The **RoboPark fleet control CLI** — set up, watch, and drive a room full of
|
|
4
|
+
talking robots from one command. `robopark` is the operator front-end; it rides
|
|
5
|
+
the [`infinicode`](https://www.npmjs.com/package/infinicode) device mesh, which
|
|
6
|
+
it installs as a dependency. You install and think in one name — everything else
|
|
7
|
+
is plumbing.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
npm install -g robopark
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## The whole setup — two commands
|
|
16
|
+
|
|
17
|
+
Operators think in **scheduler / robot / laptop**; the mesh underneath thinks in
|
|
18
|
+
hub / satellite / peer. `robopark` translates, and each role turns on the right
|
|
19
|
+
defaults automatically.
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
# On the on-site hub (LiveKit Server 1) — LAN + Tailscale + dashboard on:
|
|
23
|
+
robopark setup --scheduler --gateway ws://<infinibot-gateway>:18789 --start
|
|
24
|
+
|
|
25
|
+
# On each robot Pi — accept-only, LAN-discovered:
|
|
26
|
+
robopark setup --robot --name robopanda --start
|
|
27
|
+
|
|
28
|
+
# From anywhere — a live table of the whole fleet:
|
|
29
|
+
robopark fleet --watch
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Run `robopark setup` with no role for a guided wizard.
|
|
33
|
+
|
|
34
|
+
## Commands
|
|
35
|
+
|
|
36
|
+
| Command | Does |
|
|
37
|
+
|---|---|
|
|
38
|
+
| `robopark setup` | Configure this device's role + site and (with `--start`) launch its node. |
|
|
39
|
+
| `robopark fleet [--watch]` | Live table of every node the mesh can see. |
|
|
40
|
+
| `robopark run <node> <cmd>` | Run a command on one node (use `.` for the local node). |
|
|
41
|
+
| `robopark apply` | Publish this hub's providers / keys / policy to every satellite. |
|
|
42
|
+
| `robopark dashboard [--open]` | Open the web control panel served by the hub. |
|
|
43
|
+
|
|
44
|
+
## How it fits together
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
you ── robopark ──▶ infinicode nodes (the mesh) ──▶ InfiniBot (watch)
|
|
48
|
+
└──▶ web dashboard :47913 (watch / drive)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- **robopark** — the remote control. A CLI, no daemon. Writes config and calls
|
|
52
|
+
each node's HTTP API.
|
|
53
|
+
- **infinicode** — the runtime. `infinicode serve` runs on every device, forms
|
|
54
|
+
the mesh, runs agents, streams telemetry, and serves the dashboard.
|
|
55
|
+
- **InfiniBot** — the cockpit. Each node pushes its status *up* to InfiniBot;
|
|
56
|
+
you watch there (or in the built-in dashboard).
|
|
57
|
+
|
|
58
|
+
`robopark` never talks to InfiniBot directly — it drives infinicode nodes, and
|
|
59
|
+
those surface in InfiniBot.
|
|
60
|
+
|
|
61
|
+
## License
|
|
62
|
+
|
|
63
|
+
MIT
|
package/bin/robopark.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* robopark — thin operator front-end.
|
|
4
|
-
*
|
|
5
|
-
* This package is a wrapper: the actual CLI lives in `infinicode` (its declared
|
|
6
|
-
* dependency), exposed as the `infinicode/robopark` subpath. Importing it runs
|
|
7
|
-
* the command against this process's argv, so `robopark …` and
|
|
8
|
-
* `infinicode robopark …` are the exact same code. Keeping it a wrapper means
|
|
9
|
-
* operators install and think in one name — `robopark` — while all the mesh
|
|
10
|
-
* machinery ships and versions under infinicode.
|
|
11
|
-
*/
|
|
12
|
-
import('infinicode/robopark').catch((err) => {
|
|
13
|
-
console.error('robopark: could not load the infinicode runtime.');
|
|
14
|
-
console.error(err && err.message ? err.message : err);
|
|
15
|
-
console.error('Try reinstalling: npm install -g robopark');
|
|
16
|
-
process.exit(1);
|
|
17
|
-
});
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* robopark — thin operator front-end.
|
|
4
|
+
*
|
|
5
|
+
* This package is a wrapper: the actual CLI lives in `infinicode` (its declared
|
|
6
|
+
* dependency), exposed as the `infinicode/robopark` subpath. Importing it runs
|
|
7
|
+
* the command against this process's argv, so `robopark …` and
|
|
8
|
+
* `infinicode robopark …` are the exact same code. Keeping it a wrapper means
|
|
9
|
+
* operators install and think in one name — `robopark` — while all the mesh
|
|
10
|
+
* machinery ships and versions under infinicode.
|
|
11
|
+
*/
|
|
12
|
+
import('infinicode/robopark').catch((err) => {
|
|
13
|
+
console.error('robopark: could not load the infinicode runtime.');
|
|
14
|
+
console.error(err && err.message ? err.message : err);
|
|
15
|
+
console.error('Try reinstalling: npm install -g robopark');
|
|
16
|
+
process.exit(1);
|
|
17
|
+
});
|
package/package.json
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "robopark",
|
|
3
|
-
"version": "2.8.
|
|
4
|
-
"description": "RoboPark fleet control CLI — set up, watch, and drive a fleet of talking robots. The operator front-end over the infinicode mesh.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"robopark": "./bin/robopark.js"
|
|
8
|
-
},
|
|
9
|
-
"files": [
|
|
10
|
-
"bin/robopark.js",
|
|
11
|
-
"scheduler",
|
|
12
|
-
"pi-client",
|
|
13
|
-
"vision",
|
|
14
|
-
"README.md"
|
|
15
|
-
],
|
|
16
|
-
"engines": {
|
|
17
|
-
"node": ">=20"
|
|
18
|
-
},
|
|
19
|
-
"dependencies": {
|
|
20
|
-
"infinicode": "^2.8.9"
|
|
21
|
-
},
|
|
22
|
-
"keywords": [
|
|
23
|
-
"robopark",
|
|
24
|
-
"fleet",
|
|
25
|
-
"robots",
|
|
26
|
-
"livekit",
|
|
27
|
-
"raspberry-pi",
|
|
28
|
-
"cli",
|
|
29
|
-
"infinicode",
|
|
30
|
-
"mesh"
|
|
31
|
-
],
|
|
32
|
-
"author": "Ra Kai'Un",
|
|
33
|
-
"license": "MIT",
|
|
34
|
-
"repository": {
|
|
35
|
-
"type": "git",
|
|
36
|
-
"url": "https://github.com/
|
|
37
|
-
}
|
|
38
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "robopark",
|
|
3
|
+
"version": "2.8.27",
|
|
4
|
+
"description": "RoboPark fleet control CLI — set up, watch, and drive a fleet of talking robots. The operator front-end over the infinicode mesh.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"robopark": "./bin/robopark.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin/robopark.js",
|
|
11
|
+
"scheduler",
|
|
12
|
+
"pi-client",
|
|
13
|
+
"vision",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=20"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"infinicode": "^2.8.9"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"robopark",
|
|
24
|
+
"fleet",
|
|
25
|
+
"robots",
|
|
26
|
+
"livekit",
|
|
27
|
+
"raspberry-pi",
|
|
28
|
+
"cli",
|
|
29
|
+
"infinicode",
|
|
30
|
+
"mesh"
|
|
31
|
+
],
|
|
32
|
+
"author": "Ra Kai'Un",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "https://github.com/MrYungCEO/infinicode"
|
|
37
|
+
}
|
|
38
|
+
}
|
package/pi-client/README.md
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
# robopark-pi-client — full robot client (reference)
|
|
2
|
-
|
|
3
|
-
The full on-robot client: enrollment, heartbeat, motor control, and a
|
|
4
|
-
LiveKit publish loop (`livekit_bridge.py`) that joins a standing per-device
|
|
5
|
-
room whenever `production_mode` is on. `pi_ui.py` serves a touchscreen UI
|
|
6
|
-
with a manual "Join Conversation" button — the human-in-the-loop trigger.
|
|
7
|
-
|
|
8
|
-
This is a reference implementation shipped for Pi deployment; it is not
|
|
9
|
-
currently wired into `robopark setup --robot` (which uses `../scheduler/
|
|
10
|
-
preview_agent.py` for the on-demand preview + vision-trigger flow — see
|
|
11
|
-
`../vision/README.md`). `client.py`'s standing-room model and the scheduler's
|
|
12
|
-
`request-session`-per-trigger model are two different session strategies;
|
|
13
|
-
reconciling them into one is follow-up work, not done here.
|
|
14
|
-
|
|
15
|
-
Install: `pip install -r requirements.txt` (`livekit`/`livekit-api` are
|
|
16
|
-
commented out — Pi-only, install separately with the `livekit` SDK).
|
|
17
|
-
`install.sh`/`*.service` are Linux/Pi systemd wrappers.
|
|
1
|
+
# robopark-pi-client — full robot client (reference)
|
|
2
|
+
|
|
3
|
+
The full on-robot client: enrollment, heartbeat, motor control, and a
|
|
4
|
+
LiveKit publish loop (`livekit_bridge.py`) that joins a standing per-device
|
|
5
|
+
room whenever `production_mode` is on. `pi_ui.py` serves a touchscreen UI
|
|
6
|
+
with a manual "Join Conversation" button — the human-in-the-loop trigger.
|
|
7
|
+
|
|
8
|
+
This is a reference implementation shipped for Pi deployment; it is not
|
|
9
|
+
currently wired into `robopark setup --robot` (which uses `../scheduler/
|
|
10
|
+
preview_agent.py` for the on-demand preview + vision-trigger flow — see
|
|
11
|
+
`../vision/README.md`). `client.py`'s standing-room model and the scheduler's
|
|
12
|
+
`request-session`-per-trigger model are two different session strategies;
|
|
13
|
+
reconciling them into one is follow-up work, not done here.
|
|
14
|
+
|
|
15
|
+
Install: `pip install -r requirements.txt` (`livekit`/`livekit-api` are
|
|
16
|
+
commented out — Pi-only, install separately with the `livekit` SDK).
|
|
17
|
+
`install.sh`/`*.service` are Linux/Pi systemd wrappers.
|
|
Binary file
|