문제 발생

  • P1과 P2가 벽 건너의 도로를 인식하여 P3에 전적으로 의존하는 조향이 일어나는 시점에는 이미 자동차가 벽과 너무 가까워졌기 때문에 P3의 값만으로는 순간적으로 높은 조향력을 낼 수가 없었다.
  • 아래는 문제 상황의 영상이다.

    1.gif

    • 차량 속도가 일정수준(80)이하일 때는 조향을 하기위한 충분한 시간이 있기 때문에 회전이 가능했지만, 속도가 100 이상 올라가게 되면 조향을 하기에 시간과 거리가 부족한 문제가 있었다.

해결 방법 고안

다음과 같은 해결 방법 중 어떤 방법이 적합할지 하나씩 시도해보았다.

  • ROI나 카메라 앵글을 올려서 벽을 더 일찍 감지하도록 하여 조향 반응성을 높인다.
  • P1의 가중치를 높여서 회전하기 시작할 때 애초에 더 빠르게 회전하게 한다.
  • 조향시 감속을 높인다.
  • 조향시 회전 스케일(배율)을 높인다.
  • P3에 의한 회전을 만들 때 사용하는 bottom_turn_boost 값을 높인다.

하나씩 적용해서 개선을 시도하자

  • ROI나 카메라 앵글을 조절하자
    • ROI와 카메라 앵글을 수정하면 아래 사진처럼 같은 코너를 볼 때, 코너 곡률이 다르게 보이기 때문에 주황선의 치우침양이 달라지게 되었고, 파라미터 세팅되어 있는 현재의 조향량과 차이가 생겨서 코너링이 불안정해졌다.
    • 시야가 더 멀어진만큼 일찍 조향을 하기 시작하지만, 코너를 돌 때 건너편 도로를 감지할 확률도 올라가서 조향이 더 불안정해졌다.
  • P1의 가중치를 높여서 회전을 빠르게 하자
    • P1 가중치 상승에 따른 회전 속도와 반응성은 높아졌지만, 회전 도중 P1이 반대로 튀었을 때 반대 방향으로 다시 돌아가려는 힘 또한 강해져서 여전히 코너를 안정적으로 돌지 못했다.
  • 조향시 감속을 높이자
    • 카메라 앵글은 일정하기 때문에 코너가 보이기 시작하는 순간 벽과의 남은 거리는 동일했고, 느린 속도로 돌 때와 빠른 속도로 돌 때 모두 다 돌기 전에 건너편이 감지되어서 가끔씩 조향이 튀는 것은 동일했다.
  • 조향시 회전 스케일을 높이자
    • 회전을 더 강하게 주는 배율을 높였지만, 건너편을 감지했을 때 원하던 회전 방향과 반대로 다시 돌아가려는 회전또한 강해졌기 때문에 조향이 불안정했다.
  • P3에 의한 회전을 강하게 해주는 bottom_turn_boost 값을 높이자
    • P3가 정상 방향으로 boost 값과 곱해져서 조향량을 크게 했지만, P3에만 의존하는 경우에는 이미 벽과 자동차 사이의 거리가 너무 가까워서 조향을 강하게 해도 다 돌지 못했다.

결론

  • 회전량을 강하게 하거나 반응성을 높이기 위해서 시야를 넓게하는 등 여러 방법을 시도했지만 조향에 어려움이 있었다.
  • 처음에는 회전량이 부족하거나 반응성이 느려서 문제라고 생각했다. 하지만 하나의 문제를 해결하면 이 두 가지 문제 모두 해결된다는 것을 깨달았다.

회전량이 부족한 것은 P1, P2가 신뢰성을 잃은 상태에서 P3만으로 조향하려 했기 때문이고, 반응성이 느린 것은 시야를 넓게 보면 P1, P2가 쉽게 건너편 도로를 감지해서 조향이 잘못되는 경우가 많아서 시야를 좁게 했기 때문이였다. 반대편이 ROI에 보일 수 밖에 없는 환경이라면, 로봇에게 반대편 영역을 무시하게끔 지시하면 어떻게 될까?

  • 나는 반대편이 “보이는 것” 자체를 막기위해 빨리 회전하려 했고, 반대가 보여서 잘못된 조향 출력이 나오면 그 출력은 무시하려고 했다.
  • 하지만 애초에 반대 영역이 보이지 않는다면?
    • 자동차가 가야 할 바로 앞 영역만 인지하므로 조향이 반대로 튈 걱정이 없다.
    • 조향이 반대로 튈 걱정이 없으니 시야각을 넓히고 도로를 더 일찍 감지해서 반응성을 높일 수 있다.
  • 내가 내린 결론은 “가장 가까운 도로(검은색)를 보고 있는 P3가 포함된 도로 영역만 허용 도로로 설정하고, 벽(흰색)에 의해 갈라진 벽 뒤의 영역(검은색)이나 P3를 감싸는 검은색 도로 영역 덩어리가 아닌 검은색 덩어리는 도로로 보지 않는다.” 였다.
  • 이 로직은 3일차에 구현하게 된다.

Updated: