一、Sophus安装补充
1. 我们使用高翔老师的github仓库中Sophus代码编译后即可(无需安装),看了一些书上的内容和一些博客,说是Sophus库分为模板库和非模板库。
我们按照github上下载的代码进行编译,那么安装的应该是带模板的Sophus。
参考文章fatal error: sophus/se3.h: 没有那个文件或目录
验证了我们Sophus是带模板的!!!
也就是说后续出现的问题,与我们安装的Sophus无关!!!
二、运行例程代码
1. 首先编辑CMakeLists文件(下面代码是补充后的)
cmake_minimum_required(VERSION 3.0)
project(useSophus)
# 为使用 sophus,需要使用find_package命令找到它
find_package(Sophus REQUIRED)
# Eigen
include_directories("/usr/include/eigen3")
include_directories(${Sophus_INCLUDE_DIRS})
add_executable(useSophus useSophus.cpp)
target_link_libraries(useSophus Sophus::Sophus)
add_subdirectory(example)
然后查看example中的CMakeList文件(未补充修改)
option(USE_UBUNTU_20 "Set to ON if you are using Ubuntu 20.04" OFF)
find_package(Pangolin REQUIRED)
if(USE_UBUNTU_20)
message("You are using Ubuntu 20.04, fmt::fmt will be linked")
find_package(fmt REQUIRED)
set(FMT_LIBRARIES fmt::fmt)
endif()
include_directories(${Pangolin_INCLUDE_DIRS})
add_executable(trajectoryError trajectoryError.cpp)
target_link_libraries(trajectoryError ${Pangolin_LIBRARIES} ${FMT_LIBRARIES})
我们发现这个配置文件中缺少
find_package(Sophus REQUIRED)
include_directories(${Sophus_INCLUDE_DIRS})
target_link_libraries(useSophus Sophus::Sophus)
我们先不管这些,先修改补充第一个配置文件。现在进行编译
mkdir build && cd build
cmake ..
make
然后:
发现确少头文件,但是两个cpp代码中都引用了这个头文件,编译却发现只有这个缺少头文件,而且我们也安装了带模板的Sophus库。
因此我猜测可能是example中的CMakeList文件有问题
基于上文中两者的对比,我们修改后的配置文件如下图所示:
cmake_minimum_required(VERSION 3.0) #新加的
option(USE_UBUNTU_20 "Set to ON if you are using Ubuntu 20.04" OFF)
find_package(Pangolin REQUIRED)
find_package(Sophus REQUIRED) #新加的
if(USE_UBUNTU_20)
message("You are using Ubuntu 20.04, fmt::fmt will be linked")
find_package(fmt REQUIRED)
set(FMT_LIBRARIES fmt::fmt)
endif()
include_directories(${Sophus_INCLUDE_DIRS}) #新加的
include_directories(${Pangolin_INCLUDE_DIRS})
add_executable(trajectoryError trajectoryError.cpp)
target_link_libraries(trajectoryError ${Pangolin_LIBRARIES} ${FMT_LIBRARIES})
target_link_libraries(trajectoryError Sophus::Sophus) #新加的
然后再次编译
**(建议将cpp文件中的读取文件的路径改为绝对路径)**或者
string groundtruth_file = "../../example/groundtruth.txt";
string estimated_file = "../../example/estimated.txt";
特别注意:
使用相对路径时,是以生成的可执行文件作为参考的,而不是以cpp文件
运行 ./T……
大功告成啦!!!