Использование библиотеки Eigen в ROS Indigo

Я работаю над проектом в ROS Indigo, который требует использования библиотек Eigen. Согласно странице indigo / Migration в ROS Wiki, модуль FindEigen.cmake теперь находится в пакете cmake_modules.

После выполнения следующих шагов по добавлению пакета cmake_modules в CMake.txt проекта (через find_package) и добавлению зависимости сборки в package.xml (< build_depend >cmake_modules< /build_depend >) у меня все еще возникают проблемы с компиляцией проекта. Я просмотрел различные источники, ссылаясь на то, что описанные выше шаги должны решить проблему в ROS Indigo, но, похоже, она не работает. Вот файл CMake, а вот package.xml. Кроме того, я добавил файл FindEigen.cmake в папку проекта. Любая помощь будет принята с благодарностью! Ошибка гласит:

CMake Error at /opt/ros/indigo/share/catkin/cmake/catkinConfig.cmake:75 (find_package):
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.
Call Stack (most recent call first):
lidar_point_cloud/CMakeLists.txt:9 (find_package)

person smannan    schedule 03.05.2015    source источник
comment
Кроме того, я использую ROS Indigo на Ubuntu.   -  person smannan    schedule 03.05.2015


Ответы (4)


Просто для полноты публикации и следуйте этому ответу в Answers ROS:

Если у вас уже установлен Eigen (отметьте sudo apt-get install libeigen3-dev), вам нужно добавить соответствующие строки cmake_modules и Eigen в файлы CMakeLists.txt и package.xml:

package.xml

<build_depend>cmake_modules</build_depend>
<run_depend>cmake_modules</run_depend> 

CMakeLists.txt

find_package(catkin REQUIRED cmake_modules)
find_package(Eigen REQUIRED)

catkin_package(
  INCLUDE_DIRS ...
  LIBRARIES ...
  CATKIN_DEPENDS ....
  DEPENDS Eigen
)

include_directories(
   ...
   ${Eigen_INCLUDE_DIRS}
 )

ОБНОВЛЕНИЕ: Обратите внимание, что следующее не требуется, поскольку Модуль FindEigen.cmake не определяет Eigen_LIBRARIES, потому что это библиотека только для заголовков:

 target_link_libraries(my_target
   ....
   ${Eigen_LIBRARIES}
 )

Дополнительная информация: http://wiki.ros.org/indigo/Migration#cmake_modules.

ОБНОВЛЕНИЕ: на самом деле <run_depend>cmake_modules</run_depend> не требуется, поскольку cmake_modules не зависят от времени выполнения.


Кроме того, вы можете использовать оболочки ROS ecl: http://wiki.ros.org/ecl

person Javi    schedule 30.06.2015
comment
${Eigen_LIBRARIES} не нужен. Eigen - это библиотека, предназначенная только для заголовков, поэтому ссылаться не на что. - person luator; 13.04.2017

Eigen - это не пакет ROS, а отдельная библиотека. Поэтому вместо того, чтобы указывать его как компонент catkin, просто добавьте отдельный вызов find_package:

find_package(Eigen REQUIRED)

Я не могу проверить это прямо сейчас (сейчас сижу за машиной с groovy), но я совершенно уверен, что у меня это также сработало с индиго.

person luator    schedule 04.05.2015

У меня была такая же проблема, это исправило: (Ubuntu 14.04)

sudo apt-get install libeigen3-dev

person Xabier Apraiz    schedule 04.05.2015

Для меня «sudo apt-get install libeigen3-dev» не работал. Итак, я установил его через файл make и следуя процедуре установки, указанной в пакете, т. Е.

-download the package from http://eigen.tuxfamily.org/index.php?title=Main_Page

-create another directory which we will call 'build_dir'

-cd build_dir

-cmake source_dir

-make install

Если это не решит вашу проблему, вы можете скопировать папку eigen3 откуда бы она ни (mine was at /usr/local/include) в / usr / include. Используйте команду

sudo cp -r /usr/local/include/eigen3  /usr/include
person Ebrahim Moradi    schedule 03.01.2018