Car Autonomous Control

지금까지 자동차/로봇의 주행과 관련하여 몇개의 글을 올렸으나, 모두 개별적 주제의 이론적 구현에 관한 기초 개념위주였다. 이 분야에서 아직 다뤄야 할것이 더 있다고 판단된다. 그러나 너무 개별적인 이론에만 치우치는 것보다는 이쯤에서 한번 정리를 할 필요가 있다고 생각된다.

우리가 일반적으로 무선조정 (radio control)에 의해 조작되는 RC car를 생각하고 비교한다면, 주행로봇이 수행하는 일을 보면 훨씬 뒤떨어져 있다고 생각된다. 그 이유는 RC car는 뛰어난 판단력과 조작능력을 가진 인간에 의해 조정되기 때문이다. 그러나, robot car는 인간의 도움없이 스스로 판단하여 목적지에 도달하는 것을 목표로 한다. 그러므로 인간의 시각등을 이용한 정보처리 능력, 판단능력과 조작능력을 스스로 행해야 하므로, 무선으로 조정되는 RC car에 비해 훨씬 다양하고 논리적인 방법론들이 구현되어야 한다. 겉모양은 다를 바 없지만  사실 완전히 다른 기계이다. 이처럼 로봇이 스스로 주행하도록 하려면 인간이 RC car를 운전할때 사용하는 정보처리 능력, 판단능력 및 조작능력이 프로그램 되어야 한다는 시각에서 판단하면, 자율주행 로봇은 아래와 같은 절차를 밟아야 할것이다.

  • 출발지 및 목적지 설정 : map 정보내에서 목적지를 설정해야 한다. 지금까지 맵정보와 목적지는 주어진것으로 생각하였다.
  • 목적지에 도달하는 path 설정 : 우리가 자동차에 사용하는 navigation과 비슷하다. 주행 경로를 여러 단계로 나누어 설정한다. A* 알고리즘등을 사용한다.
  • 주행 경로의 smoothing : 자동차의 움직임을 갑작스럽게 변화시키는 것은 좋지 않다. 주행 경로는 다음 경로등을 감안하여 부드러운 경로로 움직이도록 한다.
  • 현재의 위치 파악 : Localization이 필요한 부분이다. 여러 filter에 대해 이미 소개한 바 있다. 실제 주행에서는 여러 센서들의 역할이 절대 적이다. 현재 위치 정보를 이용하여 로봇의 주행 방향 설정에 정보로 이용한다.
  • 구간별 주행 : 구간별로 분할된 구간을 위의 정보를 사용하여 주행한다. 주행을 위해서는 자동차의 주행방향이 적절히 바뀌도록하는 제어(control) 동작이 필요하다. 특히 운전대의 control이 중요하다. 목적지에 도달하면 주행을 중단한다.

위의 단계에서 경로의 smoothing 은 그다지 중요한 부분이 아니므로 가장 중요한 control에 대한 개념을 소개하고자 한다. 이 컨트롤 개념까지 포함하면, 지금까지 다룬 내용으로 자율주행 로봇을 설계할 수 있다. Control은 사실 일반인들도 대부분 일상 생활중 자연스럽게 습득하여 사용하고 있는 개념이지만, 이론적으로 구현하려면 PID control의 구조를 알아야 한다. 공학을 전공한 사람은 이 이론을 잘 알고 있거나 적어도 한두번은 들어본 적이 있을 것이다.

PID control

PID control은 자료가 많이 있으므로 별도록 설명할 필요는 없을 것으로 보이지만, 자율 주행과 관련하여 간단히 소개하고자 한다. 일단, 아래와 같은 식으로 표현된다.

PID control eq

설정치(목표치, set point)와 현재 값과의 편차(error)를 기반으로 actuator의 조절을 통해 제어를 하는것이 기본이다. 자율 주행에 있어서 편차는 앞서 계산된 path와 localization에 의해 예측된 현재의 위치와의 차이가 컨트롤로의 error입력이 될것이다. 그러나, proportional control term만을 사용하면 offset을 피할 수 없으며, differential control term을 사용해야 overshoot를 줄일 수 있다. offset을 해결할 방안으로 integral control term이 사용된다. 각 control term에 대한 gain 값은 제어 대상이나 목표에 따라 적절한 값을 설정해야 한다. 이에 관한 내용을 구체적으로 다루기 보다는 (사실 대학의 한 과목이므로 너무 방대하다) 기본 개념만 이해하면 충분히 사용 가능하다. 실제로 PID control은 모든 control항목을 다 사용하지도 않고, 근본적 목적만 달성한다면, offset을 용인하기도 한다.

자율 주행 설계

앞서 다룬 모두 개념을 모두 종합하여 자율 주행 로봇의 설계 결과를 소개하고자 한다. 여기서는, map과 출발지 및 목적지를 제외하고 주행에 필요한 추가적인 정보는 없다. 로봇은 목적지에 도달하는 최단 거리를 설계하고, 주행 구간을 계획하여 smooth한 주행 경로를 설정하고, 설정된 주행 경로를 주행하면서 현재의 위치를 파악하기 위해 particle filter를 사용하며, 앞서 설정된 경로와 현재위치와의 차이를 이용하여 PID control에 필요한 3개의 control term을 계산하여 steering angle값을 로봇에 전달하면, 로봇은 그 steering angle에 따라 로봇의 kinematics인 bicycle model에 의해 새로운 좌표로 이동한다. 단 이 좌표는 로봇 주행에 noise가 포함되어 있으므로 정확히 알 수 없다고 가정한다. 그러므로 현재의 위치 설정은  bicycle model에 의해 계산된 값이 아니라 filter를 통해 얻어 낸다.

이와 같은 과정을 거치도록 프로그래밍을 하면, 주행 로봇은 목표지점까지 이동하게 되고, 그 이동경로 및 성능을 파악하기 위해 아래와 같이 simulation 결과를 그림으로 나타낸다. 여기서 푸른색 큰 점은 목표지점이고, 큰 붉은 원은 장애물을 의미한다(전 포스팅에서는 ‘1’로 표기하였다). 푸른색 선들은 앞서 소개한 알고리즘으로 계산된 최적 이동경로 구간이다. Smoothing 알고리즘이 포함되어 직각으로 이동경로가 아닌것을 알 수 있다. 녹색 점들은 로봇의 실제 이동 경로이다. 먼저 PID control gain값의 잘못된 설정으로 혼란에 빠진 로봇의 주행경로를 도시하였다. PID control에 있어서 제어 구조도 중요하지만 결국 gain 값의 설정이 매우 중요하다는 것을 알 수 있다.

car PID control_fail

아래 두 그림은 두가지 다른 상황(map)에서 적절한  PID control gain값을 적용하였을때 로봇의 주행 경로를 보여주는 그림이다. 두가지 모두 잘 목표지점을 최단 경로로 찾아 가는것을 알 수 있다. 최적 경로를 완벽하게 따라가지 못하는 이유는 필자가 생각하기에 크게 두가지 이유가 있다. 우선은 로봇 자체에 일부러 부가한 noise (gaussian distribution noise)에 의해 PID control의 입장에서는 system에 계속적으로 disturbance가 있다는 점이며, 현재 위치를 잡는데(localization) particle filter만으로는 오차가 있기 때문이다.

car PID control_1car PID control_2

댓글 남기기