Ubuntu18.04配置《视觉SLAM十四讲》环境以及部分错误修正【亲测】【从零开始配置】

一、说明

  • 硬件配置

    • Ubuntu18.04新系统(保证从零开始配置)

    • 运行内存16G以上

  • 第三方库的说明

  • 注意:“环境配置”部分详尽指导了本书所有需要的库的配置过程,从零到全部,读者可以放心使用。“部分错误修正”部分修复了部分代码本身编译时会出现错误的情况。以上,如果通过了环境配置,但是编译依旧出错,可以转到错误修正部分。

  • 交流学习:QQ群:543318834


二、环境配置

3.2实践:Eigen

安装Eigen
sudo apt-get install libeigen3-dev
确定安装位置
sudo updatedb
locate eigen3
输出如下
/usr/include/eigen3
/usr/include/eigen3/Eigen
/usr/include/eigen3/signature_of_eigen3_matrix_library
/usr/include/eigen3/unsupported
/usr/include/eigen3/Eigen/Cholesky
...

3.7 可视化演示

下载Pangolin源码
git clone https://github.com/stevenlovegrove/Pangolin.git
安装依赖库
安装OpenGL
sudo apt-get update
sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev
安装GLEW
sudo apt-get install libglew-dev
安装Pangolin
cd Pangolin
mkdir build
cd build
cmake ..
make -j
sudo make install

4.4实践:Sophus

下载Sophus源代码
git clone https://github.com/strasdat/Sophus.git
安装Sophus
cd Sophus
mv Sophus sophus  #CMakelist中使用的是sophus,所以需要把Sophus目录下的Sophus重命名
mkdir build
cd build
cmake ..
make -j
sudo make install

5.3实践:计算机中的图像 安装OpenCV3.1

安装依赖项
sudo apt-get update 
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
sudo apt-get install libcanberra-gtk-module libcanberra-gtk3-module
进一步安装依赖项
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
apt list --upgradable
sudo apt install libjasper1 libjasper-dev
下载源代码
进入官网https://opencv.org/releases/找到OpenCV3.1版本的压缩包zip(sources)即可
或者直接从这个链接下载**https://codeload.github.com/opencv/opencv/zip/refs/tags/3.1.0
编译并安装
进入解压后得到的opencv-3.1.0文件夹
mkdir build
cd build
cmake ..
make -j
sudo make install

注意:

make -j编译报错
/usr/include/c++/7/cstdlib:75:15: fatal error: stdlib.h: 没有那个文件或目录
 #include_next <stdlib.h>
               ^~~~~~~~~~
compilation terminated.
解决方法
强制编辑相关文件,将“#include_next <stdlib.h>”修改成“#include </usr/include/stdlib.h> ”
根据报错提示信息,这行代码应该在文件第75行
sudo vim /usr/include/c++/7/cstdlib
修改后重新编译。可能会遇到新的错误,但是依旧输出这个类型的错误,按照同样的要求,根据提示信息修改即可。

5.4.2 RGB-D视觉

安装Boost库
sudo apt-get install libboost-all-dev

6.3.2 使用Ceres进行曲线拟合

下载源代码
git clone https://github.com/ceres-solver/ceres-solver.git
安装依赖项
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev 
编译并安装
cd ceres-solver
mkdir build
cd build
cmake ..
make -j2
sudo make install

注意:

一、Cmake… 报错
yang@yang:~/slambook2/3rdparty/ceres-solver/build$ cmake ..
CMake Error at CMakeLists.txt:32 (cmake_minimum_required):
  CMake 3.16...3.27 or higher is required.  You are running version 3.10.2
解决方法
# 首先添加官方的 APT 仓库
sudo apt-get update
sudo apt-get install -y software-properties-common lsb-release
sudo apt-key adv --fetch-keys 'https://apt.kitware.com/keys/kitware-archive-latest.asc'
sudo apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main"
sudo apt-get update
# 然后安装 CMake
sudo apt-get install cmake
验证 CMake 版本
cmake --version
#确保显示的版本号符合 ceres-solver 的要求(3.16 至 3.27)。
二、make -j2
编译过程可能很慢,耐心等待即可。如果可以,使用make -j4或者更高的。编译过程可以使用htop工具监控内存
sudo apt-get install htop
htop

