OPRoS의 태스크 저작 도구 - 스크립트 및 그래픽 기반 에디팅 OPRoS의 태스크 저작 도구 - 스크립트 및 그래픽 기반 에디팅 문정희 기자 2012-09-30 00:00:00

Open Platform for Robotic Services ⑦
OPRoS의 태스크 저작 도구 - 스크립트 및 그래픽 기반 에디팅  

 

지난 2007년 지능형로봇 개발을 위한 공통기반 플랫폼 기술개발의 과제로 시작된 오프로스(OPRoS; Open Platform for Robotic Services)는 로봇소프트웨어를 컴포넌트화하여 재사용과 동일기능을 하는 컴포넌트끼리 교체가 가능하도록 해 코드의 재사용성을 극대화하고, 빠른 로봇소프트웨어 개발이 가능하도록 개발도구를 개발하는 것을 목적으로 한다. 본문에서는 OPRoS 태스크 저작 도구의 특징 및 기능에 대해서 살펴보고자 한다.

 

 

1. OPRoS 태스크 저작 도구 개요
OPRoS 프레임워크는 크게 2가지 운용 레이어로 나눌 수 있다. 하나는 컴포넌트 레이어이고 다른 하나는 태스크 레이어이다. 컴포넌트 레이어는 센서나 액추에이터와 같은 장치 API와 이들로부터 데이터를 입력 받아 처리하는 알고리즘 등을 제공한다. 태스크 레이어는 컴포넌트 레이어보다 상위에 위치하며 컴포넌트를 활용해 로봇의 행동 규칙을 정의하는 역할을 수행한다. OPRoS는 고유의 태스크 기술 언어를 가지고 있다.
OPRoS 태스크 언어는 계층적 Finite State Machine(FSM)을 기반으로 만들어졌다. FSM 모델은 간단한 동작 구조를 가지면서도 쉽게 그래픽으로 표현되기 때문에 사용자에게 그래픽 기반으로 태스크를 작성할 수 있는 기능을 쉽게 제공할 수 있다. OPRoS 태스크 언어는 그래픽 모델과 언어 구문 모두를 포함하고 이 둘은 상호 변환이 가능하다.
OPRoS 태스크 기술은 실행과 저작으로 구분할 수 있다. 실행은 태스크 언어를 로봇 내에서 프로그래밍 언어처럼 실행하는 것이고 저작은 PC상에서 로봇에서 동작될 행동 규칙을 OPRoS 태스크 언어 구문에 맞게 기술하는 것이다. 태스크 파싱, 실행 및 컴포넌트 연동 등은 실행 기술에 속하고 태스크 저작과 디버깅, 에뮬레이션 등은 태스크 도구를 활용한 태스크 저작 기술에 속한다.
본문에서 소개하는 태스크 도구는 Eclipse Plug-in 형태로 개발된 참조 구현이다. 태스크 도구를 사용하기 위해서는 우선 홈페이지 www.eclipse.org에 접속하여 Eclipse IDE for Java Developers 최신 버전을 다운로드 한 다음에 설치를 해야 한다. 다음으로 OPRoS 개발 및 사용을 위한 사이트(www.ropros.org)에 접속해 태스크 도구 플러그인을 받아서 Eclipse의 pugins디렉토리에 복사하고 eclipse.exe를 실행하면 된다.
태스크 도구는 다이어그램 및 스크립트 방식의 태스크 저작 기능을 제공하고 태스크 실행기에 원격으로 접속해 파일 전송, 실행/중지 및 디버깅/모니터링 등의 기능을 수행한다.

 

그림1. 스크립트 기반의 태스크 저작환경

 

그림2. 그래픽 기반의 태스크 저작 환경

 

1) 태스크 스크립트 에디팅
태스크 도구는 사용자가 스크립트 기반 에디팅을 하는 동안 OPRoS 태스크 언어 규격에 맞춰 키워드 하이라이트, 자동 들여쓰기 등의 에티팅 도움 기능과 기술된 태스크의 구문오류를 자동으로 탐지해 사용자에게 알려주는 파싱 및 오류 보고 기능 등을 제공한다.
OPRoS 태스크 언어는 로봇의 행동 규칙을 표현(hFSM 구조로 표현됨)하는 구문과 컴포넌트 연동을 위한 월드 모델을 표현하는 구문으로 크게 나눌 수 있다. <그림1>은 hFSM 구조로 표현된 로봇 행동 규칙 스크립트 예이다. 월드 모델은 로봇의 센서, 액추에이터 및 알고리즘 등을 구현한 컴포넌트에 대한 인터페이스를 정의하는데 이용된다.

 

