ROS IndigoでのEigen利用時のエラー
以前ROS Hydroで開発したプログラムをROS Indigoに移行しているのですが,IndigoでEigenを使おうと単純にCMakeLists.txtにfind_package(Eigen REQUIRED)を書くと下記のエラーが.
CMake Error at test_pkg/CMakeLists.txt:23 (FIND_PACKAGE):
By not providing "FindEigen.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Eigen", but
CMake did not find one.Could not find a package configuration file provided by "Eigen" with any of
the following names:EigenConfig.cmake
eigen-config.cmakeAdd the installation prefix of "Eigen" to CMAKE_PREFIX_PATH or set
"Eigen_DIR" to a directory containing one of the above files. If "Eigen"
provides a separate development package or SDK, be sure it has been
installed.
どうやらHydroからIndigoに移行する際にFindEigen.cmakeがcatkinにdefaultで含まれなくなったようです.
従って,Hydroで開発されたEigenを利用するプログラムは,そのpackage.xmlとCMakeLists.txtを一部書き換えてあげる必要があります.
現在のROS wikiの記述は間違っているようなので*1,IndigoのMigrationページを参考にpackage.xmlとCMakeLists.txtを修正します.
[参考サイト]
indigo/Migration - ROS Wiki
cmake_modules/README.md at 0.3-devel · ros/cmake_modules · GitHub
package.xml:
<?xml version="1.0"?> <package> <!-- ... --> <build_depend>cmake_modules</build_depend> </package>
CMakeLists.txt:
find_package(catkin REQUIRED COMPONENTS ... cmake_modules ...) ... find_package(Eigen REQUIRED)
これでEigenのcmakeエラーが消えました.上記の方法に加え,catkin_make eigen indigo - ROS Answers: Open Source Q&A Forumではpackage.xmlに
<run_depend>cmake_modules</run_depend>
も加えるべきと書かれていますが,私の環境ではなくても動いています.