当前位置: 首页 > news >正文

基于Docker编译运行orb-slam2_with_semantic_labelling

文章目录

  • 1 环境
  • 2 创建容器
    • 2.1 拉取镜像
    • 2.2 启动容器
  • 3 进入容器
    • 3.1 进入容器
    • 3.2 查看系统信息
    • 3.3 换源
  • 4 安装依赖
    • 4.1 安装基础依赖
    • 4.2 安装eigen3、vtk6、pcl1.8
    • 4.3 安装Pangolin 0.6
      • 4.3.1 安装依赖
      • 4.3.2 下载
      • 4.3.3 编译安装
      • 4.3.4 测试
    • 4.4 安装opencv 3.4.15
      • 4.4.1 安装依赖
      • 4.4.2 下载
      • 4.4.3 编译安装
      • 4.4.4 测试
  • 5 【可选】测试pcl分割超体
    • 5.1 下载PCD文件
      • 5.1.1 下载
      • 5.1.2 测试
    • 5.2 代码
    • 5.3 CMakeLists.txt
    • 5.4 编译
    • 5.5 测试
  • 6 编译安装Darknet
    • 6.1 下载编译
    • 6.2 测试
      • 6.2.1 下载模型
      • 6.2.2 测试
  • 7 编译orb-slam2_semantic_with_labelling
    • 7.1 下载
    • 7.2 单独编译darknet
      • 7.2.1 拷贝
      • 7.2.2 添加编译yolo_v3.o
      • 7.2.3 编译
      • 7.2.4 测试
        • 7.2.4.1 查看`libYOLOv3SE.so`
        • 7.2.4.2 测试加载
        • 7.2.4.3 测试运行
      • 7.2.5 拷贝libYOLOv3SE.so
    • 7.3 修改CMakeLists.txt
    • 7.4 编译
  • 8 运行
    • 8.1 运行
    • 8.2 结果展示

1 环境

  1. WIN11
  2. Nvidia GPU
  3. Docker Desktop
  4. WSL

说明:以下操作都是在WSLubuntuDocker容器中操作,其中某些操作没有重复写,有问题可参考我另一篇博客:https://blog.csdn.net/superbadguy/article/details/148025249

2 创建容器

2.1 拉取镜像

docker pull pytorch/pytorch:1.6.0-cuda10.1-cudnn7-devel

2.2 启动容器

xhost +local:rootdocker run -d \-v /tmp/.X11-unix:/tmp/.X11-unix \-v /mnt/e/docker-ws/shared/:/shared \--gpus all \-e DISPLAY=$DISPLAY \-e QT_X11_NO_MITSHM=1 \--ipc=host \--name ub18-slam2-labelling \pytorch/pytorch:1.6.0-cuda10.1-cudnn7-devel \tail -f /dev/null

3 进入容器

3.1 进入容器

 docker exec -it ub18-slam2-labelling /bin/bash

3.2 查看系统信息

  1. cat /etc/os-release
  2. nvidia-smi -L
  3. nvcc -V
  4. find / -name libcudnn.so

3.3 换源

# 备份
cp /etc/apt/sources.list /etc/apt/sources.list.bak# 换源
sed -i 's|http://.*archive.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list
sed -i 's|http://.*security.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list# 更新软件列表
apt update

4 安装依赖

4.1 安装基础依赖

apt install -y vim wget git cmake pkg-config build-essential unzip sudo

4.2 安装eigen3、vtk6、pcl1.8

apt-get install -y software-properties-commonadd-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"apt-get updateapt-get install libvtk6-dev \
libvtk6-qt-dev \
libboost-all-dev \
libeigen3-dev \
libpcl-dev \
pcl-tools \
-y

4.3 安装Pangolin 0.6

4.3.1 安装依赖

apt install libxkbcommon-dev -y  &&
apt install wayland-protocols -y && 
apt install libglew-dev libgl1-mesa-dev libwayland-dev -y 

4.3.2 下载

