StrollerPulse: Prior Labs의 TabPFN 기반 화면 없는 충격 및 지형 감지기
요약
StrollerPulse는 스마트폰의 가속도계 및 자이로스코프 센서를 활용하여 바퀴와 발 아래의 물리적 지형 정보를 감지하는 오픈소스 오디오 우선 장치입니다. 이 시스템은 수직 지면 반력 데이터를 TabPFN 모델에 전달하고, 그 결과를 즉각적인 음성 신호로 사용자에게 제공합니다. 이를 통해 사용자는 화면을 보지 않고도 자연 환경에서 안전하게 이동할 수 있습니다.
핵심 포인트
- 가속도계/자이로스코프를 이용해 지면 반력을 샘플링함.
- TabPFN 모델을 활용하여 운동학적 특징을 분석함.
- 화면 대신 오디오 피드백으로 위험 상황을 경고함.
- 유모차 및 러닝 시 충격 정보를 제공하여 안전성을 높임.
_이 글은 Hacktoberfest 오픈소스 AI 챌린지 1주차: 풀밭에 발을 디디다 제출물입니다.
제가 만든 것
우리가 아기를 유모차에 태우거나 달리기 신발을 신고 야외로 나갈 때, 지도 앱은 거리 이름, 대중교통 노선, 2D GPS 경로를 보여줍니다. 하지만 이들은 바퀴와 발 아래의 물리적 현실에 대한 통찰력을 전혀 제공하지 못합니다:
- 유모차 및 휠체어 이용 시: 깨진 자갈돌, 나무뿌리 돌출부, 부서지는 콘크리트는 격렬한 수직 G-스파이크와 고주파 기계적 충격을 아기의 머리와 척추에 직접 전달합니다. 이는 잠든 유아를 깨우고, 울음을 터뜨리게 하며, 부모와 보호자에게 신체적 피로를 유발합니다.
- 야외 달리기 이용 시: 단단한 아스팔트 위에서의 끊임없는 충격은 높은 지면 반력(ground reaction forces)을 무릎과 정강이에 전달하여 미세 외상 및 정강이 통증을 유발합니다. 자연의 흙길이나 잔디밭 경계는 30–50% 더 많은 운동 에너지를 흡수하지만, 도시 러너들은 자신들이 딛고 있는 표면 쿠션 비율을 거의 알지 못합니다.
- 스크린 딜레마: 흔히 알려진 '해결책'인 지형 지도를 확인하기 위해 스마트폰 화면만 응시하는 것은 아기를 밀 때 위험하며, 우리를 자연으로부터 단절시키고, Hacktoberfest의 **'풀밭에 발을 디디다(Touch Grass)'**라는 근본적인 주제를 위반합니다.
해결책: StrollerPulse
StrollerPulse는 부모와 러너들이 화면에서 완전히 벗어나 자연 속으로 들어갈 수 있도록 설계된 오픈소스, 오디오 우선 지형 감지기입니다.
표준 스마트폰에 이미 내장된 가속도계(accelerometer) 및 자이로스코프(gyroscope) 센서를 사용하여 StrollerPulse는 50 Hz 주기로 수직 지면 반력(vertical ground reaction forces)을 샘플링합니다. 2초마다, 이는 물리적으로 근거한 운동학적 특징(분산, ISO 2631 RMS 진동, 봉우리 계수(crest factor), 스펙트럼 고조파(spectral harmonics), 저크(jerk))을 추출하여 Prior Labs의 TabPFN (혁신적인 테이블 기반 파운데이션 모델)으로 전달하고, 이어버드나 휴대폰 스피커를 통해 즉각적이고 화면 없는 음성 신호를 제공합니다:
- 🟢 "잔디길 감지됨. 섀시 진동 44% 감소. 잔디 지수(Grass Index)는 현재 68%입니다."
- 🟡 "매끄러운 포장 아스팔트. 표준 주행 표면입니다."
- 🔴 "경고: 고주파 자갈 충격 감지됨 (최대 2.2g). 유모차 속도를 늦추거나 매끄러운 가장자리로 이동하세요."
휴대폰은 주머니나 유모차 손잡이 파우치에 넣어두세요. 시선은 나무들에 머물고, 귀는 나뭇잎 스치는 소리를 듣고, 아기는 방해받지 않고 잠듭니다.
데모 (Demo)
- GitHub 저장소: github.com/emarc99/stroller-pace
- 실시간 데모 비디오 및 HUD 미리보기:



