KR101102930B1 - 로봇용 소프트웨어 컴포넌트 장치 및 이를 이용한 쓰레드 처리 방법 - Google Patents
로봇용 소프트웨어 컴포넌트 장치 및 이를 이용한 쓰레드 처리 방법 Download PDFInfo
- Publication number
- KR101102930B1 KR101102930B1 KR1020090023617A KR20090023617A KR101102930B1 KR 101102930 B1 KR101102930 B1 KR 101102930B1 KR 1020090023617 A KR1020090023617 A KR 1020090023617A KR 20090023617 A KR20090023617 A KR 20090023617A KR 101102930 B1 KR101102930 B1 KR 101102930B1
- Authority
- KR
- South Korea
- Prior art keywords
- processing
- thread
- execution
- robot
- dedicated
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Numerical Control (AREA)
- Programmable Controllers (AREA)
- Stored Programmes (AREA)
Abstract
본 발명은 포트별로 수신되는 데이터, 이벤트 및 메쏘드에 대해 다른 실행 방식으로 쓰레드를 처리한다는 것으로, 이를 위하여 본 발명은, 데이터 포트부와, 이벤트 포트부와, 메쏘드 포트부를 통해 수신 또는 요청되는 데이터, 이벤트 및 메쏘드에 대해 주기적 실행 방식, 전용 실행 방식 또는 수동 실행 방식에 따라 그 쓰레드를 각각 처리함으로써, 시스템 자원을 효율적으로 사용할 수 있는 것이다.
로봇용 소프트웨어 컴포넌트, 컴포넌트 실행 엔진
Description
본 발명은 로봇용 소프트웨어 컴포넌트 장치를 이용한 쓰레드 처리 기법에 관한 것으로, 더욱 상세하게는 로봇용 소프트웨어 컴포넌트 장치에서 이를 구동시키는 컴포넌트 실행 엔진을 통해 쓰레드를 처리하는데 적합한 로봇용 소프트웨어 컴포넌트 장치 및 이를 이용한 쓰레드 처리 방법에 관한 것이다.
본 발명은 지식경제부 및 정보통신연구진흥원의 IT성장동력기술개발 사업의 일환으로 수행한 연구로부터 도출된 것이다[과제관리번호: 2008-S-030-01, 과제명: RUPI-클라이언트 기술 개발].
잘 알려진 바와 같이, 로봇의 역할이 산업용 로봇에서 가정용 지능형 로봇으로 바뀌면서 로봇 시스템이 복잡해지고 있는데, 특정 작업만을 수행하기에 충분한 정도의 하드웨어, 소프트웨어 구조를 가진 산업용 로봇과는 달리 앞으로 나올 지능형 로봇은 다양한 센서, 모터 액츄에이터 등을 포함하고 있음은 물론 이들을 제어하고 외부와의 통신을 하는 등 다양한 일을 하는 여러 개의 프로세싱 유닛들이 존재하여 다수의 마이크로 프로세서, 컨트롤러, DSP(digital signal processor), SoC(system on chip) 등이 네트워크로 연결된 분산 구조로 발전하고 있다.
그리고, 로봇 소프트웨어 모듈들은 이러한 각 프로세싱 유닛들 위에서 수행되며, 서로 긴밀히 통신을 하여 데이터와 컨트롤을 주고받으며, 이렇게 복잡하게 얽혀 있는 분산 구조를 특징으로 하고 있는 로봇을 효율적으로 제어하기 위해서는 로봇 내부의 제한된 자원을 노드간에 효율적으로 이용하면서 여러 노드에서 동시에 일어나는 다양한 일을 통합하고 조화시킬 수 있는 효율적인 제어 소프트웨어 구조가 필요하다.
여기에서, 로봇 소프트웨어 모듈의 기능을 수행하는 로봇용 소프트웨어 컴포넌트는 컴포넌트가 제공하는 인터페이스를 통해 접근되고 재사용 및 교체가 가능한 소프트웨어 모듈로서, 컴포넌트 사용자 입장에서는 컴포넌트가 제공하는 인터페이스만을 이용하며 해당 인터페이스에 대한 상세 구현은 알 수 없게 된다. 즉, 컴포넌트는 외부에 공개된 인터페이스 이외에는 알 수 없는 블랙박스(black box)가 되며, 이렇게 함으로서 외부 인터페이스가 변경되지 않는 한 내부 구현을 자유롭게 변경할 수 있게 된다.
특히, 로봇에서 주로 사용하는 개발 패턴은 크게 두 가지로 구분될 수 있는데, 첫 째, 컴포넌트에서 제공하는 메쏘드(method)를 호출하여 컴포넌트가 특정 동작을 수행하거나 컴포넌트 내부의 속성(attribute)을 읽거나 변경하는 형태로서, 이런 개발 패턴이 사용하는 방식은 보통 CORBA(common object request broker architecture, 이하 'CORBA'라 함), RMI(remote method invocation), RPC(remote procedure call) 등과 같은 방식으로 다른 노드의 메쏘드나 함수를 호출하는 클라 이언트/서버(client/server) 방식으로 개발된다.
둘 째, 전형적인 제어 루프(control loop)에서 사용되는 것과 같이, 컴포넌트간에 데이터나 이벤트를 주기적으로 주고받으면서, 컴포넌트가 자신의 상태에 따라 센서 데이터를 읽고 이를 처리한 후 엑추에이터(actuator)를 구동하여 작업을 수행하는 형태로서, 이러한 방식은 무인자동차에 탑재되는 JAUS(joint architecture for unmanned system) 등과 같이 컴포넌트끼리 미리 정해진 데이터 포맷을 특정 주기로 전송하여 제어 루프(control loop)를 구성하는 방식을 사용한다.
한편, 가정용 지능형 로봇은 산업용 로봇보다는 훨씬 시스템이 복잡하고 다양한 기능을 수행해야 하므로, 위 두가지 패턴 중 어느 하나만을 선택해서 사용하는 것보다는 이 둘을 같이 혼용하여 보다 유연한 로봇 제어를 하는 것이 효율적이다.
따라서, 로봇용 소프트웨어 컴포넌트 개발 방법은 유한 상태 기계를 갖는 컴포넌트들을 능동적인 형태로 동작하도록 하고, 컴포넌트 상호간의 데이터 교환 및 메쏘드 호출을 통해 제어가 이루어지도록 하는 방식을 사용한다. 최근에 이러한 로봇의 특징을 지원하기 위해 Orocos(open robot control system), RTC(robot technology component) 등은 능동적 패턴(active pattern) 형태의 컴포넌트를 이용한 로봇 프로그래밍 방식을 제시하고 있다.
또한, 로봇 응용은 컴포넌트들의 조합으로 구성되는데, 컴포넌트간의 결합도를 낮추기 위한 방법으로 포트(port)를 통한 컴포넌트의 사용방법이 추천되고 있으 므로, 이를 위해 컴포넌트 모델은 포트라는 개념으로 컴포넌트들을 연결하고 상호간 통신을 하도록 한다.
상술한 바와 같이 가정용 지능형 로봇은 산업용 로봇보다는 훨씬 시스템이 복잡하고 다양한 기능을 수행해야 하므로, 상술한 두가지 패턴 중 어느 하나만을 선택해서 사용하는 것보다는 이 둘을 같이 혼용하여 보다 유연한 로봇 제어를 하는 것이 효율적이기 때문에, 로봇용 소프트웨어 컴포넌트 개발은 유한 상태 기계(FSM : finite state machine)를 갖는 컴포넌트들을 능동적인 형태로 동작하도록 하고, 컴포넌트 상호간의 데이터 교환 및 메쏘드 호출을 통해 제어가 이루어지도록 하는 방식을 사용한다.
이에 따라, 최근에 이러한 로봇의 특징을 지원하기 위해 Orocos(open robot control system), RTC(robot technology component) 등은 능동적 패턴(active pattern) 형태의 컴포넌트를 이용한 로봇 프로그래밍 방식을 제시하고 있으며, 로봇 응용은 컴포넌트들의 조합으로 구성되는데, 컴포넌트간의 결합도를 낮추기 위한 방법으로 포트(port)를 통한 컴포넌트의 사용 기법이 개발되고 있고, 이를 위해 컴포넌트 모델은 포트라는 개념으로 컴포넌트들을 연결하고 상호간 통신을 수행하고 있는 실정이다.
이에 따라, 본 발명은 컴포넌트가 외부와 통신하기 위한 포트 종류에 따라 컴포넌트를 실행하는 쓰레드 구성을 변경함으로써, 시스템 자원의 낭비를 방지하 고, 시스템 효율을 향상시킬 수 있는 로봇용 소프트웨어 컴포넌트 장치 및 이를 이용한 쓰레드 처리 방법을 제공하고자 한다.
일 관점에서 본 발명은, 외부 컴포넌트로부터 수신된 데이터를 버퍼에 저장한 후, 기 설정된 주기에 따라 실행 쓰레드를 이용하여 상기 저장된 데이터를 주기적 실행 방식으로 처리하거나 상기 수신된 데이터에 대한 전용 쓰레드를 생성하여 상기 수신된 데이터를 전용 실행 방식으로 처리하는 데이터 포트부와, 상기 외부 컴포넌트로부터 이벤트가 수신되면 이를 수동 실행 방식으로 처리하는 이벤트 포트부와, 상기 외부 컴포넌트로부터 메쏘드가 요청되면 이에 대응하는 사용자 정의 쓰레드를 호출하여 상기 수동 실행 방식으로 처리하는 메쏘드 포트부를 포함하는 로봇용 소프트웨어 컴포넌트 장치를 제공한다.
다른 관점에서 본 발명은, 데이터 포트, 이벤트 포트 및 메쏘드 포트를 통해 외부 컴포넌트와의 통신을 수행하는 단계와, 상기 데이터 포트를 통해 수신되는 데이터를 주기적 실행 방식 또는 전용 실행 방식으로 처리하는 단계와, 상기 이벤트 포트를 통해 수신되는 이벤트를 수동 실행 방식으로 처리하는 단계와, 상기 메쏘드 포트를 통해 요청되는 메쏘드를 상기 수동 실행 방식으로 처리하는 단계를 포함하는 로봇용 소프트웨어 컴포넌트 장치를 이용한 쓰레드 처리 방법을 제공한다.
본 발명은, 분산 환경에서 약결합된 형태를 취하고 있는 로봇용 소프트웨어 컴포넌트들을 구동시키는 컴포넌트 실행 엔진에서, 컴포넌트가 외부와 통신하기 위 한 포트 종류에 따라 컴포넌트를 실행하는 쓰레드 구성을 달리하여, 독립적으로 수행되는 다수의 컴포넌트를 처리하기 위해 수많은 쓰레드가 사용되어 시스템의 자원을 낭비하고 쓰레드간 정보 전달이 늦어져서 시스템의 효율을 저하시키는 문제를 효과적으로 해결할 수 있다.
본 발명은, 데이터 포트, 이벤트 포트 및 메쏘드 포트를 통해 외부 컴포넌트와의 통신을 수행하는 중에 데이터 포트를 통해 수신되는 데이터를 주기적 실행 방식 또는 전용 실행 방식으로 처리하고, 이벤트 포트를 통해 수신되는 이벤트를 수동 실행 방식으로 처리하며, 메쏘드 포트를 통해 요청되는 메쏘드를 수동 실행 방식으로 처리한다는 것이며, 이러한 기술적 수단을 통해 종래 기술에서의 문제점을 해결할 수 있다.
이하 첨부된 도면을 참조하여 본 발명의 실시 예에 대하여 상세하게 설명한다.
도 1은 본 발명의 실시 예에 따라 컴포넌트 실행 엔진을 포함하는 로봇용 소프트웨어 시스템의 구성도로서, 컴퓨터 노드(100A, 100B)에는 각각 다수의 컴포넌트(102a, 102b, 102c, 102d, 102e, 102f, 102g), 컴포넌트 실행 엔진(104a, 104b), 통신 미들웨어(106a, 106b), 운영 체제(108a, 108b) 등을 포함할 수 있다.
도 1을 참조하면, 로봇용 소프트웨어 컴포넌트들인 다수의 컴포넌트(102a, 102b, 102c, 102d, 102e, 102f, 102g)는 각 컴퓨터 노드(100A, 100B)에서 스스로 동작하는 것이 아니라 컴포넌트를 실행시키는 컴포넌트 실행 엔진(104a, 104b)이 운영 체제(108a, 108b)와 예를 들면, CORBA 등과 같은 통신 미들웨어(106a, 106b)를 이용하여 구현되는데, 로봇용 소프트웨어 시스템을 구성하고 있는 각 컴퓨터 노드(100A, 100B)에는 각각에 대응하는 컴포넌트 실행 엔진(104a, 104b)이 각각 존재하며, 컴포넌트 실행 엔진(104a, 104b)은 그에 대응하는 다수의 컴포넌트(102a, 102b, 102c, 102d, 102e, 102f, 102g)를 실행시키고, 이러한 다수의 컴포넌트(102a, 102b, 102c, 102d, 102e, 102f, 102g)가 상호 연결되어 로봇용 소프트웨어 시스템을 구성할 수 있다.
다음에, 상술한 바와 같은 구성을 갖는 로봇용 소프트웨어 시스템에서 데이터 포트, 이벤트 포트 및 메쏘드 포트에 각각 대응하는 데이터, 이벤트 및 메쏘드에 대한 쓰레드를 처리하는 로봇용 소프트웨어 컴포넌트 장치에 대해 설명한다.
도 2는 본 발명의 실시 예에 따라 포트별로 쓰레드를 처리하는데 적합한 로봇용 소프트웨어 컴포넌트 장치의 구성도로서, 로봇용 소프트웨어 컴포넌트 장치(200)는 메쏘드 포트부(method port, 202), 데이터 포트부(data port, 204), 이벤트 포트부(event port, 206) 등을 포함한다.
도 2를 참조하면, 로봇용 소프트웨어 컴포넌트 장치(200)는 외부와의 통신을 위해 메쏘드 포트부(202), 데이터 포트부(204), 이벤트 포트부(206)를 포함하는데, 컴포넌트의 메쏘드를 호출하기 위한 메쏘드 포트부(202)와, 컴포넌트간의 데이터 교환을 위한 데이터 포트부(204)와, 특정 사건에 대한 사실을 전달하기 위한 이벤트 포트부(206)로 구별된다.
그리고, 데이터 포트부(204)는 주기적 실행 방식에서 컴포넌트 실행 엔진으로부터 데이터가 입력되면, 입력된 데이터를 버퍼에 일시 저장한 후에, 기 설정된 주기에 따라 주기적 실행을 위한 실행 메쏘드(예를 들면, onExecute() 등)가 호출되면, 데이터 포트부(204)의 컴포넌트 처리부에서는 호출된 실행 메쏘드를 이용하여 버퍼에 일시 저장된 데이터를 처리한다.
또한, 전용 실행 방식에서 컴포넌트가 처음 시작할 경우 데이터 포트부(204)의 컴포넌트 처리부에서는 해당 컴포넌트의 상태를 레디(READY) 상태에서 러닝(RUNNING) 상태로 변경하고, 실행 메쏘드(예를 들면, onExecute() )를 1회 실행한 후에, 데이터 포트부(204)의 컴포넌트 처리부 내 전용 쓰레드에서는 컴포넌트의 상태를 서스펜디드(SUSPENDED) 상태로 변경하고, 뮤텍스(mutex)를 이용하여 다음 차례의 시작을 대기한다.
이 후에, 데이터 포트부(204)의 컴포넌트 처리부에서는 메쏘드 포트부(202)를 통해 다시 시작 메쏘드(예를 들면, resume() )의 호출이 요청되면, 데이터 포트부(204)의 컴포넌트 처리부에서는 컴포넌트 상태를 서스펜디드(SUSPENDED) 상태에서 러닝(RUNNING) 상태로 변경하고, 뮤텍스를 통해 전용 쓰레드를 호출하며, 이에 따른 실행 메쏘드(예를 들면, onExecute() )를 다시 호출한 후에, 호출된 실행 메쏘드를 통해 해당 데이터를 처리한다.
또한, 메쏘드 포트부(202)는 수동 실행 방식에서 컴포넌트 실행 엔진으로부터의 메쏘드를 메쏘드 포트부(202)의 컴포넌트 처리부로 전달되고, 컴포넌트 처리부에서는 사용자 정의 메쏘드(예를 들면, userDefinedMethod() )를 호출하며, 이러 한 사용자 정의 메쏘드를 이용하여 요청된 메쏘드를 수동적으로 처리한다.
그리고, 이벤트 포트부(206)는 수동 실행 방식에서 컴포넌트 실행 엔진으로부터의 이벤트를 이벤트 포트부(206)의 컴포넌트 처리부로 전달되고, 컴포넌트 처리부 내의 유한 상태 기계(FSM)를 이용하여 이벤트를 바로 처리한다.
한편, 메쏘드 포트부(202), 데이터 포트부(204), 이벤트 포트부(206)는 각각 컴포넌트 처리부를 포함하여 이에 대응하는 메쏘드, 데이터, 이벤트를 처리하는 것으로 하여 설명하였으나, 이러한 컴포넌트 처리부는 각각의 포트에 연결되는 하나의 처리부로 구성될 수 있음은 물론이다.
다음에, 상술한 바와 같은 로봇용 소프트웨어 컴포넌트 장치를 이용한 컴포넌트 실행에 따라 주기적 실행 방식, 전용 실행 방식, 수동 실행 방식에 대응하는 컴포넌트의 클래스 다이어그램에 대해 설명한다.
도 3은 본 발명의 실시 예에 따라 컴포넌트 실행에 따른 컴포넌트 클래스 다이어그램을 나타낸 도면으로, 로봇용 소프트웨어 컴포넌트는 메쏘드 포트부(202), 데이터 포트부(204), 이벤트 포트부(206)를 용도에 따라 다수 개를 생성할 수 있는데, 이러한 컴포넌트의 실행에 있어 예를 들면, 주기적(periodic) 방식 컴포넌트(302), 전용(dedicated) 방식 컴포넌트(304), 수동(passive) 방식 컴포넌트(306) 등과 같은 3개의 컴포넌트로 분류되고, 이에 대한 지정은 컴포넌트 저작 시 XML 설정 파일에 기술할 수 있다.
이러한 3개의 컴포넌트로 분류된 로봇용 소프트웨어 컴포넌트는 그 실행에 따라 부모 클래스(즉, 302의 주기적 방식 컴포넌트, 304의 전용 방식 컴포넌트, 306의 수동 방식 컴포넌트)를 선택하고, 선택된 부모 클래스를 상속받아 탬플릿 코드가 생성되며, 생성된 탬플릿 코드에 사용자의 코드를 추가하고, 컴파일 과정을 수행한 후 컴포넌트를 완성하며, 완성된 컴포넌트는 컴포넌트 실행 엔진에 배포되어 지정된 동작 방식에 따라 실행될 수 있다.
여기에서, 주기적 실행 방식은 고전적 제어 루프에서 컴포넌트들이 주기적으로 데이터를 처리하거나 알고리즘을 수행하기 위해 사용되는 것으로, 이러한 제어 루프는 하위 레벨의 디바이스 제어를 위해 사용될 수 있으며, 주기적인 데이터 처리를 위해 컴포넌트 실행 엔진은 컴포넌트의 특정 실행 메쏘드(예를 들면, onExecute() )를 주기적으로 호출하여 데이터 포트부(204)에 수신된 데이터를 순차적으로 처리할 수 있다.
그리고, 주기적 실행 방식으로 처리해야 하는 컴포넌트는 XML 등으로 기술되는 컴포넌트 설정 정보에서 그 주기를 설정해야만 하고, 다수의 컴포넌트가 동시에 실행될 경우 컴포넌트의 중요도에 따라 우선 처리될 수 있도록 컴포넌트의 우선 순위를 지정해야 하며, 이러한 우선 순위에 따라 컴포넌트 실행 엔진은 우선 순위가 높은 컴포넌트들에게 우선적으로 쓰레드를 할당하여 처리한 후에, 우선 순위가 낮은 컴포넌트들에게 쓰레드를 할당하여 처리할 수 있다. 여기에서, 도 4는 본 발명의 실시 예에 따라 컴포넌트 설정 정보에서 주기와 우선 순위를 설정하기 위한 예제를 나타낸 도면으로, 주기적 실행 방식에 따라 처리될 컴포넌트의 설정 정보에서 주기와 우선 순위를 XML을 이용하여 설정할 수 있음을 알 수 있다.
다음에, 상술한 바와 같은 주기적 실행 방식에서 로봇용 소프트웨어 컴포넌 트 장치의 데이터 포트부에 데이터가 입력될 경우 버퍼에 일시 저장한 후에, 기 설정된 주기에 따라 실행 메쏘드를 호출하여 데이터를 처리하는 과정에 대해 설명한다.
도 5는 본 발명의 제 1 실시 예에 따라 주기적 실행 방식에서 입력 데이터에 대한 쓰레드를 처리하는 과정을 나타낸 플로우차트이다.
도 5를 참조하면, 로봇용 소프트웨어 컴포넌트 장치(200)의 대기 모드에서(단계502), 컴포넌트 실행 엔진 내의 데이터 수신을 담당하는 수신 쓰레드에서는 외부에서 데이터가 입력되는지를 체크한다(단계504).
상기 단계(504)에서의 체크 결과, 외부에서 데이터가 입력된 경우 로봇용 소프트웨어 컴포넌트 장치(200)의 데이터 포트부(204)를 통해 입력된 데이터를 버퍼에 일시 저장한다(단계506).
그리고, 컴포넌트 실행 엔진 내의 주기적 실행을 담당하는 주기적 실행 쓰레드에서는 기 설정된 주기가 되는지를 체크한다(단계508).
상기 단계(508)에서의 체크 결과, 기 설정된 주기가 될 경우 주기적 실행 쓰레드는 로봇용 소프트웨어 컴포넌트 장치(200)의 컴포넌트 처리부에 주기적 실행을 위한 실행 메쏘드(예를 들면, onExecute() )가 호출되어 데이터 포트의 버퍼에 저장되어 있는 수신 데이터를 처리한다(단계510).
여기에서, 컴포넌트 실행 엔진은 동일한 우선 순위를 가지며, 동일한 주기로 처리되는 컴포넌트들에 대해서는 하나의 쓰레드로 처리하는데, 같은 주기를 갖고 있는 여러 개의 컴포넌트는 컴포넌트 실행 엔진에서 하나의 쓰레드를 이용하여 해 당 컴포넌트들을 순차적으로 실행하여 시스템 자원의 낭비를 방지하고, 이를 통해 여러 개의 쓰레드로 처리할 경우에 발생하는 쓰레드 컨텍스트 스위칭(thread context switching) 시간을 줄여, 보다 높은 성능의 로봇용 소프트웨어 시스템을 구현할 수 있다.
따라서, 컴포넌트를 설계할 때에는 주기적으로 호출되는 실행 메쏘드인 onExecute() 메쏘드가 최대한 빨리 리턴되도록 설계하여야 하며, onExecute() 메쏘드 내에서 블록(block)되는 함수를 호출하여서는 안되고, 만약, 컴포넌트가 주어진 주기대로 호출하지 못할 경우에는 컴포넌트 실행 엔진에서 에러를 사용자에게 리포팅할 수 있다.
한편, 하나의 쓰레드로 처리되는 도중에 어떤 컴포넌트의 로직에서 실행시간이 아주 오래 걸리거나 혹은 극단적으로 블록(block)된 시스템 함수를 호출한 경우에는, 해당 쓰레드를 이용하여 처리해야 할 다른 컴포넌트는 동작이 지연되거나 아예 처리가 안 되는 등 동작에 영향을 끼칠 수 있기 때문에, 실행시간이 오래 걸리거나 그 시간을 예측할 수 없는 경우에는 주기적 실행 방식 대신에 전용 실행 방식을 이용할 수 있다.
다음에, 상술한 바와 같은 전용 실행 방식에서 로봇용 소프트웨어 컴포넌트 장치를 이용하여 컴포넌트마다 전용의 쓰레드를 할당하고 이 쓰레드를 이용하여 컴포넌트의 로직을 수행시키는 과정에 대해 설명한다.
도 6은 본 발명의 제 2 실시 예에 따라 전용 실행 방식에서 데이터에 대한 쓰레드를 처리하는 과정을 나타낸 플로우차트이다.
도 6을 참조하면, 로봇용 소프트웨어 컴포넌트 장치(200)의 대기 모드에서(단계602), 컴포넌트 처리부의 전용 쓰레드에서는 컴포넌트가 처음 시작(예를 들면, start())하는지를 체크한다(단계604).
상기 단계(604)에서의 체크 결과, 컴포넌트가 처음 시작할 경우 컴포넌트 처리부에서는 해당 컴포넌트의 상태를 레디(READY) 상태에서 러닝(RUNNING) 상태로 변경한다(단계606).
그리고, 컴포넌트 처리부에서는 실행 메쏘드(예를 들면, onExecute() )를 1회 실행한다(단계608).
다음에, 실행 메쏘드가 1회 완료되면, 컴포넌트 처리부의 전용 쓰레드에서는 컴포넌트의 상태를 서스펜디드(SUSPENDED) 상태로 변경한다(단계610).
또한, 컴포넌트 처리부에서는 뮤텍스(Mutex : mutual exclusion object)를 이용하여 다음 차례의 시작을 대기한다(단계612). 일 예로서, 도 7은 본 발명의 실시 예에 따라 실행 메쏘드를 실행한 후 대기하는 코드를 예시한 도면이다.
한편, 컴포넌트 실행 엔진의 수신 쓰레드에서는 외부로부터 다시 시작 메쏘드(예를 들면, resume() )의 호출이 요청되는지를 체크한다(단계614).
상기 단계(614)에서의 체크 결과, 다시 시작 메쏘드의 호출이 요청되면, 이러한 호출 요청은 로봇용 소프트웨어 컴포넌트 장치(200)의 메쏘드 포트(202)를 통해 컴포넌트 처리부로 전달되고, 이에 따라 컴포넌트 처리부에서는 컴포넌트 상태를 서스펜디드(SUSPENDED) 상태에서 러닝(RUNNING) 상태로 변경한다(단계616).
그리고, 컴포넌트 처리부에서는 뮤텍스를 통해 전용 쓰레드를 호출하고, 이 에 따른 실행 메쏘드(예를 들면, onExecute() )를 다시 호출한 후에(단계618), 호출된 실행 메쏘드를 통해 해당 데이터를 처리한다(단계620).
한편, 컴포넌트 실행 엔진의 수신 쓰레드에서는 외부에서 정지 메쏘드(예를 들면, stop() ) 호출이 요청된 경우 이러한 호출 요청을 로봇용 소프트웨어 컴포넌트 장치(200)의 메쏘드 포트부(202)를 통해 컴포넌트 처리부로 전달하고, 컴포넌트의 상태를 스탑드(STOPPED)로 변경한 후 뮤텍스(mutex)를 통해 전용 쓰레드를 호출하며, 전용 쓰레드에서는 예를 들면, while문의 조건 등을 체크하며, 이로부터 러닝(RUNNING) 상태가 아닌 경우 전용 쓰레드는 종료되고, 이러한 방식으로 전용 쓰레드가 종료된 해당 컴포넌트는 파기(destroy)할 수 있다.
한편, 데이터의 처리는 이와 같이 주기적 실행 방식이나 전용 실행 방식으로 처리하는 반면, 메쏘드와 이벤트에 대한 처리는 수동 실행 방식으로 처리되는데, 요청이나 이벤트가 발생한 경우, 컴포넌트 실행 엔진에서 주기적 실행을 처리하는 쓰레드에 의해 처리되는 것이 아니라, 외부로부터 이벤트나 명령 요청을 수신한 쓰레드가 처리를 하는 방식이다.
즉, 이벤트나 명령 요청을 수신한 로봇용 소프트웨어 컴포넌트 장치(200)는 자신의 수신 쓰레드를 직접 사용하여 이벤트나 명령을 처리하는데, 수동 실행 방식은 주기적 실행 방식이나 전용 실행 방식과 달리 컴포넌트를 능동적으로 동작시키기 위한 별도의 쓰레드를 할당하지 않고, 외부에서 처리 요청이 있는 경우 외부 쓰레드의 연장선에서 처리되는 방식이다.
다음에, 상술한 바와 같은 수동 실행 방식에서 로봇용 소프트웨어 컴포넌트 장치를 이용하여 이벤트가 수신되면 수신 쓰레드를 이용하여 컴포넌트 내부 유한 상태 기계를 통해 이벤트를 처리하는 과정에 대해 설명한다.
도 8은 본 발명의 제 3 실시 예에 따라 수동 실행 방식에서 이벤트에 대한 쓰레드를 처리하는 과정을 나타낸 플로우차트이다.
도 8을 참조하면, 로봇용 소프트웨어 컴포넌트 장치(200)의 대기 모드에서(단계802), 컴포넌트 실행 엔진의 수신 쓰레드에서는 외부로부터 이벤트가 수신되는지를 체크한다(단계804).
상기 단계(804)에서의 체크 결과, 이벤트가 수신될 경우 수신된 이벤트는 로봇용 소프트웨어 컴포넌트 장치(200)의 이벤트 포트부(206)를 통해 컴포넌트 처리부로 전달되고, 컴포넌트 처리부 내의 유한 상태 기계(FSM)를 이용하여 이벤트를 바로 처리한다(단계806).
다음에, 상술한 바와 같은 수동 실행 방식에서 로봇용 소프트웨어 컴포넌트 장치를 이용하여 메쏘드가 요청되면 사용자 정의 메쏘드를 호출하고, 요청된 메쏘드를 처리하는 과정에 대해 설명한다.
도 9는 본 발명의 제 4 실시 예에 따라 수동 실행 방식에서 메쏘드에 대한 쓰레드를 처리하는 과정을 나타낸 플로우차트이다.
도 9를 참조하면, 로봇용 소프트웨어 컴포넌트 장치(200)의 대기 모드에서(단계902), 컴포넌트 실행 엔진의 수신 쓰레드에서는 외부로부터 메쏘드가 요청되는지를 체크한다(단계904).
상기 단계(904)에서의 체크 결과, 메쏘드가 요청될 경우, 요청된 메쏘드는 로봇용 소프트웨어 컴포넌트 장치(200)의 메쏘드 포트부(202)를 통해 컴포넌트 처리부로 전달되고, 컴포넌트 처리부에서는 사용자 정의 메쏘드(예를 들면, userDefinedMethod() )를 호출한다(단계906).
이어서, 컴포넌트 처리부에서는 호출된 사용자 정의 메쏘드를 이용하여 요청된 메쏘드를 수동적으로 처리한다(단계908).
한편, 수동 실행 방식에서는 컴포넌트 실행 엔진의 수신 쓰레드가 컴포넌트를 직접 실행시키는 동안에 다른 메쏘드, 이벤트 등을 수신할 수 없게 되므로, 다른 메쏘드, 이벤트 등을 계속 수신하기 위해서는 수신 쓰레드가 컴포넌트의 메쏘드를 실행시키기 위한 새로운 쓰레드를 요청 및 호출하여 그 쓰레드에게 메쏘드, 이벤트 등을 처리하도록 하고, 수신 쓰레드는 다른 메쏘드, 다른 이벤트 등을 수신하기 위해 이용될 수 있으며, 이 경우에는 컴포넌트를 실행하기 위해 한번 사용된 쓰레드는 사용이 끝난 후 시스템에 반환될 수 있다.
이상의 설명에서는 본 발명의 다양한 실시 예들을 제시하여 설명하였으나 본 발명이 반드시 이에 한정되는 것은 아니며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자라면 본 발명의 기술적 사상을 벗어나지 않는 범위 내에서 여러 가지 치환, 변형 및 변경이 가능함을 쉽게 알 수 있을 것이다.
도 1은 본 발명의 실시 예에 따라 컴포넌트 실행 엔진을 포함하는 로봇용 소프트웨어 시스템의 구성도,
도 2는 본 발명의 실시 예에 따라 포트별로 쓰레드를 처리하는데 적합한 로봇용 소프트웨어 컴포넌트 장치의 구성도,
도 3은 본 발명의 실시 예에 따라 컴포넌트 실행에 따른 컴포넌트 클래스 다이어그램을 나타낸 도면,
도 4는 본 발명의 실시 예에 따라 컴포넌트 설정 정보에서 주기와 우선 순위를 설정하기 위한 예제를 나타낸 도면,
도 5는 본 발명의 제 1 실시 예에 따라 주기적 실행 방식에서 입력 데이터에 대한 쓰레드를 처리하는 과정을 나타낸 플로우차트,
도 6은 본 발명의 제 2 실시 예에 따라 전용 실행 방식에서 데이터에 대한 쓰레드를 처리하는 과정을 나타낸 플로우차트,
도 7은 본 발명의 실시 예에 따라 실행 메쏘드를 실행한 후 대기하는 코드를 예시한 도면,
도 8은 본 발명의 제 3 실시 예에 따라 수동 실행 방식에서 이벤트에 대한 쓰레드를 처리하는 과정을 나타낸 플로우차트,
도 9는 본 발명의 제 4 실시 예에 따라 수동 실행 방식에서 메쏘드에 대한 쓰레드를 처리하는 과정을 나타낸 플로우차트
<도면의 주요부분에 대한 부호의 설명>
200 : 로봇용 소프트웨어 컴포넌트 장치 202 : 메쏘드 포트부
204 : 데이터 포트부 206 : 이벤트 포트부
Claims (20)
- 외부 컴포넌트로부터 수신된 데이터를 버퍼에 저장한 후, 기 설정된 주기에 따라 실행 쓰레드를 이용하여 상기 저장된 데이터를 주기적 실행 방식으로 처리하거나 상기 수신된 데이터에 대한 전용 쓰레드를 생성하여 상기 수신된 데이터를 전용 실행 방식으로 처리하는 데이터 포트부와,상기 외부 컴포넌트로부터 이벤트가 수신되면 이를 수동 실행 방식으로 처리하는 이벤트 포트부와,상기 외부 컴포넌트로부터 메쏘드가 요청되면 이에 대응하는 사용자 정의 쓰레드를 호출하여 상기 수동 실행 방식으로 처리하는 메쏘드 포트부를 포함하는 로봇용 소프트웨어 컴포넌트 장치.
- 제 1 항에 있어서,상기 데이터 포트부는, 상기 주기적 실행 방식의 처리를 위해 컴포넌트 설정 정보에서 주기 및 우선 순위를 설정하는 로봇용 소프트웨어 컴포넌트 장치.
- 제 2 항에 있어서,상기 데이터 포트부는, 상기 주기 및 우선 순위가 동일한 컴포넌트들의 경우 하나의 쓰레드로 처리하는 로봇용 소프트웨어 컴포넌트 장치.
- 제 2 항에 있어서,상기 데이터 포트부는, 상기 주기가 동일하고, 상기 우선 순위를 다른 컴포넌트들의 경우 상기 우선 순위에 따라 하나의 쓰레드를 이용하여 순차적으로 처리하는 로봇용 소프트웨어 컴포넌트 장치.
- 제 1 항에 있어서,상기 데이터 포트부는, 상기 전용 실행 방식에 따라 상기 생성된 전용 쓰레드를 1회 실행한 후 대기하고, 상기 외부 컴포넌트로부터 다시 시작 메쏘드가 요청되면 상기 전용 쓰레드를 재실행하는 로봇용 소프트웨어 컴포넌트 장치.
- 제 1 항에 있어서,상기 이벤트 포트부는, 상기 수동 실행 방식에 따라 유한 상태 기계(FSM)를 이용하여 처리하는 로봇용 소프트웨어 컴포넌트 장치.
- 제 6 항에 있어서,상기 이벤트 포트부는, 상기 수동 실행 방식의 처리 중에 다른 이벤트를 처리하기 위해서 신규 쓰레드를 생성하여 상기 수신된 이벤트를 처리하는 로봇용 소프트웨어 컴포넌트 장치.
- 제 1 항에 있어서,상기 메쏘드 포트부는, 상기 수동 실행 방식의 처리 중에 다른 메쏘드를 처리하기 위해서 신규 쓰레드를 생성하여 상기 요청된 메쏘드를 처리하는 로봇용 소프트웨어 컴포넌트 장치.
- 데이터 포트, 이벤트 포트 및 메쏘드 포트를 통해 외부 컴포넌트와의 통신을 수행하는 단계와,상기 데이터 포트를 통해 수신되는 데이터를 주기적 실행 방식 또는 전용 실행 방식으로 처리하는 단계와,상기 이벤트 포트를 통해 수신되는 이벤트를 수동 실행 방식으로 처리하는 단계와,상기 메쏘드 포트를 통해 요청되는 메쏘드를 상기 수동 실행 방식으로 처리하는 단계를 포함하는 로봇용 소프트웨어 컴포넌트 장치를 이용한 쓰레드 처리 방법.
- 제 9 항에 있어서,상기 주기적 실행 방식 또는 전용 실행 방식으로 처리하는 단계는, 상기 주기적 실행 방식의 경우 기 설정된 주기에 따라 실행 쓰레드를 이용하여 상기 수신되는 데이터를 처리하는 로봇용 소프트웨어 컴포넌트 장치를 이용한 쓰레드 처리 방법.
- 제 10 항에 있어서,상기 주기적 실행 방식 또는 전용 실행 방식으로 처리하는 단계는, 상기 주기적 실행 방식의 처리를 위해 컴포넌트 설정 정보에서 주기 및 우선 순위를 설정하는 로봇용 소프트웨어 컴포넌트 장치를 이용한 쓰레드 처리 방법.
- 제 11 항에 있어서,상기 주기적 실행 방식 또는 전용 실행 방식으로 처리하는 단계는, 상기 주기 및 우선 순위가 동일한 컴포넌트들의 경우 하나의 쓰레드로 처리하는 로봇용 소프트웨어 컴포넌트 장치를 이용한 쓰레드 처리 방법.
- 제 11 항에 있어서,상기 주기적 실행 방식 또는 전용 실행 방식으로 처리하는 단계는, 상기 주기 및 우선 순위를 설정된 상태에서 동일한 주기의 컴포넌트들을 상기 우선 순위에 따라 차례로 정렬한 후에, 상기 우선 순위에 따라 하나의 쓰레드를 이용하여 순차적으로 처리하는 로봇용 소프트웨어 컴포넌트 장치를 이용한 쓰레드 처리 방법.
- 제 13 항에 있어서,상기 주기적 실행 방식 또는 전용 실행 방식으로 처리하는 단계는, 상기 하나의 쓰레드를 이용하여 순차적으로 처리하는 중에 주기가 초과한 경우 에러를 보고하는 로봇용 소프트웨어 컴포넌트 장치를 이용한 쓰레드 처리 방법.
- 제 9 항에 있어서,상기 주기적 실행 방식 또는 전용 실행 방식으로 처리하는 단계는, 상기 전용 실행 방식에 따라 생성된 전용 쓰레드를 1회 실행한 후 대기하고, 상기 외부 컴포넌트로부터 다시 시작 메쏘드가 요청되면 상기 전용 쓰레드를 재실행하는 로봇용 소프트웨어 컴포넌트 장치를 이용한 쓰레드 처리 방법.
- 제 15 항에 있어서,상기 주기적 실행 방식 또는 전용 실행 방식으로 처리하는 단계는, 상기 생성된 전용 쓰레드를 1회 실행한 후 뮤텍스(Mutex)를 이용하여 다음 시작을 대기하는 로봇용 소프트웨어 컴포넌트 장치를 이용한 쓰레드 처리 방법.
- 제 9 항에 있어서,상기 수신되는 이벤트를 수동 실행 방식으로 처리하는 단계는, 상기 수동 실행 방식에 따라 유한 상태 기계(FSM)를 이용하여 처리하는 로봇용 소프트웨어 컴포넌트 장치를 이용한 쓰레드 처리 방법.
- 제 17 항에 있어서,상기 수신되는 이벤트를 수동 실행 방식으로 처리하는 단계는, 상기 수동 실행 방식의 처리 중에 다른 이벤트를 처리하기 위해서 신규 쓰레드를 생성하여 상기 수신된 이벤트를 처리하는 로봇용 소프트웨어 컴포넌트 장치를 이용한 쓰레드 처리 방법.
- 제 9 항에 있어서,상기 요청되는 메쏘드를 상기 수동 실행 방식으로 처리하는 단계는, 상기 상기 요청되는 메쏘드에 대응하는 사용자 정의 쓰레드를 호출하여 상기 요청되는 메쏘드를 처리하는 로봇용 소프트웨어 컴포넌트 장치를 이용한 쓰레드 처리 방법.
- 제 19 항에 있어서,상기 요청되는 메쏘드를 상기 수동 실행 방식으로 처리하는 단계는, 상기 수동 실행 방식의 처리 중에 다른 메쏘드를 처리하기 위해서 신규 쓰레드를 생성하여 상기 요청된 메쏘드를 처리하는 로봇용 소프트웨어 컴포넌트 장치를 이용한 쓰레드 처리 방법.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/494,819 US8689217B2 (en) | 2008-10-31 | 2009-06-30 | System and method for thread processing robot software components responsive to periodic, dedicated, and passive modes |
JP2009250249A JP5140652B2 (ja) | 2008-10-31 | 2009-10-30 | ロボット用ソフトウェアコンポーネントのスレッド処理システム及び方法 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020080107778 | 2008-10-31 | ||
KR20080107778 | 2008-10-31 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20100048843A KR20100048843A (ko) | 2010-05-11 |
KR101102930B1 true KR101102930B1 (ko) | 2012-01-10 |
Family
ID=42275550
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020090023617A KR101102930B1 (ko) | 2008-10-31 | 2009-03-19 | 로봇용 소프트웨어 컴포넌트 장치 및 이를 이용한 쓰레드 처리 방법 |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP5140652B2 (ko) |
KR (1) | KR101102930B1 (ko) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101335083B1 (ko) * | 2011-08-26 | 2013-12-05 | 강원대학교산학협력단 | 델타 시간 기반의 컴포넌트 스케줄링 방법 및 장치 |
US8924976B2 (en) | 2011-08-26 | 2014-12-30 | Knu-Industry Cooperation Foundation | Task scheduling method and apparatus |
KR102013704B1 (ko) * | 2012-11-26 | 2019-08-23 | 한국전자통신연구원 | 로봇용 소프트웨어 컴포넌트 조합 장치 및 방법 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000330821A (ja) | 1999-05-21 | 2000-11-30 | Mitsubishi Electric Corp | 組み込みシステム用ソフトウェアの製作方法 |
KR20060039433A (ko) * | 2003-07-10 | 2006-05-08 | 모토로라 인코포레이티드 | 스마트 스트리밍 포트를 가진 프로세서간 통신 프로토콜 |
KR20070030327A (ko) * | 2004-07-13 | 2007-03-15 | 엔비디아 코포레이션 | 하위 포트 카운트 메모리를 이용하여 멀티포트 메모리를시뮬레이션하는 시스템 및 방법 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05204672A (ja) * | 1992-01-27 | 1993-08-13 | Mitsubishi Electric Corp | インタフェースシステム |
JP3832517B2 (ja) * | 1996-07-05 | 2006-10-11 | セイコーエプソン株式会社 | ロボット用コントローラ及びその制御方法 |
JP2004280299A (ja) * | 2003-03-13 | 2004-10-07 | Omron Corp | コントローラ、開発装置及びシステム |
JP2007157166A (ja) * | 2005-12-08 | 2007-06-21 | Korea Electronics Telecommun | モバイルホームサービスロボットを制御するサーバのxml基盤のサービス提供方法及びその装置 |
JP2008015585A (ja) * | 2006-07-03 | 2008-01-24 | National Institute Of Information & Communication Technology | 生活タスク支援システム |
-
2009
- 2009-03-19 KR KR1020090023617A patent/KR101102930B1/ko not_active IP Right Cessation
- 2009-10-30 JP JP2009250249A patent/JP5140652B2/ja not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000330821A (ja) | 1999-05-21 | 2000-11-30 | Mitsubishi Electric Corp | 組み込みシステム用ソフトウェアの製作方法 |
KR20060039433A (ko) * | 2003-07-10 | 2006-05-08 | 모토로라 인코포레이티드 | 스마트 스트리밍 포트를 가진 프로세서간 통신 프로토콜 |
KR20070030327A (ko) * | 2004-07-13 | 2007-03-15 | 엔비디아 코포레이션 | 하위 포트 카운트 메모리를 이용하여 멀티포트 메모리를시뮬레이션하는 시스템 및 방법 |
Also Published As
Publication number | Publication date |
---|---|
JP5140652B2 (ja) | 2013-02-06 |
KR20100048843A (ko) | 2010-05-11 |
JP2010108504A (ja) | 2010-05-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10365626B2 (en) | Extending the functionality of a programmable logic controller (PLC) with apps without changing the PLC programming | |
US20210073169A1 (en) | On-chip heterogeneous ai processor | |
US6961926B2 (en) | System and method for distributed debugging and recording medium on which control programs are recorded | |
RU2597556C2 (ru) | Структура компьютерного кластера для выполнения вычислительных задач и способ функционирования указанного кластера | |
CA2061117C (en) | Apparatus and method for distributed program stack | |
US8270299B2 (en) | Communicator-based token/buffer management for eager protocol support in collective communication operations | |
US8112526B2 (en) | Process migration based on service availability in a multi-node environment | |
JP5149258B2 (ja) | ロボットコンポーネント管理装置 | |
JP2004206712A (ja) | トポロジ・アウェア・グリッド・サービス・スケジューラ・アーキテクチャ | |
US20060268967A1 (en) | Supplying instruction to operational stations | |
AU9107798A (en) | System and methods for achieving heterogeneous data flow between algorithm blocks in a distributed control system | |
CN111176801A (zh) | 一种多进程管理方法、装置、设备及存储介质 | |
KR101102930B1 (ko) | 로봇용 소프트웨어 컴포넌트 장치 및 이를 이용한 쓰레드 처리 방법 | |
US20090319662A1 (en) | Process Migration Based on Exception Handling in a Multi-Node Environment | |
US8689217B2 (en) | System and method for thread processing robot software components responsive to periodic, dedicated, and passive modes | |
Brinkschulte et al. | Dynamic real-time reconfiguration in distributed systems: timing issues and solutions | |
US20030202522A1 (en) | System for concurrent distributed processing in multiple finite state machines | |
Aridor et al. | Open job management architecture for the Blue Gene/L supercomputer | |
Vallejo et al. | Shared memory multimicroprocessor operating system with an extended Petri net model | |
Gumzej et al. | A reconfiguration pattern for distributed embedded systems | |
CN112597502B (zh) | 一种基于可信云的大规模计算服务配置方法及系统 | |
Domínguez-Brito et al. | Coolbot: A component model and software infrastructure for robotics | |
Chen et al. | Research on client/server communication mechanism in autosar system | |
Aendenroomer et al. | Enabling federated control by developing a distributed control application platform | |
Arbuckle et al. | RECIPE–A System for Building Extensible, Run-time Configurable, Image Processing Systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20151127 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20161121 Year of fee payment: 6 |
|
LAPS | Lapse due to unpaid annual fee |