1、文章介绍
最近Gaussisan Splatting杀入三维重建,这篇论文提出了 Photo-SLAM,一个创新的框架,旨在解决现有方法在可扩展性和计算资源限制方面面临的问题,同时实现高精度定位和实时逼真地图构建。该系统维护了一种“超原语地图”,其由存储ORB特征的点云、旋转、缩放、密度和球谐系数组成。通过使用因子图求解器进行优化跟踪,并计算原始图像与渲染图像之间的损失来实现相应的映射学习。
尽管引入了3D高斯散射渲染器以降低视图重建的成本,但在单目场景下,该方法仍无法实现高保真的在线增量地图构建。为了解决这一问题,论文提出了一种基于几何的密化策略和一种基于高斯金字塔(Gaussian Pyramid, GP)的学习方法。GP学习促进了多级特征的逐步获取,从而有效提升了系统的映射性能。
通过在单目、立体视觉和RGB-D摄像头采集的多种数据集上进行广泛实验,结果表明,Photo-SLAM在定位效率、逼真地图质量和渲染速度等方面达到了最先进的性能。此外,该系统在嵌入式设备上的实时执行展示了其在实际机器人应用中的巨大潜力。
因此,各种环境的搭建层出不穷,但是为了避免环境的污染,很多小伙伴也倾向于使用conda创建基本环境来避免环境污染!!但是在编译PhotoSLAM会存在各种问题,因此本文就个人成功编译方法分享给小伙伴们。
废话不多说,现在开始流程。
本文使用 conda安装 cuda 11.8 并加pytorch +cudnn 8.9.5 + libtorch + 基环境安装 cmake3.22.1 + 基本环境安装 gcc11.4.0 成功 !!!!!
本文的基本环境是Ubuntu18.04!
2、gcc和cmake安装
2.1 gcc11.40
在Ubuntu系统上安装GCC 11.4.0,可以通过以下步骤完成:
1、更新系统的包列表:
sudo apt update
2、添加GCC官方PPA源
为了安装指定版本的GCC,我们需要添加适合的PPA源。可以使用
ppa:ubuntu-toolchain-r
3、/test
,它包含了多个GCC版本
sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update
4、安装GCC 11和G++ 11: 现在我们可以安装GCC 11和g++ 11:
sudo apt install gcc-11 g++-11
5、验证安装版本: 安装完成后,可以检查已安装的GCC版本:
gcc-11 --version
输出应类似于:
gcc (Ubuntu 11.4.0-1ubuntu1~20.04) 11.4.0
6、设置默认版本(可选): 如果系统中安装了多个GCC版本,并希望将GCC 11设置为默认版本,可以执行以下命令:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100
如果需要在多个版本之间切换,可以使用:
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
2.2 cmake3.22.1
1、更新系统包列表:
sudo apt update
2、安装必要的依赖项:
sudo apt install build-essential libssl-dev
3、下载CMake 3.22.1的源代码:
wget https://github.com/Kitware/CMake/releases/download/v3.22.1/cmake-3.22.1.tar.gz
4、解压下载的压缩包:
tar -zxvf cmake-3.22.1.tar.gz cd cmake-3.22.1
5、编译和安装CMake:
./bootstrap
make
sudo make install
这个过程可能需要一些时间,具体取决于您的系统性能。
6、验证CMake版本: 安装完成后,可以检查CMake的版本以确保安装正确:
cmake --version
您应该看到类似以下的输出:
cmake version 3.22.1
如果你有多个cmake安装在系统中,需要在bashrc文件中修改路径文件,
export CMAKE_ROOT=/usr/local/share/cmake-3.22
保存后执行soure ~/.bashrc
然后重新conda 进入环境即可在环境中 看到cmake的版本
3、显卡驱动安装
显卡驱动默认安装了,如果没有安装可以参考这篇文章:Ubuntu20.04安装显卡驱动以及双屏幕显示问题_ubuntu20.04双屏-CSDN博客
4、conda安装cuda11.8和cudnn
#安装的环境 :
conda create -n PhotoSLAM python==3.9
#激活环境
conda activate PhotoSLAM
#安装cuda-toolkit
conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit
#安装pytorch
conda install pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 cudatoolkit=11.8 -c pytorch -c nvidia -c conda-forge
#安装cudnn
conda install cudnn==8.9.2.26 -c https://repo.anaconda.com/pkgs/main/linux-64/cudnn-8.9.2.26-cuda11_0.conda
5、安装OpenCV4.7.0
按照官方说明,在 OpenCV realeases 和 opencv_contrib 中,找到需要安装 OpenCV 4.7.0 和相应的 opencv_contrib 4.7.0将它们下载到同一目录(例如,~/opencv
)并解压缩。 然后打开终端并运行:
cd ~/opencv
cd opencv-4.7.0/
mkdir build
cd build
## 下面是一个cmake编译事例
cmake -DCMAKE_BUILD_TYPE=RELEASE -DWITH_CUDA=ON -DWITH_CUDNN=ON -DOPENCV_DNN_CUDA=ON -DWITH_NVCUVID=ON -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-11.8(CUDA的目录) -DOPENCV_EXTRA_MODULES_PATH="../../opencv_contrib-4.7.0/modules"(opencv_contrib-4.7.0/modules的目录) -DBUILD_TIFF=ON -DBUILD_ZLIB=ON -DBUILD_JASPER=ON -DBUILD_CCALIB=ON -DBUILD_JPEG=ON -DWITH_FFMPEG=ON ..
## 下面是我的编译命令
sudo rm -rf build
mkdir build
cd build
# The build options we used in our tests:
cmake -DCMAKE_INSTALL_PREFIX=/home/suv/Photo-SLAM/third_party/opencv -DCMAKE_BUILD_TYPE=RELEASE -DWITH_CUDA=ON -DWITH_CUDNN=ON -DOPENCV_DNN_CUDA=ON -DWITH_NVCUVID=ON -DCUDA_TOOLKIT_ROOT_DIR=/home/xxx/anaconda3/envs/PhotoSLAM -DOPENCV_EXTRA_MODULES_PATH="../../opencv_contrib-4.7.0/modules" -DBUILD_TIFF=ON -DBUILD_ZLIB=ON -DBUILD_JASPER=ON -DBUILD_CCALIB=ON -DBUILD_JPEG=ON -DWITH_FFMPEG=ON ..
# Take a moment to check the cmake output, see if there are any packages needed by OpenCV but not installed on your device
sudo make -j8 install
# NOTE: We found that the compilation of OpenCV may stuck at 99%, this may be caused by the final linking process. We just waited for a while until it was completed and exited without errors.
## 花点时间检查 cmake 输出,看看是否有 OpenCV 需要但未安装在设备上的软件包,缺啥补啥
make -j8 #使用make -j$(nproc)自动选择适合自己cpu体质的核心数
## 官方说OpenCV的编译可能会卡在99%,我卡在最后的100%,这可能都是由于最后的链接过程造成的。我们只需等待一段时间,直到它完成并无错误退出即可。
6、安装LibTorch2.1.2
支持的 LibTorch 版本最高为 2.1.2,如果使用的版本高于此版本,可能会出现兼容性问题。
首先下载 libtorch和解压缩,关于如何选择可以参考下面内容:
CUDA 版本匹配:使用的是 CUDA 11.8,因此选择文件名中包含 cu118 的版本。
C++ ABI 兼容性:
# 下载 LibTorch 包(夜间构建,适用于 CUDA 11.8 和 C++11 ABI,包含依赖项)
wget https://download.pytorch.org/libtorch/cu118/libtorch-cxx11-abi-shared-with-deps-2.0.1%2Bcu118.zip -O libtorch-cu118.zip
# 将 LibTorch 压缩包解压到指定目录
unzip libtorch-cu118.zip -d ./the_path_to_where_you_extracted_LibTorch
# 请将 ./the_path_to_where_you_extracted_LibTorch 替换为你想要解压的目标目录。
# 删除下载的压缩包以节省空间
rm libtorch-cu118.zip
# 在 CMakeLists.txt 中设置 Torch_DIR 变量,指向解压后的 LibTorch 目录
# In CMakeLists.txt
set(Torch_DIR ./the_path_to_where_you_extracted_LibTorch/libtorch/share/cmake/Torch)
# 请将 ./the_path_to_where_you_extracted_LibTorch 替换为您实际解压 LibTorch 的路径。
7、安装Photo-SLAM
7.1 首先,克隆Photo-SLAM的代码库并编译:
git clone https://github.com/HuajianUP/Photo-SLAM.git
cd Photo-SLAM/
chmod +x ./build.sh
./build.sh
7.2 如果出现报错找不到 glm::glm库
可能出现的报错:
直接在gihub上赵glm源文件,克隆下来之后放到 thirdty文件中,然后修改Cmaklists文件:
首先注释掉这行代码
find_package(OpenGL REQUIRED)
# find_package(glm REQUIRED)
find_package(glfw3 REQUIRED)
target_link_libraries(cuda_rasterizer
# glm::glm
"${TORCH_LIBRARIES}"
Eigen3::Eigen
nvToolsExt
)
target_link_libraries(gaussian_viewer
${ORB_SLAM3_SOURCE_DIR}/lib/libORB_SLAM3.so
gaussian_mapper
imgui
${OpenCV_LIBRARIES}
jsoncpp_lib
"${TORCH_LIBRARIES}"
# glm::glm
glfw
OpenGL::GL
nvToolsExt
)
添加代码:
target_include_directories(cuda_rasterizer PRIVATE
${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}
third_party/glm)
7.3 出现找不到/usr/bin/ld: 找不到 -lLIBNVTOOLSEXT-NOTFOUND)
这个问题很难处理,笔者也处理许久,尝试各种办法,修改路径地址等等都无效!
最后尝试将conda环境中这个文件复制到项目文件中即可解决:
cp /home/suv/anaconda3/envs/PhotoSLAM/lib/libnvToolsExt.so
/home/suv/Photo-SLAM/lib
并在PhotoSLAM的CmakeLists文件中设置:
set(CMAKE_PREFIX_PATH "${CMAKE_CURRENT_SOURCE_DIR}/lib")