# Course scope

> Why this course exists, what it has to make someone able to do, and the boundaries that keep it finishable.

## Now

We build sensor pipelines that end in an animated virtual skeleton. When a pose comes out
twisted, mirrored, or drifting, the team debugs by permuting signs and multiply orders until it
looks right — which means wrong fixes survive and nobody can explain the correct ones. This
course exists to replace that with intuition good enough to predict and diagnose the failure from
the conventions involved, instead of rediscovering it per bug.

**What success looks like.** Given a wrong-looking skeleton, anyone on the team names the failure
class — reflection, wrong basis, wrong multiply order, or accumulating error — before touching
code. We can state our pipeline's conventions explicitly at every boundary it crosses —
handedness, up axis, forward axis, units, quaternion component order — and cite the spec for
each. Converting a pose between Unity and glTF/three.js is a rule we can derive rather than a
snippet we copy: positions and rotations both, in both directions. Sensor-to-segment calibration
is understood as a fixed change of basis rather than a magic offset. And a new team member can
work through the lessons unaided and arrive at the same place.

**Who reads it.** Professional software developers, learning together, whose maths background
varies: calculus and linear algebra range from solid to rusty, and trigonometry and geometry are
rusty across the board. They debug real pipelines, so every lesson should be recognisable as a
bug they have shipped.

**What it covers on the sensor side.** Both modalities — IMU orientation streams and
optical/vision joint positions — including where a fused pipeline joins them.

The rules below are the constraints that follow from all of that, and the list of what this
course deliberately does not teach.

## Rules

<a id="offline-and-zero-install"></a>
### A lesson is a self-contained HTML page that opens from `file://` by double-clicking, with no build step and no network access at any point.

[why](rationale/course-scope/offline-and-zero-install.md)

<a id="both-target-conventions-are-first-class"></a>
### Unity and glTF/three.js are both first-class throughout; neither is the home convention the other is converted into.

[why](rationale/course-scope/both-target-conventions-are-first-class.md)

<a id="a-lesson-stands-alone"></a>
### A lesson stands alone without the conversation that produced it.

[why](rationale/course-scope/a-lesson-stands-alone.md)

<a id="state-the-maths-a-lesson-needs-inline"></a>
### Where a lesson needs a trig or linear-algebra fact, it states that fact inline in a line rather than assuming a remembered course or sending the reader away to revise.

[why](rationale/course-scope/state-the-maths-a-lesson-needs-inline.md)

<a id="out-of-scope-stays-out"></a>
### Rendering, shading and GPU work; Unreal and ROS/REP-103 conventions; geometric algebra and rotors; and deriving the sensor fusion filters themselves are all out of scope.

[why](rationale/course-scope/out-of-scope-stays-out.md)
