前言
学习《视觉SLAM十四讲》时,由于本人电脑网卡较为少见,安装Ubuntu18时折腾很久未能找到合适的驱动,无奈转向Ubuntu20.04。本文就来盘点用Ubuntu20.04实操《视觉SLAM十四讲》时遇到的问题及解决方案。
一、Eigen/Dense库的使用部分(书P47-48)
1、查找文件命令
书中代码:
sudo updatedb
locate eigen3
遇到的问题:
在终端运行sudo updatedb时,报错:找不到“updatedb”命令。
解决措施:
需先安装mlocate包。在终端中输入:
sudo apt-get install mlocate
然后按书中代码运行即可正常运行。
2、VS code中Eigen库头文件报错:
书中代码:
#include <Eigen/Core>
#include <Eigen/Dense>
遇到的问题:
Eigen/Core:没有那个文件或目录;
Eigen/Dense:没有那个文件或项目。
解决措施:
在网上检索相关错误,找到的解决方案大致有三种:
1、没安装Eigen3
终端中输入:sudo apt-get install libeigen3-dev进行安装。
2、因为 eigen 库默认安装在了 /usr/include/eigen3/Eigen 路径下,需在终端中输入下面命令映射到 /usr/include 路径下:
sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen
3、没有包含.h文件
在VS code代码中添加绝对路径:
#include "/home/lwz/vh-mpc-example/include/quad_dynamics.h"
最终通过措施2解决
二、第三讲可视化演示部分(书P66-69)
书中对于可视化演示这部分的说明极少,碰壁多次后总结出如下修改及步骤:
1.安装Pangolin库
安装git工具:
sudo apt-get install git
下载github上的源码并安装依赖:
apt-get install libglew-dev
apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
git clone http://github.com/stevenlovegrove/Pangolin
如GitHub连接不上,可尝试gitee镜像下载:
git clone https://gitee.com/krisnat/pangolin.git
新建想安装库的文件夹并进入:
mkdir resource && cd resource //也可直接安装在主文件夹下
编译安装Pangolin库:
cd Pangolin
mkdir build
cd build
cmake -DCPP11_NO_BOOST=1 ..
make -j
sudo make install
2、显示运动轨迹(plotTrajectory.cpp文件)
首先我们打开plotTrajectory.cpp文件,将其中的./examples/trajectory.txt改为../../examples/trajectory.txt,
因为观察外边的目录结构,就发现这个txt文件是存在examples下面的,但是呢你执行的时候,是在examples/build下执行的
所以要先… 退出build 再 … 退出examples 然后 /examples/trajectory.txt。
否则会出现如下报错,找不到该文件:
另外,要添加头文件:
#include <Eigen/Geometry>
编译,切换到plotTrajectory所在目录
mkdir build
cd build
cmake ..
make
./plotTrajectory
运行成功:
3、显示相机的位姿(visualGeometry):
在编译运行时,出现报错:error: ‘decay_t’ is not a member of ‘std’
打开CMakeLists.txt文件,将其中的set(CMAKE_CXX_FLAGS "-std=c++11")替换为:
set(CMAKE_CXX_FLAGS "-std=c++14")
问题解决。
三、第四讲Sophus的使用部分(P86-91)
1、Sophus的基本使用方法(P86)
运行时报fmt相关的错误,修改CmakeList.txt文件中的代码如下:
cmake_minimum_required( VERSION 2.8 )
project( useSophus )
# 为使用 sophus,您需要使用find_package命令找到它
find_package( Sophus REQUIRED )
include_directories( ${Sophus_INCLUDE_DIRS} )
include_directories( "/usr/include/eigen3/" )
add_executable( useSophus useSophus.cpp )
target_link_libraries( useSophus ${Sophus_LIBRARIES} fmt)
结果如下:
2、评估轨迹误差(P90):
出现报错:找不到文件estimated.txt和groundtruth.txt,是因为当前执行目录是build文件夹,自然找不到这两个文件。
将trajectoryError.cpp文件打开,找到这两行代码(应该是第10和11行):
string groundtruth_file = "./example/groundtruth.txt";
string estimated_file = "./example/estimated.txt";
修改为
string groundtruth_file = "../../example/groundtruth.txt";
string estimated_file = "../../example/estimated.txt";
这样就能在build的上一级目录找到这两个文件了。
如果你是Ubuntu20.04版本(18版本不用修改此处):
将example文件夹下的CMakeList.txt文件打开,将代码option(USE_UBUNTU_20 "Set to ON if you are using Ubuntu 20.04" OFF)替换为:
option(USE_UBUNTU_20 "Set to ON if you are using Ubuntu 20.04" ON)
运行结果如下:
说明
剩余章节的内容过多过杂,我将发布新的文章以更新相关内容。
因为本人第一次接触Ubuntu及视觉SLAM,下面有些问题是由于版本不同,也有些是基础操作不熟或操作有误所致。本文更新至阅读完此书止。