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는 곡률 감속과 도로 끝 정지에도 쓰이는 공용 값이라 과속방지턱 때문에 만지면 다른 시스템에 부작용이 감
- 검색 거리로 시간을 벌어줬다는 점. 같은 감속률이어도 시간이 길어지면 결과적으로 부드럽게 줄어듦
'프로젝트 > 자율주행 위험구간 분석 시뮬레이터' 카테고리의 다른 글
| 언리얼 엔진으로 만든 자율주행 위험구간 분석 시뮬레이터 (0) | 2026.05.26 |
|---|---|
| 전방 감지 기반 속도 조절 시스템 (과속방지턱과 NPC 차량) (0) | 2026.05.22 |
| [트러블슈팅] 캐싱·결합·잘못 짚은 변수·가중 지수 (0) | 2026.05.19 |
| 주행 위험 감지 시스템 로직 구성 (0) | 2026.05.19 |
| [트러블슈팅] 터널과 날씨 시스템의 충돌 (0) | 2026.05.19 |
