Orocos and ROS intercommunication

Hi all Orocos-developers,

working at Willow Garage's headquarters for a two weeks has shown me the
strength of ROS:

- They have a really good build-system (on top of cmake), that handles very
nicely all internal dependencies between their packages. (a ROS package is
much like a OCL library)
- For highly distributed systems it just works. Their communication is not
realtime (they do not use it themselves for their realtime control part of
the robot control system), but for non-realtime inter-process communication
it is very usefull.
- They have a lot of nice tools for visualization of sensor data,
diagnostics etc (see rviz, rxplot, rxgraph, pr2-diagnostics)

Which brought me to the idea to add support for ROS as a middleware,
something as we have now for CORBA. I would like to start with Port and
Method/Command support. The idea is to add a deployment property for a
component which allows the user to specify if the ports/methods/command
should be exported to ROS primitives, being node topics for ports and node
services for methods/commands.

If this attempt succeds, we could use their set of tools and packages with
our Orocos-components without any overhead for the component-builder and I'm
sure we can convince them to use RTT in some of their packages, their
realtime control being the first.

If anyone already did or tried to do something like this, please let me
know.

The people at Willow Garage are really interested in seeing if this can
work. If so, they'll probably add RTT in their operating system as a 3rd
party package that will ship by the end of the year with their robots. I
think this is a good opportunity to bring new users to Orocos RTT

Ruben

Ruben Smits's picture

Orocos and ROS intercommunication

Ok, i got it working,

check the following http://pr.willowgarage.com/wiki/rtt_ros_integration
about more information. I could succesfully and automatically (at
runtime) create the mapping layer for an example component. The
example shows how to get information out of RTT to ROS and the other
way around.

I could use rxplot to visualize the outcoming data, without further adjustments.

The usage is very simple, use the rosdeployer like you would use the
standard deployer and add the following line for you component struct:

<simple name="CreateRosNode" type="boolean"><value>1<value><simple>

If your types and the conversions are added to the RosToolkit you are
ready to go.

Ruben

On Sat, May 23, 2009 at 11:17 AM, Ruben Smits
<ruben [dot] smits [..] ...> wrote:
> Hi all Orocos-developers,
>
> working at Willow Garage's headquarters for a two weeks has shown me the
> strength of ROS:
>
> - They have a really good build-system (on top of cmake), that handles very
> nicely all internal dependencies between their packages. (a ROS package is
> much like a OCL library)
> - For highly distributed systems it just works. Their communication is not
> realtime (they do not use it themselves for their realtime control part of
> the robot control system), but for non-realtime inter-process communication
> it is very usefull.
> - They have a lot of nice tools for visualization of sensor data,
> diagnostics etc (see rviz, rxplot, rxgraph, pr2-diagnostics)
>
> Which brought me to the idea to add support for ROS as a middleware,
> something as we have now for CORBA. I would like to start with Port and
> Method/Command support. The idea is to add a deployment property for a
> component which allows the user to specify if the ports/methods/command
> should be exported to ROS primitives, being node topics for ports and node
> services for methods/commands.
>
> If this attempt succeds, we could use their set of tools and packages with
> our Orocos-components without any overhead for the component-builder and I'm
> sure we can convince them to use RTT in some of their packages, their
> realtime control being the first.
>
> If anyone already did or tried to do something like this, please let me
> know.
>
> The people at Willow Garage are really interested in seeing if this can
> work. If so, they'll probably add RTT in their operating system as a 3rd
> party package that will ship by the end of the year with their robots. I
> think this is a good opportunity to bring new users to Orocos RTT
>
> Ruben
>

Orocos and ROS intercommunication

On Fri, May 29, 2009 at 8:58 PM, Ruben Smits
<ruben [dot] smits [..] ...>wrote:

