Gaussian-LIC2实时构建3DGS的slam方法(可使用fastlivo2的数据集)

👑主页:吾名招财

👓简介:工科学硕,研究方向机器视觉,爱好较广泛...

​💫签名:面朝大海,春暖花开!

Gaussian-LIC2实时构建3DGS的slam方法(可使用fastlivo2的数据集)

引言

  之前一直想着利用fastlivo2的slam点云结果进行高斯训练得到高斯模型,但是没有成功,最终发现了一个可以直接生成3DGS的slam方法Gaussian-LIC2,需要本地配置好fastlivo2的环境,并经过实际测验,此方法可行

正文

1,gaussian_lic2

https://xingxingzuo.github.io/gaussian_lic2/

Gaussian-LIC2: LiDAR-Inertial-Camera Gaussian Splatting SLAM

https://github.com/APRIL-ZJU/Gaussian-LIC

GitHub - APRIL-ZJU/Gaussian-LIC: ICRA 2025 Gaussian-LIC: Real-Time Photo-Realistic SLAM with Gaussian Splatting and LiDAR-Inertial-Camera Fusion · GitHub

环境配置

https://xingxingzuo.github.io/gaussian_lic/

Gaussian-LIC: Real-Time Photo-Realistic SLAM with Gaussian Splatting and LiDAR-Inertial-Camera Fusion

2,本地配置问题

(1)wifi模块外接

ubuntu20.04的官方版本的内核5.15系列是没有wifi模块的,无论怎么安装都失败了,而6.9.0的内核虽然有wifi模块,但是没有nvidia驱动,nvidia驱动安装也是一直失败,所以只能回退版本到5.15系列(官方支持的最高版本),然后就需要在网上直接买个usb免驱动无线网卡wifi(tenda免驱动即可),ubuntu系统直接在其说明书的更多资料那里下载对应的ubuntu驱动在ubuntu20.04的内核5.15系列上面安装即可联网了

(2)bios设置独立显卡直连

显卡的问题一直黑屏,直接bios设置为独显直连后,内核5.15-140启动就不会黑屏了,之前本地编译显卡驱动再选择nvidia后,开启进入黑屏,是因为bios默认双显卡,其读取混乱,到intel的集显了

(3)安装显卡驱动

确保 140 的 headers 有(你前面有过,但再确认):

javascript 复制代码
sudo apt install linux-headers-5.15.0-140-generic

重新构建并安装 nvidia 模块(很关键):

javascript 复制代码
sudo dpkg-reconfigure nvidia-dkms-535

确认 dkms 状态(只看 5.15.0-140 这一行):

javascript 复制代码
dkms status

应为:

javascript 复制代码
nvidia, 535.230.02, 5.15.0-140-generic, x86_64: installed

必须重启(模块构建完不重启,往往 still not loaded):

javascript 复制代码
sudo reboot

重启后第一件事:

javascript 复制代码
nvidia-smi

能出表 → 驱动真活了

再:xrandr看分辨率

(4)bios设置

进入 BIOS:关机状态下,按一下电源键开机,然后立即连续快速按 F2(少数机型可能是 Delete或 F12),直到进入 BIOS 界面。

找到显卡模式选项:使用方向键切换菜单,通常在 Advanced(高级)或 Configuration(配置)选项卡下,寻找以下名称的选项(不同 BIOS 版本略有差异):

javascript 复制代码
Switchable Graphics
Graphics Mode/ GPU Mode

    Discrete Graphics Mode/ 显卡配置

修改为独显直连:将该选项的值从默认的 Hybrid/ MsHybrid(混合模式)或 iGPU Only修改为:

javascript 复制代码
dGPU Only(仅独显)
或 Discrete Graphics(独立显卡)

    或 Direct/ 独显直连

    保存并退出:按 F4或 F10键(下方通常有提示"Save and Exit"),在弹出的确认框中选择 Yes或 OK,电脑会自动重启,设置即可生效。

3,ubuntu系统环境安装(直接离线下载安装配置)

(1)安装CUDA 11.7(使用deb包安装)(成功)

下载deb包(根据Ubuntu版本选择)

javascript 复制代码
# Ubuntu 20.04 (Focal)
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda-repo-ubuntu2004-11-7-local_11.7.0-515.43.04-1_amd64.deb

安装

