今天编译Vins-mono,执行完catkin_make 后,报了一堆错误,很多都类似如下的错误:
In file included from /media/samsung/data/hanlun/code/catkin_ws_vins/src/VINS-Mono-master/ar_demo/src/ar_demo_node.cpp:23:0:
/media/samsung/data/hanlun/code/catkin_ws_vins/src/VINS-Mono-master/camera_model/include/camodocal/camera_models/CataCamera.h:7:10: fatal error: ceres/rotation.h: 没有那个文件或目录 #include <ceres/rotation.h>
上面显示CataCamera.h找不到rotation.h,采用locate rotation.h 定位发现,确实存在这个文件,安装ceres的安装目录也没有问题。
因此对 camera_model/ 下面的camkelist做了如下修改,增加了ceres库的依赖,
改动如下:
# set(EIGEN_INCLUDE_DIR "/usr/local/include/eigen3")
set(Ceres_DIR "/usr/local/Ceres-1.14/lib/cmake/Ceres/")
set(CERES_INCLUDE_DIR "/usr/local/Ceres-1.14/include")
find_package(Ceres REQUIRED)
#include_directories(${CERES_INCLUDE_DIRS}"/usr/local/Ceres-1.14/include")
include_directories(
${catkin_INCLUDE_DIRS}
${CERES_INCLUDE_DIRS}
${CERES_INCLUDE_DIR}
)
target_link_libraries(camera_model ${Boost_LIBRARIES} ${OpenCV_LIBS} ${CERES_LIBRARIES})
然后再切换到ros管理的space目录,执行 catkin_make
问题依然如此,烦不胜烦。
既然如此我单独编译camodocal 模块试一试,首先切换到这个文件夹下面:
mkdir build
cd build
cmake ..
make -j4
竟然编译过了,竟然编译过了。采用catkin_make 无法编译通过,但是单独编译这个包却能编译过。究竟什么原因吗,我们再仔细观察报错,
In file included from /media/samsung/data/hanlun/code/catkin_ws_vins/src/VINS-Mono-master/ar_demo/src/ar_demo_node.cpp:23:0:
/media/samsung/data/hanlun/code/catkin_ws_vins/src/VINS-Mono-master/camera_model/include/camodocal/camera_models/CataCamera.h:7:10: fatal error: ceres/rotation.h: 没有那个文件或目录 #include <ceres/rotation.h>
这个报错提示的是,在编译ar_demo模块的时候,报的这个错误。也就是说,在编译ar_demo 的时候,ar_demo_node.cpp 文件依赖/camera_model/include/camodocal/camera_models/CataCamera.h,而 CataCamera.h 找不到rotation.h.
got it !!!!!!
在编译ar_demo_node.cpp 的时候需要告诉camkelist ceres/rotation.h文件在那里,因此应该在ar_demo下面的camkelist里面配置ceres,而不应该在camodocal里面配置ceres。
同样,任何需要CataCamera.h 的文件,需要在camkelist里面配置ceres,cmake 会自然而然的找到rotation.h。