> Ok, i got it working,
>
> check the following http://pr.willowgarage.com/wiki/rtt_ros_integration
> about more information. I could succesfully and automatically (at
> runtime) create the mapping layer for an example component. The
> example shows how to get information out of RTT to ROS and the other
> way around.
>
> I could use rxplot to visualize the outcoming data, without further
> adjustments.
>
> The usage is very simple, use the rosdeployer like you would use the
> standard deployer and add the following line for you component struct:
>
> <simple name="CreateRosNode" type="boolean"><value>1<value><simple>
>
> If your types and the conversions are added to the RosToolkit you are
> ready to go.
>
I assume it is possible to register the convertion in RTT::RosPortCreator
from any toolkit ?

Orocos and ROS intercommunication

On Fri, 29 May 2009, Ruben Smits wrote:

> Ok, i got it working,
>
> check the following http://pr.willowgarage.com/wiki/rtt_ros_integration
> about more information.

Two questions:
- Can we expect problems when exchanging specific RTT or Ros types? Or in
other words, how difficult/easy is it to make sure that both sides work
with exactly the same data types?
- is the integration ROS/RTT really peer-to-peer, or expects one side to
always be the "master"?

Herman

>I could succesfully and automatically (at
> runtime) create the mapping layer for an example component. The
> example shows how to get information out of RTT to ROS and the other
> way around.
>
> I could use rxplot to visualize the outcoming data, without further adjustments.
>
> The usage is very simple, use the rosdeployer like you would use the
> standard deployer and add the following line for you component struct:
>
> <simple name="CreateRosNode" type="boolean"><value>1<value><simple>
>
> If your types and the conversions are added to the RosToolkit you are
> ready to go.
>
> Ruben
>
> On Sat, May 23, 2009 at 11:17 AM, Ruben Smits
> <ruben [dot] smits [..] ...> wrote:
>> Hi all Orocos-developers,
>>
>> working at Willow Garage's headquarters for a two weeks has shown me the
>> strength of ROS:
>>
>> - They have a really good build-system (on top of cmake), that handles very
>> nicely all internal dependencies between their packages. (a ROS package is
>> much like a OCL library)
>> - For highly distributed systems it just works. Their communication is not
>> realtime (they do not use it themselves for their realtime control part of
>> the robot control system), but for non-realtime inter-process communication
>> it is very usefull.
>> - They have a lot of nice tools for visualization of sensor data,
>> diagnostics etc (see rviz, rxplot, rxgraph, pr2-diagnostics)
>>
>> Which brought me to the idea to add support for ROS as a middleware,
>> something as we have now for CORBA. I would like to start with Port and
>> Method/Command support. The idea is to add a deployment property for a
>> component which allows the user to specify if the ports/methods/command
>> should be exported to ROS primitives, being node topics for ports and node
>> services for methods/commands.
>>
>> If this attempt succeds, we could use their set of tools and packages with
>> our Orocos-components without any overhead for the component-builder and I'm
>> sure we can convince them to use RTT in some of their packages, their
>> realtime control being the first.
>>
>> If anyone already did or tried to do something like this, please let me
>> know.
>>
>> The people at Willow Garage are really interested in seeing if this can
>> work. If so, they'll probably add RTT in their operating system as a 3rd
>> party package that will ship by the end of the year with their robots. I
>> think this is a good opportunity to bring new users to Orocos RTT
>>
>> Ruben
>>

Ruben Smits's picture

Orocos and ROS intercommunication

On Sat, May 30, 2009 at 1:10 PM, Herman Bruyninckx
<Herman [dot] Bruyninckx [..] ...> wrote:
> On Fri, 29 May 2009, Ruben Smits wrote:
>
>> Ok, i got it working,
>>
>> check the following http://pr.willowgarage.com/wiki/rtt_ros_integration
>> about more information.
>
> Two questions:
> - Can we expect problems when exchanging specific RTT or Ros types? Or in
> other words, how difficult/easy is it to make sure that both sides work
> with exactly the same data types?

That is the job of the conversion you have to write for each datatype.

> - is the integration ROS/RTT really peer-to-peer, or expects one side to
> always be the "master"?

Since it is only data-flow now, it's really peer-to-peer (they are two
completely seperated processes)

