초록
다양한 환경에 배치될 수 있고, 예상치 못한 상황에 자주 접할 수 있는 지능형 서비스 로봇의 경우에는 처할 수 있는 환경과 상황을 모두 예측하여 로봇 내부에 필요한 기능을 모두 가지고 있기 어렵다. 로봇에게 환경에 맞는 필요한 기능만 내부에 가지고 있을 수 있게 하고, 필요에 따라 새로운 기능을 획득할 수 있도록 지원해 주기 위한 기반 기술인 컴포넌트 저장소가 본 논문의 주제이다. 이 저장소를 실제 로봇 플랫폼에 적용 실험 해 온 결과, 로봇이 일일이 외부 저장소들을 접근함에 따라 필요한 컴포넌트의 검색 및 획득의 성능이 저하된다는 문제와, 가용한 컴포넌트 저장소가 늘어감에 따라 확장성, 공유성 문제가 발견되었다. 본 연구에서는 이러한 문제점들을 해결하기 위해 분산된 컴포넌트 저장소들을 컴포넌트의 기능적인 측면에 따라 논리적인 그룹으로 묶은 셀 기반의 진화적인 컴포넌트 저장소를 개발하였다. 프로토타입을 개발하여 실험한 결과, 셀 기반의 저장소를 이용하여 로봇이 분산된 저장소를 일일이 물리적으로 접근하는 것이 아니라 논리적으로 투명하게 접근을 할 수 있도록 지원한다. 또한, 로봇 컴포넌트/애플리케이션 개발자들이 자신의 접근 가능한 저장소를 변경하면 전체 저장소 시스템에 반영되어 다른 개발자들이나 로봇이 사용할 수 있게 해 주는 컴포넌트의 투명한 공유를 지원한다.
Self-growing software is a software system that has the capability of evolving its functionalities and configurations by itself based on dynamically monitored situations. Self-growing software is especially necessary for intelligent service robots, which must have the capability to monitor their surrounding environments and provide appropriate behaviors for human users. However, it is hard to anticipate all situations that robots face with, and it is hard to make robots have all functionalities for various environments. In addition, robots have limited internal capacity. To support self-growing software for intelligent service robots, we are developing a cell-based distributed repository system that allows robots and developers transparently to share robot functionalities. To accomplish the creation of evolutionary repositories, we invented the concept of a cell, which is a logical group of distributed repositories based upon the functionalities of components. In addition, a cell can be used as a unit for the evolutionary growth of the components within the repositories. In this paper, we describe the requirements and architecture of the cell-based repository system for self-growing software. We also present a prototype implementation and experiment of the repository system. Through the cell-based repositories, we achieve improved performance of self-growing actions for robots and efficient sharing of components among robots and developers.