Escolar Documentos
Profissional Documentos
Cultura Documentos
Abstract
A good software architecture is one of the major factors that determines the success of realizing a robot
application. The software architecture should implement the requirements that have been formulated for
different problem areas indicated by the robot application designer. We are currently working on an
experimental robot project to create an autonomous
domestic scout that will interact with its user by
means of emotional feedback. Three problem areas
have been identified by the robot application designer:
1) reusing and integrating existing software code with
new to be written software code, 2) having an interactive development framework in which the designer
can easily test different software configurations at
runtime, and 3) implementing the robot application
using a heterogeneous distributed computing environment. In this paper we present a global overview of a
software architecture that we have developed to deal
with these problem areas.
Introduction
author:
Philips Research,
Prof.
Holstlaan 4, 5656 AA Eindhoven, The Netherlands,
albert.van.breemen@philips.com
Requirements
them into a coherent robot application is. This matter was already studied by one of the authors in previous work on mechatronic control applications [6, 7].
It was then realized that in order to tackle this problem a dedicated software architecture is needed. The
result was a software architecture based on modular software constructs, called controller-agents, that
supports the integration of individual control algorithms in a systematic manner. Partly based on the
experiences of that work we now describe a software
architecture to support the development of complex
control software for autonomous robots; that is, to
support the development of robot applications.
Traditionally there is much attention for the planning aspects of a robot application in a project. Several planning architectures have been proposed such
as logic-based [8], behavior-based [9, 10, 11] and hierarchical system architectures [12]. The first focus in
our project is not on one of these planning architectures but we focus instead on developing a software
architecture that allows us to build rapid prototypes
in order to experiment with different techniques and
algorithms. We have identified three main problem
areas that will complicate the development of our
robot application. The first area is the problem of
reusing and integrating software parts developed by
different parties. Therefore, we have formulated the
requirement of modularity to solve this problem:
Modularity Each functional software part should
3
3.1
There are several ways to integrate functional software parts of a robot application. For instance, one
can use adhoc methods and hack everything together in one large source file, or one can define software components with interfaces specified in terms
of method-calls. However, these specific software engineering ways of integrating different software functionalities are considered not to correspond with the
methods and concepts of other disciplines involved
in our robot project, such as electrical, mechanical
and control engineering. Therefore, we want to have
a software architecture which conceptually resembles
3.2
Modules
Modules are building blocks used to implement separate pieces of functionality. For instance, modules
typically implement functionalities such as sensors,
actuators, vision algorithms, control behaviors, state
estimators, etc. In our framework, a robot application is defined in terms of modules and connections
only.
More technically, a module is an independent software process that operates asynchronously with respect to other modules in a robot application. The
resources needed by a module, such as processor time
and memory, are provided by the operating system.
Each module is started as separate executable in the
operating system. Furthermore, modules can be implemented independently from other modules.
Modules have input and output ports to share data
(see also section 3.3) and they contain an algorithm
to process this data. Furthermore, modules are characterized by two attributes. The first attribute is
the type of execution model, which describes how
the algorithm of a module is executed. The second attribute is the type of task model, which describes when the algorithm is executed. These two
attributes are described in more detail below.
Execution models. We use two types of execution models that are based on formalisms described
by [14]:
Event-based In an event-based module, the algo-
Ports
first mechanism is the push mechanism. A pushoutput port directly transfers data to push-input
ports connected to it, when the algorithm of the
module performs a write action. This generates an
external event at the input ports of the connected
modules. The second mechanism is the pull mechanism. A pull-input port sends a request for new
data to the pull-output port it is connected to when
the algorithm of the module performs a read action.
This generates an external event at the output port
of the connected module. All combinations between
push/pull-input ports and push/pull-output ports is
allowed except for the combination: push-input port
/ pull-output port. In this last combination there is
no port which takes the initiative to transfer data.
Notice that if a pull-input port / push-output port
combination is used, then one needs to define a strategy for the output port which data item to send.
3.4
Connections
Registry
levels of errors. At each level we deal with the problems that arise when something goes wrong at that
particular level. The following error levels have been
introduced
Module level errors - This error level deals with
the problem of how to proceed with the execution of an algorithm if connections of the module
are lost (for example, if connected remote modules have crashed).
System level errors - This error level deals with
the problem of how to proceed with the overall
robot application if some modules are stopped
or have crashed.
The first type of errors must be solved by the algorithm of a module. If a connected module crashes
or is stopped then the remaining module will receive
a notification message. It depends on the algorithm
how to react on this. The second type of errors typically must be solved by the registry. We have not
yet defined general error handling mechanisms for
this type of errors. Currently, the remaining application just continuous if one of its modules crashes
or is stopped.
3.7
the orginal C version of PVM still out performs alternative implementions of PVM.
Figure 3.7 illustrates the overall system architecture
of our robot system. The bottom layer is the hardware layer. We use a computing network of pentiumbased computers. The mobile robot platform we are
using (a Pioneer2 DXe [5]) is equipped with a notebook. This notebook is connected by wireless LAN
802.11b to a desktop computer. The second layer is
the operating system layer; on both computers Windows 2000 is installed. The third layer consists of the
mentioned PVM package (latest version 3.4, available at [17]). The fourth layer is our Dynamic Module Library. This layer provides the module, ports
and connection constructs. It also contains one instance of the registry (see section 3.5). Finally, the
top-most layer is the robot application.
Implementation
In section 2 two requirements related to the implementation of our robot application were mentioned.
These are the ability to distribute the robot application over several hosts, and the ability to port
the robot application to different programming languages and operating systems. Ideally, one wants to
abstract the level of parallel running modules of the
robot application from the underlying physical architecture. Fortunately, we do not have to implement
this part of the software architecture ourselves, as
we can use an existing software package: the Parallel Virtual Machine (PVM) [16].
The Parallel Virtual Machine is a set of software
tools and libraries to build heterogenous computing
networks. It has been compiled for different computers (e.g. PCs and CRAYs), and it has been
ported to different operating systems (e.g. Windows,
Linux and UNIX). Originally, PVM has been implemented in C and Fortran, but several extensions to
other programming languages, such as C++, Java
and Python, are available nowadays (see the official
website [17]).
Our software architecture is implemented as a library
in C++ and has been built upon the C version of
PVM. Our library is called the Dynamic Module Library. The main reason to use this version of PVM
is that several performance tests [18, 19] show that
Experiences
Future work
Conclusions
We have presented an interactive module-based software architecture to support the development of our
experimental autonomous mobile robot Lino. Three
problem areas were mentioned that had to be dealt
with by the software architecture: code integration,
interactivity and implementation. The first problem area is solved within the software architecture
by using the concepts of modules and ports. Every
particular piece of software code that realizes some
functionality within our robot application is packed
and deployed as an independent module. The second problem area is solved within the software architecture by letting modules become independent processes in the operating system and registering them
to a registry. Furthermore, different levels of error
handling were introduced to give the software architecture the desired robustness. The third problem
area is solved by using the Parallel Virtual Machine
as supporting software layer.
Acknowledgments
We want to thank Dennis Taapken for his effort in
implementing the presented framework. Maarten
Buijs and Jaap van der Heijden we want to thank
for making available resources for this project.
References
[1] C. Breazeal, Sociable Machines: Expressive Social
Exchange Between Humans and Robots. Sc.D. dis-
website,
[18] Bu-Sung Lee, Yan Gu, Wentong Cai and Alfred Heng,
Performance Evaluation of JPVM, Parallel Processing Letters, vol. 9, no. 3, pp. 401-410, 1999.
[19] N. Yalamanchilli and W. Cohen, Communication
Performance of Java based Parallel Virtual Machine,
in Proceedings of the ACM Workshop on Java for
High-Performance Network Computing, Feb 1998.