Orocos for VR applications

Hello, we are investigating the use of Orocos for VR applications (interactive simulations including, for instance, motion capture, movement analysis, physical simulation, multimodal rendering such as graphic, sound and haptic) in a network distributed setup.
By reading the manuals, Orocos seems to fulfill much of the component aspect we are looking for. However, could you give us your feeling about using Orocos in this context regarding several points:
*We need to transfert some heavy-load data between the components (timestep of 1ms, payload up to 10Ko each ms). Do you think that the dataflow system can handle that in the case of network-distributed components (thus using Corba, if I understood well) ?
*Do you had some experience with latencies in such network context ? (I've seen some presentation about lock-free structures and latencies but I think it applies for same-adress spaces components)
*Do you had some experience with network communicating between different hardware architectures (32bits/64bits, big/little endian) ? Or maybe this aspect is directly handled using Corba ?
*Did you investigated the use of ZeroC ICE for the distributed framework layer ?
*Do you think integrating lua (or python) scripting (in place of the specific script interface you provide) would be a difficult work ?

Thank you,

Orocos for VR applications

On Thu, 16 Jul 2009, jean [dot] sreng [..] ... wrote:

> Hello, we are investigating the use of Orocos for VR applications
> (interactive simulations including, for instance, motion capture,
> movement analysis, physical simulation, multimodal rendering such as
> graphic, sound and haptic) in a network distributed setup.
> By reading the manuals, Orocos seems to fulfill much of the component
> aspect we are looking for. However, could you give us your feeling about
> using Orocos in this context regarding several points:
> *We need to transfert some heavy-load data between the components
> (timestep of 1ms, payload up to 10Ko each ms). Do you think that the
> dataflow system can handle that in the case of network-distributed
> components (thus using Corba, if I understood well) ?
> *Do you had some experience with latencies in such network context ?
> (I've seen some presentation about lock-free structures and latencies but
> I think it applies for same-adress spaces components)

Indeed. Orocos focuses on the "embedded" parts of the whole control (and
simulation) aspects, so it leaves the "communication middleware" aspects to
other projects, and only solves the ones that are relevant in a single
process context.

> *Do you had some experience with network communicating between different
> hardware architectures (32bits/64bits, big/little endian) ? Or maybe this
> aspect is directly handled using Corba ?

CORBA should do this indeed. (But that depends on the _implemenations_ of
the CORBA specification that you use.) An efficient alternative is the
binary, self-descriptive message concept of NetCDF.

> *Did you investigated the use of ZeroC ICE for the distributed framework
> layer ?
The ORCA project
<http://orca-robotics.sourceforge.net/orca/index.html>
has chosen ZeroC as its communication middleware. Probably those people can
provide more detailed benchmark information.

> *Do you think integrating lua (or python) scripting (in place of the
> specific script interface you provide) would be a difficult work ?

As said before, Markus is looking into Lua. The reason why we decided (five
years ago) to make our own scripting is that we wanted the scripting to be
usable in realtime, and none of the languages we were aware of (at that
time) provided that feature. Lua is a (for us) new kid on the block that is
promising in this respect.

Herman

Orocos for VR applications

On Jul 16, 2009, at 13:49 , jean [dot] sreng [..] ... wrote:

> Hello, we are investigating the use of Orocos for VR applications
> (interactive simulations including, for instance, motion capture,
> movement analysis, physical simulation, multimodal rendering such as
> graphic, sound and haptic) in a network distributed setup.
> By reading the manuals, Orocos seems to fulfill much of the
> component aspect we are looking for. However, could you give us your
> feeling about using Orocos in this context regarding several points:
> *We need to transfert some heavy-load data between the components
> (timestep of 1ms, payload up to 10Ko each ms). Do you think that the
> dataflow system can handle that in the case of network-distributed
> components (thus using Corba, if I understood well) ?

It really depends on the CPUs involved. You are talking about 10MB/s,
which means you have to send over Gigabit ethernet or better. One of
our applications transfers 300KB images at 10Hz, and none or our
machines (ie Mac laptop, fairly modern Dell desktops, etc) even notices.

> *Do you had some experience with latencies in such network context ?
> (I've seen some presentation about lock-free structures and
> latencies but I think it applies for same-adress spaces components)

What are your requirements? What latency can you tolerate?

> *Do you had some experience with network communicating between
> different hardware architectures (32bits/64bits, big/little
> endian) ? Or maybe this aspect is directly handled using Corba ?

We've had no problems. Corba should deal with this.

> *Did you investigated the use of ZeroC ICE for the distributed
> framework layer ?

We've used ZeroC. It's grown to become just as bad as CORBA, in terms
of connecting things together with it. The nice thing about Orocos is
that those nasty connections have already been made. The ability to
add arbitrary types/data to the system and have them transferred, is
far easier in Orocos

> *Do you think integrating lua (or python) scripting (in place of the
> specific script interface you provide) would be a difficult work ?

That question has been bought up before. IIRC it would take some
work ... Peter is probably best to answer this one.
Stephen

Orocos for VR applications

On Fri, Jul 17, 2009 at 13:58, S Roderick<kiwi [dot] net [..] ...> wrote:
>> *Do you think integrating lua (or python) scripting (in place of the
>> specific script interface you provide) would be a difficult work ?
>
> That question has been bought up before. IIRC it would take some
> work ... Peter is probably best to answer this one.

It's Markus doing the lua thing. It's not trivial and we deem lua even
more suitable than Python. A major problem is that we can't let Swig
convert our component interface to python or whatever. We need to
craft the introspection + scripting insertion ourselves. We do have a
plan to make scripting extensions mere plugins, but that's food for
RTT 2.0.

Peter

Orocos for VR applications

Hello, thanks for your reply !

S Roderick a écrit :
>> *We need to transfert some heavy-load data between the components
>> (timestep of 1ms, payload up to 10Ko each ms). Do you think that the
>> dataflow system can handle that in the case of network-distributed
>> components (thus using Corba, if I understood well) ?
>
> It really depends on the CPUs involved. You are talking about 10MB/s,
> which means you have to send over Gigabit ethernet or better. One of our
> applications transfers 300KB images at 10Hz, and none or our machines
> (ie Mac laptop, fairly modern Dell desktops, etc) even notices.

In fact, our main requirement is about the latency. For instance classic
haptic control requires 1ms - 2ms maximum latency. Usually, a small
amount of data (less than 1Ko) is transmitted every timestep, but in
several occasions can reach up to several Ko. I was also wondering about
the extra latency that might be introduced by Corba serialization.

Orocos for VR applications

On Jul 17, 2009, at 10:23 , Jean Sreng wrote:

> Hello, thanks for your reply !
>
> S Roderick a écrit :
>>> *We need to transfert some heavy-load data between the components
>>> (timestep of 1ms, payload up to 10Ko each ms). Do you think that the
>>> dataflow system can handle that in the case of network-distributed
>>> components (thus using Corba, if I understood well) ?
>>
>> It really depends on the CPUs involved. You are talking about 10MB/s,
>> which means you have to send over Gigabit ethernet or better. One
>> of our
>> applications transfers 300KB images at 10Hz, and none or our machines
>> (ie Mac laptop, fairly modern Dell desktops, etc) even notices.
>
> In fact, our main requirement is about the latency. For instance
> classic
> haptic control requires 1ms - 2ms maximum latency. Usually, a small
> amount of data (less than 1Ko) is transmitted every timestep, but in
> several occasions can reach up to several Ko. I was also wondering
> about
> the extra latency that might be introduced by Corba serialization.

By "1Ko" do you mean "1Kb" or something else?
S

Orocos for VR applications

Stephen Roderick a écrit :
> On Jul 17, 2009, at 10:23 , Jean Sreng wrote:
>
>> Hello, thanks for your reply !
>>
>> S Roderick a écrit :
>>>> *We need to transfert some heavy-load data between the components
>>>> (timestep of 1ms, payload up to 10Ko each ms). Do you think that the
>>>> dataflow system can handle that in the case of network-distributed
>>>> components (thus using Corba, if I understood well) ?
>>>
>>> It really depends on the CPUs involved. You are talking about 10MB/s,
>>> which means you have to send over Gigabit ethernet or better. One of our
>>> applications transfers 300KB images at 10Hz, and none or our machines
>>> (ie Mac laptop, fairly modern Dell desktops, etc) even notices.
>>
>> In fact, our main requirement is about the latency. For instance classic
>> haptic control requires 1ms - 2ms maximum latency. Usually, a small
>> amount of data (less than 1Ko) is transmitted every timestep, but in
>> several occasions can reach up to several Ko. I was also wondering about
>> the extra latency that might be introduced by Corba serialization.
>
> By "1Ko" do you mean "1Kb" or something else?

Yes, 1 kilo byte. Sorry. I used the french notation.

Orocos for VR applications

On Fri, Jul 17, 2009 at 16:23, Jean Sreng<jean [dot] sreng [..] ...> wrote:
> Hello, thanks for your reply !
>
> S Roderick a écrit :
>>> *We need to transfert some heavy-load data between the components
>>> (timestep of 1ms, payload up to 10Ko each ms). Do you think that the
>>> dataflow system can handle that in the case of network-distributed
>>> components (thus using Corba, if I understood well) ?
>>
>> It really depends on the CPUs involved. You are talking about 10MB/s,
>> which means you have to send over Gigabit ethernet or better. One of our
>> applications transfers 300KB images at 10Hz, and none or our machines
>> (ie Mac laptop, fairly modern Dell desktops, etc) even notices.
>
> In fact, our main requirement is about the latency. For instance classic
> haptic control requires 1ms - 2ms maximum latency. Usually, a small
> amount of data (less than 1Ko) is transmitted every timestep, but in
> several occasions can reach up to several Ko. I was also wondering about
> the extra latency that might be introduced by Corba serialization.

The good news is that the serialization depends on CPU speed and not
on network speed. This means that modern day computers should be able
to process your workload. It's indeed the network link that I'm more
worried about. It's TCP/IP after all. It needs to go after lost
packets.

If you want to avoid Orocos copying your data to the corba type (which
it does just before putting it on the network), you'll need to use the
TAO type, generated from an IDL file directly.That saves you one copy,
but it might not be worth the effort.

Peter

Orocos for VR applications

On Jul 17, 2009, at 11:20 , Peter Soetens wrote:

> On Fri, Jul 17, 2009 at 16:23, Jean Sreng<jean [dot] sreng [..] ...> wrote:
>> Hello, thanks for your reply !
>>
>> S Roderick a écrit :
>>>> *We need to transfert some heavy-load data between the components
>>>> (timestep of 1ms, payload up to 10Ko each ms). Do you think that
>>>> the
>>>> dataflow system can handle that in the case of network-distributed
>>>> components (thus using Corba, if I understood well) ?
>>>
>>> It really depends on the CPUs involved. You are talking about 10MB/
>>> s,
>>> which means you have to send over Gigabit ethernet or better. One
>>> of our
>>> applications transfers 300KB images at 10Hz, and none or our
>>> machines
>>> (ie Mac laptop, fairly modern Dell desktops, etc) even notices.
>>
>> In fact, our main requirement is about the latency. For instance
>> classic
>> haptic control requires 1ms - 2ms maximum latency. Usually, a small
>> amount of data (less than 1Ko) is transmitted every timestep, but in
>> several occasions can reach up to several Ko. I was also wondering
>> about
>> the extra latency that might be introduced by Corba serialization.
>
> The good news is that the serialization depends on CPU speed and not
> on network speed. This means that modern day computers should be able
> to process your workload. It's indeed the network link that I'm more
> worried about. It's TCP/IP after all. It needs to go after lost
> packets.

I would recommend building a pair of quick test applications, that run
at the correct rate and send/receive approximately the amount of data
you want to send (via standard sockets). Measure your CPU overhead and
network utilization with that. That will give you some idea of the raw
overhead and whether everything can keep up.

Then factor in a couple of extra copies of data (which you could also
mockup within the test programs, if you felt it was necessary).

Measure twice ... cut once ...

HTH
S

Orocos for VR applications

Stephen Roderick a écrit :
>> The good news is that the serialization depends on CPU speed and not
>> on network speed. This means that modern day computers should be able
>> to process your workload. It's indeed the network link that I'm more
>> worried about. It's TCP/IP after all. It needs to go after lost
>> packets.
>
> I would recommend building a pair of quick test applications, that run
> at the correct rate and send/receive approximately the amount of data
> you want to send (via standard sockets). Measure your CPU overhead and
> network utilization with that. That will give you some idea of the raw
> overhead and whether everything can keep up.
>
> Then factor in a couple of extra copies of data (which you could also
> mockup within the test programs, if you felt it was necessary).

I'm currently doing some test applications using orocos. I will detail
some of the results (I hope) in few days.

Many thanks for your help.