mkdir /app
cd /appgit clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin/# 切换到v0.6版本
git checkout v0.6
git branch

4.3.3 编译安装

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(($(nproc) - 2))
sudo make install

4.3.4 测试

cd ../examples/HelloPangolin/
mkdir build
cd build/
cmake ..
make
# 运行弹出图形化界面
./HelloPangolin

在这里插入图片描述

4.4 安装opencv 3.4.15

4.4.1 安装依赖

# 1. 添加必要的旧版库源(用于libjasper)
add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
apt-get update# 2. 安装基础编译工具
apt-get install -y \build-essential \cmake \git \pkg-config# 3. 安装图像I/O依赖库
apt-get install -y \libjpeg-dev \libpng-dev \libtiff-dev \libjasper1 \libjasper-dev# 4. 安装视频I/O和编解码库
apt-get install -y \libavcodec-dev \libavformat-dev \libswscale-dev \libv4l-dev \libx264-dev \libxvidcore-dev# 5. 安装GUI依赖(OpenCV 3.x默认使用GTK2)
apt-get install -y \libgtk2.0-dev \gtk2-engines-pixbuf# 6. 安装Python3支持
apt-get install -y \python3-dev \python3-numpy# 7. 安装并行计算和优化库
apt-get install -y \libtbb-dev \libeigen3-dev# 8. 安装其他功能模块依赖
apt-get install -y \libdc1394-22-dev \libglew-dev \libopenexr-dev

4.4.2 下载

cd /app
wget -O opencv-3.4.15.zip https://github.com/opencv/opencv/archive/refs/tags/3.4.15.zip

4.4.3 编译安装

unzip opencv-3.4.15.zip
cd opencv-3.4.15
mkdir build && cd buildcmake -D CMAKE_BUILD_TYPE=RELEASE ..make -j$(($(nproc) - 2)) # 使用多线程加速
sudo make install
sudo ldconfig

4.4.4 测试

pkg-config --modversion opencvcd ../samples/cpp/example_cmake
cmake .
make 
./opencv_example

在这里插入图片描述

5 【可选】测试pcl分割超体

orb-slam2_with_semantic_labelling代码中有用到pcl分割超体,但因为系统或安装等原因,会导致程序运行过程中卡住然后退出,我尝试了好多好多天,终于发现是这个原因,真是巨坑啊(maybe也是我太菜的缘故!)

5.1 下载PCD文件

5.1.1 下载

mkdir /app/test_supervoxel
cd /app/test_supervoxel
wget -O office.zip https://sourceforge.net/projects/pointclouds/files/PCD%20datasets
/office.zip/download

5.1.2 测试

cd /app/test_supervoxel
unzip office.zip
cd office
pcl_viewer office1.pcd

在这里插入图片描述

5.2 代码

/app/test_supervoxel/test_supervoxel.cpp

#include <pcl/console/parse.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/segmentation/supervoxel_clustering.h>
#include <pcl/visualization/pcl_visualizer.h>typedef pcl::PointXYZRGBA PointT;int main(int argc, char** argv)
{if (argc < 2) {std::cerr << "Usage: " << argv[0] << " input.pcd [--display]" << std::endl;return 1;}// 加载点云pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);if (pcl::io::loadPCDFile<PointT>(argv[1], *cloud) == -1) {std::cerr << "Failed to load PCD file!" << std::endl;return 2;}std::cout << "Loaded " << cloud->size() << " points" << std::endl;// 参数设置const float voxel_resolution = 0.015f;const float seed_resolution = 0.15f;const float color_importance = 0.1f;const float spatial_importance = 0.4f;const float normal_importance = 1.0f;// 创建分割器pcl::SupervoxelClustering<PointT> super(voxel_resolution, seed_resolution);super.setInputCloud(cloud);super.setColorImportance(color_importance);super.setSpatialImportance(spatial_importance);super.setNormalImportance(normal_importance);super.setUseSingleCameraTransform(false);// 执行分割std::map<std::uint32_t, pcl::Supervoxel<PointT>::Ptr> supervoxel_clusters;std::cout << "Starting supervoxel extraction..." << std::endl;super.extract(supervoxel_clusters);  // 这里会触发segmentation fault吗?std::cout << "Extracted " << supervoxel_clusters.size() << " supervoxels" << std::endl;// 可视化(修正后的代码)bool display = pcl::console::find_argument(argc, argv, "--display") > 0;if (display) {pcl::visualization::PCLVisualizer viewer("Supervoxel Viewer");viewer.addPointCloud<PointT>(cloud, "original");// 正确获取质心类型pcl::PointCloud<PointT>::Ptr voxel_centers(new pcl::PointCloud<PointT>);for (auto it = supervoxel_clusters.begin(); it != supervoxel_clusters.end(); ++it) {voxel_centers->push_back(it->second->centroid_);}viewer.addPointCloud(voxel_centers, "centroids");viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 5.0, "centroids");viewer.spin();}return 0;
}

