Skip to content

feat(autotuner): CarrotPilot Auto-Tuner(주행학습 자동튜닝) + 선행차 대응 종방향 제어 개선 - #434

Closed
ChanHoya wants to merge 1 commit into
ajouatom:c3-wipfrom
ChanHoya:pr-autotuner-longitudinal
Closed

feat(autotuner): CarrotPilot Auto-Tuner(주행학습 자동튜닝) + 선행차 대응 종방향 제어 개선#434
ChanHoya wants to merge 1 commit into
ajouatom:c3-wipfrom
ChanHoya:pr-autotuner-longitudinal

Conversation

@ChanHoya

@ChanHoya ChanHoya commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

개요

주행 데이터 기반 파라미터 자동 학습 시스템(Auto-Tuner)과 선행차 대응 가감속 보완(정차출발 catch-up, 고속 선제제동, 부드러운 정차 등) 종방향 제어 개선의 통합본입니다.

이전에 revert된 오토튜너 시리즈(#360, #362, #367, #374, #378, #382, #385)에서 문제가 된 파라미터 폭주(runaway)를 근본 수정하고 전면 재작성했습니다. 약 3주간(6/14~7/7) 실주행 로그 검증을 거쳤습니다.

  • 변경 규모: 39개 파일, +17,028 / -395
  • base: c3-wip (f211806) 기준으로 작성되어 fast-forward 머지 가능, 충돌 없음

1. Auto-Tuner — 주행 기반 학습 엔진 (carrot_learning.py 신규, 2,524줄)

  • Phase 0~3 학습 파이프라인: 주행 중 LAT/LONG 지표를 수집·집계해 추천 파라미터 생성 → 팝업 안내(정차 감지/30분 타이머) → 수동 확인 적용 또는 자동 적용(AutoApply). 튜닝 이력 그래프, 공장초기화(FactoryReset) 지원
  • 학습 소스 확장:
    • 수동주행 기준분포 학습 (사용자의 운전 스타일을 기준선으로)
    • 선제(teaching) 제동 학습 — 사용자가 미리 브레이크로 개입한 상황도 학습에 반영
    • 코스팅 데드밴드 학습
  • Runaway 근본 수정 (이전 revert 원인 대응):
    • reset/attribution 버그로 인한 파라미터 드리프트 수정
    • PathOffset 부호 오류, phase8 지표 계산, 감쇠 로직 수정
    • 상한 정비: JLeadFactor3 ≤ 2.0, LongActuatorDelay/LongTuningKf 상한 대폭 하향, SteerActuatorDelay 50 점프 차단
    • TFollowGap2 폭주 감소 버그 수정, EnableSpeedTF < 0 시 해당 학습 비활성
    • 토크 KpV/KiV: 오차 부호 패턴 기반 양방향 학습으로 전환

2. 선행차 대응 가감속 보완 (long_mpc / longitudinal_planner / longcontrol / carrot_functions)

항목 내용
정차 후 출발 catch-up 정지→출발 시 일시적 Gap1(최근접) 추종 + 가속 상한 부스트(최대 1.4배). 10~30km/h S-커브(smoothstep) 이징으로 급발진 방지, 40km/h에서 원래 Gap 복귀. 수동 GAP 조작 없이 출발 가속 확보
목표속도 auto 재가속 slew 리미터로 모든 상황에서 부드러운 가속, gas 오버라이드 종속, 정지출발 데드락 해소
중고속 catch-up 보강 정속으로 멀어지는 선행차(vRel>0, jLead≈0)에 t_follow 속도비례 축소 + jerk penalty 부분 복원 (저속·밀착 시 미적용)
속도-가변 차간거리 저속 t_follow↓ / 고속↑로 time-gap 역전(저속 3.4s vs 고속 1.6s) 정상화 — 실주행 로그 기반
고속 선제 제동 70km/h+ & 접근 TTC<7s 게이트에서 t_follow 선제 확대 + JLeadFactor 속도연동 증폭 → 고속 늦은 제동 대응. 정속 추종·저속에서는 무동작
선행차 깜빡임 보정 lead status 순단(레이더/비전 0.x초 놓침) 시 직전 lead를 0.3s 외삽 유지 → '없음→가속→재포착' 가감속 떨림 제거
부드러운 정차 stoppingDecelRate에 속도·쿠션 비례 감쇠 + Hyundai 정차 jerk 보간 제한(opendbc) → 마지막 순간 꿀렁임 제거
코스팅 데드밴드 LongCoastBand: 계획 가속도 0 근처 미세 진동 시 출력을 0으로 수렴(자연 회생제동/엔진브레이크 활용), 2배 이탈 임계 히스테리시스로 채터링 방지 (기본 0=비활성)
제동 onset 스무딩 제동 진입 jerk 제한 + 가감속 onset 부드럽게

3. 커브 속도 (carrot_man.py vturn_speed 재설계)

  • 거리 인지 곡률-추종 가변 속도: 기존 '최대 곡률 1점' 단일 목표 방식에서, 예측경로 각 점의 곡률로 안전속도를 구하고 거리·편안한 감속도(A_DECEL 0.85)를 반영해 '지금 허용 가능한 속도'의 최소값을 목표로 삼는 방식으로 변경
  • 효과: 멀리 있는 급커브에 일찍 완만히 사전 감속, 정점 통과 후 곡률이 풀리면 자동 증속 (커브 초입 > 중반 > 후반 가변)
  • AutoCurveSpeedFactor가 하한 floor에 막혀 무효화되던 문제 해소

4. UI

  • 웹당근 Auto-Tuner 페이지 (C4 세로화면 대응): 학습 현황·추천값·이력 그래프, Learning↔LAT/LONG 자동 연동, Apply LAT/Long 토글
  • 디바이스(C3) 설정 UI + 홈 화면 팝업 (settings.cc/home.cc), 11개 언어 번역 추가

5. 시스템/기타

  • GPS-time & 글로벌 타임존 지원 (timezone_helper.py 신규 — app > wifi > gps 우선순위, TimezoneName/TimezoneSource)
  • 웹당근 Clear All Logs 저장 실패 수정 (BYTES 파라미터 저장 타입 불일치)
  • 신규 파라미터: CarrotTunerApplyLat/Long, CarrotLearningPopupSource, CarrotLearningAutoApply, CarrotTunerFactoryReset, LongCoastBand, TimezoneName/Source, WiperActive, CarrotRainWet

🤖 Generated with Claude Code

주행 데이터 기반 파라미터 자동 학습 시스템(Auto-Tuner)과 선행차 대응
가감속(정차출발 catch-up, 고속 선제제동, 부드러운 정차 등) 종방향 제어
개선의 통합본. 이전에 revert된 오토튜너 시리즈(ajouatom#360~ajouatom#385)에서 문제가 된
파라미터 폭주(runaway)를 근본 수정하고 전면 재작성했다.

■ Auto-Tuner — 주행 기반 학습 엔진 (carrot_learning.py 신규, 2,524줄)
- Phase 0~3 학습 파이프라인: 주행 중 LAT/LONG 지표 수집·집계 → 추천
  파라미터 생성, 팝업 안내(정차/30분 타이머), 자동 적용(AutoApply),
  튜닝 이력 그래프, 공장초기화
- 학습 소스 확장: 수동주행 기준분포 학습, 선제(teaching) 제동 학습,
  코스팅 데드밴드 학습
- Runaway 근본 수정(이전 revert 원인 대응):
  · reset/attribution 버그로 인한 파라미터 드리프트 수정
  · PathOffset 부호, phase8 지표, 감쇠 로직 수정
  · 상한 정비: JLeadFactor3 ≤ 2.0, LongActuatorDelay/LongTuningKf 상한
    대폭 하향, SteerActuatorDelay 50 점프 차단
  · TFollowGap2 폭주 감소 버그 수정, EnableSpeedTF<0 시 해당 학습 비활성
  · 토크 KpV/KiV는 오차 부호 패턴 기반 양방향 학습으로 전환

■ 선행차 대응 가감속 보완 (long_mpc/longitudinal_planner/longcontrol/carrot_functions)
- 정차 후 출발 catch-up: 정지→출발 시 일시적 Gap1(최근접) 추종 + 가속
  상한 부스트(최대 1.4배, 10~30km/h S-커브 이징, 40km/h 복귀)
- 목표속도 auto 재가속: slew 리미터로 부드러운 가속, gas 오버라이드
  종속, 정지출발 데드락 해소
- 중고속 catch-up 보강: 정속으로 멀어지는 선행차(vRel>0)에 t_follow
  축소 및 jerk penalty 부분 복원
- 속도-가변 차간거리: 저속 t_follow↓/고속↑로 time-gap 역전 정상화
- 고속 선제 제동: 70km/h+ & TTC<7s 게이트에서 t_follow 선제 확대 +
  JLeadFactor 속도연동 증폭 (평상시 무동작)
- 선행차 깜빡임 보정: lead status 순단 시 0.3s 외삽 유지
- 부드러운 정차: stoppingDecelRate 속도·쿠션 비례 감쇠 + Hyundai 정차
  jerk 보간 제한(opendbc)
- 코스팅 데드밴드(LongCoastBand): 계획 가속도 0 근처 진동 시 출력을
  0으로 수렴(자연 회생제동), 히스테리시스로 채터링 방지
- 제동 진입 jerk 제한 + 가감속 onset 스무딩

■ 커브 속도 (carrot_man.py vturn_speed 재설계)
- 거리 인지 곡률-추종 가변 속도: 예측경로 각 점의 안전속도와 편안한
  감속거리(A_DECEL) 기반으로 사전 감속 시작, 정점 통과 후 자동 증속

■ UI
- 웹당근 Auto-Tuner 페이지(C4 세로화면): 학습 현황·추천값·이력 그래프,
  Learning↔LAT/LONG 자동 연동, Apply LAT/Long 토글
- 디바이스(C3) 설정 UI 및 홈 팝업 + 11개 언어 번역 추가

■ 시스템/기타
- GPS-time & 글로벌 타임존(timezone_helper.py 신규, TimezoneName/Source)
- 웹당근 Clear All Logs 저장 실패 수정(BYTES 파라미터 타입 불일치)
- 신규 파라미터: CarrotTunerApplyLat/Long, CarrotLearningPopupSource/
  AutoApply, CarrotTunerFactoryReset, LongCoastBand, TimezoneName/Source,
  WiperActive, CarrotRainWet

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ChanHoya ChanHoya closed this Jul 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants