초보자를 위한 로봇 프로그래밍
[쇼핑저널 버즈] ■ 로봇 프로그래밍 소개로봇이 수행하는 작업을 생각하기 전에 우리가 개인 PC에서 사용하는 소프트웨어를 살펴보자. 문서작업, 회계업무 등을 생각해 보면 당장 머릿속에서 몇 가지 소프트웨어들이 떠오를 것이다.
요즘은 사람이 하는 모든 업무들을 지원하는 각각의 소프트웨어가 존재하리라 여겨진다. 좀더 나아가 소프트웨어 작성의 관점에서 한번 생각해 보자.
우리는 원하는 소프트웨어를 만들고자 할 때 필요한 기능적 요구사항과 원하는 인터페이스를 대략적으로 작성할 수 있을 것이다. 이는 디스플레이, 키보드, 스피커, 마우스 등의 인터페이스들과 이를 통한 다수의 소프트웨어 사용 경험이 있기 때문에 가능할 것이다.
로봇의 경우 PC랑 가장 크게 구별되는 것은 첫째 하드웨어적으로 센서장치와 구동장치를 가진다는 것이다. 만약 누군가가 PC에 카메라를 달고 바퀴를 부착하고 이것을 로봇이라 할 수 있냐고 묻는다면 그렇다고 대답할 수 있다.
다만 단순히 카메라와 구동장치가 부착된 경우가 아니라 센서장치와 구동장치를 연결하는 제어 부분을 탑재하고 이 제어 부분이 자동 또는 반자동으로 구동장치를 조작하는 경우여야 한다.
일반적으로 이용되는 센서장치에는 카메라, 초음파, 적외선, 레이저, 마이크, 터치 등이 있고 구동장치는 모터, 디스플레이, 스피커 등이 있다.
특히 모터는 크기와 구동 방식이 다양하며 바퀴, 관절 등 매우 광범위하게 사용된다. 로봇이 할 수 있는 작업과 특징이 이들 센서와 구동장치에 의해서 결정된다.
다음으로 소프트웨어 측면에서 PC상의 응용과 로봇 제어 프로그램은 어떤 차이점을 가지고 있을까? 이 부분에서는 프로그램이 운용되는 환경의 차이가 프로그램의 구조적인 특징을 구별짓는다.
PC상의 소프트웨어는 실행 상태와 그 상태에서 적합한 입력 그리고 그 입력에 대한 처리가 항상 고정되어 있다. 사용자는 키보드와 마우스를 이용하여 정확하게 가능한 입력을 프로그램상에 만들어낸다.
하지만 로봇의 입력은 환경에서부터 센서가 입력받는 값이다. 환경은 우리가 통제할 수 있는 것이 아니다. 로봇 프로그램은 동적으로 변화하는 환경의 상태에 대하여 반응하는 것이다. 또한 각각의 반응에 대한 시간 제약도 있을 수 있다.
매우 빠르게 반응해야만 하는 경우와 비교적 시간 여유가 있는 경우도 있을 것이다.■ 센싱과 구동지금까지 로봇 프로그래밍이 기존 PC 응용 프로그래밍과 어떻게 다른지 간략히 살펴보았다. 그럼 이제부터 어떻게 하면 로봇 프로그래밍을 효과적으로 할 수 있는지를 살펴보자. 로봇 프로그램도 PC 응용처럼 일반적인 언어를 이용하여 구현할 수 있다.
특히나 대부분의 로봇 센서와 구동 장치 드라이브들은 c/c++언어로 구현되어 있다. 센서로부터 데이터 입력, 필터링 그리고 이를 처리하여 어떤 상태를 결정하고 이에 맞는 구동 장치를 동작시키는 제어 프로그램을 쉽게 생각할 수 있다. 이러한 간단한 제어 프로그램 구조로부터 발전시켜 보자.
초음파 센서는 주로 장애물 탐지에 활용된다. 초음파 센서로부터 입력되는 값은 정해진 주기별로 입력되는 센서로부터 특정 반사물체까지의 거리 값이다.
그냥 단순히 거리 값만을 가지고 이용할 수도 있겠지만 출동 위험 거리를 설정하고 출동 위험 인지 여부와 거리 정보를 이용한 자신의 현재 위치 정보를 대략적으로 알 수 있는 용도로도 활용할 수 있다. 또한 다른 센서 값들과 함께 특정 정보를 알아내는 데 활용할 수 있다.
이러한 좀더 고차원적인 정보를 논리적 센서 또는 상태(State) 정보라 하고 이러한 상태 정보를 얻는 모듈을 기능별로 잘 만들어 사용할 수 있다. 이제 우리는 센서를 논리적인 모듈 단위로 간주 할 수 있다.
다음으로 다수의 모터로 구성된 로봇 팔을 생각해 보자. 우리는 로봇 팔을 움직이게 하기 위하여 각각의 모터의 속도와 방향을 제어해야 할 것이다.
이를 하나의 추상적인 단위인 팔을 위, 아래, 앞으로, 뒤로 움직이는 각각의 행동(Action)으로 간주할 수 있다.
모듈은 하나가 아니라 여러 개가 있을 수 있고 모듈들간에는 데이터나 정보를 주고받을 수도 있을 것이다. 그리고 무엇보다 이러한 모듈들은 계속해서 환경으로부터 센싱된 값을 얻어오기 때문에 항상 동시에 실행되고 있어야 한다.
여기서 우리는 모듈들의 이용을 좀더 발전된 형태로 생각할 수 있다. 모듈들을 동시에 실행하고 이들간의 메시지나 데이터를 전달해주는 기능을 담당하는 프로그램을 생각할 수 있을 것이다.
이 글에서는 이를 모듈 실행엔진이라 하겠다. 그림 1은 이러한 모듈들과 실행엔진과의 관계를 예시하고 있다.
|
|
< 그림 1 > 모듈 실행엔진 |
사실 그림 1은 [4]에서 소개하는 TCA(Task Control Architecture, 태스크 컨트롤 아키텍쳐)와 같은 구조라 할 수 있다. 이 TCA와 유사하거나 이를 기반으로 좀더 발전시킨 구조가 현재 로봇 분야에서 많이 사용되는 제어구조이다.
우리는 센서와 구동장치를 추상화하고 이를 이용하여 보다 쉽게 프로그래밍 할 수 있는 방법들에 대해서 알아보았다.
지금까지 설명한 모듈들은 c/c++과 같은 범용 프로그래밍 언어로 주로 작성된다. 우리는 얼굴인식 모듈로부터 어떤 사람이 인식되었는지에 대한 정보를 얻은 다음에 음성 모듈을 통해서 '안녕하세요'라는 인사를 하는 작업을 수행하는 모듈을 실행엔진에 추가할 수 있다.
이러한 상태에 대한 행동 선택 관계와 절차를 기술한 것을 로봇 작업(Task 또는 태스크)이라 한다. 로봇 태스크를 c/c++ 프로그래밍이 아닌 다른 언어와 방법으로도 정의할 수 있는데 이제 로봇 태스크 작성에 대해서 살펴보자.■ 로봇 언어로봇 프로그래밍을 편리하게 하기 위하여 수많은 언어들이 개발되었다. 이들이 기반으로 하는 모델과 언어 또한 매우 다양하기 때문에 모든 종류들을 나열하는 것은 어렵고 대신 몇 가지 대표적인 것들에 대해서만 살펴보자.
대표적인 로봇 프로그래밍 언어는 URBI(Universal Real-time Behavior Interface)[1]과 TDL(Task Description Language)[3] 그리고 XABSL(eXtensible Agent Behavior Specification Language)[2] 등이다.
URBI는 앞에서 언급한 모듈 실행엔진의 특징인 동시성과 이벤트 등을 지원하는 풍부한 구문을 제공하고 있다.
URBI는 센서를 직접 핸들링 할 수 있을 정도로 표현력이 풍부하면 c++언어와의 연동 인터페이스도 제공하기 때문에 앞서 설명한 모듈 실행엔진 없이도 URBI만으로 로봇 제어 에 사용가능 하다.
TDL은 기존 c++언어에 태스크의 분해, 동기화, 실행, 모니터링 그리고 예외처리에 대한 구문을 확장한 언어이다. TDL 컴파일러는 이러한 확장 구문에 대한 c++코드를 생성해준다.
TDL 태스크를 여러 서브 태스크를 계층적으로 분해하여 정의한다. 그림 2는 URBI와 TDL의 태스크를 예시한 것이다.
|
|
< 그림 2 > 절차적 제어구문을 가지는 태스크 언어의 사용 예 |
URBI와 TDL은 기존 범용 프로그래밍 언어와 매우 유사한 구문을 가지기 때문에 범용언어에 익숙한 사람은 사용하기에 편리하다.
XABSL은 유한 상태 기계(Finite State Machine: FSM) 모델을 기반으로 하며 구조가 간단하기 때문에 이해하기가 쉽지만 언어 자체에서 동시성에 대한 구문이 제공되지 않는다.
XABSL는 FSM을 계층적으로 구성함으로써 로봇 태스크의 복잡도를 줄이고 모듈화와 재사용성을 증대시킨다. XABSL 언어를 사용하여 로봇 태스크를 실행하기 위에서 모듈 실행엔진에 XABSL 실행 모듈을 만들어서 붙어야 한다.
즉, XABSL은 다른 센서 모듈로부터 상황정보를 입력받고 이에 대해서 적절한 동작 모듈 내의 동작을 선택하고 실행 명령을 내린다.
URBI 역시 FSM을 정의하는 구문을 제공하지만 XABSL처럼 계층적 정의는 제공하지 않는다. 그림 3은 XABSL을 이용한 로봇 태스크 작성의 일부를 예시한 것이다.
XABSL은 그래픽하게 표현하기 쉽기 때문에 적절한 도구가 제공된다면 사용자가 태스크를 이해하거나 작성하기에 편리하다.
|
|
< 그림 3 > FSM에 기반하는 XABSL 태스크 예시 |
프로그래밍 방식의 태스크 저작 언어로 앞서 소개한 언어들 이외에 파이썬(python)과 같은 범용적인 스크립트 언어를 사용할 수도 있다.
이러한 경우에는 c/c++처럼 컴파일이 필요 없기 때문에 사용하기 편리할 수는 있지만 센서 및 구동 장치와 이종의 언어를 사용하기 때문에 디버깅을 위한 별도의 도구를 제공되지 않는다면 디버깅 하기가 불편할 수 있다.■ 저작도구로봇 태스크 프로그램 작성시 텍스트 에디터를 이용하는 것이 아니라 다이어그램 방식의 저작 도구를 이용하여 사용자에게 보다 직관적이면서 작성하기 편리한 환경을 제공할 수 있다.
이러한 도구에서 제공되는 다이어그램은 해당 태스크 언어가 기반하는 모델(플로우차트 형태의 절차적 또는 FSM 모델)을 반영해야 한다. 예를 들어 XABSL 태스크 저작도구는 FSM을 다이어그램으로 저작하는 기능을 제공할 것이다.
|
|
< 그림 4 > 태스크 저작 도구의 예 |
그래픽 기반의 저작 도구의 편리한 장점도 있지만 반면에 태스크가 복잡하고 정밀한 제어를 하기 위해서는 그래픽한 표현으로는 한계가 있다.
그러므로 그래픽 도구는 텍스트 에디팅 방식도 반드시 함께 제공해야 한다. 같은 태스크를 표현한 다이어그램과 텍스트 간의 상호변환 및 동기화 기능도 중요하다.■ 기타앞서 살펴본 태스크 저작 언어들을 사용하지 않고 로봇 태스크를 구동할 수 있는데 이중 대표적인 것이 계획(Planning)과 학습(Learning)을 이용하는 방법이다.
계획 수립은 태스크 목적(Goal)에 도달하기 위하여 가용한 로봇 행동들을 탐색하고 이 행동들에 대한 순서를 결정하는 것이다.
태스크 계획 수립 후에는 후보 계획들을 평가한 뒤에 태스크를 수행한다. 계획 수립 방법으로는 기호 논리학에서 사용되는 추론 방식을 이용한다.
이를 위해서 상황 정보와 행위를 기호적으로 표현해야 하며 이들 기호들간의 관계성도 미리 저장하고 있어야 하는데 이 저장소를 흔히 지식기반(Knowledge base)이라 부른다.
태스크 계획방식을 이용하기 위해서는 추론 및 계획 모듈이 앞서 소개한 모듈 실행엔진에 추가 되어야 한다.
또 다른 태스크 수립 방법으로 학습을 통해서 스스로 로봇 자신의 상태와 이에 대응되는 행위를 찾는 방법이 있다.
학습에 의한 태스크 수립의 경우 상태공간을 모델링할 수 있는 경우와 그렇지 못한 경우가 있다. 만약 우리가 상태공간을 미리 모델링할 수 있고 목적(Goal)이 분명하다면 로봇은 상태공간을 탐색하면서 행동 계획을 수립할 수 있다.
상태 공간을 모를 경우에는 상태공간에 대한 센싱 정보와 이에 대응한 행동 정보에 대한 데이터를 수집해야 한다.
태스크 학습기는 이 데이터를 분석하고 패턴을 찾아서 학습은 하고 실제 태스크 실행시에 학습된 결과를 사용하여 로봇 행동을 제어한다. 이러한 학습 방법은 상태 공간이 복잡도에 의존하기 때문에 항상 유용하다고 할 수 없다.■ 결론지금까지 로봇 프로그래밍과 태스크가 어떻게 작성되는지에 대해서 간략히 소개하였다. 여기서 소개된 언어와 방법 외에도 무수히 많은 방법들이 존재한다.
그림 1과 같은 제어구조 이외에 많은 제어구조들이 있으며 학습과 계획에 대한 방법과 알고리즘도 수없이 많다.
이러한 방법들은 각각 장단점을 가지고 있기 때문에 자신이 현재 다루는 로봇의 구조와 적용 분야에 맞는 방법을 선택하는 것이 무엇보다 중요하다.
또한 여러 방법들을 혼합하여 사용할 수도 있다. 이렇게 혼합된 방법을 사용할 경우 흔히 하이브리드 방식(Hybrid)이라 부른다. 보통의 경우 문제에 맞는 방법을 혼합하여 사용하는 것이 가장 효과적이다.
[참고문헌][1] J.-C. Baillie, "Urbi: Towards a universal robotic low-level programming language," in Proc. IEEE Int. Conf. Intell. Robots Syst., Aug. 2005, pp. 820-825.
[2] Loetzsch M., Risler M., Jüngel M. "XABSL - A Pragmatic Approach to Behavior Engineering," Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS 2006), pages 5124-5129
[3] Simmons R. and Apfelbaum, D., "A task Description Language for Robot Control", Proc. Of the Conference on Intelligent Robotics and Systems, Vancouver, Canada, October 1998.
[4] Simmons R., "Structured control for autonomous robots", I EEE Transactions on Robotics and Automation, 10(1):34-43, Feb. 1994.
글 / 김록원 ETRI, 김성훈 ETRI, 박홍성 강원대학교[ 관련기사 ]▶ 로봇이 홍보하는 건전지, 파나소닉 에볼타▶ 한국 로봇산업의 발자취와 미래▶ 초등학교 로봇교육으로 본 '학습도구 가능성'▶ 안전하고 섬세하며 효율적인 '소프트로봇'월간로봇(www.jejisa.kr)'IT 제품의 모든것'-Copyright ⓒ ebuzz.co.kr, 무단전재 및 재배포 금지
Copyright © 전자신문. 무단전재 및 재배포 금지.
- “병원선 보낸다고”…그린란드 병합 노리는 트럼프, 이번엔 '의료 카드' ?
- 국힘, 당명 변경 지선 이후로…'미래연대·미래를여는공화당' 압축
- “독재와 싸우자”...베를린영화제 황금곰상에 일케르 차탁 '옐로 레터스'
- 李대통령 “특별한 희생에는 특별한 보상…안중근, 테러리스트 아니다”
- 美 국토안보부 셧다운 후폭풍…공항 '패스트트랙' 전면 중단, 여행 대란 현실화되나
- K팹리스, 슈퍼사이클 '소외'…22곳 중 14곳 적자
- ESS 시장 다음 승부는 3차…삼성SDI 수성·경쟁사 추격
- 미국 노동부, AI 인재·확산 위한 '리터러시 프레임워크' 발표
- “사이버 사고 30%가 협력사發…기업, 외부까지 챙겨야”
- “IP로 양자 클라우드 시장 선점”…노르마, 상용화 기반 구축