5.3 CMakeLists.txt

/app/test_supervoxel/CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(test_supervoxel)find_package(PCL 1.8 REQUIRED COMPONENTS common io segmentation visualization)
find_package(VTK 6 REQUIRED)# 添加C++11支持
set(CMAKE_CXX_STANDARD 11)include_directories(${PCL_INCLUDE_DIRS} ${VTK_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS} ${VTK_LIBRARY_DIRS})add_executable(test_supervoxel test_supervoxel.cpp)
target_link_libraries(test_supervoxel${PCL_LIBRARIES}${VTK_LIBRARIES}pthread
)if(CMAKE_BUILD_TYPE STREQUAL "Debug")set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3 -O0")
endif()

5.4 编译

cd /app/test_supervoxel
mkdir build
cd buildcmake ..
make 

5.5 测试

cd /app/test_supervoxel/build
./test_supervoxel /app/test_supervoxel/office/office1.pcd --display

Loaded 307200 points
Starting supervoxel extraction…
Extracted 1998 supervoxels

在这里插入图片描述

6 编译安装Darknet

orb-slam2_with_semantic_labelling中带了darknet,但好像是改过的版本,跟官网的还有些不一样,折腾了好多天,改了好些地方才编译成功,但运行仍然时有问题,遂放弃治疗,直接使用官方的darknet替代

6.1 下载编译

cd /app
git clone https://github.com/pjreddie/darknet.git
cd darknet
make

加入GPU和OpenCV
vim Makefile
在这里插入图片描述
重新编译

make clean && make 

报错
在这里插入图片描述
解决
vim src/image_opencv.cpp

 61 image mat_to_image(Mat m)62 {63     // IplImage ipl = m;64     IplImage ipl = cvIplImage(m);  // 新增65     image im = ipl_to_image(&ipl);66     rgbgr_image(im);67     return im;68 }

重新编译

6.2 测试

6.2.1 下载模型

wget https://data.pjreddie.com/files/yolov3.weights

6.2.2 测试

# cost 0.42 seconds
# 第一次运行可能要1分钟,再次运行就很快
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg# cost 11.7 seconds
./darknet -nogpu detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

Loading weights from yolov3.weights…Done!
data/dog.jpg: Predicted in 7.869886 seconds.
dog: 6366%
truck: 1626%
truck: 227%
bicycle: 3938%

在这里插入图片描述

7 编译orb-slam2_semantic_with_labelling

7.1 下载

cd /app
git clone https://github.com/qixuxiang/orb-slam2_with_semantic_labellingcd orb-slam2_with_semantic_labelling/
cd Vocabulary/# 此命令可能下载不全,手动下载后放到Vocabulary文件夹下
wget https://github.com/raulmur/ORB_SLAM2/blob/master/Vocabulary/ORBvoc.txt.tar.gz

7.2 单独编译darknet

7.2.1 拷贝

cp /app/orb-slam2_with_semantic_labelling/Thirdparty/darknet/src/yolo_v3.* /app/darknet/src/

7.2.2 添加编译yolo_v3.o

vim /app/darkent/Makefile
在这里插入图片描述

7.2.3 编译

cd /app/darknet
make clean & make mv libdarknet.so libYOLOv3SE.so
cp cfg/yolov3.cfg .

7.2.4 测试

7.2.4.1 查看libYOLOv3SE.so
nm -D libYOLOv3SE.so | grep Yolo

00000000000973b0 T YoloDetect
0000000000097730 T YoloDetectFromFile
00000000000977d0 T YoloDetectFromImage
00000000000976f0 T YoloLoad

7.2.4.2 测试加载

代码
test_loading.c

#include <stdio.h>
#include <dlfcn.h>typedef int*(*YoloLoadType)(char*, char*);int main() {void* handle = dlopen("./libYOLOv3SE.so", RTLD_LAZY | RTLD_NOW);if (!handle) {fprintf(stderr, "dlopen error: %s\n", dlerror());return 1;}YoloLoadType YoloLoad = (YoloLoadType)dlsym(handle, "YoloLoad");if (!YoloLoad) {fprintf(stderr, "dlsym error: %s\n", dlerror());return 1;}printf("Calling YoloLoad...\n");char* cfg = "./yolov3.cfg";  // 替换为绝对路径测试
char* weights = "./yolov3.weights";
printf("Config path: %s\n", cfg);  // 打印路径确认int* net = YoloLoad(cfg, weights);  // 替换为实际路径printf("YoloLoad returned: %p\n", net);dlclose(handle);return 0;
}