인터랙티브 경험의 주요 기능 (Key Features of the Interactive Experience)
- 실시간 G-충격 원격 측정 (0–100): ISO 2631 진동 평가 표준에 기반하여 영아 척추 충격 심각도를 실시간으로 모니터링합니다.
- 잔디 쿠션 지수 (%): 여정 중 얼마나 많은 시간이 부드러운 땅 위에서 보냈는지 추적하는 누적 측정치입니다.
- 데스크톱 물리 시뮬레이터: 노트북의 리뷰어들은 실시간 파형 캔버스 애니메이션을 통해 5가지 현실적인 지형 프로필(공원 잔디밭, 매끄러운 아스팔트, 돌길 충격, 주머니 속 러너, 그리고 아스팔트 → 잔디 전환)을 테스트할 수 있습니다.
- 햇빛 모드: 한 번의 탭으로 작동하는 고대비 테마로, 정오 야외 직사광선 아래에서도 가독성을 위해 특별히 설계되었습니다.
- 화면 없는 오디오 엔진: 반복적인 잡담(chatter)을 방지하기 위해 엄격한 디바운스(debounce) 및 상태 전환 히스테리시스(state transition hysteresis)를 적용하여 네이티브 Web Speech API로 구동됩니다.
- 다이나믹 리플릿 맵: 100% 오픈 소스 OpenStreetMap 폴리라인 페인터가 매 미터를 색상 코딩합니다 (잔디는 에메랄드, 아스팔트는 호박색(Amber), 충격 위험은 장밋빛(Rose)).
코드
GitHub logo emarc99 / stroller-pace
🌿 StrollerPulse: 화면 없는 표면 충격 및 지형 감시견 (Watchdog)
부모님과 야외 러너들이 기기 화면에서 벗어나 자연과 연결될 수 있도록(‘Touch Grass’), 그리고 잠자는 영아를 격렬한 차체 진동으로부터 능동적으로 보호하고, 러너의 관절을 딱딱한 포장도로로부터 보호하기 위해 구축된 오픈 소스 AI 감시 시스템입니다.
📖 목차
⚠️ [IMG:N]
[번역된 제목]: StrollerPulse: Prior Labs의 TabPFN 기반 화면 없는 충격 및 지형 감지기
- Executive Summary
- Why TabPFN is the Core Engine
- Mathematical Formulation & Kinematic Features
- Failure Engineering: The "Pocket-Cadence" Bug
- Quantitative Benchmark (Numbers, Not Vibes)
- System Architecture
- Interactive Features & Visual HUD
- Quickstart & Local Installation
- Deployment on Render
- License
🎯 Executive Summary
부모가 유아용 유모차를 밀거나 주자가 야외로 나설 때, GPS 매핑 앱은 거리 이름과 평평한 2D 선만 표시합니다. 이들은 바퀴와 발 아래의 물리적 현실에 대한 통찰력을 전혀 제공하지 못합니다:
- 유모차 및 휠체어의 경우: 깨진 자갈길, 나무뿌리 돌출부, 예상치 못한 포트홀은 유아의 머리와 척추에 고주파 기계적 충격과 격렬한 수직 G-스파이크를 전달하여 아기를 깨우게 합니다…
전체 코드는 MIT 라이선스 하에 오픈 소스로 공개되어 있습니다:
- 백엔드: Python 3.11+, FastAPI, Prior Labs
tabpfn, PyTorch CPU, Scikit-learn, SciPy. - 프론트엔드: Vanilla HTML5, CSS3 (Nature obsidian theme with glassmorphism), Leaflet.js, Web Speech API, Canvas API.
- 배포: Render 웹 서비스 (
render.yaml&Dockerfile).
제가 구축한 방법: TabPFN이 논쟁의 여지 없는 엔진인 이유
TabPFN이란 무엇인가?
TabPFN (Prior-Data Fitted Network)은 Prior Labs가 개발하고 _Nature_에 발표한 것으로, 구조적 인과 모델(structural causal models)을 사용하여 수백만 개의 합성 데이터셋으로 학습된 테이블형 데이터용 파운데이션 모델입니다.
전통적인 테이블형 머신러닝(Random Forest, XGBoost, LightGBM)의 경우:
- 학습 전에 수백 개의 레이블링된 행을 수집해야 합니다.
- 경사 하강 루프(gradient descent loops)를 실행하거나 교차 검증 기반 하이퍼파라미터 튜닝(최대 깊이, 학습률, 정규화 등)을 수행해야 합니다.
- 적은 양의 실시간 배치(few-shot real-time batches)가 주어지면 모델이 치명적으로 과적합(overfit catastrophically)됩니다.
인컨텍스트 러닝: 테이블형 데이터를 위한 LLM 슈퍼파워
TabPFN은 마치 대규모 언어 모델(Large Language Model, LLM)처럼 작동하지만, 테이블형 행렬에 적용됩니다:
- 훈련 루프 없음: 단 60개의 물리적 지형 샘플로 구성된 보정 참조 행렬 $(X_{ ext{ref}}, y_{ ext{ref}})$과 실시간 센서 질의 행 $X_{ ext{query}}$가 주어지면, TabPFN은 트랜스포머 셀프 어텐션 레이어(Transformer self-attention layers)를 통해 **단일 순방향 전달(single forward pass)**만으로 정확한 사후 확률 클래스 $p(y|x)$를 계산합니다.
- CPU에서의 초저지연성: 당사의 벤치마크에서 TabPFN은 CPU로 추론을 수행하는 데 0.33밀리초가 걸립니다! GPU 인프라가 전혀 필요하지 않아 배포하기에 매우 가볍습니다.
- 적은 양의 도메인 적응: 작은 센서 배치로 보정되더라도, TabPFN은 단 하나의 가중치도 튜닝하지 않고 적대적 경계(adversarial boundaries) 전반에 걸쳐 100% 정확도를 달성합니다.
수학적 공식화
2.0초 간격의 슬라이딩 윈도우($N = 100$ 샘플, 50 Hz)를 사용하여, **ISO 2631 인간 진동 표준(Human Vibration Standard)**에 기반한 6차원 특징 벡터를 계산합니다:
- 수직 분산 (Vertical Variance): $\sigma_z^2 = \frac{1}{N} \sum_{i=1}^N (a_{z,i} - \mu_z)^2$\n2. RMS 진동 (RMS Vibration): $\text{RMS}_z = \sqrt{\frac{1}{N} \sum_{i=1}^N a_{z,i}^2}$\n3. 크레스트 팩터 (Crest Factor) (충격 충격도): $CF = \frac{\max |a_{z,i}|}{\text{RMS}_z}$\n4. 지배 주파수 ($f_{\text{dom}}$): 보폭 주파수(1.8–3.2 Hz)를 섀시 떨림(14–26 Hz)으로부터 분리하는 빠른 푸리에 변환 (Fast Fourier Transform, FFT) 피크 감지.
- 저크 크기 (Jerk Magnitude): $\text{Jerk} = \frac{1}{N-1} \sum_{i=1}^{N-1} \left| \frac{a_{z,i+1} - a_{z,i}}{\Delta t} \right|$\n6. 속도 정규화 (Speed Normalization): 속도 의존적 진동 진폭을 고려하기 위해 m/s 단위의 $v_{\text{gps}}$.
TabPFN은 이 행 $X = [\sigma_z^2, \text{RMS}_z, CF, f_{\text{dom}}, \text{Jerk}, v_{\text{gps}}]$를 평가하여 다음을 분류합니다:
- Class 0: 자연 지형 / 잔디길 (높은 감쇠, 낮은 RMS, 낮은 저크)
- Class 1: 매끄러운 포장 아스팔트 (적당한 감쇠, 낮은 크레스트 팩터)
- Class 2: 심각한 자갈돌 / 충격 위험 지역 (높은 RMS, 극단적인 크레스트 팩터, 격렬한 저크)
무엇이 고장났고 내가 설계로 제거한 것들
해커톤에서는 선임 개발자와 심사위원들이 무엇이 고장났는지 그리고 그것을 어떻게 해결했는지를 주목합니다. 우리가 만난 주요 아키텍처 실패 모드와 이를 제거하기 위해 엔지니어링한 내용은 다음과 같습니다:
⚠️
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기