文章目录
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: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 查看系统信息
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-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
- 修改:
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(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还是我太菜了…