Vector Stream Systems logo Vector Stream Systems

Reference

The model schema

An MBE3Dstudio project is one plain JSON object. Everything downstream (the geometry, the analyses, the report, the bill of materials) reads this and nothing else. Units are SI and are named in every field; a field without a unit suffix is dimensionless.

Conventions

Coordinates are right-handed and Z-up, in metres. Rotations are intrinsic XYZ Euler angles in degrees. A part's placement is expressed in its parent's frame and composes down the assembly tree, so world position is the chain of placements from the root.

Geometry is an envelope, not manufacturing detail: the volume a part is allowed to occupy. Every primitive is centred on the part's own origin. A part whose datum is a mounting face rather than its centroid carries that offset in its placement, not in its geometry, which is what lets a wrong envelope fail clearance honestly instead of silently passing.

Model

The root object. Six collections and the list of operating modes the power budget rolls up over.

FieldTypeNotes
schemaVersionnumberCurrently 1. Older files are migrated on open, with a note.
metaobjectName, programme, revision, description, last-modified timestamp.
modesstring[]Named operating modes, e.g. standby, nominal, autonomy.
componentsComponent[]The assembly tree.
connectionsConnection[]Routed harness runs between ports.
functionsFn[]What the system does, allocated onto components.
requirementsRequirement[]Tagged, typed, with a verification method.
verificationsVerification[]Activities that verify requirements, with status and evidence.
constraintsConstraint[]Executable limits. See below.

Component

A part. parentId is null for a root; placement composes down that tree. Category is one of structure, sensor, compute, power, actuator, harness, payload, thermal or other. It drives colour in the viewport and grouping in the bill of materials.

FieldTypeNotes
mass_kgnumberRolled up through the tree. Density is derived from this over the envelope volume.
cogVec3?Centre of mass in the local frame. Defaults to the envelope centroid.
powerPowerProfile?default_W plus an optional per-mode map. A mode absent from the map draws the default.
thermalThermalProfile?Fraction of drawn power dissipated as heat, and an optional maximum case temperature in °C.
sensorSensorSpec?Modality, horizontal and vertical field of view in degrees, useful range in metres, and boresight.
phantomboolean?Excluded from clearance, for datums and keep-out volumes.
partNumber, supplier, unitCost_usd, quantityvariesProcurement fields. These are what the BOM export rolls up.

Geometry

Three envelope primitives. Every one is centred on the component origin.

{ "type": "box",      "size": [1.2, 0.9, 0.3] }
{ "type": "cylinder", "radius_m": 0.055, "height_m": 0.09, "axis": "z" }
{ "type": "sphere",   "radius_m": 0.12 }

Ports

An attachment point in the owning component's local frame. Kind is one of power, data, fluid, mechanical or rf; direction is source, sink or bidirectional. Power ports carry a nominal voltage and a maximum current; data ports carry a protocol and a rate. Ports are what connections attach to, and a port wired to nothing is a finding.

Connections

A run between two ports. Routing is explicit: the length is the polyline through the endpoints and any waypoints, plus stated slack, not a straight line, so harness length is a real number. Medium is wire, coax, fibre, bus or pipe.

FieldTypeNotes
gauge_awgnumber?American Wire Gauge. Drives resistance and copper mass.
conductorsnumber?Current-carrying conductors in the run; a pair is 2.
waypointsVec3[]?Intermediate routing points in world coordinates, metres.
slack_mnumber?Extra length for service loops and strain relief.
current_Anumber?Steady-state current, for the voltage-drop analysis.

Functions, requirements and verification

A function is something the system does, allocated to the component that performs it. A function allocated to nothing has no implementation and no owner, and says so.

A requirement carries a human-facing tag such as SYS-014, unique, and what the trace matrix and every finding refer to. Kind is functional, performance, interface, physical, safety, environmental or operational. Status is draft, proposed, approved or obsolete; only proposed and approved count towards coverage, so work parked in draft cannot inflate the percentages. Verification method is test, analysis, inspection or demonstration.

A verification is an activity that verifies one or more requirements, with a status of planned, passed, failed or blocked, and a place to record evidence.

Constraints

Typed and executed, not prose. Each variant is evaluated by a named function that returns the measured value alongside the limit, which is why a violation can report by how much. Set requirementId and every finding the constraint raises inherits that requirement's tag.

{ "kind": "massBudget",     "scopeId": "pod", "max_kg": 14 }
{ "kind": "powerBudget",    "mode": "autonomy", "max_W": 320 }
{ "kind": "clearance",      "min_m": 0 }
{ "kind": "cgEnvelope",     "min": [...], "max": [...] }
{ "kind": "harnessLength",  "connectionId": null, "max_m": 3.5 }
{ "kind": "voltageDrop",    "connectionId": null, "maxFraction": 0.05 }
{ "kind": "sensorCoverage", "componentId": "lidar", "minUnoccluded": 0.97 }
{ "kind": "thermalDensity", "scopeId": "pod", "max_W_per_m3": 4000 }

A null scopeId means the whole model; a null connectionId means the worst run rather than a named one.

Findings

The single output currency of every check. A finding is an error, a warning or an info, in one of eight categories, and it carries the measurement that produced it.

{
  "id":       "constraint/k-fov",
  "severity": "error",
  "category": "sensor",
  "title":    "Lidar unobstructed field of view violated",
  "detail":   "Spinning lidar sees 91.11 % of its field of view against a
               97 % minimum, blocked by Cellular / V2X antenna mast
               8.89 % (yaw 166° through 180° to -166°, pitch -8° to 8°,
               nearest 0.125 m). Traces to SYS-014.",
  "measured": 91.11,
  "limit":    97,
  "unit":     "%",
  "constraintId":   "k-fov",
  "requirementTag": "SYS-014",
  "entityIds":      ["lidar"]
}

Findings sort by severity, then category, then title, stable between runs, so a report diffs cleanly against the last one.