# PPE Motion Analysis

> A local tool that turns Xsens motion capture into repeatable comparisons between protective-equipment designs: the same subject and the same task, with one piece of gear changed. A command line and a browser workspace drive the same services.

- Author: Benjamin Zhuang
- Category: Motion-capture analytics
- Context: CMU MSE practicum · sponsored by MSA Safety
- Years: 2026
- Stack: Python, FastAPI, NumPy, SciPy, OpenSim, SQLite, Parquet, React, TypeScript, Playwright
- Source: https://bitbucket.org/msasafety/kinematic-analysis (private repository)
- Web page: https://benjaminnnnnn.github.io/portfolio/ppe-motion/

**Does the gear change how a firefighter moves?**

## Key figures

- A / B: matched trials with one gear change
- 9: measurement rules the code must hold to
- 127.0.0.1: captures stay on the operator's machine

## Compare gear, not people.

MSA Safety designs protective equipment. The practicum team built a tool for its engineers: capture a subject in Xsens MVN, import the recording, record what was worn, divide it into tasks, run the analysis, then compare one configuration against another on matched trials.

## Find the tasks in the motion.

A study is usually captured without pausing between exercises. The tool drafts task boundaries from joint-angle movement: where the body goes still, and where one exercise flows into the next. With a protocol chosen, it cuts the recording into exactly the tasks that protocol prescribes. The operator confirms the boundaries before they count.

The backend is one domain model with adapters for Xsens files, OpenSim, SQLite, and Parquet. Dependencies point inward, and a test fails when they do not. The browser's API types are generated from the backend schema.

## No score, no p-value.

The tool reports differences on matched trials and which direction each metric favours. It does not produce an overall gear score, a significance test, or a causal claim, and missing measurements stay missing.

The recordings and repository belong to the sponsor, so this page uses drawings instead of screens. There is no machine-learning model here; task detection is signal processing.
