Decomposition failed with vectors

Hi,

I'm currently using the orocos_toolchain_ros. I've defined some messages in ROS for example "float64[6] joint" and "joints_msg[2] arm" (so basically a vector includes a vector) but these can not be decomposed by the Reporter.

At first I thought that I did something wrong, so I also tested it with the Imu message from the sensor messages and got the same error for the vectors:

3.472 [ ERROR  ][TypeInfoName] Decomposition failed because Part 'orientation_covariance' is not known to type system.
3.472 [ ERROR  ][TypeInfoName] Can not build Property of unknown_t.
3.472 [ ERROR  ][TypeInfoName] Decomposition failed because Part 'angular_velocity_covariance' is not known to type system.
3.474 [ ERROR  ][TypeInfoName] Can not build Property of unknown_t.
3.475 [ ERROR  ][TypeInfoName] Decomposition failed because Part 'linear_acceleration_covariance' is not known to type system.
3.475 [ ERROR  ][TypeInfoName] Can not build Property of unknown_t.

Thanks in advance.

Jeroen

Decomposition failed with vectors

Hi Jeroen,

On Thursday 26 May 2011 14:08:41 jjpa [dot] willems [..] ... wrote:
> Hi,
>
> I'm currently using the orocos_toolchain_ros.
> I've defined some messages in ROS for example "float64[6] joint" and
> "joints_msg[2] arm" (so basically a vector includes a vector) but these
> can not be decomposed by the Reporter.
>
> At first I thought that I did something wrong, so I also tested it with the
> Imu message from the sensor messages and got the same error for the
> vectors:

> 3.472 [ ERROR  ][TypeInfoName] Decomposition failed because Part
> 'orientation_covariance' is not known to type system. 3.472 [ ERROR 
> ][TypeInfoName] Can not build Property of unknown_t. 3.472 [ ERROR 
> ][TypeInfoName] Decomposition failed because Part
> 'angular_velocity_covariance' is not known to type system. 3.474 [ ERROR 
> ][TypeInfoName] Can not build Property of unknown_t. 3.475 [ ERROR 
> ][TypeInfoName] Decomposition failed because Part
> 'linear_acceleration_covariance' is not known to type system. 3.475 [
> ERROR  ][TypeInfoName] Can not build Property of unknown_t. 

>

This is a known issue we bumped into recently as well. We overlooked the
integration of the fixed-size arrays in the scripting/taskbrowser environment.
I believe Lua is a victim of this too. The C++ side will work fine, so the data
is sent and received using ROS, but you can't see it in the TaskBrowser or use
it in a script. A workaround is to use the vector<double> in C++ to copy the
data into and use that in scripting.

We'll solve this after the 2.4.0 release.

Peter

Decomposition failed with vectors

On Friday 27 May 2011 10:00:44 Peter Soetens wrote:
> Hi Jeroen,
>
> On Thursday 26 May 2011 14:08:41 jjpa [dot] willems [..] ... wrote:
> > Hi,
> >
> > I'm currently using the orocos_toolchain_ros.
> > I've defined some messages in ROS for example "float64[6] joint" and
> > "joints_msg[2] arm" (so basically a vector includes a vector) but these
> > can not be decomposed by the Reporter.
> >
> > At first I thought that I did something wrong, so I also tested it with
> > the Imu message from the sensor messages and got the same error for the
> > vectors:

> > 3.472 [ ERROR  ][TypeInfoName] Decomposition failed because Part
> > 'orientation_covariance' is not known to type system. 3.472 [ ERROR
> > ][TypeInfoName] Can not build Property of unknown_t. 3.472 [ ERROR
> > ][TypeInfoName] Decomposition failed because Part
> > 'angular_velocity_covariance' is not known to type system. 3.474 [ ERROR
> > ][TypeInfoName] Can not build Property of unknown_t. 3.475 [ ERROR
> > ][TypeInfoName] Decomposition failed because Part
> > 'linear_acceleration_covariance' is not known to type system. 3.475 [
> > ERROR  ][TypeInfoName] Can not build Property of unknown_t. 

>
> This is a known issue we bumped into recently as well. We overlooked the
> integration of the fixed-size arrays in the scripting/taskbrowser
> environment. I believe Lua is a victim of this too. The C++ side will work
> fine, so the data is sent and received using ROS, but you can't see it in
> the TaskBrowser or use it in a script. A workaround is to use the
> vector<double> in C++ to copy the data into and use that in scripting.

Correction: an alternative workaround which is not that intrusive is to write
this:

#include <rtt/types/Types.hpp>
#include <rtt/types/CArrayTypeInfo.hpp>
 
// somewhere, once in your application:
Types()->addType( new types::CArrayTypeInfo< types::carray<double> 
>("cdouble[]") );

>
> We'll solve this after the 2.4.0 release.

What needs to be solved is that this feature addition will make ROS core
typekits again 50% bigger. For ROS systems, we need a more fine grained type
info structure that only allows to create ports for messages, and not for the
fields in the messages. orogen has a similar need.

This would affect only the core ros primitive data types. I think the ROS 0.4.0
Orocos Toolchain should be able to cope with this.

Peter