[Rock-dev] Syskit Feedback

Chris Mueller christoph.mueller at dfki.de
Tue Mar 19 16:10:24 CET 2013


Hi,

i'm currently developing with the new syskit interface from rock and i'd 
like to share some feedback
for the current version (some Bug reports, Recommendations, etc.)

1) Action calls with missing arguments get stucked. If you have a Roby 
Tasks that needs some
arguments and you call it without the necessary arguments, the system 
acts like it's fallen into a
deadlock. No Error Message is written out and the Task itself is not 
executed. (Some verbose
status information would be helpful, otherwise its quite confusing if 
you don't realize you have missed
the arguments).

2) I'm often using Roby's scripting facalities and like to experiment 
with its interface. I'm running often
into a requirement writing a Roby Task, that needs to write/read some 
data ports on a data service.
More concret: it has a dependency to a roby/syskit component 
(Composition, DataService, Task)
The cleanest approach in my opinion would be to use a composition in the 
following sense, because
it has a generic and simple interface for defining dependencies to the 
model, and data services can
be filled by the active profile from the action interface.

class WriterTask < Syskit::Composition
   # can be also a Composition or Task
   add Base::OrientationSrv, :as => 'orientation'

   script do
       wait_any orientation_child.start_event

       execute do
          # scripting with system model ...
      end

      emit :success
   end
end

This is unfortanetely not working, because its seems child_components 
for a composition are not valid within the scripting block:
/home/chris/repos/virgo/tools/roby/lib/roby/task_scripting.rb:138:in 
`resolve': undefined method `event' for nil:NilClass (NoMethodError)

Don't know if this is a bug. I suppose compositions has not been 
intended for this usage in the past. My current workaround is using 
Roby::Task parent class
and add the dependency from the corresponding ruby constructor.

def intialize(*arguments)
    super
    depends_on(..., :role => 'orientation')
end

3) DataService are not shadowing the actual task in this szenario.

# profile ...
use Base::Motion2DControlledSystemSrv => aria_dev

class ConstantMovement < Syskit::Composition
    add Base::Motion2DControlledSystemSrv, :as => 'system'

    on :start do |ev|
        puts "#{system_child}" ==> returns the concrete Task (in my case 
Aria::Task)
        system_child.command_in_port => throws an error because the port 
command_in does not exists in Aria::Task
    end
end

4) undefined method 'writer' for Syskit::InputPort
(only reader for Syskit::OutputPort is defined in tools/syskit/port.rb)


More feedback will be coming ...

Chris

-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: http://www.dfki.de/pipermail/rock-dev/attachments/20130319/ba418ae3/attachment.htm 


More information about the Rock-dev mailing list