Abstract
This paper describes on-going development of a multi robot control framework named CoRoBa. CoRoBa is theoretically founded by reifying Real Time Design Patterns. It uses CORBA as its communication Middleware and consequently benefits from the interoperability of this standard. A multi-robot 3D simulator written in Java3D integrates seamlessly with this framework. Several demonstration applications have been developed to validate the design and implementation options.
Introduction
Robotic systems are inherently multi-disciplinary and for such applications software aspects are of prime importance. Even a single robot application generally implies the use of external hardware and sensors having each their own control system and has de facto a distributed architecture.
Many searchers in robotics have been faced with the difficulty to integrate existing systems into new projects and to recycle existing code that has been produced by preceding projects. What is consequently needed in robotics is software architectures based on state-of-the-art computer engineering techniques that greatly improve software reusability like object-oriented languages, software components and software design patterns. This paper describes on-going developments which goal is to design, implement and evaluate performances of a multi-robot control framework. To validate the chosen approach, we developed and integrated several modules required to build typical robotic applications. The Framework name is
It is evident that this effort is not unique and that other laboratories have faced similar frustrations when implementing their control software and have consequently developed frameworks based on similar requirements. One of the best-known examples is certainly the module generator GenoM. It is a tool that helps building real-time software architectures and corresponds to the functional level of the architecture developed at the LAAS-CNRS (Alami, R & all, 1998). MCA2 is a software framework with real-time capabilities that is rapidly gaining in popularity (available at http://mca2.sourceforge.net). The DCA framework (Peterson, L.; Austin, D.; Christensen, H. 2001) has been developed to control a mobile manipulator. It relies on a process-algebra for specifying tasks. The main drawback in GenoM, DCA and MCA2 are their proprietary communication mechanism. Some frameworks solve the aforementioned limitation by building up on communication middleware. Miro (Enderle, S & all, 2001) is a distributed object-oriented framework developed in C++ for Linux that is based on CORBA technology. It offers synchronous and asynchronous communication and configuration capabilities through XML files. MARIE (Mobile and Autonomous Robotics Integration Environment) is a programming environment which aim is to develop an integration framework based on the mediator design pattern for distributed systems. MARIE uses ACE (Schmidt, D. C. & Huston, & S. D., 2003) as its communication library. All interactions between applications are done asynchronously. Orca (Brooks, A. & all, 2005) is an emerging open-source suite of tools for developing component-based robotic systems (available at http://orca-robotics.sourceforge.net). The Miro weak point is its behaviour engine and the lack of remote management. MARIE's approach, as mentioned in (Côté, C. & all, 2004) suffers from many drawbacks, namely, overhead, complexity and system resource management. CoRoBa tries to merge the strong points of the frameworks mentioned above while minimizing weak points. But as in all real projects, compromises have to be made and a perfect solution will never exist.
Because having a simulator is essential when developing robot control software we have developed a 3D multi-robot simulator, whose name is MoRoS3D, that integrates seamlessly in the control framework. A similar project is GSV (Graphical Simulation and Visualisation) that has been developed at the University of Auckland by the Robotics Research Group as a module of their robot programming environment. Like in MoRoS3D simulation services are exposed as CORBA interfaces. However, this simulator does not meet one of the guidelines specified in section 2 because of its commercial 3D engine.
Section 2 presents the software requirements that must be satisfied by the framework. In section 3 we discuss the selection and usability of Middleware for distributed robot control system and detail Design Patterns that guided the software development. Section 4 covers Component design and implementation and gives some examples of existing components including the simulator. Section 5 describes the current state of the work and obtained results. Section 6 concludes with comments on further research directions.
Requirements
Two different approaches have been considered when identifying requirements for the framework. The first approach took into account the functionality of typical applications that would be built with the framework whereas the second one considered the needs of potential users. This analysis resulted into the following requirements list:
Integration of different robotic systems, Concurrent control of several robots, Platform independent GUI, Shared control between several users, Easy integration of user's algorithms. Flexibility (Distribution, Modularity, Configurability, Portability, Scalability, Maintainability) Performance and efficiency
It is obvious that some requirements conflict with each other: performance and efficiency for instance have to be traded with flexibility. However, as we do not target hard real-time applications, we can accept some performance degradations due to extra-communication overheads. The following guidelines have also been considered during the development of the framework: Open source software, standard tools and technologies (UML, C++…) and Design Patterns.
Framework design and implementation
Low-level communication API and Middleware
The first decision when developing distributed application concerns the choice of the communication library. Some framework developers have opted for the low-level socket library. While this is a good choice with regard to performance, it is a bad one concerning portability and maintenance. One solution is to use a multi-platform wrapping communication library like ACE. It is a very powerful library that can eliminate some of the drawbacks listed above but that leaves much work to the programmer. The need for a higher-level communication library is clear. A communication Middleware lies somewhere between the low level system API and the application and automates many operations by abstracting low-level function calls. Among all existing Middlewares, CORBA has been selected because of its language and platform independence. As such a Middleware is quite complex and brings some overheads, one could ask the question if it is really usable for implementing robot control applications. The network performance can be expressed by the following relation:
On one hand, the operations added by CORBA increases the latency (that is independent of the message length). On the other hand, the extra information contained in a CORBA frame is quite constant (a few hundreds of bytes) and has therefore a larger influence for small data packets We typically have a 20 to 30% overhead in comparison with raw socket communication. This result is confirmed by a comparative performance experiment reported by D. Gill in (Gill, C. & Smart, W., 2002). However, with increasing computing power and communication bandwidth, the overhead introduced by CORBA becomes every day less and less significant. In (Gowdy, J. 2000) J. Gowdy qualitatively compares Interprocess Communications Toolkits for Robotics and concludes that: “If the project is a long-term project …, then a more flexible and standard … communication infrastructure such as CORBA may be called for …”.
Among different CORBA implementations, we have chosen ACE|TAO because it is widely adopted and supported, it implements most of the CORBA specifications (including Notification Service, AMI, and RT-CORBA) and is free open-source software. But we are not limited to this implementation for developing components and other ORB's (Objects Request Broker) that have links to C++ or other languages like Java and Python can be used too. In (Colon, E. & Sahli, H., 2003) we showed that our Middleware selection helps fulfilling the requirements listed in section 2.
Framework design
Framework and control architecture
A framework is a set of cooperating classes that make up a reusable design for a specific class of software. The framework architecture defines how components are integrated into the framework and how they are interrelated. Reuse on this level leads to an inversion of control between the application and the software on which it is based: components written by the programmer are called back by the framework in response to events.
A control architecture on the other hand specifies which components are used and how they collaborate. The framework architecture must be flexible enough to allow different logical control paradigm to be build using the same components: direct control, telecontrol, assisted telecontrol, autonomous robots (deliberative and reactive), multirobot applications, etc. Framework components fall into two categories: structural components that offer basic services used by other components and application components that are the building blocks of an application.
Design Patterns and framework
Design Patterns (DP) bring a theoretical foundation to the software development. A DP describes a recurring programming problem and the core of the solution to that problem. It also lists the consequences of its use and gives implementation hints. We now have a look at the Architecture and Distribution DP, which are used by the CoRoBa framework. Most of the patterns are directly implemented by CORBA or its services.
Distribution, which is an essential aspect of architecture, comes in two primary forms: asymmetric and symmetric. In asymmetric distribution systems, the binding of objects to the address space is known at design time while in symmetric distribution system is not known until runtime. Symmetric distribution is more flexible and allows dynamic load balancing. The patterns presented below deal with the collaboration architecture, which focuses on how the objects find and communicate with each other.
Commercial ORB's do require a minimum amount of resources that may exceed those available in smaller systems. For those cases, it may be possible to use smaller, less capable ORB's or write one from scratch that includes only the desired capabilities. In the Broker Pattern, the clients may dynamically discover the relations. This makes the Broker Pattern more scalable than the Proxy Pattern but also somewhat more heavyweight.
Component design and implementation
This section presents the DP implemented by the component architecture. It also reports on integration of existing systems into the framework.
Mechanistic design
The component architecture implements the Hierarchical Control Pattern and the Message Queuing Pattern explained below.

Events communication between components
We have defined three interfaces, Sensor, Processor and Actuator that inherit from the Service interface. The classes implementing these interfaces are considered as abstract and may not be instantiated and consequently real services interfaces are derived from these ones. The code is actually organised in two parallel hierarchies: the IDL interfaces and the CoRoBa classes implementing these interfaces. Sensors have connections with the physical world and they output data to one Event Channel. Processors get their inputs from one Event Channel; they transform data and send the result to another Event Channel. Actuators have output connections with the physical world and received data from one Event Channel
System integration
While new services are designed from scratch, existing applications and systems will need to be integrated in the framework. Depending on the communication and API available this integration can be a trivial or a tricky job. Integration is usually made by providing a facade, aka an object wrapper following the Wrapper Facade pattern. When wrapping libraries, we need to pay attention to serialize data access if existing libraries are not thread-safe.
Robot integration
In the case of our Nomad200, it comes with an API that is available for the Linux OS. We have written an actuator component that translates CORBA method invocations to motion command functions of the API and a sensor component that reads the different sensors' values and propagates them as events. The operations listed in the Nomad interface keep the same signature as the original functions of the Nomad200 API.
The integration of the second robot (Robudem) is simpler because we do not have to wrap any existing API. On the Robudem main computer runs a server that transfers data via shared memory between the Linux and the RT-Linux side of the control application. The data structure that contains the robot kinematics information but also the motion commands are exchanged via sockets. As only one client is allowed to connect to the robot, the CoRoBa wrapper component breaks with the design standard presented above that separates sensors from actuators. It is actually a processor that receives motion commands via events, propagates the commands via sockets to the Robudem server, receives the kinematics data as the reply from the socket server and finally forwards the kinematics information via the output event channel. The control of the robot is implemented by CoRoBa processor components.
Sensor integration
We take as example a metal detector (MD) that we use for detecting mines in humanitarian demining projects. This MD has a serial interface for configuring the system and for reading sensor signals. Two solutions are possible: the sensor component communicates directly with the serial port or the serial port is wrapped into a generic component that simply propagates messages received as events to the serial port and sends the response back. The second solution adds one unnecessary communication step. Both solutions have to be implemented as a processor because they realise duplex communication and must consequently have an in and an out Event Channel connection.
Simulator integration
The 3D simulator allows multiple mobile robots to be simulated at the same time (Fig. 2). It is based on Java3D that imports VRML models. Multiple virtual cameras are available (fixed, onboard, tracking) that can be selected via the GUI. The user can also (re)set the robots position, and erase the trajectory markers.

MoRos3D simulator showing 8 identical robots in indoor environment
As the simulator has been designed to provide CORBA interfaces for all robots and sensors, its integration in the framework is straightforward. Two possibilities exist for a CoRoBa component to communicate with the simulator: via Event Channels or via CORBA synchronous calls. In the first case the simulator acts directly as sensors and actuators. The second solution requires developing CoRoBa sensor and actuator components that communicate with the Simulator (via asynchronous calls or events). The advantage is that we keep the same application structure as in the case where we use real robots and sensors for which we necessarily have wrapper components.
The CoRoBa framework has been used to implement components of the three categories. Following components are currently available:
Simulator: 3 robots (Nomad, Robudem, Melexis), Laser distance, US distance, GPS. Actuators: Nomad, Robudem and the 3 simulated robots, Sensors: Joystick, components wrapping simulated distance sensors and simulated robot encoders, Processors: Fuzzy logic Goal navigation, Goal provider, Goal scheduler, Simple Obstacles Avoidance Behaviour.
Based on these components, following typical applications have been tested (simulation and/or real systems):
Direct joystick control of robots, Shared autonomy obtained by combining the direct control and the obstacle avoidance components, Goal navigation with fuzzy logic control, Sequence of Goals, Distributed simulation.
Real applications typically require one actuator per robot, one sensor per physical (or simulated) sensor and some processors. Most of the time sensors and actuators are constrained by physical connections while the location of the processors can be freely chosen.
Thanks to the modular architecture, developing a new empty component takes less than 15 minutes. The total time required to implement the functional code depends on the type of component. Integrating a new robot or sensor is off course more complicated than just coding some processing algorithms.
Concerning the simulator performances, typical figures for 8 robots with 16 laser distance sensor is 90% processor activity (Centrino 735) and a memory usage of 40MB, image refresh period in this configuration is 80 ms.
CORBA has a steep learning curve and several months were required for understanding and mastering programming subtleties. In comparison students were able to develop new components with CoRoBa in a few weeks, what demonstrated the efficiency of the proposed framework.
Further research
In order to further validate the framework, we need more demonstration applications; some could be simply build up by combining existing components in different ways while others will require the development of new components. We are also working on a general distributed Behaviour engine for multi-robots applications. In the next future, we will integrate other robots (Melexis developed at the VUB, a Cartesian scanner at the RMA) and real sensors (Laser, GPS, US, MD…).