编译

gcc -g test_loading.c -o test_loading -ldl

运行

./test_loading

Loading weights from ./yolov3.weights…Done!
YoloLoad returned: 0x559936b85f20

7.2.4.3 测试运行

代码
test_predict.cpp

#include <iostream>
#include <opencv2/opencv.hpp>
#include "YOLOv3SE.h"  // 确保路径正确int main() {// 1. 初始化 YOLOv3 模型YOLOv3 detector;// 2. 加载模型文件(需替换为你的实际路径)std::string weights = "yolov3.weights";std::string cfg = "yolov3.cfg";std::string names = "./data/coco.names";  // 可选,类别名称文件detector.Create(weights, cfg, names);// 3. 加载测试图像cv::Mat img = cv::imread("./data/dog.jpg");if (img.empty()) {std::cerr << "Error: Could not load image!" << std::endl;return -1;}// 4. 执行检测(阈值设为 0.5)float threshold = 0.5;std::vector<BoxSE> boxes = detector.Detect(img, threshold);// 5. 绘制检测结果for (const BoxSE& box : boxes) {cv::rectangle(img, box, cv::Scalar(0, 255, 0), 2);std::string label = box.m_class_name + " (" + std::to_string(box.m_score) + ")";cv::putText(img, label, cv::Point(box.x, box.y - 5), cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 255, 0), 1);}// 6. 显示结果cv::imshow("YOLOv3 Detection", img);cv::waitKey(0);// 7. 释放资源(析构函数会自动调用,此处可省略)detector.Release();return 0;
}

修改并拷贝YOLOv3SE.h

  1. 修改:vim /app/orb-slam2_with_semantic_labelling/include/YOLOv3SE.h
    116     std::vector<BoxSE> Detect(cv::Mat img, float threshold) {
    117         // IplImage* iplimg = new IplImage(img);
    118         IplImage* iplimg = new IplImage(cvIplImage(img));
    119         std::vector<BoxSE> boxes= this->Detect(iplimg, threshold);
    120         delete iplimg;
    121         return boxes;
    122     }
    
  2. 拷贝
    cp /app/orb-slam2_with_semantic_labelling/include/YOLOv3SE.h /app/darknet/
    

编译

g++ test_predict.cpp \
-o test_predict  \
-I./include -I.  \
-L. -lYOLOv3SE \
`pkg-config --cflags --libs opencv` \
-Wl,-rpath='$ORIGIN' \
-ldl \
-w 

运行

./test_predict

在这里插入图片描述

