{ "title": "foxglove.VoxelGrid", "description": "A 3D grid of data", "$comment": "Generated by https://github.com/foxglove/foxglove-sdk", "type": "object", "properties": { "timestamp": { "type": "object", "title": "time", "properties": { "sec": { "type": "integer", "minimum": 0 }, "nsec": { "type": "integer", "minimum": 0, "maximum": 999999999 } }, "description": "Timestamp of grid" }, "frame_id": { "type": "string", "description": "Frame of reference" }, "pose": { "title": "foxglove.Pose", "description": "Origin of the grid’s lower-front-left corner in the reference frame. The grid’s pose is defined relative to this corner, so an untransformed grid with an identity orientation has this corner at the origin.", "type": "object", "properties": { "position": { "title": "foxglove.Vector3", "description": "Point denoting position in 3D space", "type": "object", "properties": { "x": { "type": "number", "description": "x component" }, "y": { "type": "number", "description": "y component" }, "z": { "type": "number", "description": "z component" } }, "required": [ "x", "y", "z" ] }, "orientation": { "title": "foxglove.Quaternion", "description": "Quaternion denoting orientation in 3D space", "type": "object", "properties": { "x": { "type": "number", "description": "x value" }, "y": { "type": "number", "description": "y value" }, "z": { "type": "number", "description": "z value" }, "w": { "type": "number", "description": "w value" } }, "required": [ "x", "y", "z", "w" ] } }, "required": [ "position", "orientation" ] }, "row_count": { "type": "integer", "minimum": 0, "description": "Number of grid rows" }, "column_count": { "type": "integer", "minimum": 0, "description": "Number of grid columns" }, "cell_size": { "title": "foxglove.Vector3", "description": "Size of single grid cell along x, y, and z axes, relative to `pose`", "type": "object", "properties": { "x": { "type": "number", "description": "x component" }, "y": { "type": "number", "description": "y component" }, "z": { "type": "number", "description": "z component" } }, "required": [ "x", "y", "z" ] }, "slice_stride": { "type": "integer", "minimum": 0, "description": "Number of bytes between depth slices in `data`" }, "row_stride": { "type": "integer", "minimum": 0, "description": "Number of bytes between rows in `data`" }, "cell_stride": { "type": "integer", "minimum": 0, "description": "Number of bytes between cells within a row in `data`" }, "fields": { "type": "array", "items": { "title": "foxglove.PackedElementField", "description": "A field present within each element in a byte array of packed elements.", "type": "object", "properties": { "name": { "type": "string", "description": "Name of the field" }, "offset": { "type": "integer", "minimum": 0, "description": "Byte offset from start of data buffer" }, "type": { "title": "foxglove.NumericType", "description": "Type of data in the field. Integers are stored using little-endian byte order.", "oneOf": [ { "title": "UNKNOWN", "const": 0, "description": "Unknown numeric type" }, { "title": "UINT8", "const": 1, "description": "Unsigned 8-bit integer" }, { "title": "INT8", "const": 2, "description": "Signed 8-bit integer" }, { "title": "UINT16", "const": 3, "description": "Unsigned 16-bit integer" }, { "title": "INT16", "const": 4, "description": "Signed 16-bit integer" }, { "title": "UINT32", "const": 5, "description": "Unsigned 32-bit integer" }, { "title": "INT32", "const": 6, "description": "Signed 32-bit integer" }, { "title": "FLOAT32", "const": 7, "description": "32-bit floating-point number" }, { "title": "FLOAT64", "const": 8, "description": "64-bit floating-point number" } ] } }, "required": [ "name", "offset", "type" ] }, "description": "Fields in `data`. `red`, `green`, `blue`, and `alpha` are optional for customizing the grid's color." }, "data": { "type": "string", "contentEncoding": "base64", "description": "Grid cell data, interpreted using `fields`, in depth-major, row-major (Z-Y-X) order.\nFor the data element starting at byte offset i, the coordinates of its corner closest to the origin will be:\n\n- z = i / slice_stride * cell_size.z\n- y = (i % slice_stride) / row_stride * cell_size.y\n- x = (i % row_stride) / cell_stride * cell_size.x" } }, "required": [ "timestamp", "frame_id", "pose", "row_count", "column_count", "cell_size", "slice_stride", "row_stride", "cell_stride", "fields", "data" ] }