Astral Republic

✱ LABORATORY · 실험

Dynamic Window Approach

움직이는 장애물을 피하면서 목표로 가는 로봇 — 실시간 길찾기를 직접 만져보자.

🔍 이게 뭐야?

로봇 앞에 움직이는 장애물이 있을 때, 부딪히지 않으면서도 목표 지점으로 가장 잘 가는 길을 0.1초마다 다시 계산하는 방법이야. 멀리 내다보는 게 아니라 “지금 이 순간 핸들을 어디로 꺾을까”를 푸는, 아주 실용적인 길찾기.

⚙️ 원리

  1. 가능한 속도 후보를 쫙 펼친다 — 좌/우 바퀴 속도 조합을 여러 개 만들어 본다.
  2. 1초 뒤 어디 있을지 예측한다 — 각 후보대로 갔을 때의 미래 위치를 그려본다.
  3. 점수를 매긴다 — 목표에 가까워지면 +, 장애물에 가까우면 큰 −.
  4. 제일 높은 점수를 고른다 — 그리고 0.1초 뒤, 처음부터 다시.

▶️ 직접 해보기

슬라이더를 만져봐. 장애물 회피를 0에 가깝게 내리면 로봇이 겁 없이 들이받고, 목표 가중치만 키우면 최단거리에 집착한다.

● LIVE DEMO직접 만져보세요

🛠 내 재현

원본은 Python + pygame이라 웹에선 안 돌아간다. 그래서 JS + HTML Canvas로 다시 짰다. 핵심은 9개 속도 후보를 매 프레임 평가하는 루프 하나.

for (const v of candidates) {
  const path = predict(robot, v, 1.0);
  const score = goalGain(path) * 12
              - obstacleCost(path) * 6666;
  if (score > best) best = v;
}

📝 느낀 점

장애물 회피 가중치(6666)가 목표 가중치(12)보다 압도적으로 크다. 즉 “일단 안 부딪히고 보자”가 본심. 이 숫자만 만져도 로봇 성격이 확 바뀐다.