7.2.5 拷贝libYOLOv3SE.so

mkdir /app/orb-slam2_with_semantic_labelling/Thirdparty/darknet/build
cp libYOLOv3SE.so /app/orb-slam2_with_semantic_labelling/Thirdparty/darknet/build/

7.3 修改CMakeLists.txt

修改后的完整CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
add_definitions(-w)  # note 去掉警告
project(ORB_SLAM2)SET(CMAKE_EXPORT_COMPILE_COMMANDS "ON")IF(NOT CMAKE_BUILD_TYPE)SET(CMAKE_BUILD_TYPE Release)
ENDIF()MESSAGE("Build type: " ${CMAKE_BUILD_TYPE})set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3  ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3 ")
set(CXX_COMPILER_FLAGS -03 -ffast-math -fomit-frame-pointer -funroll-loops -fopenmp=libomp -msse2)# Check C++11 or C++0x support
#include(CheckCXXCompilerFlag)
#CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
#CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
#if(COMPILER_SUPPORTS_CXX11)
#   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#   add_definitions(-DCOMPILEDWITHC11)
#   message(STATUS "Using flag -std=c++11.")
#elseif(COMPILER_SUPPORTS_CXX0X)
#   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
#   add_definitions(-DCOMPILEDWITHC0X)
#   message(STATUS "Using flag -std=c++0x.")
#else()
#   message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
#endif()#SET(CMAKE_C_COMPILER "/usr/bin/gcc-5")  # note 使用gcc-7#SET(CMAKE_CXX_COMPILER "/usr/bin/g++-5") # note 使用g++-7
set(CMAKE_C_STANDARD 11)
add_definitions(-std=c++11)
#list(APPEND CMAKE_C_FLAGS "-std=c++11 -O3 -ffast-math -Wno-unused-result")
include(FindCUDA)
LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
LIST(APPEND CUDA_NVCC_FLAGS --compiler-options -fno-strict-aliasing -lineinfo -use_fast_math -Xptxas -dlcm=cg)
LIST(APPEND CUDA_NVCC_FLAGS -gencode arch=compute_35,code=sm_35)    #for gtx9XX
LIST(APPEND CUDA_NVCC_FLAGS -gencode arch=compute_50,code=sm_50)    #for maxwell
LIST(APPEND CUDA_NVCC_FLAGS -gencode arch=compute_52,code=sm_52)    #for maxwell
LIST(APPEND CUDA_NVCC_FLAGS -gencode arch=compute_60,code=sm_60)    #for pascal
LIST(APPEND CUDA_NVCC_FLAGS -gencode arch=compute_61,code=sm_61)    #for pascal
LIST(APPEND CUDA_NVCC_FLAGS -gencode arch=compute_62,code=sm_62) #for jetson tx2#find_package(OpenCV 3.0 QUIET)
#if(NOT OpenCV_FOUND)
#find_package(OpenCV 2.4.3 QUIET)
#   if(NOT OpenCV_FOUND)
#      message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
#   endif()
#endif()############################################################
############################################################
########### IMPORTANT ######################################
#### openni lib, make sure to set it with your own path#####
set(OPENNI_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/Thirdparty/OpenNI-Linux-x64-2.3/Include")
set(OPENNI_LIB_DIR "${PROJECT_SOURCE_DIR}/Thirdparty/OpenNI-Linux-x64-2.3/Redist")
############################################################
############################################################
############################################################
############################################################
############################################################# note 去掉版本
find_package(Eigen3 REQUIRED)
find_package(Pangolin REQUIRED)
# adding for point cloud viewer and mapper
find_package(PCL REQUIRED)
find_package(OpenCV REQUIRED)
find_package(CUDA REQUIRED)
find_package(OpenMP)# note 修改pcl的include
# set(PCL_INCLUDE_DIRS /usr/local/include/pcl-1.8)
set(PCL_INCLUDE_DIRS /usr/include/pcl-1.8)add_definitions(-DGPU)
add_definitions(-DOPENCV)
add_definitions(-DCUDNN)
add_definitions(-D_TIMESPEC_DEFINED)
add_definitions(-D_TIMESPEC_DEFINED)
set(DARKNET_PATH ${PROJECT_SOURCE_DIR}/Thirdparty/darknet)
add_definitions(-DDARKNET_FILE_PATH="${DARKNET_PATH}")include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/include
${OpenCV_INCLUDE_DIRS}
# openni
${OPENNI_INCLUDE_DIR}
${EIGEN3_INCLUDE_DIR}
${Pangolin_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}
${CUDA_INCLUDE_DIRS}
${DARKNET_PATH}/src
${CMAKE_CURRENT_SOURCE_DIR}/gco-v3.0
/usr/local/cuda/include
)add_definitions(${PCL_DEFINITIONS} )set(CUDA_INCLUDE_DIR /usr/local/cuda/include)
# note 修改cudnn lib目录
# set(CUDNN_LIBRARY_DIR /usr/local/cuda-8.0/targets/x86_64-linux/lib)
set(CUDNN_LIBRARY_DIR /usr/lib/x86_64-linux-gnu)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)set(HEADERSinclude/gco-v3.0/graph.hinclude/gco-v3.0/block.hinclude/gco-v3.0/energy.hinclude/gco-v3.0/GCoptimization.hinclude/gco-v3.0/LinkedBlockList.hinclude/config.hinclude/lsa_tr.hinclude/segmentation.hinclude/segmentation_helpers.h)# note 去掉darknet编译add_library(${PROJECT_NAME} SHARED
src/System.cc
src/Tracking.cc
src/LocalMapping.cc
src/LoopClosing.cc
src/ORBextractor.cc
src/ORBmatcher.cc
src/FrameDrawer.cc
src/Converter.cc
src/MapPoint.cc
src/KeyFrame.cc
src/Map.cc
src/MapDrawer.cc
src/Optimizer.cc
src/PnPsolver.cc
src/Frame.cc
src/KeyFrameDatabase.cc
src/Sim3Solver.cc
src/Initializer.cc
src/Viewer.cc
src/pointcloudmapping.cc
src/segmentation.cc
gco-v3.0/maxflow.cpp gco-v3.0/maxflow.cpp gco-v3.0/LinkedBlockList.cpp gco-v3.0/GCoptimization.cpp gco-v3.0/graph.cpp ${HEADERS})add_library(cuda INTERFACE)
list(REMOVE_ITEM CUDA_CUBLAS_LIBRARIES "CUDA_cublas_device_LIBRARY-NOTFOUND")  # note 增加
message(STATUS "Cleaned CUDA_CUBLAS_LIBRARIES = ${CUDA_CUBLAS_LIBRARIES}")     # note 增加
set_target_properties(cuda PROPERTIESINTERFACE_INCLUDE_DIRECTORIES ${CUDA_INCLUDE_DIRS}INTERFACE_LINK_LIBRARIES "${CUDA_LIBRARIES};${CUDA_curand_LIBRARY};${CUDA_CUFFT_LIBRARIES};${CUDA_CUBLAS_LIBRARIES}")target_link_libraries(${PROJECT_NAME}
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/Thirdparty/darknet/build/libYOLOv3SE.so
# note 修改libcudnn.so
# /usr/local/cuda/lib64/libcudnn.so
/usr/lib/x86_64-linux-gnu/libcudnn.so
${PCL_LIBRARIES}
m
dl
pthread
stdc++
cuda
)#CONFIGURE_FILE(./src/segmentation.pc.in segmentation.pc @ONLY)
# Build examplesset(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#add_executable(rgbd_astra
#Examples/RGB-D/rgbd_astra.cpp)
#target_link_libraries(rgbd_astra ${PROJECT_NAME})#add_executable(rgbd_xtion_cc
#Examples/RGB-D/rgbd_xtion_cc.cpp)
#target_link_libraries(rgbd_xtion_cc ${PROJECT_NAME})add_executable(rgbd_tumExamples/RGB-D/rgbd_tum.cc)
target_link_libraries(rgbd_tum ${PROJECT_NAME} )#add_executable(rgbd_my
#    Examples/RGB-D/rgbd_my.cc)
#target_link_libraries(rgbd_my ${PROJECT_NAME})#add_executable(stereo_kitti
#Examples/Stereo/stereo_kitti.cc)
#target_link_libraries(stereo_kitti ${PROJECT_NAME})#add_executable(stereo_euroc
#Examples/Stereo/stereo_euroc.cc)
#target_link_libraries(stereo_euroc ${PROJECT_NAME})#add_executable(mono_tum
#Examples/Monocular/mono_tum.cc)
#target_link_libraries(mono_tum ${PROJECT_NAME})#add_executable(mono_kitti
#Examples/Monocular/mono_kitti.cc)
#target_link_libraries(mono_kitti ${PROJECT_NAME})#add_executable(mono_euroc
#Examples/Monocular/mono_euroc.cc)
#target_link_libraries(mono_euroc ${PROJECT_NAME})# Build tools
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/tools)
add_executable(bin_vocabulary
tools/bin_vocabulary.cc)
target_link_libraries(bin_vocabulary ${PROJECT_NAME})

