Re: A working document

Anthony Mallet <[email protected]>
Newsgroups gmane.science.robotics.orocos.user
Organization LAAS (CNRS) - Toulouse - France
Message-ID <[email protected]>
Herman Bruyninckx wrote :

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

Just one thing: I feel like I use the word 'component' for something much
more precise than you (i.e. components are what the functional layer is
made of). Maybe I should reuse the term 'module' instead?


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

In my opinion, these would _typically_ be 'modules' (i.e. component of
the functional layer). The logical layer provides low-level functions to
acquire an image or move a pan-tilt unit (much like a driver) and the
functional layer provides the encapsulation of the high level task you
mention. 


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

Yes. We also use the 'perception-decision-action' pattern.


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

Yes, you are right. But I would make a distinction between the three
layers (and that's the reason why we distinguish between those layers):
the decision procedure that appear within modules (components of the
fucntional layer) is _local_ to the module, and does not imply other
components (context independ wrt. the whole robot). Whereas the decisions
procedures that occur at the decision level take the whole robot into
account.

This makes the functional layer completely modular, wheras the components
of the decision layer are less portable. Of course, you will be able to
exhibit reusable components in the decision layer also (and in my mind
there is a need for such components --- something that does not appear in
the working document).

Actually, I think the only difference between your views and mine is that
you want to spread our three layers into each component, while we want to
spread our components into the three layers. I don't know if it's only a
'presentation' artifact or if this makes real differences :)
(I would say that it can impact the implementation)


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

Yes! If you do not impose a hierarchy, you do have a single layer :)

I really think that you can't simply connect independant components
together, and hope they work: you need at least one component on top of
all the above that will have the 'knowledge' of the whole robot and the
other components.

But that's an endless discussion. I think there isn't a 'right' way to
put things together. That's why I "focused on the functional layer",
because obtaining a good spec for that one (i.e. something that let
implement different architectures) is really what is important for orocos
(at least today).
:)


| > 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! 

Ok, I had a more OS-oriented view of 'scheduling' :)
And do you think the notion of 'codel' is ok to implement what do you
have in mind?


| > 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 think the second example is really different from the first :)
The first one if much like a 'technical' problem (which is useful but
does not provide functionality), whereas the second is
more challenging (and provides a new functionality).

A question on which I would like to work is "how to make two robots
cooperate without telling them to do so" (because, for instance, they did
not know they would meet). How to make them use the functionalities of
each other? This task goes into the decision layer ;) 


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

Maybe 1.0a ? ;)


| > 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?

I would say: the procedure that invoked the service handles the problem.
The executive should only be a more or less 'transparent' component that
connects two things together.


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

Yup!


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

Well I see 'interrupt' as a particular event/exception.
Maybe we should consider this for the description language. It sounds
like an interresting idea.
I already see at least another event: 'suspend'.


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

I understand your vision. I really don't know which approach is best
suited to robots. On one hand, I have the felling that building
meta-components can be very powerful. On the other hand, I am affraid
of things that perform hidden tasks (which is systematically the case
with such meta components).

For instance: is it always possible to prove that a system with
meta-component will work in _every_ situation? I think it is much more
difficult than for a 'flat' approach.
On the other hand: will we always be able to build machines with hundreds
of components with a 'flat' approach?


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

Great!
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.