Goodbye, World

日々のプログラミングで得た経験を個人的な備忘録としてまとめてます.他のブログ・ページを参考させて頂いている部分が多いので,参考ページへのリンクを併記しております.

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.cmake

Add 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>

も加えるべきと書かれていますが,私の環境ではなくても動いています.