components list/Control SP interaction

Rachel Smith <[email protected]>
Newsgroups gmane.science.robotics.orocos.user
Message-ID <[email protected]>
On the Components page, is the use of the word "component" there equal 
to the use of the word "component" in vision.html as it describes the 
rectangles in the Control SP? Maybe that's where part of my confusion is 
stemming from.

What is the relationship between the list of Robotics libraries on the 
Vision page and the list of components on the Components page? These 
lists are different, but have some overlap.

>>it is assumed that if one "zoomed into" the Controller rectangle in the 
>>Control SP, we would find another complete instance of the Control SP?
> 
> Controllers can be combined in various architectures, the hierarchical
> one being the most common. This is _different_ from "zooming in"!

By this, you mean that you could have a complete instantiation of the 
Control SP that handles RT processing and works directly with the 
hardware, another complete instantiation one level of abstraction higher 
that uses the first layer and does the local planning and task 
execution, and on top of both of those, a third complete instantiation 
that does global planning, error recovery, and possibly incorporates AI?

Thus:

UI Level: graphical and non-graphical user interfaces, geometric modelling

Top Level: motion, force, and interaction control applications, map 
building and object localization

Mid-Level: task specification and task sequencing, processing of sensor 
data, trajectory generation, kinematics and dynamics

Lowest-Level: Servo control algorithms, device drivers for robotic hardware

Motion control applications are at all levels, it just depends on the 
level of abstraction assumed in the internals of a given application 
which level in the hierarchy it belongs? Communication and 
synchronization at all levels? Task specification and task sequencing at 
the top level _and_ the mid-level? Processing of sensor data at 
mid-level _and_ lowest level? Can we have "really high-level sensors," 
like aggregate or virtual sensors, which could be processed at the top 
level? Geometric modelling at UI level _and_ top level?

>>     * Motion, force and interaction control (are these 
>>Generator/Observer/Controllers? Or just one of these types?)
> 
> These are _complete instantiations_ of the control pattern. The
> difference is in teh _functional contents_ of the components, but not
> in the structure (pattern); that's the same for all of them.

So is determining the patterns for combined used of these three levels 
of complete instantiations outside the immediate scope of Orocos? In 
other words, if we've got three levels of the Control SP layered in a 
hierarchy, how does communication between and usage of lower-level 
components between the layers work? Is it a direct connection (top-level 
Controller-rectangle only talks to second-level Controller-rectangle, 
e.g.), or is it more complex and flexible than that?

I'm trying to figure out how to superclass and subclass things, and 
even, really, what the hierarchy of the classes should be based on. 
Which characteristic of the software components should be the dimension? 
The component's role in the Control SP (or, more simply, the component's 
role in the Sensing-Planning-Control model given in patterns.html)? The 
component's function (e.g. kinematics, servo control, communication)? A 
cross-product of the two? Something else entirely?

>>     * Kinematics and dynamics 
>>(Scanner/Actuator/Generator/Observer/Controllers?)
> 
> These are algorithms that can be used in all components (well,
> basically only in the Generator and the Estimator).

So there is some notion that if we have an application at the mid-level 
of the three-level hierarchy which has a Generator that uses kinematics 
to generate setpoints, if we "zoom into" that Generator rectangle, we'll 
see at least one complete instantiation of the Control SP in the 
kinematics support inside of it? If only the Generator and the Estimator 
are really relevant to this kinematics-and-dynamics functionality, then 
we're getting a hint that a very-high-level robotics control application 
would be built out of the types of functionality given in the list of 
components on the Components page, and the functions *would* fit into a 
specific subset of the rectangles in the Control SP?

And thus, would a chunk of code that implements a kinematics and 
dynamics control application be said to be multiply-inheriting from 
types Generator and Estimator, even while that chunk would probably have 
within it its own Generator(s) and Estimator(s)?

ooh, this is giving me a headache. :)

>>Has anyone tried building a specifically Robotics Control SP out of the 
>>set of the things in the component list above, instead of just using 
>>generic control notions? 
> 
> Maybe I misunderstand your question, but the Orocos is all about
> building the instantioation of the SP in the framework of robot and
> machine tool control.

I think I was trying to say:

Could we imagine constructing a robotics control application that uses 
all of the pieces in the list of components on the Components page? 
(These are what I'd been referring to as "functionalities" or 
"functions" above.)  In that big picture, do the functionalities fit 
naturally into certain places in this very-high-level instantiation of 
the Control SP?

Or is Orocos only interested in implementing each of the functionalities 
at their own level?

>>On another train of thought, has there been any work in defining a task 
>>hierarchy? 
> 
> Not yet. But it is certainly something we are very interested in.

This is another dimension along which a class hierarchy could be defined...

>>The Orocos component list given above is already somewhat 
>>heading in this direction. "Task planning" and "task specification and 
>>execution" are mentioned as components, but these are support for 
>>describing and executing a task--not for investigating what are the 
>>common tasks that roboticists use and build upon, are they? 
> 
> 
> I don't quite understand what you mean :-(

So I imagine a "task hierarchy" would be a list along the lines of:

MoveJoint
MoveMultipleJointsInAFinger
MoveMultipleFingersInSomeMeaningfulPattern
UseMoveMultipleFingersInThatMeaningfulPatternToDoSomeStillHigherLevelTask

etc., where each "task" in that list would assume a certain interface of 
the lower-level things that it uses to achieve its end. (See the 
"grasping" example below, where "grasp" would be a "meaningful pattern 
of movement" with an interface that has a postcondition that means that 
an object of interest is within the grasp of a robot.) Thus, any 
physical configuration of actuators that could "grasp" something (i.e. 
provide the grasp interface) would be able to be plugged in under a 
higher-level task that requires that an object be grasped in order to 
achieve itself.

>>a stab at flexibility issues, it seems to me that it would make sense to 
>>define "task components" (e.g. "MoveJoint," "MoveMultiJointFinger," 
>>"Grasp") 
> 
> These actions are not "components", but just method calls of a
> _particular_ task API.

But why couldn't they be a kind of component in and of themselves? (I 
realize that by this point, we're probably overloading "component" with 
_three_ different definitions: Control SP rectangle, functionality, and 
action concept.) If we limit ourselves to just adding more methods 
whenever we want to do something more complex, we'll end up trying to do 
something like defining a Ball object and then adding a new method for 
each of the infinite variations of things one could do *with* a ball. 
Why not call "MoveJoint" a task ("action concept"?) in its own 
independent right, and any piece of hardware that can achieve this task 
can be plugged in underneath it, thus giving you the flexibility of 
doing higher-level things with it and not having to worry about which 
joint-actuator is being asked to do it?

Doing high-level task planning based on a set of available lower-level 
tasks...

Just out of curiousity, what would you imagine would be the particular 
task API that would be able to handle those three examples? Maybe my 
mental notion of "task" is just completely out of synch with yours.

>>Thus, any lower-level component that provides the necessary interface 
>>for "Grasping," for example, could be "Grasp"-ed by this Grasp task 
>>component. Defining what constitutes "the necessary interface for 
>>grasping" is its own question, but is this approach heading in a 
>>promising direction? 
> 
> 
> I don't know... Not much work is going on at this moment, AFAIK.

It may just be another way of thinking about what the software 
components do and how they could fit together...

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