7.4 编译

修改build.sh,去掉darknet编译
在这里插入图片描述
编译

bash build.sh

在这里插入图片描述

8 运行

8.1 运行

cd /app
wget https://cvg.cit.tum.de/rgbd/dataset/freiburg1/rgbd_dataset_freiburg1_desk.tgztar -zxvf rgbd_dataset_freiburg1_desk.tgz
cd /app/orb-slam2_with_semantic_labelling/bin/
mkdir img
cp /app/darknet/yolov3.weights .
cp /app/darknet/yolov3.cfg ../rgbd_tum \../Vocabulary/ORBvoc.txt \../Examples/RGB-D/TUM1.yaml \/app/rgbd_dataset_freiburg1_desk \../Examples/RGB-D/associations/fr1_desk.txt

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.2 结果展示

在这里插入图片描述
在这里插入图片描述
经过很多天很多夜,终于可以成功的跑出来global_color.pcd和segmentation.pcd,但global_color.pcd的效果也差强人意,segmentation.pcd更是糊了,不知道作者是如何跑出那么完美的效果的,深深深深深的疑惑,maybe还是我太菜了…

相关文章:

  • C# 枚 举(枚举)
  • [nginx]反向代理grpc
  • [技巧] 接口优化技巧合集
  • 数列求和计算
  • 人口贩卖暑期威胁消解:算法协同提升安全预警
  • 学习昇腾开发的第一天--环境配置
  • 技术实录-从 MySQL 启动失败到大小写兼容恢复:一次完整故障排查复盘20250614
  • Flask入门:从零搭建Python Web应用
  • Flink task、Operator 和 UDF 之间的关系
  • 【论文解读】OmegaPRM:MCTS驱动的自动化过程监督,赋能LLM数学推理新高度
  • [学习] 牛顿迭代法:从数学原理到实战
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | AnimatedNavigation(动态导航)
  • 【Spring源码核心篇-08】spring中配置类底层原理和源码实现
  • Vite 预构建机制深度解析(Vite缺点之一)
  • BeckHoff <--> Festo Cmmt AS驱动器 EtherCat通讯
  • C++基础算法————二分查找
  • JavaScript 事件循环
  • CH579 CH573 CH582 CH592 蓝牙主机(Central)实例应用讲解(二)——Central消息事件机制初探
  • Python学习笔记面向对象编程
  • 钉钉机器人-自定义卡片推送快速入门
  • 5星做号宿水软件的网站/如何推广小程序平台
  • 域名备案必须要有服务器吗/河南seo优化
  • 支付宝网站设计分析/百度广告联盟官网
  • 盐城做网站需要多少钱/如何做网站建设
  • 3g网站是什么意思/百度广告推广怎么收费了
  • 手机端网站关键词排名/南京百度提升优化