Add target coordinate system parameter values

The stereo_image_proc module generates a 3D point cloud from
stereo images. This patch adds an enum that defines
different types of coordinate systems.
These definitions are made in order to be able
to configure in which coordinate system the 3D point cloud
is represented. The definitions can bu used in nodes and nodelts
such as nodeles/stereo_image_proc.cpp
or nodelets/point_cloud2.cpp.

The conversion methods are needed:
toInt/fromInt: Needed to be able to pass parameters from the
main ros node (stereo_image_proc.cpp) to the nodelet (point_cloud2.cpp)
since passing enum parameters is not possible.
toString/fromString: Needed to be able to parse the textual parameters
passed to the main ros node.

Change-Id: I5dfadfd5692031a86b710761ac4674f1a26d610c
Add member variable and default value of the target coordinate system

In order to generate the point cloud in a coordinate system
dependent on a parameter, we introduce the member variable
target_coordinate_system_.
In this commit, the member is initialized to the
default coordinate system CS_EAST_UP_SOUTH
that has implicitly been used before this patch.

Change-Id: Ie63f71649235e979a8dc6ee1f6ccb3f752d0bee6
Generate PointCloud2 for the given target coordinate system

Before this patch, the point cloud was implicitly always generated
in the EAST_UP_SOUTH coordinate system. In this patch,
the point cloud is generated in the coordinate system
specified by the target_coordinate_system_ member.

To this end, a switch statement on
the member target_coordinate_system_ is inserted.
The existing code for generating the point cloud
in the EAST_UP_SOUTH coordinate system is copied into
the EAST_UP_SOUTH part of the switch statement.
The EAST_NORTH_UP part of the switch statement
contains corresponding new code.

Change-Id: If8492c9a72103679737dccf25696defb0bbe1889
Target coordinate system is configurable by parameter

Before this commit, the member target_coordinate_system_ in
PointCloud2Nodelet was always set to the default value.

After this commit, in the stereo_image_proc node,
we read a node parameter called target_coordinate_system.
The value is passed to the attached PointCloud2Nodelet
via the shared_params variable. We use the parameter in the
PointCloud2Nodelet to set the member target_coordinate_system_.

Change-Id: Iea7c167030d40923b7f5c177d7aa9115fdae328c
Refactoring: Extracted STEP constant to a const class member

The STEP constant used in the imageCB function is relevant for
outside the function scope. To allow others to use the value
we promote the STEP variable to a class member.
In order to initialize the constant, a constructor had to
be inserted.

Change-Id: I8afee7edd165ab94d7621adb60d2f312b631629e
Refactoring: Extracted fillColor() function

Copied parts of the code from the imageCB(..) function
into the separate fillColor() function for better
readability of the imageCB() function. The behaviour is
not changed.

Change-Id: Ic958c8fb8d57793724d42e89a686a12e6b41d9f8
Refactoring: Extracted fillMetaData() function

Copied parts of the code from the imageCB(..) function
into the separate fillMetaData() function for better
readability of the imageCB() function. The behaviour
is not changed.

Change-Id: If7fe933c240b15acfe2271d30744a3046e321a2e
Unproject and fill points into the PointCloud2Ptr in one pass

We reduce the amount of data copies needed to
unproject the disparity image to a 3D point cloud.

Before this commit, a temporary 3D point cloud was
generated from the disparity image using the function
projectDisparityImageTo3D(..). The resulting temporary point
cloud was then copied from the member points_mat_
to the variable mat. To the best of my knowledge,
this copy is unneeded and irrelevant. After the copy,
the points were copied again to the target point cloud.

After this commit, the points are unprojected and stored
in the target point cloud in a single pass without
doing any extra data copies.

Change-Id: I180ce35ceab488e51a095ba735408af5924292c4
Parallelized filling of color and unprojected points using OpenMP

Before this patch, the 3D point data and the color data
of points_msg were filled sequentially.

This patch uses OpenMP to parallelize filling of 3D and
point cloud data. These two operations write to
separate parts of the memory block reserved for points_msg
and can therefore be parallelized.

Change-Id: Ie51fb055a6d9fa2816cfb7b74ca28958f9776f09
Rename stereo_image_proc package to stereo_image_proc_aurum

The package is renamed to avoid name clashes of our version of
the package and the upstream version of the package.

Change-Id: Icfda638d5fec2eb9619fdfbdebd82797af0b834e