Skip to content

Meb opendbc sync - #505

Open
tjddyd0130 wants to merge 3 commits into
ajouatom:carrot-wipfrom
tjddyd0130:meb-opendbc-sync
Open

Meb opendbc sync#505
tjddyd0130 wants to merge 3 commits into
ajouatom:carrot-wipfrom
tjddyd0130:meb-opendbc-sync

Conversation

@tjddyd0130

Copy link
Copy Markdown
Contributor

변경 내용

이번에 ID.4가 commaai/opendbc에 공식 포팅되어 (b4ef5e1 기준, CARS.md Upstream 등급), 공식 코드와 carrot MEB 포트를 파일 단위로 대조했습니다. 확인된 개선점을 이식하고, 대조 과정에서 발견한 기존 결함도 함께 수정했습니다. 전 항목 ID.4 MK1/MK2 실차 rlog로 검증했습니다.

1. 레이더 거리/상대속도 스케일 12% 오차 수정 (체감 변화 있음)

  • Strukturen_01Long_Distance (0.07,-6) → (0.0625,-3.75), Rel_Velo (0.28,-143.36) → (0.25,-128)
  • 순정 계기판 절대거리(MEB_ACC_01.Lead_Distance)와 rlog 3개 전수 대조: 신규 스케일 잔차 RMS 0.56m, 기존 스케일 2.1m (8~86m 구간)
  • 기존에는 리드 거리·상대속도를 약 12% 크게 읽어 추종 간격이 목표에 수렴하지 못하고 가까워졌다 멀어졌다 반복했습니다. 수정 후 실주행에서 추종 간격 개선 확인.

