Features

4 workspaces - by purpose

Four workspaces, one transformer chain, scriptable from Lua. Pick a workspace from the tabs in the editor, or jump straight to the spec of each below.

workspace simulation

Simulation

Build a scene, pick a sensor profile, watch a stream that matches the real datasheet.

  • Walls, targets, moving obstacles with per-surface reflectivity.
  • Per-profile beam divergence, multiecho, intensity, crosstalk, multipath.
  • Noise driven directly from datasheet accuracy and repeatability.
  • Streams over the local SCIP TCP endpoint so any SCIP client connects unchanged.
Simulation workspace, schematic view.
workspace replay

Replay

Open a UBH capture, scrub, export. No hardware required.

  • Frame-accurate scrubbing, loop ranges, jump-by-event.
  • Apply the live transformer chain to recorded data.
  • Export CSV, point cloud, or another UBH after filtering.
  • Device profile read from the capture itself; no manual config.
Replay workspace, schematic view.
workspace gateway

Gateway

Connect to a real sensor over SCIP. Stream, configure, change the IP, drive the IO.

  • SCIP 2.0 + 2.2 with auto-detected dialect.
  • Set the sensor IP from inside the app, with a confirm modal and a power-cycle reminder.
  • Live IO state hub: GF / GG / MF / MG mapped to scene-aware detection bits.
  • Connection health rule keeps streaming honest under packet loss.
Gateway workspace, schematic view.
workspace proxy

Proxy

Sit byte-for-byte between client and sensor. Inspect, log, tamper, replay later.

  • Transparent byte-accurate bridge between any SCIP client and any Hokuyo sensor.
  • Per-direction frame log, with replay-style scrubbing.
  • Optional packet tampering for fault-injection tests.
  • Same scene model as the other workspaces; switch with one click.
Proxy workspace, schematic view.

Transformer chain

Every scan, from any source, flows through a chain of small, ordered transformers. Filters compose linearly; what you see in the canvas is what downstream consumers see over SCIP.

  • Built-in filters: range clamp, median smoothing, glitch reject, intensity gate, ROI mask, and more.
  • Each built-in filter ships a matching Lua twin, with an equivalence test in CI.
  • Drag to reorder. Toggle per stage. Inspect the per-stage scan diff in the inspector pane.
  • Saved with the scene so a Replay session is byte-identical to the original capture.

Lua scripting

Author your own transformer in Lua against the same scan API the C++ filters use. Quick snippets, intellisense, and a confirm prompt before the editor rewrites a stage in place.

function transform(scan)
  for i = 1, #scan.points do
    if scan.points[i].range_mm > 4000 then
      scan.points[i].drop = true
    end
  end
  return scan
end