基于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 环境
WIN11
Nvidia GPU
Docker Desktop
WSL
说明:以下操作都是在WSL
的ubuntu
和Docker容器
中操作,其中某些操作没有重复写,有问题可参考我另一篇博客: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 查看系统信息
cat /etc/os-release
nvidia-smi -L
nvcc -V
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
- 修改:
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 }
- 拷贝
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还是我太菜了…