Use Case review

Proposer: Eitan Marder-Eppstein

Present at review:

  • List reviewers

Question / concerns / comments

  • Tully
    • Stu's ticket should be addressed, but is not needed for the release. #2822

  • Stu
    • In the macros and the xml, some things are namespaced and some things aren't. What is and what isn't still feels pretty arbitrary, though I'm sure there are actual rules about it.
    • I think the description field in the XML is unnecessary. Documentation for the plugin belongs on the wiki or in the doxygen.
    • The xml that goes in the export section of the manifest.xml is awkward. I think I understand why the interface package name is the tag's name, but it does look funny. Also, there's probably a better name for the attribute than "plugin".

    • My main complaint was that debugging was really really tough. I'm guessing that the new error messages have fixed some of that, and #2822 should fix the rest.
  • Patrick
    • The ROS_ERROR messages on failing to load a library have to go away. I get clumps of nasty-looking error messages running anything that uses image_transport unless every plugin is built. The failure info should all just go into the exception thrown with a nicely formatted what() for debugging.
    • Plugin introspection is awkward. One possibility discussed for image_transport was to load a subscriber plugin based on the datatype of the topic. How would I have implemented this?
      • I could require the lookup name to be some mangled version of the datatype name, but that's not very pretty.
      • I could add an extra export flag:  <image_transport plugin="${prefix}/default_plugins.xml" datatype="sensor_msgs/CompressedImage" />  and do ros::package::getPlugins("image_transport", "datatype", plugin_types), but that just gives me a package name, not the lookup name for the plugin. I'd then have to ClassLoader::getClassPackage() for declared classes until I found a match. And this prevents packages from containing plugins for multiple datatypes.

      • I could load each declared plugin in turn and call plugin->getMessageType(). This still requires a linear scan and lots of library loading for what should be a simple lookup. And it assumes that all plugins are good citizens that don't do much initialization when constructed.

    • I like the description field in the XML. I don't consider it documentation, just a little blurb about what it does. I use it in my list_transports utility, example output below (note again all the ROS_ERRORs). Would be nice to have a general version of this, listing available plugins with descriptions, and which ones are actually built.
    • Maybe some error checking could go into a plugin for roswtf? Hardly necessary, but would be nice.

$ bin/list_transports
[ERROR] 1253674497.647703000: Failed to load library /u/mihelich/ros/ros-pkg/ros-pkg/stacks/image_transport_plugins/compressed_image_transport/lib/libcompressed_image_transport.so Error string: Cannot load library: /u/mihelich/ros/ros-pkg/ros-pkg/stacks/image_transport_plugins/compressed_image_transport/lib/libcompressed_image_transport.so: cannot open shared object file: No such file or directory
[ERROR] 1253674497.648284000: Failed to load library /u/mihelich/ros/ros-pkg/ros-pkg/stacks/image_transport_plugins/theora_image_transport/lib/libtheora_image_transport.so Error string: Cannot load library: /u/mihelich/ros/ros-pkg/ros-pkg/stacks/image_transport_plugins/theora_image_transport/lib/libtheora_image_transport.so: cannot open shared object file: No such file or directory
[ERROR] 1253674497.648385000: Failed to load library /u/mihelich/ros/ros-pkg/ros-pkg/stacks/image_transport_plugins/compressed_image_transport/lib/libcompressed_image_transport.so Error string: Cannot load library: /u/mihelich/ros/ros-pkg/ros-pkg/stacks/image_transport_plugins/compressed_image_transport/lib/libcompressed_image_transport.so: cannot open shared object file: No such file or directory
[ERROR] 1253674497.648498000: Failed to load library /u/mihelich/ros/ros-pkg/ros-pkg/stacks/image_transport_plugins/theora_image_transport/lib/libtheora_image_transport.so Error string: Cannot load library: /u/mihelich/ros/ros-pkg/ros-pkg/stacks/image_transport_plugins/theora_image_transport/lib/libtheora_image_transport.so: cannot open shared object file: No such file or directory
Declared transports:
compressed (*)
raw
theora (*)
(*) Problem loading, see details

Details:
----------
"compressed"
Provided by package: compressed_image_transport
Publisher: Failed to load library
        This plugin publishes a CompressedImage using either JPEG or PNG compression.
Subscriber: Failed to load library
        This plugin decompressed a CompressedImage topic.
Try 'rosmake compressed_image_transport'
----------
"raw"
Provided by package: image_transport
Publisher: Loaded successfully
        This is the default publisher. It publishes the Image as-is on the base topic.
Subscriber: Loaded successfully
        This is the default pass-through subscriber for topics of type sensor_msgs/Image.
----------
"theora"
Provided by package: theora_image_transport
Publisher: Failed to load library
        This plugin publishes a video packet stream encoded using Theora.
Subscriber: Failed to load library
        This plugin decodes a video packet stream encoded using Theora.
Try 'rosmake theora_image_transport'

Meeting agenda

To be filled out by proposer based on comments gathered during API review period

Conclusion

Package status change mark change manifest)

  • /!\ Action items that need to be taken.

  • {X} Major issues that need to be resolved


Wiki: pluginlib/Reviews/2009-09-23 Usage Review (last edited 2009-09-24 01:27:25 by PatrickMihelich)