RT Component Framework
RT Component Framework is a framework for creating RT Components.
To modularize the elements which are constructing a robot system, there are many types of granularity of the modularization. For example, a single function device like a motor/sensor, a compound function device like a moving cart robot, robot arm and a set of algorithm which handle various processes are considerable. A system would be built up by hierarchical integration of them. In RT middleware, the software part of the fundamental functional elements is called as "Core logic". RT component framework is a mechanism for covering the Core Logic by common interface and make the user be able to use the modules uniformly.
Consider an example of componentized stereo vision algorithm as shown in the above figure. The program itself which implements the algorithm corresponds to the Core logic. Stereo vision component can be made by preparing RT component framework with appropriate Port's and implementing a stereo vision algorithm into the framework. The module in which Core logic is implemented based on RT component framework is called as "RT component". RT component framework hides the implementation of the common interface from the component developer and the integrator who make a system by combining the components. As a result, the component developer can focus on the implementation of the main logic and the integrator can focus on the whole system design without worrying about the implementation details of the component.
RT Component architecture
In RT system, various levels of processing should be handled with considering the cooperation of them from low-level sensor process and actuator control to high-level Recognition, Judgement, Controlling the behavior, etc. In low-level controlling program might require the speed and the real-time capability. However, the high-level program might require computer language which has high abstraction capability and high descriptive power. Also, the use of multiple CPU system is currently increasing in RT system world, and it is necessary to have parallel control and cooperation function via the network.
To modularize these functional elements, the RT component provides a framework based on a distributed component technology that can be modularized with various granularity and operate on various languages and OS.
The figure shows the basic architecture of RTC. The main functions of RTC are as follows.
Get meta information
RTC has interfaces (introspection function) for obtaining meta information (RTC profile). RTC profile is a set of information that describes the characteristics of a component, such as the name of the component and the profile of Port's it owns. This function is necessary for dynamic system configuration at run time.
Introspection: A mechanism to acquire meta information of objects and components translated to "NAISEI" in Japanese. The definitions are not commonly fixed, but the function is similar to Reflection in Java. OMG RTC specification defines the function as "Introspection".
Execution itself to implement major functions into a component. Common states such as Inactive (OFF state), Active (ON state), Error (Error state), etc are defined for unified management of RTC. An RTC developer creates an RTC by mainly implementing the desired feature into the function (callback function) assigned to each state and each state transition event.
The functions which construct "Activity" are executed by a thread called Execution Context (EC). EC can be attached and detached dynamically to RTC. It is possible to attach one EC to multiple RTCs to execute them synchronously in series. Also, it is possible to make RTC execution real-time by changing the EC to real-time capable EC,
A data directional port for transmitting and receiving continuous data. There are two types of input port (InPort) and output port (OutPort). Even if the same data types are used, even if the language and OS are different, you can connect and communicate via the network.
Ports which is used for providing functions and using external functions in command-base. It is used-defined. There are two types of interface - Provider (Provided interface) and Consumer (Required interface). The Provided interface provides functions to external units. Required interface is for requesting/using the function on external units. Like Data port, even if the language and OS are different, you can connect and call the function if the interface type is the same.
A function to change the user-defined parameters externally at runtime. It has multiple sets of the parameters and you can swap them all at once. By making the parameters changeable, RTC can be reused in various systems.
Generally, in the low-level part of the RT system like the servo controller, etc. are mainly composed by data-oriented tightly coupled subsystems. In high-level part like subsystems which judges and decides the behavior would be mainly coarse-grained and service-oriented. Since RTC realizes such modularization with various granularity with a common framework, the coupling between hierarchies which becomes a problem in the hierarchical other frameworks is not a problem.
The transparent linkage between RTCs in different languages is realized by using CORBA (Common Object Request Broker Architecture) which is the standard specification of distributed object middleware.