[Documentation] [TitleIndex] [WordIndex

Perception Pipelines

SIG Coordinator: Patrick Mihelich

Mailing list:

Topics: image_pipeline, ROS integration with OpenCV (cv_bridge) and PCL (pcl_ros), image_transport, prototyping with Ecto

Members:

Focus areas for Fuerte

Ecto

Owner: Troy, Ethan

Background

Ecto is an in-development framework for dataflow programming. With Ecto, you specify a directed graph of computation, where the outputs of one processing node hook into the inputs of other processing nodes. Once the graph is set up and you start feeding it data, Ecto handles all the synchronization and scheduling.

This a slightly different abstraction from ROS's pub-sub model, and in fact image_pipeline uses nodelets for much the same purpose. Unfortunately we've found that nodelets are a clunky solution for composing perception processing pipelines:

Docs: http://ecto.willowgarage.com/

Code: https://github.com/plasmodic/ecto

Goals

Depth image processing

Owner: Patrick

Background

With the wide availability of the Kinect and similar sensors, working with depth images has become a hot use case over the last year. We have several nodelets for working with depth images in depth_image_proc, currently part of the openni_kinect stack. Depth images themselves are a new concept in ROS, and need to be standardized. Previously we worked with disparity images and point clouds only.

Goals

More ideas:

PCL integration

Owner: Michael

Background

Currently there doesn't exist an ideal way to publish point cloud data from 3d sensor drivers. For max efficiency with nodelets using PCL, it's best to publish as the PCL-native pcl::PointCloud<T> type, but that requires pulling in all of PCL. sensor_msgs/PointCloud2 is the low-dependency option, but is harder to use and requires a costly conversion for use with PCL.

Solution: allow drivers to depend on a minimal core of PCL, containing little more than the point cloud type and ROS glue.

PCL 1.1 now has standalone debian packages. Due to dependency nastiness - PCL 1.1 has its own copies of some ROS message types - we aren't currently able to reuse the system install in ROS, and have to do a separate source install. The ROS Core SIG plans (high priority) to pull out a separate stand-alone ros_msgs library, allowing code to use ROS data structures without being a ROS package. If that lands soon enough, we may be able to use the system install of PCL in ROS.

PCL 2.0 will bring new integration challenges, but appears far enough away to be out of scope for Fuerte.

Goals

Video interop

Owner: ??

Background

We need better interoperability between ROS concepts (bags, image topics) and more standard representations (video file formats, streaming video). Some ad hoc solutions in this space already exist:

Goals

Concrete goals TBD. There's clearly room for consolidation and improvement.

Ideas:

GUI updates

Owner: Patrick

Background

There are a couple of GUI components in image_pipeline: image_view, camera_calibration. Technically this violates our stack guidelines, which dictate that GUI components should live in a separate stack from code that could run on a headless (as in no monitor...) robot. We've gotten by because they use OpenCV for the GUI, and we currently treat OpenCV as one big blob.

Goals

Longer-term, work with the GUI SIG on more ambitious improvements.

image_transport everywhere

Owner: ??

Background

image_transport has proven its usefulness in transparently providing compressed image streams. However, it's implementation is tied to roscpp. How to best use image_transport from non-C++ ROS clients is an open question.

Ecto is the low-hanging fruit here. Although an Ecto pipeline runs in a Python process, all data manipulation is done in C++, and the current ROS-Ecto bridge uses roscpp. So the ROS-Ecto bridge should be able to use image_transport as-is.

A native Python image_transport - that is, compatible with rospy - is trickier. It would be nice to have, as Python is good for prototyping. There are technical difficulties to doing this. Ideally we would reuse the existing image_transport_plugins, written in C++, rather than maintain per-language versions. Those plugins use roscpp to connect to topics. I doubt roscpp and rospy play nicely in the same process.

rosjava is worth thinking about, but I (Patrick) don't have any agenda there yet. There is a tutorial for using a compressed image topic from rosjava.

Goals

Deadlines

First feature freeze (2012-01-15)

Final feature freeze (2012-02-15)

Release date (2012-03-15)


2022-05-28 12:36