> Herman
>
>>I could succesfully and automatically (at
>> runtime) create the mapping layer for an example component. The
>> example shows how to get information out of RTT to ROS and the other
>> way around.
>>
>> I could use rxplot to visualize the outcoming data, without further adjustments.
>>
>> The usage is very simple, use the rosdeployer like you would use the
>> standard deployer and add the following line for you component struct:
>>
>> <simple name="CreateRosNode" type="boolean"><value>1<value><simple>
>>
>> If your types and the conversions are added to the RosToolkit you are
>> ready to go.
>>
>> Ruben
>>
>> On Sat, May 23, 2009 at 11:17 AM, Ruben Smits
>> <ruben [dot] smits [..] ...> wrote:
>>> Hi all Orocos-developers,
>>>
>>> working at Willow Garage's headquarters for a two weeks has shown me the
>>> strength of ROS:
>>>
>>> - They have a really good build-system (on top of cmake), that handles very
>>> nicely all internal dependencies between their packages. (a ROS package is
>>> much like a OCL library)
>>> - For highly distributed systems it just works. Their communication is not
>>> realtime (they do not use it themselves for their realtime control part of
>>> the robot control system), but for non-realtime inter-process communication
>>> it is very usefull.
>>> - They have a lot of nice tools for visualization of sensor data,
>>> diagnostics etc (see rviz, rxplot, rxgraph, pr2-diagnostics)
>>>
>>> Which brought me to the idea to add support for ROS as a middleware,
>>> something as we have now for CORBA. I would like to start with Port and
>>> Method/Command support. The idea is to add a deployment property for a
>>> component which allows the user to specify if the ports/methods/command
>>> should be exported to ROS primitives, being node topics for ports and node
>>> services for methods/commands.
>>>
>>> If this attempt succeds, we could use their set of tools and packages with
>>> our Orocos-components without any overhead for the component-builder and I'm
>>> sure we can convince them to use RTT in some of their packages, their
>>> realtime control being the first.
>>>
>>> If anyone already did or tried to do something like this, please let me
>>> know.
>>>
>>> The people at Willow Garage are really interested in seeing if this can
>>> work. If so, they'll probably add RTT in their operating system as a 3rd
>>> party package that will ship by the end of the year with their robots. I
>>> think this is a good opportunity to bring new users to Orocos RTT
>>>
>>> Ruben
>>>
>> --
>> Orocos-Dev mailing list
>> Orocos-Dev [..] ...
>> http://lists.mech.kuleuven.be/mailman/listinfo/orocos-dev
>>
>
> --
>   K.U.Leuven, Mechanical Eng., Mechatronics & Robotics Research Group
>     <http://people.mech.kuleuven.be/~bruyninc> Tel: +32 16 322480
>   Coordinator of EURON (European Robotics Research Network)
>     <http://www.euron.org>
>   Open Realtime Control Services <http://www.orocos.org>
> --
> Orocos-Dev mailing list
> Orocos-Dev [..] ...
> http://lists.mech.kuleuven.be/mailman/listinfo/orocos-dev
>

[ros-users] Orocos and ROS intercommunication

On Fri, May 29, 2009 at 20:58, Ruben Smits <ruben [dot] smits [..] ...> wrote:
> Ok, i got it working,

Nice work Ruben ! And pretty damn fast. The Orocos community will be eternally
grateful for exposing this new operating system to our components.

>
> check the following http://pr.willowgarage.com/wiki/rtt_ros_integration
> about more information. I could succesfully and automatically (at
> runtime) create the mapping layer for an example component. The
> example shows how to get information out of RTT to ROS and the other
> way around.
>
> I could use rxplot to visualize the outcoming data, without further adjustments.

I'm eager to see these tools in action when you come back to Leuven :-)

>
> The usage is very simple, use the rosdeployer like you would use the
> standard deployer and add the following line for you component struct:
>
>  <simple name="CreateRosNode" type="boolean"><value>1<value><simple>

Ok, this is similar to exporting an Orocos component to CORBA.

>
> If your types and the conversions are added to the RosToolkit you are
> ready to go.

Could you provide us a link where to find your code exactly ?

How's KDL going ? Since you have this amount of spare time to spend
on RTT, it must be in pretty good shape :)

Peter