6.3.3 使用g2o进行曲线拟合

下载源代码
git clone https://github.com/RainerKuemmerle/g2o.git
安装依赖库
sudo apt-get install qt5-qmake qt5-default libqglviewer-dev-qt5 libsuitesparse-dev libcxsparse3 libcholmod3 
编译并安装
cd ceres-solver
mkdir build
cd build
cmake ..
make -j2
sudo make install

注意:

make -j报错
/home/yang/slambook2/3rdparty/g2o/g2o/stuff/filesys_tools.cpp:29:10: fatal error: filesystem: 没有那个文件或目录
 #include <filesystem>
分析
  • 错误信息表明你的编译环境中缺少 <filesystem> 头文件。这通常意味着编译器或者它的标准库不支持 C++17 标准中引入的文件系统库。GCC 从 8.0 版本开始支持 <filesystem>,但是单独链接libstdc++fs。在 GCC 9 及更高版本中,<filesystem> 库已经被完全集成到标准库中,不需要链接,这里我们安装GCC 9
  • 通过升级编译器解决问题
解决方法
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
#安装GCC 9
sudo apt install gcc-9 g++-9
#设置GCC 9作为默认的 gcc 和 g++
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-9	#数字 60 代表优先级。这个数字用来决定在有多个版本可用时,默认使用哪个版本。数字越大,被选中的可能性就越高。
下面的步骤可以省略,仅仅作为更进一步的完善
把系统上原来的GCC 7.5 也添加到 alternatives 系统中
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50 --slave /usr/bin/g++ g++ /usr/bin/g++-7	#使用了 50 作为 GCC 7.5 的优先级,这意味着它的优先级比 GCC 8 (优先级 60) 低。因此,如果两个版本都被配置为可用,系统默认会选择 GCC 8。
通过alternatives 系统手动选择已经添入系统的 GCC 版本
sudo update-alternatives --config gcc

补充

如果安装GCC 8 而不是GCC 9 ,则编译过程会报错如下
../../../lib/libg2o_stuff.so.0.1.0:对‘std::filesystem::__cxx11::path::parent_path() const’未定义的引用
../../../lib/libg2o_stuff.so.0.1.0:对‘std::filesystem::__cxx11::directory_iterator::operator*() const’未定义的引用
../../../lib/libg2o_stuff.so.0.1.0:对‘std::filesystem::__cxx11::path::has_parent_path() const’未定义的引用
../../../lib/libg2o_stuff.so.0.1.0:对‘std::filesystem::__cxx11::path::_M_find_extension() const’未定义的引用
......

注意

本章CMakeLists.txt有如下代码:
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
因此编译的时候需要依赖于本书ch6目录下提供的cmake文件夹。该文件夹下的CeresConfig.cmake.in和FindG2O.cmake文件是使用Ceres和G2O库所需要的配置文件。由官方提供,不需要人为修改。只需要编译的时候把cmake文件夹放于cpp文件同一级目录,并且在CMakeLists.txt中添加以上代码即可!

11.3.2 实践:创建字典

下载源代码
git clone https://github.com/rmsalinas/DBow3.git
编译并安装
cd DBow3
mkdir build
cd build
cmake ..
make -j2
sudo make install

实践: 安装Google Test

下载源代码
git clone https://github.com/google/googletest.git
编译并安装
cd googletest
mkdir build
cd build
cmake ..
make -j2
sudo make install

部分错误修正

第6讲:非线性优化

修正一:

配套提供的CMakelist.txt
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_FLAGS "-std=c++14 -O3")
make -j编译报错
/usr/local/include/g2o/stuff/tuple_tools.h:41:46: error: ‘tuple_size_v’ is not a member of ‘std’; did you mean ‘tuple_size’?
   41 |       f, t, i, std::make_index_sequence<std::tuple_size_v<std::decay_t<T>>>());
      |                                              ^~~~~~~~~~~~
      |                                              tuple_size
         ^~~~~~~~~~~
...  
说明
编译错误涉及到对 C++17 标准中特性的使用,特别是 std::tuple_size_vstd::string_view。错误信息表明编译器无法识别这些 C++17 新增的特性。
修正CMakelist.txt
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_FLAGS "-std=c++17 -O3")

