Re: FK and Jacobian calculation in RTT
Willy Lambert <[email protected]> Tue, 21 Jan 2014 13:54:24 +0100
| Newsgroups | gmane.science.robotics.orocos.devel |
|---|---|
| Message-ID | <CAKvQZ_3DR8k=uc2pNwesti5wK+be5=na32Oe9icRf7yH9KN5JA@mail.gmail.com> |
2014/1/21 Herman Bruyninckx <[email protected]> > On Tue, 21 Jan 2014, Sylvain Joyeux wrote: > > On Tuesday, January 21, 2014 08:48:44 AM Herman Bruyninckx wrote: >> >>> Not agreed... It _is_ a generic rule that processes take up orders of >>> magnitude more resources than function calls, so the obvious _first_ >>> thing >>> to think of is to reuse functionality as _functions_, not as >>> processes/activities. >>> >> 1. You are equating component and process, which is obviously a >> misreprentation (would I want to start a flamewar, I would say FUD given >> that >> you KNOW how RTT is architectured). >> > > I know what the _intention_ was (and that correspond to what you have in > mind) but unfortunately I also know how most newcomers are _using_ the RTT > infrastructure, and that is almost invariably "the ROS way", that is, by > assuming that each RTT component should be deployed in its own process or > thread... It's not because most people use badly the system that it becomes the rigth way ;p. Assembling librairies into components and affecting then to machines/process/thread/slave activity is 2 different jobs. The first one is a system job where you are mainly create functionnal paths, the second one is a pure informatician problem. > > 2. You are assuming here that a function is cheap. It is obviously >> dependent >> on the function ! Path planning algorithms can take easily north of 100ms >> to >> run for *each run*. A ping-pong between two RTT components takes 25 >> microseconds. >> > > Depending on the _deployment_ of these components, and their current > _execution state_... (That is, are the components currently _ready_ to > engage > in such a ping-pong or not, or are one or more context switches needed > before that ping-pong can take place.) > > And your numbers do not invalidate my generic statements, nor do they > corroborate them, since timing is one of the most variable and > undeterministic aspects of any component-based system of any complexity. > > > It is interesting to see this discussion pop up here, as we are >> considering >> using RTT as a form of plugin system and doing some serious benchmarking >> and >> optimization to the RTT channel implementation for this purpose. >> > > That is definitely a worthwhile effort to undertake! But both of us were > present at a presentation at ICRA last year, where such "serious > benchmarking" was also undertaken (and not by amateurs), but nevertheless > many questions could be posed about the refutability of the benchmarks. > > > The motivation in our case is to integrate *once* algorithms that are >> shared >> between planning and runtime (as e.g. IK) by being able to "hide" the >> component as a function call within the motion planning algorithm (which >> would >> only see a boost::function object, never an actual RTT component). So >> far, I >> am honestly leaning towards "it is doable". >> > > From your brief description, this looks the same motivation as what made >> us >> > (Markus Klotzbücher and myself) decide to start the "microblx" library; > pure C, no C++ or other dependencies there, because it should also work on > all kinds of embedded hardware such as FPGAs. > Also no "class APIs" either, so that "hiding" is not needed/possible, and > executed code and computational state of that code are 100% separated. > > > Assigning one single process to one single function >>> should be a well-motivated _exception_, and any (even implicit) >>> suggestion >>> that "the context" is in general equally ready to accept either solution >>> is >>> hard to motivate. >>> >> > Rock's development guidelines stresses strongly that most of the >> functionality >> should be put in libraries. In the end, some components *are* as few >> calls as >> possible to single functions *because of this process*. >> > > Rock is, by far, the best development toolkit around, in my opinion. > _Because_ its developer(s) are knowledgeable in the tricky stuff of > multi-component system design :-) > > > For example, in the context of IK/ID functionality: sharing the "costly" >>> _code_ of such a function is simple when deploying it as a function where >>> the different callers keep their own computational state of the function, >>> but reuse the executable code by just pointing to it; such decoupling of >>> computational state from the code of the algorithm does _in general_ not >>> require deployment in different processes (if the code is re-entrant). >>> >> > Again component != process. >> > > That is a rule that I am _trying_ to make people understand since about 5-6 > years, but the efficiency of that teaching invariably turns out to be close > to zero, unfortunately... For one reason or another, the semantics of "!=" > seems difficult to convey in a ROS-dominated world :-( > > Of course, I support your continuing efforts to keep on repeating > the message. But having a "Simulink"/"microblx"/"function blocks" > alternative available (including lots of reference implementations with > relevant functionality, sich as planning and IK/ID) would our teaching > jobs _a lot_ easier :-) > > Off topic: would anyone care to speculate on the importance of the > observation that Google bought more or less all robotics companies in the > US, _except_ the ROS-driven ones...? > > Dr. Ing. Sylvain Joyeux >> > > Herman > > -- > Orocos-Dev mailing list > [email protected] > http://lists.mech.kuleuven.be/mailman/listinfo/orocos-dev > > -- Orocos-Dev mailing list [email protected] http://lists.mech.kuleuven.be/mailman/listinfo/orocos-dev