[Rock-dev] Periodic Mars Plugin as Device in Roby

Thomas Roehr thomas.roehr at dfki.de
Wed Jul 25 12:33:43 CEST 2012


On 25.07.2012 11:13, Christian Rauch wrote:
> Hi,
>
> if I define in Roby that:
>
> {{{
> Robot.devices do
>      device(Dev::SeekurJrSimulation, :as =>  "simulation_deployment")
> end
> }}}
>
> {{{
> class SeekurSimulation::Task
>      driver_for 'Dev::SeekurJrSimulation' do
>          provides Srv::ActuatorControlledSystem
>      end
> end
> }}}
>
> and the Task itself is defined as periodical in the *.orogen file
>
> {{{
> task_context "Task" do
>      subclasses "simulation::Mars"
>      [...]
> end
>
> deployment "simulation_deployment" do
>      sim = task("seekur_simulation", "Task").periodic(0.1)
>      [...]
> end
> }}}
>
> I will get the following error when running or instantiating:
>
> {{{
> =
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_dynamics.rb:140:in
> `+': nil can't be coerced into Fixnum (TypeError)
> = Backtrace
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_dynamics.rb:140:in
> `+',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_dynamics.rb:140:in
> `queue_size',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_dynamics.rb:291:in
> `initial_device_information_periodic_triggering',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/component.rb:179:in
> `each_task_output_port',
> |   (eval):17:in `each_value',
> |   (eval):17:in `each_output_port',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/component.rb:357:in
> `each_output_port',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/component.rb:153:in
> `each_output_port',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/component.rb:178:in
> `each_task_output_port',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_dynamics.rb:288:in
> `initial_device_information_periodic_triggering',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_dynamics.rb:263:in
> `initial_device_information_common',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_dynamics.rb:255:in
> `each',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_dynamics.rb:255:in
> `initial_device_information_common',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_dynamics.rb:287:in
> `initial_device_information_periodic_triggering',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_dynamics.rb:243:in
> `initial_device_information',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_dynamics.rb:325:in
> `initial_information',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_computation.rb:177:in
> `propagate',
> |
> /home/christian/rock_virgo/tools/utilrb/lib/utilrb/logger/indent.rb:23:in `nest',
> |
> /home/christian/rock_virgo/tools/utilrb/lib/utilrb/logger/forward.rb:19:in
> `log_nest',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_computation.rb:176:in
> `propagate',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_computation.rb:173:in
> `each',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_computation.rb:173:in
> `propagate',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_dynamics.rb:172:in
> `propagate',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/dataflow_dynamics.rb:460:in
> `compute_connection_policies',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/engine.rb:1584:in
> `resolve',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/scripts/run.rb:61,
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1924:in
> `execute',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1820:in
> `execute',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:622:in `call',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:622:in `gather_external_events',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:512:in `gather_framework_errors',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:622:in `gather_external_events',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1190:in
> `process_events',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:646:in `gather_errors',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1189:in
> `process_events',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:476:in `gather_propagation',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:546:in `propagation_context',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:476:in `gather_propagation',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1188:in
> `process_events',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1669:in
> `event_loop',
> |   /home/christian/rock_virgo/tools/roby/lib/roby/support.rb:182:in
> `synchronize',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1667:in
> `event_loop',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1645:in
> `loop',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1645:in
> `event_loop',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1526:in
> `run',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1519:in
> `initialize',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1519:in
> `new',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1519:in
> `run',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1518:in
> `synchronize',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1518:in
> `run',
> |   /home/christian/rock_virgo/tools/roby/lib/roby/support.rb:137:in
> `condition_variable',
> |
> /home/christian/rock_virgo/tools/roby/lib/roby/execution_engine.rb:1517:in
> `run',
> |   /home/christian/rock_virgo/tools/roby/lib/roby/app.rb:931:in `run',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/scripts/run.rb:51,
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/scripts/common.rb:269:in
> `run',
> |   /home/christian/rock_virgo/tools/roby/lib/roby/exceptions.rb:333:in
> `display_exception',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/scripts/common.rb:267:in
> `run',
> |
> /home/christian/rock_virgo/tools/orocos.rb/lib/orocos/roby/scripts/run.rb:50,
> |   /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in
> `gem_original_require',
> |   /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require',
> |   /home/christian/rock_virgo/tools/orocos.rb/bin/rock-roby:15
> =
>
> }}}
>
> This is caused by "triggers.map" in
> "tools/orocos.rb/lib/orocos/roby/dataflow_dynamics.rb" line 130 being empty.
On a first glance, that looks more like a bug to me.

I does not seem that triggers is empty, but rather there is a nil 
element in the Array - maybe you try to find out why!
A current workaround could be to compact before inject, i.e.

triggers.map ...
.compact.inject(&:+)

Best
Thomas
>
> Is there a restriction in using periodic Devices in Roby?
>
> Regards,
> Christian
>
>


-- 
Thomas Röhr (M.Sc.)
Space Robotics

Standort Bremen:
DFKI GmbH
Robotics Innovation Center
Robert-Hooke-Straße 5
28359 Bremen, Germany

Phone: +49 (0)421 178-454151
Fax:   +49 (0)421 178-454150
E-Mail: robotik at dfki.de

Weitere Informationen: http://www.dfki.de/robotik
-----------------------------------------------------------------------
Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH
Firmensitz: Trippstadter Straße 122, D-67663 Kaiserslautern
Geschaeftsfuehrung: Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster
(Vorsitzender) Dr. Walter Olthoff
Vorsitzender des Aufsichtsrats: Prof. Dr. h.c. Hans A. Aukes
Amtsgericht Kaiserslautern, HRB 2313
Sitz der Gesellschaft: Kaiserslautern (HRB 2313)
USt-Id.Nr.:    DE 148646973
Steuernummer:  19/673/0060/3
-----------------------------------------------------------------------



More information about the Rock-dev mailing list