Re: A working document

Herman Bruyninckx <[email protected]>
Newsgroups gmane.science.robotics.orocos.user
Message-ID <Pine.LNX.4.33.0112152033480.29240-100000@pc25-213.mech.kuleuven.ac.be>
On Sat, 15 Dec 2001, Anthony Mallet wrote:

[...]
> Thus, I would have put a CORBA layer at the 'executive' level, rather
> that in the logical layer. But I might be wrong, or misunderstand how do
> you see the 'logical layer'.

I think I understand your vision and definitions now. And I don't
disagree with them. So, I think the final discussions will be based on
the implementations :-)

[...logical layer...]
>Do you have any document/paper that precises your notion of that layer ?
Not yet...

> | - In your Figure 1, I would add also `events/reports' between the
> |   logical layer and the functional one.
>
> Yes, reports and events might also be needed at that level. But (again)
> we don't see the logical layer as an 'active' layer.

Well, I think there _are_ active components possible in the logical
layer: you might want to work with a logical sensor that gives you the
position of an object you are interested in, but tracking this object
or collecting missing information can be an active activity, i.e., one
that requires its own decision making and planning. Of course, the
scope of these is much more restricted and deterministic
(``real-time'') than on the layers you are working on.
One thing I think I learned is that the same kind of
sensing-planning-control pattern comes back at all levels of robot
software. Only the kind of algorithms, the time-scale, the complexity
are of a different scale.


> | I.e., in one layer, one has
> |   functional components (those that really perform the interesting work)
> |   and supporting components (that help the functional ones to achieve
> |   their goals, and that hide the details of event/exception handling and
> |   data flow/communication).
>
> I think what you call 'supporting' components should rather go in our
> 'decision layer'. The details of event, data flow etc. is hidden thanks
> to the 'executive' level.

What I think is that at _every_ level one needs decision making as
well as execution support. They form an unity with the real functional
parts.


>
> |   (Our motivation to put these together is that they cannot live
> |   without each other anyway...)
>
> Well, you will end up with a single layer :) Everything is needed
> to make the robot work!

No, I don't think so: we don't talk too much in terms of layers,
because we don't want to impose a strict hierarchy. We do think in
terms of cooperating components (the application builder will connect
these components together in an architecture that suits him best), and
each of these components has ``everything''. That's what makes it into
a component: in order to be a component, it has to be independent, and
in order to be independent, it has to have decision and support
capabilities. But all this is just a matter of wording and
terminology: I think our code would look very similar, and that's what
really matters :-)

> |   If the above interpretation of mine corresponds to your
> |   interpretation, then I miss a ``runtime'' feature which is
> |   ``scheduling'' and (dynamic) re-configuration of the active functional
> |   components. Or maybe that's include in what you call ``Resource
> |   management''?
>
> scheduling is hidden by the operating system. I don't think (at the
> moment) there is a need to redefine some scheduling strategies?
There is! Some examples: the component that takes care of the
simulatiuon of the dynamics of a complex robot will have to have its
own scheduler in order to schedule all the required calculations in
the appropriate order; an active stereo camera system will have to
have its own scheduler in order to get all the information it can get
about a certain feature (finding this information could involve
changing the viewpoint, or interacting with another, complementary
sensor).  Of course, one could look at these examples as robotics
tasks in themselves, and then, indeed, everything is built on top of
the OS :-)

> About dynamic reconfiguration... do you mean 'dynamically changing the
> set of running functionalities' ? If so, I don't think that it is
> something you really want to achieve on a robot.

I think one will want to do this. But don't imagine too fancy things
here; one example would be that you add a sensor to a robot, without
bringing the robot off-line; or a robot is put into a workcell or
fleet of other robots. These things will involve changing
functionality, if one want the group of robots to perform better than
the set of individual robots.

I don't think, however, that this is a ``Version 1.0'' requirement :-)

> There is a need to develop interoperable components, but once you have a
> given robot, and a given mission for it, the set of functionalities is
> given. Of course, for almost every missions, there is a need of
> 'redundancy': several components implement the same functionality, with
> different means. That's why there is a need of a 'dynamically
> configurable' data flow and control flow. This is done by the decision
> level.

This _is_ a ``Version 1.0'' requirement :-)

> 'resource management' and 'consistency checks' ensures that the decision
> level does not want to do things that it is not possible to do: trying to
> move cameras while another task require that they remain fixed (that's a
> consistency check) or trying to launch a service that requires, for
> instance, more memory (or power, or cpu, ...) than what is currently
> available (resource management).

Indeed!

> |   I think you mean the same thing as what I mean, because, on page 3,
> |   you write ``A consequence is that both the control ow and the data ow
> |   must be defined outside the components. For instance, in the LAAS
> |   architecture, this is done at the Executive level.''
>
> I think that the 'runtimé feature you are missing is the control flow,
> which is defined by the decision level. Besides this, I think we do agree
> :)
So we agree :-) Although we use different words.

[...]
> The component relies (at most) on the sensors interface (which should be
> robot-independant). The component does not 'know' who will ask for its
> services, nor to whom it will send its data, nor _how_ the service will
> be requested, nor how the data it has produced will be used.
> I think this makes it robot-independant ?

Okay, I'm fully with you now.

[...]
> I'm not sure if codels can be seen as a transaction but they should have
> the four properties of ACID. It is impossible to garantee that in the
> general case, but for a given component and its set of codel, I think it
> is possible.

I'm not so sure: the difference with typical transactions (in
databases) is that in robotics the program doesn't have full control
over all what is happening, because the environment cannot be fully
controlled; hence, the ``rollback'' property of a transaction cannot
be guaranteed, in general, I think.

> For now, I would say that a service _might_ be a transaction, and codels
> would then be atomic operations of that transaction. It is not needed
> that all codels of a service execute, but if one fails, the whole service
> fails.

Ok. And then the ``executive'' of the service gets to handle the
problem?

[... communication with ``external'' components...]
> In think this code should be part of the component's execution engine,
> but should not appear in the codels.

Ok.

[...]
> | - Stop the execution of a service: you mention three situations, but
> |   isn't there a fourth one: the codel itself raises an ``exception''
> |   that requires immediate servicing (by the runtime/executive).
>
> Codel can stop itself, that's true.
> But it should _not_ require something new (like a service
> execution). This task goes into the decision level, which is the only
> level that has a 'global view' of the robot and the tasks it is
> performing.

Voila, once again a proof that we think along the same lines :-) We
also have this functionality in our ``runtime'': our event handler is
the only one with the global view; all others just do their thing,
through well-defined interfaces. So, the `decision level/vent handler'
is application/task-dependent (and couples the different components),
all the rest isn't.

>
> | - The ``inter'' codel is what we call an exeption handler, I guess. It
[...]
> True. 'inter' is an exception. But exception is more general.
> Have you got other exceptions than 'interruption' ?

This is probably purely a matter of terminology...
execption/event/interrupt, what's in a name?

[...]
> I don't think that components connected together form a new component (?)

They do, _if_ well designed :-) In the following sense: a component
has a well-defined interface, so a group of components together, with
a well-defined interface, are again a component. So, if Orocos could
deliver this kind of components, it will be a success :-) And, for
example, your logical sensors are examples of what I say above: you
use them as components, because you expect them to have an interface
that allows you to forget how they work internally, even if this
internal working requires a lot of other components.

[...]
> And I also hope you will find information in my answers.
yes!!

> Again, if you have papers that explain some of the work you've already
> done, please tell me :) (even if it's not finished or incomplete).

Expect one this week...!

Herman
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.