Note: This tutorial assumes that you have completed the previous tutorials: ROS tutorials.
(!) Please ask about problems and questions regarding this tutorial on Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

Data association exploiting multiple object attributes

Description: If a world model object contains different attributes, the data association might simplify, e.g., a red blob is most likely to originate from a red world model object. This tutorial demonstrates the exploitation of multiple attributes per object during data association.

Tutorial Level: BEGINNER

Next Tutorial: Tracking an unknown number of objects


The task of the wire meta package is fusing measurements into one consistent world state estimate. In order to achieve this the data association problem has to be solved. In this demo, two different objects are present. Both objects are detected with two discrete properties:



Object 1



Object 2



and one continuous property being position


In order to determine whether an association between a measurement and a world model object is valid, both discrete and continuous properties are considered. As a result, the association between a red blob and a green world model object, or vice versa, gets a low probability. The same holds for world model objects that have a predicted position far from the measured position. By taking all available attributes into account the data association problem is simplified. The object position estimates are tracked using Kalman filters with a constant velocity motion model.


In order to be able to reproduce the result shown in the video above, make sure that you have cloned and compiled the wire packages:

$ git clone
$ catkin_make

Fetch the data for this tutorial (demo02.bag) and decompress this file:

$ rosbag decompress demo02.bag

The bag file contains tfs, object detections and both rgb and depth images. The images are only included for ease of interpretation and inspection. These are not used by wire.

Reproducing the result

Start a ROS core:

$ roscore

Then, set the use_sim_time parameter to true:

$ rosparam set use_sim_time true

and launch the wire_core:

$ roslaunch wire_core start.launch

In a new terminal, launch the visualization:

$ roslaunch wire_tutorials rviz_wire_kinetic.launch

Finally, play back the data:

$ rosbag play demo02.bag --clock

The results should be similar to the results shown in the video above.

Wiki: wire/Tutorials/Data association exploiting multiple object attributes (last edited 2017-05-17 12:29:57 by JosElfring)