2. 정차 홀드 해제 시 램프 상태(LOESEN_UEBER_RAMPE) 경유

  • ACC_Anforderung_HMS를 HALTEN(1)/ANFAHREN(4)에서 KEINE_ANFORDERUNG(0)으로 직행시키면 차가 P로 폴트날 수 있습니다 (commaai/opendbc #3626에서 확인된 내용, #501의 근본 원인과 동일 계열)
  • 직전에 홀드 계열을 보냈고 5km/h 미만이면 5(램프)를 거쳐 해제하도록 수정
  • accFaulted 첫 프레임(CC.enabled가 아직 살아있는 구간)에도 같은 직행이 나갈 수 있어 disengage 램프를 타도록 수정

3. VMM_02.Long_Control_Inhibit 반영 (신규 신호)

  • 저속 급제동 직후 차가 종방향 제어를 일시 거부하는 구간. 이때 출발요청을 넣으면 TSK가 폴트납니다
  • 해당 구간에는 출발요청 차단 + 예정된 TSK 폴트로 보고 크루즈 오해제 방지
  • DBC에 시그널 추가 (52|2@1+). MK1/MK2 로그 모두 평시 1(not_inhibited)로 안정 수신 확인

4. 도어 열림 감지 수정 (기존에 동작하지 않던 기능)

  • 실차 검증 결과 MK1/MK2 모두 Gateway_72.ZV_02_alt=1 고정, 즉 도어의 실제 소스는 ZV_02(0x583)이고 기존에 읽던 Gateway_72 도어비트는 항상 0 → 문 열림이 감지되지 않던 상태였습니다
  • commaai/opendbc 방식으로 ZV_02_alt 분기 추가

5. 조향 파워 운전자 개입 반응 좌우 비대칭 수정

  • 부호 있는 steeringTorquenp.interp에 넣어 음(-) 방향 개입에서는 파워가 감소하지 않던 문제. abs()로 수정 (commaai/opendbc 동일)

6. steeringPressed 5프레임(50ms) 디바운스

  • 노면 요철 한 방에 개입 판정되어 곡률 PID unwind/override가 튀는 것 방지. 임계값(0.6Nm)은 실차 검증값 유지

7. 기어 소스 판정을 핑거프린트 기반으로 (ALT_GEAR)

  • MEB_GEN2 플래그 하드코딩 대신 Gateway_73(0x3DC) 존재 여부로 판정 (commaai/opendbc 동일, 플래그 값 32 동일)
  • MK1 실측: 두 기어 소스 1205/1205 프레임 완전 일치 확인 후 전환

8. 기타

  • vw_meb.dbc의 BO_ 591 이중 정의(MEB_Distance_01/Strukturen_01) 제거
  • 레이더 가림 감지: Distance_Status != 0radarUnavailableTemporary
  • ESP 상태 실측 (espDisabled/espActive ← ESP_21), EA 활성 개입(3~6) → carFaultedNonCritical
  • acc_type을 순정 레이더 ACC_18.ACC_Typ에서 실측 (RX CRC MK1/MK2 각 3000프레임 전수 통과 확인, 카메라 하네스는 기존 2 고정 유지)
  • ACC_18.Speed 11→12비트 (vw_meb_2024/commaai와 통일)

검증

  • [V] 관련 테스트를 실행했습니다.

  • [] 사용자에게 보이는 동작이 바뀌면 docs/user/kodocs/user/en의 연결된 문서 쌍을 함께 수정했습니다.

  • 파이썬 전 파일 컴파일 통과, DBC 파싱/비트 중복 검사 통과

  • 레이더 스케일: 순정 계기판 절대거리와 rlog 3개 전수 대조 (위 수치)

  • 홀드 램프: P 폴트 발생 rlog로 기존/신규 로직 시뮬레이션 대조 (기존: 4→0 직행 재현, 신규: 4→5→0)

  • ACC_18 RX CRC: MK1/MK2 각 3000프레임 전수 통과

  • ID.4 MK1 실차 주행 확인 (추종 간격 개선 체감 보고)

Docs-Not-Needed: 차량 내부 CAN 신호 처리 및 제어 로직 수정으로, 사용자 설정/UI/사용법 변화가 없습니다.

claude added 3 commits August 19, 2026 09:17
commaai/opendbc(b4ef5e1)에 ID.4가 공식 포팅되면서 확인된 내용을 반영한다.

1) 정차잠금 해제 시 램프 상태 경유 (P 폴트 방지)
   ACC_Anforderung_HMS 를 HALTEN(1)/ANFAHREN(4) 에서 KEINE_ANFORDERUNG(0) 으로
   직행시키면 차가 P 로 폴트난다 (업스트림 주석에 명시). 사이에 LOESEN_UEBER_RAMPE(5)
   를 끼워 HOLD_RELEASE_SPEED(5km/h) 에 도달할 때까지 유지한다.
   기존 hold_release_frames 로직은 그대로 두고(실차 검증됨) 그 뒤에 램프를 덧댄다.
   acc_faulted 도 즉시 0 으로 떨어지지 않고 기존 disengage 램프 경로를 타게 했다.

   실측 rlog(53540fdc, MK1) 재현: t=770.59s 에 esp_hold 가 풀리는 순간
   4(ANFAHREN) -> 0(KEINE_ANFORDERUNG) 직행이 기록되어 있고 직후 P 진입.
   신규 로직 시뮬레이션 결과 1 -> 4 -> 5 -> 0 (5km/h 도달 후) 로 바뀐다.

2) VMM_02.Long_Control_Inhibit 반영
   저속에서 운전자가 세게 제동한 직후 차가 종방향 제어를 일시 거부하는 구간.
   이때 ACC_Anfahren 을 보내면 TSK 가 폴트난다. DBC 에 시그널(52|2@1+)을 추가하고
   - 예정된 TSK 폴트로 보고 accFaulted 오해제를 막는다
   - 해당 구간에는 출발요청(starting)을 내지 않는다
   실측 검증: MK1/MK2 로그 모두 평시 1(not_inhibited) 로 안정적으로 읽힘.

3) 조향 파워의 운전자 개입 반응 좌우 비대칭 수정
   부호 있는 steeringTorque 를 np.interp 에 넣어 음(-) 방향 개입에서는 항상
   POWER_MAX 로 클램프됐다. abs() 로 바꿔 양쪽 개입에 동일하게 반응한다.