javascript 复制代码
sudo dpkg -i cuda-repo-ubuntu2004-11-7-local_11.7.0-515.43.04-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2004-11-7-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-11-7

配置环境变量

javascript 复制代码
# 编辑bashrc
echo 'export PATH=/usr/local/cuda-11.7/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
echo 'export CUDA_HOME=/usr/local/cuda-11.7' >> ~/.bashrc

# 创建符号链接(可选)
sudo ln -sf /usr/local/cuda-11.7 /usr/local/cuda

# 使配置生效
source ~/.bashrc

验证CUDA安装
# 检查nvcc版本
nvcc --version

# 检查CUDA路径
echo $CUDA_HOME
ls -la /usr/local/cuda-11.7

# 运行CUDA示例测试
cd /usr/local/cuda-11.7/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery

(2)cuDNN v8.9.7 安装

步骤1:下载cuDNN

javascript 复制代码
注意:需要NVIDIA开发者账号登录下载
https://developer.nvidia.com/rdp/cudnn-archive
访问:cuDNN Archive
·  选择:cuDNN v8.9.7 (November 28th, 2023), for CUDA 11.x
·  ·  下载:Local Installer for Linux x86_64 (Tar)

步骤2:安装cuDNN

javascript 复制代码
# 1. 解压cuDNN
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz

# 2. 复制文件到CUDA目录
cd cudnn-linux-x86_64-8.9.7.29_cuda11-archive
sudo cp include/cudnn*.h /usr/local/cuda-11.7/include/
sudo cp -P lib/libcudnn* /usr/local/cuda-11.7/lib64/

# 3. 设置文件权限
sudo chmod a+r /usr/local/cuda-11.7/include/cudnn*.h /usr/local/cuda-11.7/lib64/libcudnn*

步骤3:验证cuDNN安装

javascript 复制代码
# 方法1:检查版本
cat /usr/local/cuda-11.7/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
javascript 复制代码
# 方法2:运行cuDNN示例
# 复制示例文件
sudo cp -r /usr/src/cudnn_samples_v8/ $HOME
cd $HOME/cudnn_samples_v8/mnistCUDNN
make clean && make
./mnistCUDNN

(3)在前面的基础上就可以安装编译安装opencv了

javascript 复制代码
cd ~/Software/opencv/opencv-4.7.0/build
rm -rf *

cmake -DCMAKE_BUILD_TYPE=RELEASE -DWITH_CUDA=ON  -DWITH_CUDNN=ON -DOPENCV_DNN_CUDA=ON  -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-11.7  -DCUDA_ARCH_BIN="8.6"  -DCUDNN_INCLUDE_DIR=/usr/local/cuda-11.7/include  -DCUDNN_LIBRARY=/usr/local/cuda-11.7/lib64/libcudnn.so -DOPENCV_EXTRA_MODULES_PATH="../../opencv_contrib-4.7.0/modules"  -DWITH_FFMPEG=ON   ..



# 使用多核编译(加速编译过程)
make -j$(nproc)

# 如果内存不足或遇到问题,可以使用更少的核心:
# make -j2

# 编译完成后安装
sudo make install
sudo ldconfig

遇到可视化工具编译安装报错的相关信息时候不用管,直接进行下一步即可

(4)安装PCL1.13.0

步骤2:安装编译依赖

javascript 复制代码
# 更新系统
sudo apt update
sudo apt upgrade -y

# 安装基本编译工具
sudo apt install -y git build-essential cmake cmake-gui

# 安装PCL核心依赖
sudo apt install -y libboost-all-dev libeigen3-dev libflann-dev
sudo apt install -y libusb-1.0-0-dev libudev-dev
sudo apt install -y libqhull-dev libgtest-dev
sudo apt install -y freeglut3-dev pkg-config
sudo apt install -y libxmu-dev libxi-dev

# 安装VTK(PCL可视化依赖)
sudo apt install -y libvtk7-dev libvtk7-qt-dev

# 安装Qt(可选,如果需要GUI)
sudo apt install -y qtbase5-dev qt5-qmake

# 其他可选依赖
sudo apt install -y libopenni-dev libopenni2-dev
sudo apt install -y libpcap-dev libglew-dev

步骤3:下载PCL 1.13.0源码

