HomeTokenXBuy $COMMON
Documentation · v0.3

Introduction

Common Sense Labs records how real people do obvious things and turns it into training data every robot can use. One person shows that a full mug travels upright. Every robot on the open layer stops carrying it sideways.

This page covers the whole pipeline: first-person capture from smart glasses, exocentric LiDAR grounding, cross-device sync, fusion, and the open layer where lessons live. Every code sample on this page imports a real module served from this site, /lib/commonsense.js. It has no dependencies, so you can read all of it in five minutes.

NOTEThe capture hardware is commodity on purpose. If a device needs a specialist to set up, it is not common, and it does not belong here.

Quick start

Import the module straight from the site. The example below aligns three devices on one clock using events all of them saw.

import { sync } from "https://commonsenselabs.vercel.app/lib/commonsense.js";

const result = sync([
  { device: "glasses", events: [{ t: 1000, label: "grip" }, { t: 1420, label: "lift" }] },
  { device: "iphone",  events: [{ t: 962.3, label: "grip" }, { t: 1382.6, label: "lift" }] },
  { device: "ipad",    events: [{ t: 1021.8, label: "grip" }, { t: 1441.5, label: "lift" }] },
]);

console.log(result.drift);   // { before: 59.5, after: 0.4 }
console.log(result.locked);  // true

Try it

Move the sliders to add clock error to the iPhone and iPad, then run the real sync() from this site.

Press Run.

How it works

Every capture goes through five steps. They run on one person's devices at home and finish in the open layer.

  1. Capture. Smart glasses record what the person sees and a 26-joint hand pose at 90 Hz.
  2. Ground. A LiDAR phone on a shelf scans the same room from the outside, so every grip gets coordinates.
  3. Sync. Devices agree on one clock using events all of them saw, like a grip or a cup touching the table.
  4. Fuse. Ego and exo frames that describe the same instant are paired into one spatial record.
  5. Share. The record is packed as an episode and lands in the open layer as a lesson any team can train on.

Capture

First-person capture is what the human sees and what their hands do. It is the part robots never get from simulation: the tiny pause before lifting a full pan, the second hand that steadies the lid.

StreamRateContent
ego.rgb30 fpsPassthrough video from the headset
ego.hands90 Hz26 joints per hand, metres, headset frame
ego.head90 Hz6-DoF head pose
ego.eventson changeLabelled moments: reach, grip, lift, pour, release

Ground

The exocentric view comes from an iPhone 12 Pro or newer, or an iPad Pro, standing somewhere it can see the work. It gives the room a volume and the objects a size, so the robot learns the kettle is 24 cm tall and not just yellow.

WARNINGDo not hold the exo phone in your hand while you capture. A moving exo camera turns ground truth into a second opinion.

Sync

sync(streams, opts) takes one stream per device. For each device it looks at every event it shares with the reference device and takes the median time difference as that device's offset. The median ignores the one event where somebody sneezed.

const { offsets, drift, locked, streams } = sync(input, { reference: "glasses", tolerance: 1 });
// offsets: { glasses: 0, iphone: 37.7, ipad: -21.65 }  milliseconds to add
// locked:  true when the worst remaining spread is within tolerance

Fuse

fuse(ego, exo, opts) walks both streams in time order and pairs each ego frame with the nearest exo frame. Pairs further apart than window milliseconds are dropped instead of guessed.

import { fuse } from "https://commonsenselabs.vercel.app/lib/commonsense.js";
const pairs = fuse([{ t: 0 }, { t: 11 }, { t: 22 }], [{ t: 1 }, { t: 12.5 }, { t: 40 }], { window: 8 });
// 2 pairs, dt = [1, 1.5]. The frame at 22 ms has no partner and is left out.

Share

episode(frames, meta) packs fused frames as an RLDS-style episode with is_first and is_last flags, so it loads into the same loaders your team already uses.

const ep = episode(pairs, { task: "pour tea", device: "quest3" });
// { format: "rlds/1", episode_metadata: { task, device, steps, toolkit }, steps: [...] }

Lessons

A lesson is the short human sentence behind an episode: an object and a rule. lesson(object, rule) gives it a stable id, so the same lesson captured by a thousand people lands in one place and counts up instead of duplicating.

lesson("Kettle", "Pour from the spout");
// { id: "cs_0a7450c6", object: "kettle", rule: "Pour from the spout", captures: 1, obvious: true }

API

FunctionReturnsNotes
sync(streams, opts?){offsets, drift, locked, streams}Needs at least two streams. opts.reference, opts.tolerance (ms, default 1)
fuse(ego, exo, opts?){t, dt, ego, exo}[]opts.window in ms, default 8
episode(frames, meta?)RLDS-style objectThrows on an empty list
lesson(object, rule, opts?){id, object, rule, captures, obvious}Id is FNV-1a of object and rule
VERSIONstringCurrently 0.3.1

Formats & devices

FormatKindUse it for
HDF5HierarchicalRaw arrays, offline analysis
ROS BagRobot-nativeReplaying into an existing ROS stack
RLDSTensorFlow DatasetsEpisode-based training, what episode() emits
Open X-EmbodimentInteroperableCross-robot training mixes
DeviceRoleStreams
Meta Quest 3 · Quest ProFirst-personrgb, hands, head
Apple Vision ProFirst-personrgb, hands, head
iPhone 12 Pro+LiDAR · exocentricdepth, rgb
iPad ProLiDAR · exocentricdepth, rgb

Errors

CodeThrown byMeaning
CS_SYNC_NEEDS_TWOsyncOne device cannot disagree with itself. Pass two or more.
CS_NO_SHARED_EVENTSsyncA device saw nothing the reference saw. Usually it was pointed at the wall.
CS_EMPTY_EPISODEepisodeNo fused frames. Check the fuse window.
CS_LESSON_INCOMPLETElessonA lesson needs both an object and a rule.

Limits

$COMMON

$COMMON is the token of the commons. One billion supply, nothing minted after, zero tax, no admin key. The contract and links below are read from the main page, so they are always the same as there.

FieldValue
Ticker$COMMON
Supply1,000,000,000
Tax0 / 0
OwnershipRenounced
ChainSolana

FAQ

Why record obvious things?

Because nobody does. Everything a toddler knows about cups is missing from robot training data, since it never seemed worth writing down.

Do I need expensive hardware?

No. A headset you may already own and a phone with LiDAR. That is the whole rig.

Can I use the module in production?

It is small, has no dependencies and does exactly what this page says. Read it first, it takes five minutes.

Where is the contract?

In the token section above, as soon as it exists. Until then the chip says soon.