Ubuntu20.04系统从零运行ORB-SLAM3
文章目录
-
前言
-
1.安装ROS
-
-
- 1. 检查 ROS 环境设置 * 2. 更新 .bashrc 文件 * 3. 重新检查 ROS 版本 * 4. 检查 Python 版本
-
-
2.安装 Cmake-3.23.2 / Cmake-3.26.6
-
- 2.1.安装 Cmake-3.23.2
- 2.2.卸载当前版本的 CMake-3.23.2
- 2.3.安装 cmake-3.26.6
-
2.安装 Eigen 3.3.7
-
- 方法1: 通过系统包管理器安装
- 方法2:通过源码安装
-
3.安装pangolin0.6
-
- 3.1.安装依赖
- 3.2.安装pangolin
- 3.3.检测效果
-
4.安装 boost_v1.77(optional)
-
5.安装 glog_v0.4.0 和 gflags_v2.2.2
-
- 先安装 gflags:
- 再安装 glog
- 原因:
-
6.源码安装Ceres Solver (动态库)
-
- 6.1.Ceres Solver 1.14
- 安装依赖项
- 下载 Ceres Solver 1.14 源代码
- 创建构建目录
- 配置 CMake
-
通过源码编译安装的ceres-solver卸载
-
- 6.2.Ceres Solver 2.2.0
-
7..安装opencv-3.4.15 和 opencv_contrib-3.4.15
-
- 安装Opencv
- 下面报错1和报错2一起解决
- 报错1:安装opencv时,xfeatures2d模块缺失boostdesc_bgm.i文件,下载超时问题
- 报错2 face_landmark_model.dat
- 查看opencv版本
- 卸载已安装的opencv-3.4.15
-
安装OpenGL
-
安装GLEW库
-
安装Sophus v1.22.10
前言
有时候SLAM会遇到动态库和静态库冲突情况,故这里安装的一些库尽量使用了动态库。
1.安装ROS
wget http://fishros.com/install -O fishros && bash fishros
bash

更换源


最后一步


