<html>
  <head>
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-15">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi,<br>
    <br>
    i'm currently developing with the new syskit interface from rock and
    i'd like to share some feedback <br>
    for the current version (some Bug reports, Recommendations, etc.)<br>
    <br>
    1) Action calls with missing arguments get stucked. If you have a
    Roby Tasks that needs some<br>
    arguments and you call it without the necessary arguments, the
    system acts like it's fallen into a <br>
    deadlock. No Error Message is written out and the Task itself is not
    executed. (Some verbose<br>
    status information would be helpful, otherwise its quite confusing
    if you don't realize you have missed<br>
    the arguments).<br>
    <br>
    2) I'm often using Roby's scripting facalities and like to
    experiment with its interface. I'm running often<br>
    into a requirement writing a Roby Task, that needs to write/read
    some data ports on a data service. <br>
    More concret: it has a dependency to a roby/syskit component
    (Composition, DataService, Task)<br>
    The cleanest approach in my opinion would be to use a composition in
    the following sense, because<br>
    it has a generic and simple interface for defining dependencies to
    the model, and data services can<br>
    be filled by the active profile from the action interface.<br>
    <br>
    class WriterTask &lt; Syskit::Composition<br>
      # can be also a Composition or Task<br>
      add Base::OrientationSrv, :as =&gt; 'orientation'<br>
      <br>
      script do<br>
          wait_any orientation_child.start_event<br>
           <br>
          execute do <br>
             # scripting with system model ...<br>
         end<br>
         <br>
         emit :success  <br>
      end<br>
    end<br>
    <br>
    This is unfortanetely not working, because its seems
    child_components for a composition are not valid within the
    scripting block:<br>
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-15">
    /home/chris/repos/virgo/tools/roby/lib/roby/task_scripting.rb:138:in
    `resolve': undefined method `event' for nil:NilClass (NoMethodError)<br>
    <br>
    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 <br>
    and add the dependency from the corresponding ruby constructor.<br>
    <br>
    def intialize(*arguments)<br>
       super<br>
       depends_on(..., :role =&gt; 'orientation')<br>
    end<br>
    <br>
    3) DataService are not shadowing the actual task in this szenario.<br>
    <br>
    # profile ...<br>
    use Base::Motion2DControlledSystemSrv =&gt; aria_dev<br>
    <br>
    class ConstantMovement &lt; Syskit::Composition<br>
       add Base::Motion2DControlledSystemSrv, :as =&gt; 'system'<br>
    <br>
       on :start do |ev|<br>
           puts "#{system_child}" ==&gt; returns the concrete Task (in
    my case Aria::Task)<br>
           system_child.command_in_port =&gt; throws an error because
    the port command_in does not exists in Aria::Task<br>
       end<br>
    end<br>
    <br>
    4) undefined method 'writer' for Syskit::InputPort<br>
    (only reader for Syskit::OutputPort is defined in
    tools/syskit/port.rb)<br>
    <br>
    <br>
    More feedback will be coming ...<br>
    <br>
    Chris<br>
    <br>
  </body>
</html>