1. 빌드는 됐는데 감지가 안 됨

코드를 다 짜고 빌드도 통과했는데 Play하니 차가 과속방지턱을 그냥 지나감

속도 줄임 같은 거동이 전혀 없었고 로그도 안 찍힘

UE_LOG(LogTeam24, Log, TEXT("[Bump] Called. VehicleSpeed=%.0f"), VehicleSpeed);
... 액터 발견 시 ...
UE_LOG(LogTeam24, Log, TEXT("[Bump] Found '%s': ForwardDot=%.0f, Lateral=%.0f, ScanDist=%.0f"),
    *Candidate->GetName(), ForwardDot, LateralComp.Size(), ScanDist);
... 통과 시 ...
UE_LOG(LogTeam24, Log, TEXT("[Bump] HIT! Slowing to %.0f"), BumpSlowSpeed);
... 함수 끝 ...
UE_LOG(LogTeam24, Log, TEXT("[Bump] Done. Total=%d, Tagged=%d"), TotalActors, TaggedActors);

 

Play해서 로그를 봄

 

함수는 호출되고 있음

액터도 찾고 있음 (Tagged=1)

거리도 ScanDist 안쪽 (998 < 1103)

그런데 HIT가 안 찍힘 → 어디서 끊기지?

AI의 도움을 받아 코드를 다시 보니 범인이 Lateral 필터였음

if (LateralComp.Size() > 300.f) continue;

 

LateralComp가 629인데 한계가 300

매번 통과 못 하고 다음 액터로 넘어간 것

(액터의 피벗이 메시 중앙이 아니어서 좌표가 한쪽으로 치우쳤거나 차와 액터의 가로 정렬이 생각보다 크게 어긋난 듯)

원인을 더 파지 않고 일단 한계를 800으로 풀었음 → 옆 차선 과속방지턱이 따로 없는 환경에서는 그 보호가 굳이 필요 없었으니까

 

 

Hit 뜸

 

2. 속도는 줄였는데 차가 붕 뜸

감지가 작동하니 다음 문제

차가 과속방지턱을 잘 줄이긴 하는데, 다 못 줄이고 통과해서 붕 뜸

로그를 보면 발견된 순간 ForwardDot이 51cm

즉 과속방지턱이 차 코앞에 있을 때야 발견됨

그 사이 거리는 1m도 안 됨 → 속도를 800까지 줄일 시간이 절대적으로 부족

원인은 검색 거리(ScanDist)가 929cm, 즉 9m로 짧았던 것

시속 70km(1944cm/s)로 달리는 차가 9m 가는 시간은 약 0.5초

0.5초 안에 1944에서 800까지 줄이려면 거의 급정거 수준의 감속률이 필요한데 자율주행의 부드러운 감속은 그 속도로 줄이지 못함

검색 거리 파라미터(BumpScanBase 500, BumpScanSpeedFactor 0.3)가 너무 작았음

70km/h(1944cm/s)에서 30km/h(800cm/s)로 줄이려면 약 1144cm/s 만큼 감속 필요
SplineFollower의 DecelRate가 약 2.6 (날씨 적용 후) → 초당 약 800cm/s 감속
즉 약 1.4초 필요 → 그동안 가는 거리 약 19m
거기에 약간 여유 = 약 25m 정도가 적정

 

BumpScanBase 1000, BumpScanSpeedFactor 0.8을 도출함

70km/h에서 ScanDist = 1000 + 1944×0.8 = 2555cm, 약 26m → 계산과 맞음

이 값으로 차는 잘 통과함 → 더 이상 붕 뜨지 않음

 

3. 잘 통과하긴 하는데 속도를 너무 확 줄임

 

 

이번엔 다른 문제

차가 과속방지턱을 잘 넘긴 했는데 70km/h에서 26km/h까지 떨어지는 시간이 1초

1초에 44km/h가 사라지는 건 실제 차량 거동으론 급제동이고 사람이 타고 있다면 앞으로 쏠릴 수준

자율주행 안전성을 시연하는 시뮬레이터에서 그렇게 보이는 건 의도와 맞지 않음

같은 증상이지만 원인이 다를 수 있다는 점을 의식해야 했음

"감속 자체가 너무 빠르다"와 "감속 시작이 늦어서 짧은 시간에 압축된다"는 같은 증상(1초에 확 떨어짐)으로 보이지만 원인이 다름 → 로그를 다시 봄

ScanDist=2555cm에서 발견하면 70km/h로 거기를 도달하는 시간은 약 1초

감속률 자체가 문제가 아니라, 줄일 시간이 짧아서 그 시간에 압축된 것

-> 검색 거리를 더 키워서 줄일 시간을 늘리자

 

다만 너무 키우면 30km/h 같은 저속에서도 한참 전부터 줄이는 차가 되어 답답해짐 → 균형점 필요

70km/h(1944cm/s) → 25m가 적정 (1.4초 감속)
50km/h(1390cm/s) → 18m면 충분 (1초 감속)
30km/h(830cm/s)  → 12m면 충분 (0.5초 감속, 어차피 줄일 양 적음)

 

위 세 조건을 모두 만족하는 BumpScanBase와 BumpScanSpeedFactor를 역산

BumpScanBase 1200, BumpScanSpeedFactor 1.2가 나옴

30km/h: 1200 + 830×1.2 = 2196 = 22m  (저속이라 약간 후하긴 하지만 OK)
50km/h: 1200 + 1390×1.2 = 2868 = 29m
70km/h: 1200 + 1944×1.2 = 3533 = 35m

 

이 값으로 Play하니 자연스러웠음

 

 

핵심은 두 가지

  • 줄이는 속도(DecelRate)를 직접 만지지 않았다는 점. DecelRate는 곡률 감속과 도로 끝 정지에도 쓰이는 공용 값이라 과속방지턱 때문에 만지면 다른 시스템에 부작용이 감
  • 검색 거리로 시간을 벌어줬다는 점. 같은 감속률이어도 시간이 길어지면 결과적으로 부드럽게 줄어듦

 

+ Recent posts