2) 그래픽 기반 에디팅 및 Visualization
OPRoS 태스크 언어 규격은 hFSM을 확장한 형태이기 때문에 쉽게 그래픽으로 표현이 가능하다. OPRoS 태스크 도구에서는 텍스트 에디팅 환경뿐만 아니라 그래픽 기반으로 태스크를 저작할 수 있는 기능을 제공한다.
<그림2>는 그래픽 기반의 태스크 저작을 보여준다. 그림에서처럼 태스크는 계층 구조를 이루게 된다. 오른쪽 그래픽 아이템들은 태스크 언어 구문의 구성 요소를 나타내고 있다. 사용자가 태스크 구문에 대한 이해만 있으면 드래그앤드롭 방식으로 태스크를 직관적으로 저작할 수 있다. 태스크 실행기는 그래픽 표현 자체를 실행할 수 없기 때문에 태스크 도구에서는 그래프로 표현된 태스크는 스크립트로 변환하는 기능을 제공한다. 또한 스크립트를 그래픽 형태로 변환하는 Visualization 기능도 제공한다. 그러므로 사용자는 경우에 따라 스크립트 방식과 그래픽 방식을 번갈아 가면서 태스크를 작성할 수 있다.

 

3) 컴포넌트 연동
스크립트나 그래픽 표현으로 정의된 태스크 언어는 센싱, 로봇 동작, 인식 알고리즘 등의 기능을 담당하는 컴포넌트들과 연동이 되어야 한다. 이를 위해서는 우선 이러한 기능을 제공하는 컴포넌트 정보를 얻어 와야 한다.
컴포넌트는 Application이라는 묶음 단위로 실행되며 Application 프로파일은 해당 Application에서 사용하는 컴포넌트에 대한 정보를 포함하고 있다. <그림3>은 Helloworld라는 Application 프로파일이 사용하는 3가지 컴포넌트 Obstacle, PersonRecog, Robot에 대한 정보를 포함하고 있다.
태스크 구문에서 컴포넌트 Application 프로파일들을 이용하기 위해서는 해당 프로파일이 OPRoS 태스크 언어 구문이 정의한 월드 모델로 변환되어야 한다. 태스크 실행기는 컴포넌트 Application 프로파일을 Import한 다음 이를 이용하여 태스크를 작성할 수 있다. <그림 4>는 태스크 도구에서 이미 존재하는 Application 프로파일을 Import하는 과정을 보여주고 있다. <그림5>는 <그림3>을 Import한 Application 프로파일로부터 생성된 월드 모델 구문을 보여준다. <그림5>에 생성된 월드모델 구문은 Helloworld 프로파일에 포함된 Obstacle, PersonRecog, Robot 각각의 컴포넌트에 정의된 변수 및 함수 등에 대한 정보를 나타낸다. 이렇게 정의된 컴포넌트에 대한 월드 모델들은 로봇의 행동 규칙을 표현하는 구문에서 점 구분자를 사용하여 접근된다.
즉, Helloworld.Obstacle.left라는 표현의 의미는 Helloworld라는 Application 이름으로 실행되고 있는 Obstacle 컴포넌트의 left라는 이름의 변수값에 대한 접근을 의미한다.

 

그림3. 컴포넌트 Application 프로파일

그림4. Application 프로파일 Import

 

그림5. Import된 Application 프로파일에 대한 태스크 언어 구문

 

그림6. Command 창을 이용한 Remote CLI와 연결

 

4) 태스크 실행기와 원격 연동
사용자가 작성한 태스크 스크립트가 로봇 내에서 동작하기 위해서는 원격에서 실행되는 태스크 실행기와 연결되어야 한다. 태스크 실행기는 텔넷(Telnet) 연결 기능을 제공하고 연결된 상태에서 사용자 명령을 처리할 수 있는 Remote Command Line Interface(CLI)를 제공한다. 사용자는 Remote CLI를 통해서 태스크 실행기에 명령을 내릴 수 있다. 제공되는 명령어 셋은 upload/download(실행기와 도구간 파일 전송), deploy(배치: 파일내용을 실행객체로 변환), undeploy(배치된 객체 제거), run(배치된 태스크 객체 실행), stop(실행 태스크 중지), dir(태스크 실행기 디렉토리 구조), mkdir(태스크 실행기에 디렉토리 생성), rm(태스크 실행기의 파일 제거), rmdir(태스크 실행기에 디렉토리 제거) 등이 있다.
<그림6>은 태스크 실행기를 실행한 다음 윈도우의 command 창에서 텔넷(telnet 127.0.0.1 6011) 명령으로 접근한 다음 help 명령으로 Remote CLI에서 제공하는 명령어 셋을 출력한 화면이다. 태스크 도구는 <그림6>처럼 태스크 실행기에 접속해 필요한 명령어를 전달하고 결과를 해석하여 처리하는 기능을 포함하고 있다. <그림7>은 dirAll 명령어를 이용해 원격의 태스크 실행기의 디렉토리 구조를 태스크 도구에 나타낸 것이다. 사용자는 mkdir, rmdir 등의 명령을 이용해 태스크 실행기에 새로운 디렉토리를 생성하거나 존재하는 디렉토리를 제거할 수도 있다. 태스크 실행을 위해서는 작성된 태스크 파일을 드래그앤드롭으로 <그림7>의 로봇 Navigator에 복사하면 태스크 실행기의 Remote CLI 쪽으로 upload 명령이 전달되어 파일이 전송된다.

 