javascript 复制代码
# 创建工作目录
cd ~
mkdir -p pcl_install
cd pcl_install
javascript 复制代码
# 方法1:从GitHub克隆(推荐)
git clone https://github.com/PointCloudLibrary/pcl.git
cd pcl
git checkout pcl-1.13.0
javascript 复制代码
# 方法2:直接下载压缩包(备选)
# wget https://github.com/PointCloudLibrary/pcl/archive/refs/tags/pcl-1.13.0.tar.gz
# tar -xzf pcl-1.13.0.tar.gz
# cd pcl-pcl-1.13.0
当编译卡死的时候可以使用单线程编译
cd ~/catkin_gaussian
rm -rf build
catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3 -j1

一直编译报错,可能是中间删除的东西导致,重新从安装ROS环境,从头开始配置cli环境

(5)修改cmake文件

下面是/home/zhaocai/catkin_gaussian/src/Gaussian-LIC下的cmake文件,因为cuda路径等问题需要修改此文件来进行编译安装

javascript 复制代码
cmake_minimum_required(VERSION 3.17)  # 升级 CMake 版本以更好支持 CUDA
project(gaussian_lic LANGUAGES CXX CUDA)  # 明确指定支持 CUDA 语言

# 设置默认构建类型
if(NOT CMAKE_BUILD_TYPE)
    SET(CMAKE_BUILD_TYPE "Release")
endif()

# 设置 CUDA 标准
set(CMAKE_CUDA_STANDARD 14)  # 降低 CUDA 标准版本以兼容 CUDA 11.7
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 设置 CUDA 架构(根据你的 GPU 调整)
set(CMAKE_CUDA_ARCHITECTURES "75;80;86")  # 假设是 RTX 20/30/40 系列

# 编译选项
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g -Wno-sign-compare -Wno-unused -Wno-comment -pthread")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -msse4.2")

# 设置 CUDA 相关路径(修复硬编码问题)
if(NOT DEFINED CUDA_TOOLKIT_ROOT_DIR)
    set(CUDA_TOOLKIT_ROOT_DIR "/usr/local/cuda-11.7")
endif()
set(CUDACXX "${CUDA_TOOLKIT_ROOT_DIR}/bin/nvcc")

# 查找 ROS 依赖
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  roslib
  std_msgs
  cv_bridge
  image_transport
  pcl_conversions
  pcl_ros
  nav_msgs
  sensor_msgs
  geometry_msgs
  tf
  eigen_conversions
)

# 设置 OpenCV 路径
if(NOT OpenCV_DIR)
    set(OpenCV_DIR "$ENV{HOME}/Software/opencv/opencv-4.7.0/build")
endif()
find_package(OpenCV 4 REQUIRED)

# 设置 Torch 路径
if(NOT Torch_DIR)
    set(Torch_DIR "$ENV{HOME}/Software/libtorch/share/cmake/Torch")
endif()

# 临时禁用 CUDA 检查,让 libtorch 找到正确的 CUDA
set(CMAKE_CUDA_COMPILER "${CUDA_TOOLKIT_ROOT_DIR}/bin/nvcc")
set(CUDA_NVCC_FLAGS "-std=c++14")  # 设置 CUDA 编译标志
set(CMAKE_CUDA_HOST_COMPILER g++)  # 设置 CUDA 主机编译器

# 在 find_package(Torch) 之前设置必要的变量
set(CAFFE2_CUDA_VERSION "11.7")
set(AT_CUDA_ENABLED ON)

# 查找 Torch
find_package(Torch REQUIRED)

# 设置 TensorRT
if(NOT TENSORRT_ROOT)
    set(TENSORRT_ROOT "$ENV{HOME}/Software/TensorRT-8.6.1.6")
endif()
set(TENSORRT_INCLUDE_DIR "${TENSORRT_ROOT}/include")
set(TENSORRT_LIB_DIR "${TENSORRT_ROOT}/lib")

# 查找其他依赖
find_package(CUDA REQUIRED)
find_library(FFI_LIB ffi)
find_package(PkgConfig REQUIRED)
pkg_check_modules(YAML_CPP REQUIRED yaml-cpp>=0.5)
find_package(Python3 COMPONENTS Interpreter Development NumPy REQUIRED)

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES gaussian_lic
#  CATKIN_DEPENDS roscpp rospy std_msgs
#  DEPENDS system_lib
)

