<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 < Syskit::Composition<br>
# can be also a Composition or Task<br>
add Base::OrientationSrv, :as => '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 => 'orientation')<br>
end<br>
<br>
3) DataService are not shadowing the actual task in this szenario.<br>
<br>
# profile ...<br>
use Base::Motion2DControlledSystemSrv => aria_dev<br>
<br>
class ConstantMovement < Syskit::Composition<br>
add Base::Motion2DControlledSystemSrv, :as => 'system'<br>
<br>
on :start do |ev|<br>
puts "#{system_child}" ==> returns the concrete Task (in
my case Aria::Task)<br>
system_child.command_in_port => 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>