5) 디버깅/모니터링
태스크를 실행할 때는 단순히 run 명령으로 실행할 수도 있지만 모니터링 혹은 디버깅 모드로 실행할 수도 있다. 태스크 스크립트의 디버깅은 Visual Studio에서 C/C 코드의 정지점을 지정하고 라인 단위로 코드를 실행하는 것과 같은 개념이다. 태스크 실행기와 태스크 도구가 네트워크상에 분산되어 있기 때문에 디버깅/모니터링에 필요한 프로토콜이 필요하다. 디버깅/모니터링 프로토콜은 정지점 정보(지정/삭제)의 전송, 태스크 구조 정보 전송 그리고 디버깅 데이터 전송(심볼/변수값)을 위한 메시징 규칙을 포함한다.
<그림8>은 디버깅을 위해서 지정된 정지점의 정보와 정지점에서 실행이 중지되고 그 지점에서 관측 가능한 지역변수를 출력한 화면을 나타내고 있다.
사용자는 디버깅 중에 정지점을 추가/삭제할 수도 있고 정지점에서 다음 정지점으로 이동 및 다음 라인으로 이동할 수 있다.

6) 에뮬레이션
에뮬레이션은 태스크 도구에서 태스크의 실행기 없이 태스크를 실행할 수 있는 기능을 의미한다. 사용자가 작성한 태스크의 동작이 올바른지를 미리 확인하기 위해서 로봇에 태스크를 upload, deploy, run한 다음 실행 상황을 모니터링 하는 것은 매우 번거로운 일이며 많은 시간을 요구한다. 이러한 불편함을 없애기 위해서 태스크 도구에서는 월드 모델을 에뮬레이션 해주는 기능을 제공한다. 사용자는 에뮬레이션을 이용하여 태스크를 디버깅하거나 모니터링 할 수 있다.
<그림9>는 태스크에서 사용하는 월드 모델 파일에 표현되어 있는 컴포넌트의 변수 및 함수에 대해서 가상의 값을 생성하고자 할 때 가상 값의 분포 및 범위 등을 지정할 수 있는 다이얼로그 창과 에뮬레이션 환경하에서 모니터링 모드로 실행하면서 변화되는 변수 값을 관찰하는 화면이다. 에뮬레이션을 이용하면 사용자는 자신이 작성한 로봇 행동 규칙의 논리적인 오류 및 불필요한 요소들을 로봇에 실행 전에 미리 인지해 태스크의 완성도를 높일 수 있다.

 

그림7. 태스크 도구에서 Remote CLI를 이용한 태스크실행기의 디렉토리 Navigator

그림8. 태스크 디버깅 화면

그림9. 태스크 에뮬레이션 화면

 

2. 맺음말
OPRoS 태스크 도구는 사용자가 OPRoS 태스크를 저작, 태스팅(디버깅) 및 실행되는 태스크를 모니터링하는 일련의 과정을 지원하는 도구이다. 사용자는 태스크 도구를 이용하여 태스크 실행기와의 연동에 필요한 명령어, 디버깅 프로토콜 등에 대한 사전 정보 없이도 편리하게 OPRoS 태스크 기술을 쉽게 활용할 수 있다. 본문에서 소개한 태스크 도구는 하나의 참조 모델이다. OPRoS 태스크 언어 구문, Remote CLI 명령셋 및 디버깅/모니터링 프로토콜에 대한 규격만 준수하면 다른 형태의 태스크 도구를 만들 수 있다.

 

 

 필 자            
한국전자통신연구원(ETRI)
김록원 선임, 김성훈 팀장