include_directories(
  src
  ${catkin_INCLUDE_DIRS}
  ${OpenCV_INCLUDE_DIRS}
  ${YAML_CPP_INCLUDE_DIRS}
  ${Python3_INCLUDE_DIRS}
  ${TENSORRT_INCLUDE_DIR}
  ${CUDA_INCLUDE_DIRS}
)

# 定义源文件
set(CPP_SOURCES
  ${PROJECT_SOURCE_DIR}/src/mapping.cpp
  ${PROJECT_SOURCE_DIR}/src/gaussian.cpp
  ${PROJECT_SOURCE_DIR}/src/tinyply.cpp
  ${PROJECT_SOURCE_DIR}/src/depth_completer.cpp
  ${PROJECT_SOURCE_DIR}/src/rasterizer/renderer.cpp
  ${PROJECT_SOURCE_DIR}/src/rasterizer/rasterizer.cpp
)

set(CUDA_SOURCES
  ${PROJECT_SOURCE_DIR}/src/simple-knn/spatial.cu
  ${PROJECT_SOURCE_DIR}/src/simple-knn/simple_knn.cu
  ${PROJECT_SOURCE_DIR}/src/fused-ssim/ssim.cu
  ${PROJECT_SOURCE_DIR}/src/rasterizer/rasterize_points.cu
  ${PROJECT_SOURCE_DIR}/src/rasterizer/cuda_rasterizer/adam.cu
  ${PROJECT_SOURCE_DIR}/src/rasterizer/cuda_rasterizer/forward.cu
  ${PROJECT_SOURCE_DIR}/src/rasterizer/cuda_rasterizer/backward.cu
  ${PROJECT_SOURCE_DIR}/src/rasterizer/cuda_rasterizer/rasterizer_impl.cu
)

# 创建可执行文件
add_executable(gs_mapping ${CPP_SOURCES})

# 添加 CUDA 源文件
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.18)
    target_sources(gs_mapping PRIVATE ${CUDA_SOURCES})
else()
    # CMake 3.18 以下的兼容方式
    enable_language(CUDA)
    target_sources(gs_mapping PRIVATE ${CUDA_SOURCES})
    set_source_files_properties(${CUDA_SOURCES} PROPERTIES LANGUAGE CUDA)
endif()

# 设置目标属性
set_target_properties(gs_mapping PROPERTIES
    CUDA_SEPARABLE_COMPILATION ON
    CUDA_RESOLVE_DEVICE_SYMBOLS ON
)

# 链接库
target_link_libraries(gs_mapping
  ${catkin_LIBRARIES}
  ${OpenCV_LIBS}
  ${TORCH_LIBRARIES}
  ${YAML_CPP_LIBRARIES}
  ${Python3_LIBRARIES}
  ${FFI_LIB}
  ${CUDA_cudart}
  ${TENSORRT_LIB_DIR}/libnvinfer.so
  ${TENSORRT_LIB_DIR}/libnvonnxparser.so
  ${TENSORRT_LIB_DIR}/libnvparsers.so
  ${TENSORRT_LIB_DIR}/libnvinfer_plugin.so
)

# 设置包含目录
target_include_directories(gs_mapping PRIVATE
  src
  ${catkin_INCLUDE_DIRS}
  ${OpenCV_INCLUDE_DIRS}
  ${YAML_CPP_INCLUDE_DIRS}
  ${Python3_INCLUDE_DIRS}
  ${TENSORRT_INCLUDE_DIR}
  ${CUDA_INCLUDE_DIRS}
)

4,训练fastlivo2数据集为3DGS

安装成功了,能够对fastlivo2的数据集进行训练生成gs了,效果极好

注意每生成一个新的项目,两个终端都要重开一次

1,运行时先在一个终端中启动如下(退出base环境)

javascript 复制代码
cd ~/catkin_gaussian
source devel/setup.bash
roslaunch gaussian_lic fastlivo2.launch  // The terminal will print "😋 Gaussian-LIC Ready!".

2,再启动一个终端运行bag包如下(需要编辑对应的yaml文件)

注意此出运行的路径是在catkin_coco目录下,与上一个终端不一样,并且最终结果保存在了上一个终端的目录下了

javascript 复制代码
cd ~/catkin_coco
source devel/setup.bash
roslaunch cocolic odometry.launch config_path:=config/ct_odometry_fastlivo2.yaml

运行时会弹出如下窗口

生成的结果在此目录下