Re: Using orogen generated typekit with typegen

Sylvain Joyeux <[email protected]> Fri, 24 Apr 2015 09:33:30 -0300
Newsgroups gmane.science.robotics.orocos.devel
Message-ID <CAFENT7+LtO13WYSZ6gOrhxq8WBaPN_g7+0eL8+jaE_xcaOb5Dw@mail.gmail.com>
Hi Ruben

The problem lies in I having made base/orogen/std a mandatory
dependency of (at least) the task generation parts of orogen.

The most future-proof way would really be to build and install
https://github.com/rock-core/base-orogen-std (use the 'stable' branch)

Alternatively, use orogen's --no-extended-states option. But I do plan
to make extended states non-optional in the future, so that would
break in the long run.

Sylvain

2015-04-17 7:32 GMT-03:00 Ruben Smits <[email protected]>:
>
>
> On Thu, Apr 16, 2015 at 4:57 PM, Sylvain Joyeux <[email protected]>
> wrote:
>>
>> The first thing I asked myself was "why is it not working there but is
>> obviously working in Rock"
>>
>> The answer is: it works if you have a task context using the
>> opaque-using type in orogen. It fails if you don't. I'll have a look
>> as to why, but in the meantime, just add
>>
>> task_context 'Workaround' do
>>   property 'p0', '/the/type/which/uses/posix/time'
>> end
>>
>> to the second orogen project.
>
>
> I tried this and got a little bit further, but now it complains like this:
>
> big_mockup.orogen:9: /int32_t, defined in the test typekits, is never
> exported (OroGen::ConfigError)
>
> I'm using an int32_t as type in my boost::posix_ptime wrapper.
>
> Should I explicitly export some of these types?
>
>
> Also,
>>
>>
>> 2015-04-16 7:16 GMT-03:00 Ruben Smits <[email protected]>:
>> > Hi all,
>> >
>> > In a first orocos package I'm trying to use a boost::posix_time::ptime
>> > as
>> > part of one of my structs.
>> >
>> > Since orogen/typegen/gccxml cannot interprete this type, I've created a
>> > second package that contains a typekit generated with orogen that uses
>> > Opaques and wrapper types to handle this. That typekit happily builds in
>> > it's own package, I can start the deployer and use this type. So far so
>> > good.
>> >
>> > Now in my first package I'm using typegen to generate the typekit of the
>> > first package structs (using boost::posix_time::ptime):
>> >
>> > orocos_typegen_headers(Structs.hpp DEPENDS orocos_kdl
>> > test-typekit-${OROCOS_TARGET})
>> >
>> > This executes something similar like this:
>> > typegen --output=/tmp --import=orocos_kdl --import=test-typekit-gnulinux
>> > foo
>> > Structs.hpp
>> >
>> > and results in the following error:
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/orogen/gen/typekit.rb:1242:in
>> > `orogen_include_of_type': undefined method `<=' for nil:NilClass
>> > (NoMethodError)
>> > from
>
>
>
> This error is still there, and seems unrelated to the other error.
>
> R.
>
>
>>
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/orogen/gen/typekit.rb:1270:in
>> > `compute_orogen_include_on_type'
>> > from
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/orogen/gen/typekit.rb:714:in
>> > `rescue in find_type'
>> > from
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/orogen/gen/typekit.rb:710:in
>> > `find_type'
>> > from
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/orogen/gen/typekit.rb:1496:in
>> > `block in normalize_registry'
>> > from
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/orogen/gen/typekit.rb:1494:in
>> > `each'
>> > from
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/orogen/gen/typekit.rb:1494:in
>> > `normalize_registry'
>> > from
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/orogen/gen/typekit.rb:1859:in
>> > `generate'
>> > from /home/rsmits/orocos_ws/install_isolated/bin/typegen:116:in `<main>'
>> >
>> > I've instrumented typelib a little bit to start debugging:
>> >
>> > diff --git a/typelib/registry.cc b/typelib/registry.cc
>> > index a986566..2ec3273 100644
>> > --- a/typelib/registry.cc
>> > +++ b/typelib/registry.cc
>> > @@ -293,6 +293,7 @@ namespace Typelib
>> >
>> >      const Type* Registry::get(const std::string& name) const
>> >      {
>> > +        std::cout<<"Getting type of "<<name<<std::endl;
>> >          NameMap::const_iterator it = m_current.find(name);
>> >          if (it != m_current.end())
>> >              return it->second.type;
>> > @@ -323,6 +324,7 @@ namespace Typelib
>> >
>> >      void Registry::add(std::string const& name, Type* new_type, bool
>> > persistent, std::string const& s
>> >      {
>> > +        std::cout<<"Adding type "<<name<<std::endl;
>> >          if (! isValidTypename(name, true))
>> >              throw BadName(name);
>> >
>> > And I see that the types from my orogen generated typekit are definitely
>> > loaded:
>> >
>> > ...
>> > Getting type of /boost/posix_time/ptime
>> > Getting type of /boost/posix_time/ptime
>> > Getting type of /boost/posix_time/ptime
>> > Adding type /boost/posix_time/ptime
>> > Getting type of /boost/posix_time/ptime
>> > Getting type of /boost/posix_time/ptime
>> > Adding type /boost/posix_time/ptime
>> > Getting type of /boost/posix_time/ptime
>> > Getting type of /boost/posix_time/time_duration
>> > Getting type of /boost/posix_time/time_duration
>> > Getting type of /boost/posix_time/time_duration
>> > Adding type /boost/posix_time/time_duration
>> > Getting type of /boost/posix_time/time_duration
>> > Getting type of /boost/posix_time/time_duration
>> > Adding type /boost/posix_time/time_duration
>> > Getting type of /boost/posix_time/time_duration
>> > ...
>> >
>> > I have no idea what the problem is here.
>> >
>> > As a second trial I tried to generate the typekit with orogen instead:
>> >
>> > big_mockup.orogen:
>> > ````
>> > name 'big_mockup'
>> > version '0.1'
>> >
>> > import_types_from 'test'
>> >
>> > import_types_from "Structs.hpp"
>> > ````
>> >
>> > Again I see that my boost time typekit get's loaded, it even detects
>> > that it
>> > should use the wrapper type somehow but than this happens:
>> > And now I get a different error:
>> >
>> > ===== Internal error =======
>> > Please report the following error to the orogen developers
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/typelib/registry.rb:54:in
>> > `do_minimal': there is not type '/wrappers/Time' in this registry
>> > (RuntimeError)
>> > from
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/typelib/registry.rb:54:in
>> > `minimal'
>> > from
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/orogen/gen/typekit.rb:1496:in
>> > `block in normalize_registry'
>> > from
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/orogen/gen/typekit.rb:1494:in
>> > `each'
>> > from
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/orogen/gen/typekit.rb:1494:in
>> > `normalize_registry'
>> > from
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/orogen/gen/typekit.rb:1859:in
>> > `generate'
>> > from
>> >
>> > /home/rsmits/orocos_ws/install_isolated/lib/ruby/1.9.1/orogen/gen/project.rb:676:in
>> > `generate'
>> > from /home/rsmits/orocos_ws/install_isolated/bin/orogen:171:in `<main>'
>> >
>> >
>> > I'm using the toolchain-2.8 branches of typelib (based on master at
>> > 68658739
>> > ) and orogen (based on master 9bb6ed8901da2d)
>> >
>> > Could someone shed a light on this?
>> >
>> > R.
>> >
>> > --
>> > Ruben Smits, Roboticist - Founder
>> > +32 479 511 786
>> > Intermodalics - Kapeldreef 60, 3001 Heverlee - BELGIUM
>> > www.intermodalics.eu
>> >
>> > --
>> > Orocos-Dev mailing list
>> > [email protected]
>> > http://lists.mech.kuleuven.be/mailman/listinfo/orocos-dev
>> >
>
>
>
>
> --
> Ruben Smits, Roboticist - Founder
> +32 479 511 786
> Intermodalics - Kapeldreef 60, 3001 Heverlee - BELGIUM
> www.intermodalics.eu
-- 
Orocos-Dev mailing list
[email protected]
http://lists.mech.kuleuven.be/mailman/listinfo/orocos-dev