feat: activate self-hosted lidar spatial scene
This commit is contained in:
@@ -7,8 +7,10 @@ or speculative writes.
|
||||
Current status: live proof completed on firmware 3.0.2. The Mac provisioned the
|
||||
K1 onto an existing LAN without LixelGO, connected to its MQTT broker, captured
|
||||
the scan-correlated point-cloud and pose streams, and decoded both successfully.
|
||||
The repository also contains a local React control console and a Foxglove live
|
||||
bridge for the verified point-cloud and trajectory topics.
|
||||
The repository also contains a local React control console, an automatic Rerun
|
||||
gRPC bridge for the verified point-cloud and trajectory streams, and a
|
||||
self-hosted Rerun Web Viewer embedded in that console. The former Foxglove
|
||||
bridge remains only as a legacy regression module.
|
||||
|
||||
The repository now contains one narrowly gated state-changing command:
|
||||
`ble wifi-configure`. It accepts only the reviewed firmware-3 provisioning
|
||||
@@ -88,25 +90,45 @@ inside the NODE.DC shell. It can open a compatible RRD file over HTTP(S) or a
|
||||
Rerun gRPC/proxy source such as `rerun+http://127.0.0.1:9876/proxy`. It does not
|
||||
use an external hosted viewer UI.
|
||||
|
||||
There is one important current boundary: the automatic K1 MQTT → Rerun
|
||||
RRD/gRPC contract is **not implemented yet**. Starting a K1 live or replay
|
||||
session updates real state and metrics, but it does not by itself populate the
|
||||
embedded Rerun viewport. The scene controls for point size, gradients,
|
||||
accumulation, layers, timeline and layout are presently a product UI contract;
|
||||
their Rerun Blueprint/playback adapter is also still pending. No synthetic
|
||||
point cloud, trajectory, camera frame or latency value is generated to conceal
|
||||
these missing links.
|
||||
The first K1 live session or replay in a `k1link serve` process creates one local
|
||||
Rerun `RecordingStream`, starts its gRPC/proxy server on TCP 9876 and publishes
|
||||
the resulting URL through control-plane state. Later sessions reset their
|
||||
session-local scene and metrics and reuse that process-wide stream; this avoids
|
||||
restarting the native listener while the embedded browser remains connected.
|
||||
Unless an operator has entered a manual source, the React application assigns
|
||||
that URL to the embedded viewer. The complete runtime path is K1 MQTT → raw-first evidence
|
||||
capture → bounded latest-wins preview queue → reviewed protobuf/LZ4 decoders →
|
||||
Rerun `Points3D`, `Transform3D` and `LineStrips3D` → embedded Web Viewer.
|
||||
|
||||
The existing Python MQTT → Foxglove pipeline remains in place as the verified
|
||||
legacy visualization adapter. It still publishes `/k1/points`, `/k1/pose`,
|
||||
`/k1/trajectory` and `/k1/metrics`, and preserves the measured
|
||||
MQTT-receive-to-Foxglove-publish latency plus bounded latest-wins preview
|
||||
dropping. It is retained for evidence, regression and diagnostics, not as the
|
||||
target Control Station interface. The historical
|
||||
[live viewer runbook](docs/06_K1_LIVE_VIEWER.md) records that proven path and its
|
||||
timing semantics; the current frontend contract is documented in
|
||||
The default Rerun blueprint shows a 12-second sliding accumulation of real point
|
||||
frames. Product controls are connected for point size, intensity/height/distance
|
||||
or available RGB coloring, Turbo/Viridis/Plasma/grayscale/custom palettes,
|
||||
point and trajectory visibility, and the scene grid. Projection, custom
|
||||
timeline transport and saved layout remain later product work. No synthetic
|
||||
point cloud, trajectory, camera frame or latency value is generated.
|
||||
|
||||
A powered-device checkpoint passed 80 real MQTT messages through the current
|
||||
Rerun runtime: 38 point-cloud frames, 42 pose frames, 2,775 points in the last
|
||||
cloud and zero decode errors. Raw panoramic camera frames remain absent. Rerun
|
||||
`capture_time` is the Mac receive timestamp, not a proven K1 sensor timestamp or
|
||||
photon-to-screen measurement.
|
||||
|
||||
The old Foxglove implementation is retained only in
|
||||
`src/k1link/viewer/foxglove_bridge.py` and its regression tests. The current
|
||||
live/replay runtime does not start it or use TCP 8765. The
|
||||
[live viewer runbook](docs/06_K1_LIVE_VIEWER.md) records the active Rerun path and
|
||||
its timing/security boundaries; the frontend contract is documented in
|
||||
[`apps/k1-viewer/README.md`](apps/k1-viewer/README.md).
|
||||
|
||||
The FastAPI application and credential endpoint bind to loopback, but the Rerun
|
||||
gRPC server currently binds TCP 9876 on all network interfaces even though its
|
||||
reported source URL contains `127.0.0.1`. It has no connector-level
|
||||
authentication or TLS. Use it only on a trusted laboratory LAN, do not expose
|
||||
9876 to the public Internet or a cellular WAN, and add an authenticated secure
|
||||
proxy before any remote deployment. Stopping acquisition keeps the local scene
|
||||
server and its URL available for the next session. Stop `k1link serve` to close
|
||||
the listener and release its retained memory.
|
||||
|
||||
`doctor` is intentionally non-invasive. It checks the local Python environment
|
||||
and reports external tools; it does not request Bluetooth permission, scan the
|
||||
LAN, touch the K1, alter Homebrew, or change capture permissions.
|
||||
@@ -147,7 +169,7 @@ present.
|
||||
- [Artifact and secret policy](docs/03_ARTIFACT_POLICY.md)
|
||||
- [Reviewed BLE Wi-Fi profile](docs/04_K1_WIFI_PROVISIONING_PROFILE.md)
|
||||
- [Verified MQTT stream profile](docs/05_K1_MQTT_STREAM_PROFILE.md)
|
||||
- [Live console and Foxglove runbook](docs/06_K1_LIVE_VIEWER.md)
|
||||
- [Live console and embedded Rerun runbook](docs/06_K1_LIVE_VIEWER.md)
|
||||
- [Redacted live lab report](docs/lab/001_K1_LIVE_MQTT_20260715.redacted.md)
|
||||
- [Session manifest schema](schemas/session-manifest.schema.json)
|
||||
- [Reference input provenance](docs/reference/README.md)
|
||||
|
||||
Reference in New Issue
Block a user