Orocos and ROS intercommunication

On Sat, May 23, 2009 at 8:17 PM, Ruben Smits
<ruben [dot] smits [..] ...>wrote:

> Hi all Orocos-developers,
>
> working at Willow Garage's headquarters for a two weeks has shown me the
> strength of ROS:
>
> - They have a really good build-system (on top of cmake), that handles very
> nicely all internal dependencies between their packages. (a ROS package is
> much like a OCL library)
> - For highly distributed systems it just works. Their communication is not
> realtime (they do not use it themselves for their realtime control part of
> the robot control system), but for non-realtime inter-process communication
> it is very usefull.
> - They have a lot of nice tools for visualization of sensor data,
> diagnostics etc (see rviz, rxplot, rxgraph, pr2-diagnostics)
>

Also, what I think adds a large chunk of value to the project are the things
that are built on top of ROS, that provide good solutions to a wide range of
problems that are common to many robotic setups. There are quite a few very
interesting projects out there (processing laser data, visual odometry, the
tf library, etc.).

>
> Which brought me to the idea to add support for ROS as a middleware,
> something as we have now for CORBA. I would like to start with Port and
> Method/Command support. The idea is to add a deployment property for a
> component which allows the user to specify if the ports/methods/command
> should be exported to ROS primitives, being node topics for ports and node
> services for methods/commands.
>

The idea of intercommunicaton sounds great. I would just suggest to take
into account the changes that will be introduced in the forthcoming 2.0
release of RTT. For example, I believe that the command internals will
change significantly. I also think that by doing this a larger audience may
be exposed to RTT, which hopefully will see the benefits of using it for
robot control purposes.

>
> If this attempt succeds, we could use their set of tools and packages with
> our Orocos-components without any overhead for the component-builder and I'm
> sure we can convince them to use RTT in some of their packages, their
> realtime control being the first.
>
> If anyone already did or tried to do something like this, please let me
> know.
>
> The people at Willow Garage are really interested in seeing if this can
> work. If so, they'll probably add RTT in their operating system as a 3rd
> party package that will ship by the end of the year with their robots. I
> think this is a good opportunity to bring new users to Orocos RTT
>
> Ruben
>
> --
> Orocos-Dev mailing list
> Orocos-Dev [..] ...
> http://lists.mech.kuleuven.be/mailman/listinfo/orocos-dev
>
>

Orocos and ROS intercommunication

On Sat, May 23, 2009 at 20:17, Ruben Smits <ruben [dot] smits [..] ...> wrote:
> Hi all Orocos-developers,
>
> working at Willow Garage's headquarters for a two weeks has shown me the
> strength of ROS:
>
> - They have a really good build-system (on top of cmake), that handles very
> nicely all internal dependencies between their packages. (a ROS package is
> much like a OCL library)

How much would it take to adapt their system to Orocos components ?

> - For highly distributed systems it just works. Their communication is not
> realtime (they do not use it themselves for their realtime control part of
> the robot control system), but for non-realtime inter-process communication
> it is very usefull.

Could you be more specific ?
How far did you go in writing ROS components ? Did you define user data for
inter-component communication ? How did application deployment go ?

> - They have a lot of nice tools for visualization of sensor data,
> diagnostics etc (see rviz, rxplot, rxgraph, pr2-diagnostics)

That's the biggest thing to win when being compatible with the ROS protocol,
their tooling.

>
> Which brought me to the idea to add support for ROS as a middleware,
> something as we have now for CORBA. I would like to start with Port and
> Method/Command support. The idea is to add a deployment property for a
> component which allows the user to specify if the ports/methods/command
> should be exported to ROS primitives, being node topics for ports and node
> services for methods/commands.

I support this effort fully, but don't underestimate the challenges...
If you only
want a one-way (ie OROCOS components looks like ROS component and not
vice versa) it may just work since Orocos components allow to be inspected
and thus allow some generic piece of code to work for all components.