查看ros版本
xx@xx-virtual-machine:~$ rosversion -d
<unknown>
xx@xx-virtual-machine:~$ rosversion ros
Cannot locate [ros]
damon@damon-virtual-machine:~$
bash
ROS 似乎已经安装成功,但可能由于环境变量未正确设置导致 rosversion 无法正常工作。你可以尝试以下步骤确保 ROS 环境配置正确:
1. 检查 ROS 环境设置
确保你已经加载了 ROS 的环境配置文件,可以以下命令来加载:
source /opt/ros/noetic/setup.bash
bash
这会将 ROS 环境加载到当前的终端会话中。
2. 更新 .bashrc 文件
为了每次打开终端时自动加载 ROS 环境,你可以将上述命令加入到 .bashrc 文件中:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
bash
然后重新加载 .bashrc:
source ~/.bashrc
bash
3. 重新检查 ROS 版本
确保 ROS 环境已经加载之后,再次以下命令查看版本:
rosversion -d
bash
如果上述步骤仍未解决问题,请确认你已经正确安装了 ROS 并且路径 /opt/ros/noetic/ 下存在相关文件。如果有问题,可以再次安装或检查安装步骤。
4. 检查 Python 版本
如果还需要检查 Python 版本,以下命令:
python3 --version
bash
这将返回你系统的 Python 3 版本。
通过这些步骤应该可以正确配置和查看 ROS 版本。如有其他问题,请告诉我!
2.安装 Cmake-3.23.2 / Cmake-3.26.6
2.1.安装 Cmake-3.23.2
完全参考 ubuntu20.04安装并ORB_SLAM3(一路顺风版) 安装的cmake-3.23.2
2.2.卸载当前版本的 CMake-3.23.2
1.通过 ln -sf 命令创建的软链接需要先删除
sudo rm /usr/bin/cmake
sudo rm /usr/bin/cmake-gui
sudo rm /usr/bin/ctest
bash
2.删除之前移动到 /opt/ 目录的 CMake 文件夹
sudo rm -rf /opt/cmake-3.23.2
bash
2.3.安装 cmake-3.26.6
1.使用wget下载
wget https://cmake.org/files/v3.26/cmake-3.26.6-linux-x86_64.tar.gz
bash
2.解压并移动到 /opt
tar -zxvf cmake-3.26.6-linux-x86_64.tar.gz
sudo mv cmake-3.26.6-linux-x86_64 /opt/cmake-3.26.6
bash
3.建立软链接
sudo ln -sf /opt/cmake-3.26.6/bin/* /usr/bin
bash
4.添加环境变量
编辑 .bashrc
gedit ~/.bashrc
bash
添加
export PATH=/opt/cmake-3.26.6/bin:$PATH
bash
然后执行
source ~/.bashrc
bash
5.验证版本
cmake --version
bash
2.安装 Eigen 3.3.7
方法1: 通过系统包管理器安装
在 Ubuntu/Debian下你可以直接通过包管理器 apt 来安装 Eigen:
sudo apt-get update
sudo apt-get install libeigen3-dev
bash
方法2:通过源码安装
如果你需要最新版本的 Eigen 或者想手动控制安装路径,可以通过源码安装。
git clone https://gitlab.com/libeigen/eigen.git
cd eigen
mkdir build && cd build
cmake ..
sudo make install
bash
默认情况下,Eigen 将安装到 /usr/local/include/eigen3。
3.安装pangolin0.6
3.1.安装依赖
安装Pangolin所需依赖
sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev
sudo apt install libpython2.7-dev
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
bash
3.2.安装pangolin
git clone https://github.com/stevenlovegrove/Pangolin/tree/v0.6
cd Pangolin
mkdir build && cd build
cmake ..
make -j16
sudo make install
bash
3.3.检测效果
cd examples/HelloPangolin
./HelloPangolin
cpp
`
4.安装 boost_v1.77(optional)
Ubuntu20.04已经包含了boost_v1.71版本
解压后进入boost
获取所需的库,主要的是boost::regex支持的icu:
sudo apt-get update
sudo apt-get install build-essential g++ python-dev autotools-dev libicu-dev build-essential libbz2-dev libboost-all-dev
bash
Boost的引导程序设置:
./bootstrap.sh --prefix=/usr/
sudo ./b2 install
bash
然后用:
./b2
bash
并最终安装它
sudo ./b2 install
bash
5.安装 glog_v0.4.0 和 gflags_v2.2.2
在安装 glog 和 gflags 时,推荐 先安装 gflags,再安装 glog。这是因为 glog 在构建时会检测系统中是否已经安装了 gflags,并自动与其链接。如果 gflags 尚未安装,glog 会跳过对 gflags 的支持。
先安装 gflags:
git clone https://github.com/gflags/gflags.git
cd gflags
mkdir build && cd build
cmake .. -DBUILD_SHARED_LIBS=ON # 强制编译为动态库
make
sudo make install
bash
检查版本,是否安装成功
pkg-config --modversion gflags
bash
再安装 glog
wget https://github.com/google/glog/archive/v0.4.0.zip
unzip v0.4.0.zip
cd glog-0.4.0
mkdir build && cd build
cmake .. -DBUILD_SHARED_LIBS=ON # 强制编译为动态库
make
sudo make install
bash
验证安装
完成安装后,您可以使用以下命令验证是否安装成功,且是动态库版本:
# 检查 gflags 动态库版本
pkg-config --modversion gflags
# 检查 glog 动态库版本
pkg-config --modversion glog
bash
如果 pkg-config 能显示版本信息,说明动态库已经正确安装。
更新链接器缓存 : sudo ldconfig
原因:
- glog 的 CMake 配置文件会查找并使用系统中已经安装的 gflags 库。
- 如果你在安装 glog 时没有提前安装 gflags,glog 将不会启用对 gflags 的支持。
6.源码安装Ceres Solver (动态库)
6.1.Ceres Solver 1.14
Ceres Solver 是一个用于非线性优化的库,它依赖 Eigen 和 glog/gflags,因此在安装它之前,需要确保 Eigen、glog、gflags 已经安装好。
glog0.4.0+gflags2.2.2+ eigen3.3.7+ceres1.14能成功编译
安装依赖项
首先,需要安装 Ceres Solver 所需的依赖项,包括 Eigen3, SuiteSparse, glog, 和 gflags。在 Ubuntu 系统上,你可以通过以下命令安装这些依赖项:
- Eigen(已经安装,通常是 /usr/include/eigen3)
- SuiteSparse(用于稀疏矩阵运算)
- BLAS 和 LAPACK(数值计算库)
sudo apt-get update
sudo apt-get install cmake libgoogle-glog-dev libgflags-dev libatlas-base-dev libeigen3-dev libsuitesparse-dev
bash
下载 Ceres Solver 1.14 源代码
从 Ceres Solver 官方网站或 GitHub 下载 1.14 版本的源码。可以使用 wget 来直接下载:
wget http://ceres-solver.org/ceres-solver-1.14.0.tar.gz
tar zxf ceres-solver-1.14.0.tar.gz
cd ceres-solver-1.14.0
bash
创建构建目录
为 Ceres Solver 创建一个单独的构建目录:
mkdir build
cd build
bash
配置 CMake
使用 CMake 配置项目。这里会根据你安装的库来找到 Ceres 需要的依赖项:
# Ceres Solver 将构建为动态库(libceres.so)
cmake .. -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
bash
选项说明:
- DBUILD_TESTING=OFF:关闭 Ceres Solver 测试项目的构建。
- DBUILD_EXAMPLES=OFF:关闭 Ceres Solver 示例代码的构建(可选)。
如果你希望启用这些测试或示例代码,可以去掉相应选项。
make -j4
sudo make install
bash
这将把 Ceres Solver 安装到默认的 /usr/local 目录中。
通过源码编译安装的ceres-solver卸载
一般情况下,Ceres Solver 的库文件会被安装在 /usr/local/ 下,具体路径如下:
sudo rm -rf /usr/local/lib/libceres*
sudo rm -rf /usr/local/include/ceres
sudo rm -rf /usr/local/share/Ceres
bash
6.2.Ceres Solver 2.2.0
配置好orb-slam3的环境后,但有些SLAM系统需要使用ceres-solver-2.2.0版本,故此,这里安装2.2.0版本,与1.14版本共存。
只要正确地管理它们的安装路径和环境变量。在这种情况下,Ceres 2.2.0 将被安装到一个特定的目录(比如 /usr/local/ceres-2.2.0),而 Ceres 1.14 保持原样。
如何让 Ceres 1.14 和 2.2.0 共存?
为了使 Ceres 1.14 和 2.2.0 共存,确保在编译时明确指定你想使用的版本。例如,假设你在构建项目时想使用 Ceres 2.2.0,可以在 CMake 命令中通过设置 CMAKE_PREFIX_PATH 来确保使用 Ceres 2.2.0:
cmake .. -DCMAKE_PREFIX_PATH=/usr/local/ceres-2.2.0 -DCMAKE_BUILD_TYPE=Release
bash
1.下载 Ceres 2.2.0 源码
首先,获取 Ceres 2.2.0 的源码。你可以从 GitHub 或者 Ceres 的官方网站下载源码。
git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
git checkout 2.2.0 # 切换到 2.2.0 版本
bash
2.创建构建目录并配置 CMake
在 Ceres 源码目录下创建一个新的构建目录:
mkdir build
cd build
bash
3.编译并安装 Ceres 2.2.0(动态库)
使用 CMake 配置构建 Ceres 库并指定动态库的安装路径。你可以选择不同的安装路径,以便与现有的 Ceres 1.14 版本共存。
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local/ceres-2.2.0 \
-DBUILD_SHARED_LIBS=ON
bash
说明:
- CMAKE_INSTALL_PREFIX=/usr/local/ceres-2.2.0:将 Ceres 安装到 /usr/local/ceres-2.2.0,避免与现有的 Ceres 1.14 版本发生冲突。
- -DBUILD_SHARED_LIBS=ON:指定编译动态库。
4.编译并安装 Ceres 2.2.0
make 和 make install 安装 Ceres 2.2.0:
make -j$(nproc) # 使用多核编译,适合你的机器
sudo make install # 安装到指定目录
bash
5.配置环境变量
为了确保在编译时能够找到 Ceres 2.2.0 动态库,你需要设置以下环境变量:
- CMAKE_PREFIX_PATH:指向 Ceres 2.2.0 的安装路径
- LD_LIBRARY_PATH:确保链接器能够找到 Ceres 2.2.0 的共享库
修改 ~/.bashrc(或者 ~/.zshrc,如果你使用的是 Zsh)来设置这些环境变量:
# Ceres 2.2.0 环境变量
export CMAKE_PREFIX_PATH=/usr/local/ceres-2.2.0:$CMAKE_PREFIX_PATH
export LD_LIBRARY_PATH=/usr/local/ceres-2.2.0/lib:$LD_LIBRARY_PATH
bash
然后执行 source ~/.bashrc 或者重新打开终端来生效。
确认环境变量
确保你已经正确设置了环境变量(包括 CMAKE_PREFIX_PATH 和 LD_LIBRARY_PATH)。你可以通过以下方式确认它们是否正确设置:
echo $CMAKE_PREFIX_PATH
echo $LD_LIBRARY_PATH
bash
确保 /usr/local/ceres-2.2.0 出现在这两个变量的路径中。
手动检查 Ceres 版本
打开 Ceres 安装目录中的 version.h 文件,里面会包含 Ceres 的版本信息:
cat /usr/local/ceres-2.2.0/include/ceres/version.h
bash
你可以看到类似如下内容:
#define CERES_VERSION_MAJOR 2
#define CERES_VERSION_MINOR 2
#define CERES_VERSION_REVISION 0
bash
7…安装opencv-3.4.15 和 opencv_contrib-3.4.15
ros自带opencv4.2,这里安装opencv3.15与其共存
解压opencv-3.4.15.zip
unzip opencv-3.4.15.zip
bash
解压 opencv_contrib-3.4.zip 放在 opencv-3.4.15文件夹下
unzip opencv_contrib-3.4.15.zip -d opencv-3.4.15
bash
安装依赖
sudo apt-get update
sudo apt-get upgrade
# sudo apt-get install cmake # 跳过,前面已装
sudo apt-get install build-essential
sudo apt-get install -y libopencv-dev
sudo apt-get install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff5-dev libdc1394-22-dev # 处理图像所需的包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev # 处理视频所需的包
sudo apt-get install libatlas-base-dev gfortran # 优化opencv功能
sudo apt-get install ffmpeg
sudo apt-get install libeigen3-dev
bash

安装Opencv
目录结构
virtual-machine:/opt/opencv-3.4.15$ ls
3rdparty CMakeLists.txt doc modules README.md
apps CONTRIBUTING.md include opencv_contrib-3.4.15 samples
cmake data LICENSE platforms
virtual-machine:/opt/opencv-3.4.15$
bash
在 opencv 目录下创建 build 目录:
mkdir build
cd build
bash
CMake 配置: 在配置 CMake 时,确保 OPENCV_EXTRA_MODULES_PATH 的路径指向 opencv 目录下的 opencv_contrib:
cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.15/modules \
-D WITH_CUDA=OFF \
-D BUILD_SHARED_LIBS=ON \
..
bash
这里 …/opencv_contrib/modules 是相对于 opencv/build 目录的路径。
Note : 到-- IPPICV: Download: ippicv_2020_lnx_intel64_20191018_general.tgz 按 ctrl + c 结束
virtual-machine:/opt/opencv-3.4.15/.cache/ippicv$ ls
7421de0095c7a39162ae13a6098782f9-ippicv_2020_lnx_intel64_20191018_general.tgz
ippicv_2020_lnx_intel64_general_20191018_general.tgz
bash

将前面一个文件文件名 复制给 IPPICV 并删除前一个文件,最后只有 7421de0095c7a39162ae13a6098782f9-ippicv_2020_lnx_intel64_20191018_general.tgz
重新编译
virtual-machine:/opt/opencv-3.4.15/build$ sudo rm -fr *
cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.15/modules \
-D WITH_CUDA=OFF \
-D BUILD_SHARED_LIBS=ON \
..
# BUILD_SHARED_LIBS=ON 确保 OpenCV 仅构建和链接动态库,可以将 -DBUILD_SHARED_LIBS=ON 添加到命令中
bash

编译 OpenCV: 使用以下命令编译:
make -j$(nproc)
bash
安装 OpenCV: 完成编译后,以下命令安装:
sudo make install
sudo ldconfig
bash
使用 pkg-config 查找路径
查看 OpenCV 的版本
pkg-config --modversion opencv
bash
查看 OpenCV 的编译标志
pkg-config --cflags opencv
bash
查看 OpenCV 的库路径
pkg-config --libs opencv
bash
下面报错1和报错2一起解决
这个.cache文件夹,替换掉安装时OpenCV3.4.15下的.cache文件夹即可。
报错1:安装opencv时,xfeatures2d模块缺失boostdesc_bgm.i文件,下载超时问题
安装opencv时,xfeatures2d模块缺失boostdesc_bgm.i文件,下载超时问题
xfeatures2d/boostdesc: Download: boostdesc_binboost_256.i
-- Try 1 failed
CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
xfeatures2d/boostdesc: Download failed: 56;"Failure when receiving data
from the peer"
For details please refer to the download log file:
/opt/opencv-3.4.15/build/CMakeDownloadLog.txt
Call Stack (most recent call first):
opencv_contrib-3.4.15/modules/xfeatures2d/cmake/download_boostdesc.cmake:22 (ocv_download)
opencv_contrib-3.4.15/modules/xfeatures2d/CMakeLists.txt:12 (download_boost_descriptors)
bash

将以下文件:
boostdesc_bgm.i
boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_lbgm.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
vgg_generated_120.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_48.i
bash

拷贝到***opencv_contrib/modules/xfeatures2d/src/***目录下,而且网上直接可以用的资源并不多。
报错2 face_landmark_model.dat
下载 face_landmark_model.dat 缓慢或者下载失败

在 /opt/opencv-3.4.15/.cache/data/中的文件按照上述 IPPICV 的方式进行替换即可
查看opencv版本
pkg-config --modversion opencv # 显示版本号则成功
bash
卸载已安装的opencv-3.4.15
1.手动删除安装的 OpenCV 文件
删除头文件和库文件
sudo rm -rf /usr/local/include/opencv*
sudo rm -rf /usr/local/lib/libopencv*
sudo rm -rf /usr/local/lib/cmake/opencv*
sudo rm -rf /usr/local/share/OpenCV
bash
检查并清理可能的残留文件:
sudo find /usr/local -name "*opencv*" -exec rm -rf {} +
bash
- 更新动态链接库缓存
以下命令更新动态链接库缓存,确保系统不会引用已删除的库文件:
sudo ldconfig
bash
3.检查 OpenCV 是否完全卸载
pkg-config --modversion opencv
bash
damon@damon-virtual-machine:~$ pkg-config --modversion opencv
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
bash
如果返回版本号,说明还有残留的 OpenCV,可以重复步骤 2 和 3 进行清理。
安装OpenGL
sudo apt-get install libglu1-mesa-dev
bash
安装GLEW库
sudo apt-get install libglew-dev
bash
安装Sophus v1.22.10
1.克隆并切换到 v1.22.10
cd ~/workspace # 或任意工作目录
git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout 1.22.10
bash
可以确认当前 tag 是否正确:
git describe --tags
# 应输出:1.22.10
bash
2.编译并安装
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
make -j8
sudo make install
bash
完成后,你应看到:
- /usr/local/include/Sophus/se3.hpp ✅ 存在
- /usr/local/share/sophus/cmake/SophusConfig.cmake ✅ 存在
3.验证安装
ls /usr/local/include/Sophus/se3.hpp
grep -r "class SE3" /usr/local/include/Sophus/
bash

