{{{#!wiki red/solid Eigen ROS package deprecated (ROS Electric). [[/diamondback|Old documentation]] }}} Eigen has been replaced with a rosdep system dependency. Electric also switched to Eigen 3. To migrate from Eigen2 to Eigen 3 see [[http://eigen.tuxfamily.org/dox/Eigen2ToEigen3.html|this guide]] <<TableOfContents(3)>> == Electric == === CMakeLists.txt === Starting in ROS Electric, Eigen 3 is installed as a system dependency. This means that you compile against Eigen 3 without requiring any ROS-specific build tools. For convenience, the system install includes CMake config files for easily finding and configuring Eigen in your CMakeLists.txt using the normal `find_package()` macro: {{{ find_package(Eigen REQUIRED) include_directories(${Eigen_INCLUDE_DIRS}) }}} Eigen is a header-only library, so you do not need to specify any linking. Unfortunately, Eigen on Ubuntu does not have a `FindEigen.cmake` file and we do not have that file in a ROS package yet. You need to include it by default in your package (in a ./cmake folder for example). You can get if from here: https://code.ros.org/svn/ros-pkg/stacks/laser_pipeline/trunk/laser_geometry/cmake/FindEigen.cmake You then need to add the following before the find_package CMake instruction: {{{ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) }}} You can then include directories as follows: {{{ include_directories(${EIGEN_INCLUDE_DIRS}) }}} === Package/stack dependencies === Eigen is defined in the [[common_rosdeps]] stack/package. You will need to update 1. `manifest.xml` {{{ <depend package="common_rosdeps" /> <rosdep name="eigen" /> }}} 1. `stack.xml` {{{ <depend stack="common_rosdeps" /> }}} == Fuerte == === CMakeLists.txt (i.e., using Eigen in your code) === For convenience, the system install includes CMake config files for easily finding and configuring Eigen in your CMakeLists.txt using the normal `find_package()` macro: {{{ find_package(Eigen REQUIRED) include_directories(${Eigen_INCLUDE_DIRS}) }}} Eigen is a header-only library, so you do not need to specify any linking. You then need to include the directories as follows: {{{ include_directories(${Eigen_INCLUDE_DIRS}) }}} or: {{{ include_directories(${EIGEN_INCLUDE_DIRS}) }}} === manifest.xml === ==== declaring the system dependency with rosdep ==== As of Fuerte all that is required is {{{ <rosdep name="eigen" /> }}} ==== exporting Eigen-dependent headers to others ==== If you provide headers included by code in other packages, and those headers use Eigen, then you must also export the flags to find Eigen. Do that by adding {{{`pkg-config --cflags eigen3`}}} to the exported `cflags` in your `manifest.xml`. E.g., your `manifest.xml` might contain something like this: {{{ <export> <cpp cflags="`pkg-config --cflags eigen3` -I${prefix}/include `rosboost-cfg --cflags`" lflags="-Wl,-rpath,${prefix}/lib -L${prefix}/lib -lplanning_models"/> </export> }}} == Documentation == Please see the [[http://eigen.tuxfamily.org/index.php?title=Main_Page|Eigen homepage]] for documentation on the Eigen library. See also: * [[http://eigen.tuxfamily.org/dox/|Eigen API Documentation]] * [[http://eigen.tuxfamily.org/dox/Eigen2ToEigen3.html|Eigen 2 to 3 conversion guide]]. To help you get started with Eigen, we've put together an [[/Cookbook|Eigen Cookbook]].