4) 기어 소스 판정을 핑거프린트 기반으로 (ALT_GEAR)
   MEB_GEN2 하드코딩 대신 Gateway_73(0x3DC) 존재 여부로 판정한다.
   실측 검증: MK1 은 두 메시지가 모두 존재하며 GE_Fahrstufe 가 1205/1205 프레임
   완전 일치, MK2 는 Gateway_73 만 존재.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SWJonzhWaNapSWhpXyZDFm
전 항목 MK1/MK2 실차 rlog로 검증 후 적용.

1) 레이더 거리/상대속도 스케일 수정 (가장 중요)
   Strukturen_01 의 Long_Distance (0.07,-6) -> (0.0625,-3.75),
   Rel_Velo (0.28,-143.36) -> (0.25,-128). 순정 계기판 Lead_Distance(절대거리)와
   3개 로그 전수 대조: 0.0625 는 잔차 RMS 0.56m, 기존 0.07 은 2.1m (8~86m 구간).
   기존 스케일은 거리/속도를 약 12% 크게 읽고 있었음 -> 리드가 실제보다 멀어 보여
   추종/제동 타이밍이 늦는 방향의 오차였다. commaai/opendbc 값과 일치.

2) vw_meb.dbc 의 BO_ 591 이중 정의 제거
   MEB_Distance_01/Strukturen_01 이 같은 주소(0x24F)에 중복 정의돼 있었음.
   코드가 쓰는 Strukturen_01 만 남김.

3) 도어 소스 수정: ZV_02_alt 분기 (실질 버그 수정)
   실차 검증 결과 MK1/MK2 모두 Gateway_72.ZV_02_alt=1 고정, 즉 도어의 실제
   소스는 ZV_02(0x583, 5Hz)이고 기존에 읽던 Gateway_72 도어비트는 죽은 릴레이
   -> 문 열림이 아예 감지되지 않던 상태였다. commaai/opendbc 방식으로 분기.

4) steeringPressed 5프레임 디바운스
   즉시 판정 -> 50ms 연속 판정 (commaai/opendbc 동일). 노면 요철 한 방에
   개입으로 오인해 곡률 PID unwind/override 가 튀는 것 방지.
   임계값(0.6Nm)은 실차 검증값이라 유지 (업스트림은 1.0Nm).

5) ESP 상태 실측: espDisabled/espActive 하드코딩 False -> ESP_21 신호
6) 레이더 가림 감지: Strukturen_01.Distance_Status != 0 -> radarUnavailableTemporary
7) EA 활성 개입 단계(3~6) -> carFaultedNonCritical (STOCK_EA_PRESENT 한정)
8) acc_type 실측: 게이트웨이 하네스는 ACC_18.ACC_Typ 를 읽음 (RX CRC 전수 통과
   확인 후 파서 등록). 카메라 하네스는 기존 2 고정 유지.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SWJonzhWaNapSWhpXyZDFm
1) accFaulted 첫 프레임들의 HMS 0 직행 구멍 수정
   폴트가 서고 CC.enabled 가 아직 내려가기 전 몇 프레임 동안 acc_hold_type 이
   HALTEN/ANFAHREN 에서 KEINE_ANFORDERUNG(0) 으로 직행할 수 있었다 (P 폴트 위험 경로).
   disengage 램프 카운터가 accFaulted 에도 걸리도록 해 100ms 램프를 경유시킨다
   (commaai/opendbc 는 faulted 를 long_active 에 포함시켜 같은 효과).

2) vw_meb.dbc ACC_18.Speed 11 -> 12비트
   vw_meb_2024.dbc/commaai 정의와 통일. bit 247 은 미사용 확인. 실사용 범위
   (0.1 스케일, ~200km/h)에선 동작 차이 없음.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SWJonzhWaNapSWhpXyZDFm
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