A robot that acts out a quantum circuit — its body becomes a physical Bloch sphere, replaying every gate and narrating as it goes.
The head rises to |0⟩, a Hadamard tips it to superposition, a CNOT entangles a pair, and a measurement snaps it to a definite state.
A single-qubit pure state |ψ⟩ = cos(θ/2)|0⟩ + eiφ sin(θ/2)|1⟩ has Bloch coordinates (θ, φ). Reachy Bloch drives one robot channel per coordinate.
| Quantum quantity | Robot channel | Convention |
|---|---|---|
| θ — polar angle | Head pitch | |0⟩ → head up (−30°), |1⟩ → head down (+30°), |+⟩ → level. |
| φ — azimuth | Head yaw | Mapped 1:1 across ±180°, so |+i⟩ → +90°. Phase becomes a head turn. |
| phase / concurrence | Antennas | A redundant phase cue for one qubit; for two, the antennas droop with concurrence (entanglement). Capped at ±60°. |
| qubit 1 (reduced θ) | Body yaw | Two-qubit only — qubit 1's reduced polar angle, scaled across a gentle ±60°. |
| measurement | Cartoon snap | The head snaps to the measured pole; entangled qubits always collapse together. |
Pure-Python maths and circuit logic (unit-tested off-robot); the hardware layer is import-guarded so the package stays testable without the SDK.
Steps the circuit instruction-by-instruction, evolving and collapsing one statevector so entangled measurements correlate. Aer locally; IBM for the real final shot.
Statevector → Bloch (θ, φ) via Pauli expectations → head / antenna / body pose. Computes concurrence.
Per-gate animation styles and the measurement snap, plus narration timed to each gate.
Smooth goto_target moves on the head, antennas and body — in sim or on hardware.
Six circuits ship built-in. Or upload your own 1–2 qubit QPY file straight from the control panel — it's validated, diagrammed and played, with unknown gates narrated generically.
from qiskit import QuantumCircuit qc = QuantumCircuit(2, 2) qc.h(0) # superposition qc.cx(0, 1) # entangle qc.measure([0, 1], [0, 1])
from qiskit import QuantumCircuit, qpy qc = QuantumCircuit(1, 1) qc.h(0); qc.t(0); qc.h(0) qc.measure(0, 0) with open("my_circuit.qpy", "wb") as f: qpy.dump(qc, f) # then upload my_circuit.qpy in the control panel
Also baked in: hadamard_demo, bloch_tour (H·S·T·Z·H), superdense_dance, deutsch_jozsa, and grover_2q (search finding |11⟩).
A built-in web page picks the circuit — or uploads your own .qpy — shows its diagram, toggles narration and backend, and lets you drop in API keys, all live with no restart.
The gate-by-gate dance is always simulated (you can't pause a live quantum job mid-circuit). Switch the backend and the final measurement comes from real hardware.
Local statevector simulation via Qiskit Aer — the whole circuit runs on the machine driving the robot, with no account and no queue.
The trajectory is Aer-simulated; the final shot runs on a real IBM Quantum backend. The robot does a "thinking" idle sweep while the job queues, then narrates the truth: "the measurement came from ibm_brisbane, moments ago."