파이썬 Streamlit을 활용한 차량 물리 접지력 시뮬레이터 (콰트로 vs 후륜)

안녕하세요. '잡학다식 개발자'입니다.
Python의 Streamlit과 Matplotlib을 활용하여, 차량의 구동 방식과 노면 상태에 따른 물리적 접지력(Traction) 변화를 실시간으로 렌더링하는 시뮬레이터를 제작해 보았습니다.
웹 프론트엔드 구축 없이 Streamlit의 세션 상태st.session_state)와 상호작용 위젯을 활용하여, 조건 변경 시 차트가 즉각적으로 반응하도록 구현한 토이 프로젝트입니다.
### 💡 핵심 구현 로직 (Traction Mapping)
차량의 그립력은 타이어 종류와 노면 상태의 상성 데이터, 그리고 구동 방식(AWD/RWD)에 따른 동력 분산 보너스를 계산하여 산출합니다.
# 업데이트된 타이어 마찰 계수 데이터베이스
friction_map = {
"익스트림 서머 (넥센 SUR4G, 한국 RS4 등)": {"마른 아스팔트": 1.2, "빗길": 0.6, "눈길": 0.1},
"UHP 서머 (미쉐린 PS4S, 피렐리 P Zero 등)": {"마른 아스팔트": 1.1, "빗길": 0.8, "눈길": 0.15},
"프리미엄 사계절 (미쉐린 MXM4 등)": {"마른 아스팔트": 0.9, "빗길": 0.7, "눈길": 0.3},
"윈터 타이어 (브리지스톤 블리작 등)": {"마른 아스팔트": 0.8, "빗길": 0.6, "눈길": 0.6}
}
base_mu = friction_map[tire_type][road_cond]
drivetrain_bonus = 1.5 if drivetrain == "사륜구동(AWD/Quattro)" else 1.0
traction_score = base_mu * drivetrain_bonus
# 에어로 효과 실시간 반영 (고속 주행 다운포스)
if apply_aero:
traction_score += 0.15이 계산식을 통해, 일반 승용차가 절대 안전 기준선(0.9G)을 넘나드는 과정과 F1 레이스카의 압도적인 물리적 한계치(4.5G)를 동일한 스케일의 차트에서 동적으로 비교합니다.
🔗 소스 코드 및 실행 안내
구체적인 작동 원리와 코드가 실제 자동차의 물리 법칙과 어떻게 매칭되는지에 대한 자세한 설명은 아래 유튜브 콘텐츠를 참고해 주시기 바랍니다.
▶️ 시뮬레이터 구현 및 물리 로직 해설: https://youtu.be/j4q25_HD5Ik
💻 GitHub 저장소 (전체 코드): https://github.com/gohard-lab/quattro_simulator
직접 실행해 보기:
댓글을 남기려면 로그인이 필요합니다.
로그인 후 이 페이지로 돌아와 바로 댓글을 남길 수 있습니다.