Backward Compatible Naming
Old Behavior
Folders
- action interfaces are expected to be in
models/planners/
- Syskit compositions are expected to be in
models/blueprints/
Note that Syskit does not auto-load model files anymore - and it has been like
this for years. For systems that have not explicitly set
Roby.app.auto_load_models
to true, this behavior is transparent (it is a
convention that is not affecting Syskit's behavior in any way).
Main action interface
The toplevel action interface, the one that the system is using to resolve call
to both the Robot
object and remote interfaces, is registered at toplevel as
Main
. This is the interface that gets set up from the Robot.actions
block
OroGen and Typelib models
Historically, both oroGen and Typelib models (component and type description)
were exported as constants (as all classes in Ruby are, it seemed to be a good
behavior). Because constants in Ruby have required to all be named in CamelCase,
this involved translating the oroGen project name (or C++ type namespaces) from
snake_case
to CamelCase
.
For instance, the video_streamer_webrtc::StreamerTask
component was made
available as OroGen::VideoStreamerWebrtc::StreamerTask
class. Rock's
base::samples::RigidBodyState
was available as
Types::Base::Samples::RigidBodyState
OroGen extension files were using Ruby's "monkey patching" to allow extending the component models at loading time. For instance, the video streamer model would be extended with:
class OroGen::VideoStreamerWebrtc::StreamerTask
...
end
New Behavior
Folders
- action interfaces are expected to be in
models/actions/
- Syskit compositions are expected to be in
models/compositions/
Note that Syskit does not auto-load model files anymore - and it has been like
this for years. For systems that have not explicitly set
Roby.app.auto_load_models
to true, this behavior is transparent (it is a
convention that is not affecting Syskit's behavior in any way).
Main action interface
The toplevel action interface, the one that the system is using to resolve call
to both the Robot
object and remote interfaces, is registered under the
Actions
namespace, as Actions::Main
. This is the interface that gets set up
from the Robot.actions
block
OroGen and Typelib models
Classes in Ruby are objects, and as such can be returned by methods. We now use this to allow a more natural mapping from the namespaces to method names.
OroGen models are to be resolved from the OroGen
namespace like this:
OrGen.video_streamer_webrtc.StreamerTask
. Types from the Types
namespace:
Types.base.samples.RigidBodyState
OroGen models must be extended using the Syskit.extend_model
call as documented
in the component development section:
Syskit.extend_model OroGen.video_streamer_webrtc.StreamerTask do
...
end
New/old behavior: control and migration
The new behavior is automatically available. The old behavior is retained by
default. To disable, set Roby.app.backward_compatible_naming
to false in either
config/init.rb
or in a robot config's init
block.
To make sure you have converted all your models and scripts, the simplest is to
grep for the Main
, OroGen::
and Types::
patterns in the source code and convert
all matches.
Note that the flag is global. Dependent syskit bundles must have migrated before
you can turn off backward_compatible_naming
yourself.
As noted in the respective sections, the change in folder structure is a convention,
unless you have only_load_models
set to true. Nonetheless, we recommend changing
the folder (and namespace) for consistency reasons.