LocoHub¶
Researchers collect locomotion datasets with different sampling schemes, variable names, and metadata conventions, which makes cross-study analysis slow and error-prone. Manually processing each dataset typically takes hours per person and often requires extra post-processing to repair data issues and align conventions, and folks without a biomechanics background often lack the knowledge to even start that cleanup. LocoHub standardizes these independent datasets into a shared schema, percent-normalized gait cycles, and validated metadata so you can compare studies, reproduce analyses, and build new models without reformatting everything from scratch. Standardized biomechanical datasets and simple tools to load, filter, and analyze them in Python and MATLAB.
What the data looks like¶
Each row is one point in a percent‑normalized gait cycle (typically 150 samples from 0–100%). Columns include subject/task metadata and standardized biomechanical variables.
| subject | subject_metadata | task | task_id | task_info | step | phase_ipsi | knee_flexion_angle_ipsi_rad | hip_flexion_moment_ipsi_Nm_kg |
|---|---|---|---|---|---|---|---|---|
| UM21_AB01 | age:25,sex:M,height_m:1.75 | level_walking | level_walking_normal | speed_m_s:1.2,incline_deg:0 | 1 | 0.00 | 0.524 | 0.85 |
| UM21_AB01 | age:25,sex:M,height_m:1.75 | level_walking | level_walking_normal | speed_m_s:1.2,incline_deg:0 | 1 | 0.67 | 0.531 | 0.82 |
| UM21_AB01 | age:25,sex:M,height_m:1.75 | level_walking | level_walking_normal | speed_m_s:1.2,incline_deg:0 | 1 | 1.33 | 0.559 | 0.81 |
| UM21_AB01 | age:25,sex:M,height_m:1.75 | level_walking | level_walking_normal | speed_m_s:1.2,incline_deg:0 | 1 | 2.00 | 0.576 | 0.80 |
| … | … | … | … | … | … | … | … | … |
| UM21_AB01 | age:25,sex:M,height_m:1.75 | level_walking | level_walking_normal | speed_m_s:1.2,incline_deg:0 | 1 | 99.33 | 0.507 | 0.80 |
- Metadata columns:
subject, optionalsubject_metadata,task,task_id,task_info,step, andphase_ipsi. - Variable columns follow the naming convention
joint_motion_side_unit(e.g.,knee_flexion_angle_ipsi_rad,hip_flexion_moment_ipsi_Nm_kg).
More details and definitions¶
Quickstart¶
import pandas as pd
# Load phase-indexed parquet directly
df = pd.read_parquet('umich_2021_phase.parquet')
# Filter to a subject + task of interest
subset = df[(df['task'] == 'level_walking') & (df['subject'] == 'UM21_AB01')]
# Access normalized phase and a variable
phase = subset['phase_ipsi'].to_numpy()
knee = subset['knee_flexion_angle_ipsi_rad'].to_numpy()
% Load phase-indexed parquet directly (R2021b+)
T = parquetread('umich_2021_phase.parquet');
% Filter to a subject + task of interest
subset = T(T.task == "level_walking" & T.subject == "UM21_AB01", :);
% Access normalized phase and a variable
phase = subset.phase_ipsi;
knee = subset.knee_flexion_angle_ipsi_rad;
from locohub import LocomotionData
data = LocomotionData('umich_2021_phase.parquet')
subset = data.filter(task='level_walking', subjects=['UM21_AB01'])
cycles, features = subset.get_cycles('UM21_AB01', 'level_walking')
addpath('user_libs/matlab');
loco = LocomotionData('umich_2021_phase.parquet');
level = loco.filterTask('level_walking').filterSubject('UM21_AB01');
[cycles, features] = level.getCycles('UM21_AB01', 'level_walking');
Download Datasets¶
| Dataset | Tasks | Documentation | Clean Dataset | Full Dataset |
|---|---|---|---|---|
| Gtech 2021 | Level Walking, Stair Ascent, Stair Descent, Transition | Docs | Download | Download |
| Umich 2021 | Decline Walking, Incline Walking, Level Walking, Run, Sit To Stand, Stair Ascent, Stair Descent, Stand To Sit, Transition | Docs | Download | Download |
More details and validation reports: Datasets Reference.
Learn and Contribute¶
- Tutorials: Start here
- API: Overview
- Contribute data: Guide
Funding¶
This work was supported by the National Institute of Biomedical Imaging and Bioengineering of the NIH under Award Number R01EB031166. The content is solely the responsibility of the authors and does not necessarily represent the official views of the NIH.