>
> If this attempt succeds, we could use their set of tools and packages with
> our Orocos-components without any overhead for the component-builder and I'm
> sure we can convince them to use RTT in some of their packages, their
> realtime control being the first.
>
> If anyone already did or tried to do something like this, please let me
> know.
>
> The people at Willow Garage are really interested in seeing if this can
> work. If so, they'll probably add RTT in their operating system as a 3rd
> party package that will ship by the end of the year with their robots. I
> think this is a good opportunity to bring new users to Orocos RTT

Me too, but keep in mind our own roadmap too, which aims for a 2.0 beta
in december and a 2.0 release in januari 2010.

Peter

Ruben Smits's picture

Orocos and ROS intercommunication

On Sat, May 23, 2009 at 10:03 PM, Peter Soetens
<peter [..] ...> wrote:
>
> On Sat, May 23, 2009 at 20:17, Ruben Smits <ruben [dot] smits [..] ...> wrote:
> > Hi all Orocos-developers,
> >
> > working at Willow Garage's headquarters for a two weeks has shown me the
> > strength of ROS:
> >
> > - They have a really good build-system (on top of cmake), that handles very
> > nicely all internal dependencies between their packages. (a ROS package is
> > much like a OCL library)
>
> How much would it take to adapt their system to Orocos components ?

What do you mean with adapting, making Orocos components of all of
their packages?

>
> > - For highly distributed systems it just works. Their communication is not
> > realtime (they do not use it themselves for their realtime control part of
> > the robot control system), but for non-realtime inter-process communication
> > it is very usefull.
>
> Could you be more specific ?
> How far did you go in writing ROS components ? Did you define user data for
> inter-component communication ? How did application deployment go ?

I wrote a few Orocos components which included ros cpp code for the
interaction with other ROS components. This was only one way, from
Orocos to ROS or from ROS to Orocos, I did not yet create a connection
between two Orocos components using ROS, I only coded some examples
for one day, give me some time to work out some more use cases. As a
starter i will focus on automatic dataport exposure for ROS, reading
and writing.

But do not expect it to become the same kind of communication as with
CORBA, browsing distributed components as we can do now with CORBA
will be very hard (if not impossible) with ROS.

Application deployment goes through a program called 'roslaunch', it
reads a xml file, which states all the processes that have to be
started up, states all the properties etc. It's like our deployer, but
there are some significant differences. I even used their application
deployement to invoke our application deployement (the deployer
executable with arguments), works like a charm.

>
> > - They have a lot of nice tools for visualization of sensor data,
> > diagnostics etc (see rviz, rxplot, rxgraph, pr2-diagnostics)
>
> That's the biggest thing to win when being compatible with the ROS protocol,
> their tooling.
>
> >
> > Which brought me to the idea to add support for ROS as a middleware,
> > something as we have now for CORBA. I would like to start with Port and
> > Method/Command support. The idea is to add a deployment property for a
> > component which allows the user to specify if the ports/methods/command
> > should be exported to ROS primitives, being node topics for ports and node
> > services for methods/commands.
>
> I support this effort fully, but don't underestimate the challenges...
> If you only
> want a one-way (ie OROCOS components looks like ROS component and not
> vice versa) it may just work since Orocos components allow to be inspected
> and thus allow some generic piece of code to work for all components.

I would like to automatically get data in and out an Orocos component
and automatically offer the methods/commands as services for ROS
components. I do not have any plans on going any further myself.

>
> >
> > If this attempt succeds, we could use their set of tools and packages with
> > our Orocos-components without any overhead for the component-builder and I'm
> > sure we can convince them to use RTT in some of their packages, their
> > realtime control being the first.
> >
> > If anyone already did or tried to do something like this, please let me
> > know.
> >
> > The people at Willow Garage are really interested in seeing if this can
> > work. If so, they'll probably add RTT in their operating system as a 3rd
> > party package that will ship by the end of the year with their robots. I
> > think this is a good opportunity to bring new users to Orocos RTT
>
> Me too, but keep in mind our own roadmap too, which aims for a 2.0 beta
> in december and a 2.0 release in januari 2010.

Is there a document/wikipage that includes all features/changes that
will be include in 2.0, and what the state is of the code for 2.0
(what's already testable, what not)?

Ruben