基于Docker编译运行orb-slam2_with_semantic_labelling

发布于:2025-06-16 ⋅ 阅读:(16) ⋅ 点赞:(0)

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:root

docker 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-common

add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"

apt-get update

apt-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 /app

git 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 build

cmake -D CMAKE_BUILD_TYPE=RELEASE ..
      
make -j$(($(nproc) - 2)) # 使用多线程加速
sudo make install
sudo ldconfig

4.4.4 测试

pkg-config --modversion opencv

cd ../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 build

cmake ..
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_labelling

cd 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(HEADERS
    include/gco-v3.0/graph.h
    include/gco-v3.0/block.h
    include/gco-v3.0/energy.h
    include/gco-v3.0/GCoptimization.h
    include/gco-v3.0/LinkedBlockList.h
    include/config.h
    include/lsa_tr.h
    include/segmentation.h
    include/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 PROPERTIES
        INTERFACE_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 examples

set(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_tum
    Examples/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.tgz

tar -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还是我太菜了…


网站公告

今日签到

点亮在社区的每一天
去签到