修正二:

配套提供的gaussNewton.cpp
  // 梯度下降方法,可以从GN, LM, DogLeg 中选
  auto solver = new g2o::OptimizationAlgorithmGaussNewton(
    g2o::make_unique<BlockSolverType>(g2o::make_unique<LinearSolverType>()));
make -j编译报错
/home/yang/SLAMBOOK2/ch6/g2oCurveFitting.cpp:91:74: error: expected primary-expression before ‘)’ token
   91 |     g2o::make_unique<BlockSolverType>(g2o::make_unique<LinearSolverType>()));
      |                                                                          ^
说明
make_unique 调用中存在语法错误。应该使用 std::make_unique
修正gaussNewton.cpp
将“g2o::make_unique”全部修改为“std::make_unique”即可
  // 梯度下降方法,可以从GN, LM, DogLeg 中选
  auto solver = new g2o::OptimizationAlgorithmGaussNewton(
    std::make_unique<BlockSolverType>(std::make_unique<LinearSolverType>()));

第8讲:视觉里程计2

修正一:

配套提供的CMakeLists.txt
find_package(OpenCV 4 REQUIRED)
CMake…报错
CMake Error at CMakeLists.txt:9 (find_package):
  Could not find a configuration file for package "OpenCV" that is compatible
  with requested version "4"
说明
我们只安装了OpenCV3。而这里要求最低版本为4。故修改CMakeLists.txt文件内容
find_package(OpenCV 3 REQUIRED)
紧接着make -j报错
error: invalid initialization of reference of type ‘const cv::ParallelLoopBody&’ from expression of type ‘std::_Bind_helper<false, void (OpticalFlowTracker::*)(const cv::Range&), OpticalFlowTracker*, const std::_Placeholder<1>&>::type’ {aka ‘std::_Bind<void (OpticalFlowTracker::*(OpticalFlowTracker*, std::_Placeholder<1>))(const cv::Range&)>’}
  190 |                   std::bind(&OpticalFlowTracker::calculateOpticalFlow, &tracker, placeholders::_1));
说明
opencv3不支持std::bind函数,所以这里我们必须要安装OpenCV4,安装方法参考上述“环境配置”中“5.3实践”,选用OpenCV4的source即可安装。
最后把CMakeLists.txt内容重新指定为“find_package(OpenCV 4 REQUIRED)”即可

修正二:

make -j编译报错
 error: ‘CV_GRAY2BGR’ was not declared in this scope
  206 |     cv::cvtColor(img2, img2_show, CV_GRAY2BGR);
说明
  • 在OpenCV 4.x版本中,许多常量和函数的命名方式发生了变化,以符合C++的命名约定。特别是,CV_前缀被删除,且常量通常采用小写字母开头的驼峰式命名。因此,CV_GRAY2BGR应该被替换为cv::COLOR_GRAY2BGR。使用“Ctrl+H”完成这个替换即可。
  • 本讲配套的源代码optical_flow.cpp和direct_method.cpp均需要完成这个替换。
  • 29
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Ubuntu 18.04上配置SLAM3,可以按照以下步骤进行操作: 1. 首先,你需要安装eigen库。你可以通过运行以下命令来安装libeigen3-dev: ``` sudo apt-get install libeigen3-dev ``` 这将安装eigen库所需的依赖项。 2. 接下来,你需要使用源码中原有的g2o。你可以从ORB_SLAM3的源码中获取g2o,并按照指南进行编译和安装。 3. 配置Ubuntu 18.04的软件源以加快下载速度。你可以通过点击桌面左侧的“Ubuntu软件”图标,然后选择左上角的“软件和更新”来更改软件源。在“下载自”选项中,选择中国的服务器以加快下载速度。 完成以上步骤后,你就可以成功配置SLAM3了。请确保你按照指南正确地安装和配置了源码中的依赖项和工具。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [ubuntu18.04配置ORB-SLAM3](https://blog.csdn.net/shyjhyp11/article/details/120096869)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ubuntu18.04配置ORB-SLAM3(包含ROS)完整版教程](https://blog.csdn.net/hhz_999/article/details/120473659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值