unprotected object - protected object - component ...

Herman Bruyninckx <[email protected]>
Newsgroups gmane.science.robotics.orocos.user
Message-ID <Pine.LNX.4.44.0206161605530.7654-100000@pc25-213.mech.kuleuven.ac.be>
Just some ideas of mine about the strategy for building functionality
for Orocos. Remarks are very welcome.

Baseline 1:
  Orocos wants to be an infrastructure for _all_ kinds of
  robotics. That means, the whole spectrum from hard real time to
  internet robotics.

Baseline 2:
  Orocos is a bottom-up effort, focusing first on serving the Framework
  Builders, and later also the Application Builders, the Component
  Builders and the End Users

Baseline 3:
  Compile-time reconfigurability is a key feature. Making this as
  simple and transparent as possible is a key goal too.

Hence:
I suggest to try to make functionality available keeping the following
structure in mind:
- unprotected object: a class library, were method calls can access
  the data in an object directly.
- protected object: a class library, where data access can only happen
  through access method calls that implement mutual exclusion and
  other protected means of data access.
- component: same as the protected object, but now in component form.
  The difference being mainly that objects are for programmers,
  components for users. That means, among other things, that extra
  functionality such as persistence, feature browsing, discovery, etc.
  should be available.
- CORBA component: the same as above, but CORBA compliant.

The reason for this hierarchy is simple: allow the most efficient code
for people that know what their doing and can do it in a controlled
environment. (Such as the core of the recently released Orocos hard
real-time code.) And offer less efficient but more guaranteed code for
use in less controlled environments.

Secondly, having functionality in the above-mentioned hierarchical
structure should make compile-time configuration much easier, because
if functionality is available in a lower layer, it is also available
in the higher layers, and with exactly the same name and semantics.

We are currently trying to get these things done for the motion
control: in the core framework, everything is centrally synchronized
by events which means that different parts can (in some cases) safely
access shared variables, such that unprotected objects are fine.  An
application using this hard real-time core, however, will in general
not be able or willing to guarantee this synchronized access, and that
should then use the protected or component variants. Or simply
distributing the hard real-time core over a local network (which
is still part of the Framework Builders' job) needs protected access
methods.

Herman

-- 
K.U.Leuven, Mechanical Engineering, Robotics Research Group
<http://www.mech.kuleuven.ac.be/~bruyninc>  +32 16 322480
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.