강좌 & 팁
안녕하세요. 5월 말에 학교에 돌아와서 이제야 연구생활에 다시 적응이 되었네요.
이제는 로봇 소프트웨어의 구조적인 측면에 대해서 두 세편의 글을 적어보려 합니다.
로봇하면, 그것이 모바일 로봇이든 휴머노이드 로봇이건 간에 복잡한 소프트웨어가
필수적으로 들어가겠지요. 로봇은 근복적으로 하드웨어와 소프트웨어의 하모니의
장이지만, 개인적으로는 소프트웨어가 더욱 중요한 역활을 수행해 가는 추세에 있다고
말씀드리고 싶네요.
저는 무인자동차의 소프트웨어를 연구하는 사람이니까, 무인자동차와 같은 모바일 로봇을
구체적으로 예를 들어 이야기를 해볼가 합니다. 지난 주에 재미난 논문을 하나 읽었는데요,
바로 제 친구인 매튜 맥노튼 (Matthew McNaughton)이 쓴 다음의 논문입니다. 매튜는
RI의 박사생이구요, 이번에 졸업하고 구글에 입사하여 구글카 프로젝트에서 일을 하려하고
있습니다. 뭐 자기 지도교수가 크리스 움슨이니 (이 분은 현재 구글카 프로젝의 리더) 그럴
만도 하다고 보이더군요.
Software Infrastructure for an Autonomous Ground Vehicle
http://www.ri.cmu.edu/pub_files/2008/12/TartanInfrastructure.pdf
이 논문은 기본적으로 모바일 로봇의 소프트웨어의 구조에 대해서 쓴 논문입니다.
구체적으로 Urban Challenge를 위해서 카네기 멜론 대학팀인 Tartan Racing 팀이
만든 소프트웨어를 예제로 설명하고 있습니다.
[1]큰 그림
기본적으로 모바일 로봇이라면 다양한 바퀴달린 로봇을 이야기 하지만, 이곳에서는 차량만한
큰 사이즈의 로봇을 이야기합니다. 예를 들어 무인자동차, 무인 장갑차, 무인 탱크 같은 놈들이
되겠지요. 이런 놈들은 기본적으로 (기능적으로)
Mission planner
Behavior
Perception
Motion planner
Low level control
등으로 분류됩니다. 예를 들어 무인자동차를 타고 집에서 회사로 출근을 한다고 생각해 보지요.
우선 현재 위치는 집의 GPS 좌표가 될 것이고 목적지로 회사의 GPS 좌표를 입력합니다.
그러면 우선 Mission planner 가 미션을 생성하겠지요. 집에서 회사로 가기위한 최단의 경로을
검색하고 지나가야 할 중요 중간 지점들을 만들어 냅니다. 그럼 바로 현재 위치에서 다음 중간
지점으로 가기 위해서 Behavior 단에서 수행해야할 행위들을 reasoning 하게 됩니다. Behavior
에서 다음에 할 행위를 결정하면 그것을 수행하기 위한 하위 미션인 (짧은) 모션을 플래닝하게
되는 것이지요. 즉, 모션 플래너를 위한 problem definition을 만들어 모션 플래너에게 던저주게
되는 것이지요. 실제 하는 일은 경로들을 생성시키고 가장 비용이 작게 드는 경로를 최적화를
통하여 찾아내고, 마지막으로 control 루틴들을 사용하여 자동차(로봇)를 제어하게 됩니다.
이 모든 미션을 수행하는 단계 단계에서 perception 단은 필요한 정보들을 전해 주게 됩니다.
퍼셉션은 로봇이 자기가 처한 환경을 인식하고 과정입니다. 세상에 대한 자기의 이해 레벨로
표현된 정보를 behavior 단이나 motion planning 단에 전달해 주는 것이지요.
다음 그림을 전체적인 구조를 그림을 표현한 것입니다. 한장의 그림이 백 마디 말보다 낫죠 ? ㅋ
제가 퍼셉션에 대한 연구를 주로 하다보니, 퍼셉션 박스에 대한 내부를 많이 그려 놓았네요. 실은 이 구조가 저희 Urban
Challenge 팀이 만들어 놓은 구조 (정보의 종류) 입니다. 3개의 점선으로 된 박스들을 통틀어 퍼셉션 단이라고 봅니다.
위의 그림에 나와 있는 구조를 실제 로봇차량에 구현하려면 참 복잡하겠지요 ? 그래서 소프트웨어 인프라스트럭처만을
고민하는 사람들이 또 있습니다. 참 다양한 연구들이 많지요. 그래서 그들이 기반 구조를 만들어 놓구요, 그 위에 각
behavior하는 사람
퍼셉션 하는 사람
미션 플래닝 하는 사람
모션 플래닝 하는 사람
들이 개인으로 또는 주로는 그룹으로 각 기능들을 구현하게 되는 것입니다. 모든 그룹들은 소프트웨어 인프라스트럭처에서
제공하는 모든 프로토콜을 다 잘 지키면서 프로그래밍을 하는거죠.
이글을 그 소프트웨어 인프라스트럭처에 대한 설명을 하고자 하는 것이니까요, 주된 컴포넌트 로는
Task library
Configuration library
Data logging library
Process launching system
Operator interface
Inter-Process Communication
등이 되겠습니다. 자, 이런 각 컴포넌트에 대한 대략적인 설명은 다음 글에게 계속 하도록 하겠습니다.
갑자기 잠이 쏟아지네요.