Fastfusion在windows下搭建

xiaoxiao2021-02-28  71

从周二到周六,搭了整整四天半,网上也没有任何资料,让我这个小白很是磨练了一番啊!

废话不多说,直接上

搭建环境:win10+VS2013+QT5(完全64位平台)

准备工作:

1.opencv:我装的2.4.9的,windows下装很简单的,这里就不提了

 

2.boost:我装的1.60的,64位编译:

先从开始菜单启动Visual Studio的Visual Studio 2013 x64 Win64 Command Prompt进入命令提示符。然后转到boost根文件夹,运行bootstrap.bat生成x64版的bjam.exe。然后运行命令:

bjam --build-type=complete toolset=msvc-9.0 threading=multi link=shared address-model=64

 

 

 

3.安装Doxygen、Eigen:这两个库的安装方法在之前的ElasticFusion Windows下的搭建方法里:http://blog.sina.com.cn/s/blog_882405bf0102x84x.html

 

4.安装QT5:下载合适你的编译器的qt,我使用的是qt-opensource-windows-x86-msvc2013_64-5.6.0.exe,双击安装就可以,然后同样在上面那个网站里下载vs插件,我用的qt-vs-addin-1.2.5.exe。

 

5.安装QGLViewer:在这里下载 http://libqglviewer.com/src/ 按照官网教程编译即可,我使用的2.6.3,建议用这个版本的,因为我用2.7.0的不行。。。

 

6.OpenGL的环境准备好,包括glut32.lib、glew32.lib,opengl32.lib。注意要放在64位对应的文件夹里。可以参考http://www.chongchonggou.com/g_415054816.html 

 

正式编译FastFusion:

1.从github上把它下载下来

2.修改CMakeLists.txt:我把我的CMakeLists贴在这里,注意对应路径要修改:

第一个在src文件夹外的CMakeLists.txt:

 

cmake_minimum_required(VERSION 2.8) set(OpenCV_LIBS opencv_core opencv_imgproc opencv_highgui opencv_calib3d) set(CMAKE_BUILD_TYPE Release) #set(CMAKE_BUILD_TYPE RelWithDebInfo) #set(ROS_BUILD_TYPE RelWithDebInfo) #set(CMAKE_BUILD_TYPE Debug) #set(ROS_BUILD_TYPE Debug) #FIND_PACKAGE(Qt4 REQUIRED) find_package(OpenCV REQUIRED) #find_package(TBB) #if(NOT TBB_FOUND) #MESSAGE(STATUS "TBB not found!"); #else(NOT TBB_FOUND) #include_directories(${TBB_INCLUDE_DIRS}) #link_directories(${TBB_LIBRARY_DIRS}) #endif(NOT TBB_FOUND) if (CMAKE_COMPILER_IS_GNUCC) execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) string(REGEX MATCHALL "[0-9]+" GCC_VERSION_COMPONENTS ${GCC_VERSION}) list(GET GCC_VERSION_COMPONENTS 0 GCC_MAJOR) list(GET GCC_VERSION_COMPONENTS 1 GCC_MINOR) message(STATUS "GCC Major Version is " ${GCC_MAJOR}) message(STATUS "GCC Major Version is " ${GCC_MINOR}) endif() set(CMAKE_C_FLAGS -frounding-math #-Wall ) #Mohamed Visual Studio 2010 - #enabling Intel Advanced Vector Extensions AVX (part 1). #AVX2 is in later visual studio builds i think message(STATUS "Compiling without AVX/AVX2 support") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2 -DOWNAVX") #the flag OWNAVX is just for the ifdefs in the code, i think #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX2 -DOWNAVX") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DPRINT_DEBUG") #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DPRINT_DEBUG") set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) include_directories(${PROJECT_SOURCE_DIR}/src) message(STATUS "PROJECT_SOURCE_DIR is " ${PROJECT_SOURCE_DIR}) include_directories(${PROJECT_SOURCE_DIR}/src/mohamed_util) #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DPRINT_DEBUG") #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DPRINT_DEBUG") #set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) #set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) #include_directories(${PROJECT_SOURCE_DIR}/src) #message(STATUS "PROJECT_SOURCE_DIR is " ${PROJECT_SOURCE_DIR}) #set(Boost_DEBUG 0) #set(BOOST_USE_STATIC_LIBS OFF) #set(BOOST_USE_MULTITHREADED ON) #set(BOOST_USE_STATIC_RUNTIME OFF) #find_package(Boost COMPONENTS thread system tr1) #include_directories(${Boost_INCLUDE_DIRS}) #find_package(Eigen3 REQUIRED) #include_directories(EIGEN3_INCLUDE_DIR) include_directories("D:/Elastic/Eigen") ## CUDA #set(CUDA_TOOLKIT_ROOT_DIR "/work/sdks/cudaversions/cuda50/") # find_package(CUDA 5.0 REQUIRED) # if(CUDA_FOUND) # message("Found CUDA") # else(CUDA_FOUND) # message("CUDA is not installed on this system.") # endif() # execute_process( COMMAND nvcc --version ) # include_directories(${CUDA_TOOLKIT_ROOT_DIR}/include) # set(TEST_CUDA_ARCH $ENV{CUDA_ARCH}) # if(TEST_CUDA_ARCH) # message(STATUS "The GPU Architecture is set to $ENV{CUDA_ARCH} in an Environment Variable") # set(CUDA_ARCH $ENV{CUDA_ARCH}) # else(TEST_CUDA_ARCH) # message(STATUS "No GPU Architecture set, setting to sm_13") # set(CUDA_ARCH sm_11) # endif(TEST_CUDA_ARCH) # #if(${CUDA_ARCH} matches sm_11) # #set(CUDAARCHNUMBER 11) # #elseif(${CUDA_ARCH} matches sm_13) # #set(CUDAARCHNUMBER 13) # #elseif(${CUDA_ARCH} matches sm_20) # #set(CUDAARCHNUMBER 20) # #endif(${CUDA_ARCH} matches sm_11) # set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -arch=${CUDA_ARCH}) #include_directories(${PROJECT_SOURCE_DIR}/external) #include_directories(${PROJECT_SOURCE_DIR}/external/math) #include_directories(${PROJECT_SOURCE_DIR}/include) #include_directories(${PROJECT_SOURCE_DIR}/build/src) #include_directories("/usr/include/nvidia-current/cuda") # find_package(PCL 1.5 REQUIRED COMPONENTS common io filters) # include_directories(${PCL_INCLUDE_DIRS}) # link_directories(${PCL_LIBRARY_DIRS}) # add_definitions(${PCL_DEFINITIONS}) #include(${QT_USE_FILE}) #add_definitions(${QT_DEFINITIONS}) # Doxygen integration find_package(Doxygen) if(DOXYGEN_FOUND) #this adds the correct folder to INPUT= : configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) #add doc target add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "generating docs with Doxygen" VERBATIM ) endif(DOXYGEN_FOUND) add_subdirectory(src)

 

 

 

第二个在src文件夹里的CMakeLists.txt:

 

add_subdirectory(camerautils) add_subdirectory(auxiliary) #add_subdirectory(auxiliaryGPU) #add_subdirectory(libelas) #add_subdirectory(output) add_subdirectory(fusion) #add_subdirectory(fusionGPU) #add_subdirectory(sophus) #add_subdirectory(filesystem) include_directories("D:/qt5.6/qt5/5.6/msvc2013_64/include/QtXml") include_directories("D:/qt5.6/qt5/5.6/msvc2013_64/include") include_directories("D:/qt5.6/qt5/5.6/msvc2013_64/include/QtWidgets") include_directories("D:/qt5.6/qt5/5.6/msvc2013_64/include/QtCore") include_directories("D:/qt5.6/qt5/5.6/msvc2013_64/include/QtXml") include_directories("D:/qt5.6/qt5/5.6/msvc2013_64/include/QtGui") include_directories("D:/qt5.6/qt5/5.6/msvc2013_64/include/QtOpenGL") ADD_DEFINITIONS(${QT_DEFINITIONS}) # add_executable(cameracalibration cameracalib_main.cpp) # target_link_libraries(cameracalibration # opencv_core opencv_imgproc opencv_highgui opencv_features2d opencv_calib3d # ) # # add_executable(rectify_known rectify_stereo_known_main.cpp) # target_link_libraries(rectify_known # opencv_core opencv_imgproc opencv_highgui opencv_features2d opencv_calib3d # ) FIND_PACKAGE(Qt5 REQUIRED COMPONENTS Core Gui OpenGL Xml) QT5_WRAP_CPP(onlinefusion_HEADERS_MOC onlinefusionviewer.hpp) QT5_WRAP_CPP(sources $ {moc-sources} OPTIONS -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED) add_executable(onlinefusion onlinefusionviewer_main.cpp onlinefusionviewer.cpp ${onlinefusion_HEADERS_MOC} ) target_link_libraries(onlinefusion geometryfusion_mipmap_cpu geometryfusion_aos camerautils auxiliary ${OpenCV_LIBS} ${QGLVIEWER_LIBRARIES} QtCore QtGui QtOpenGL glew32 opengl32 glut32 )

 

 

 

 

 

第三个在fusion文件夹里的CMakeLists.txt:

 

include_directories("/usr/include/nvidia-current/cuda") include_directories("/work/sdks/cudaversions/cuda50/cuda/include") include_directories("/home/steinbrf/sdks/cudaversions/cuda50/cuda/include") #find_package(Qt REQUIRED) #INCLUDE(${QT_USE_FILE}) include_directories("D:/qt5.6/qt5/5.6/msvc2013_64/include/QtXml") include_directories("D:/qt5.6/qt5/5.6/msvc2013_64/include") include_directories("D:/qt5.6/qt5/5.6/msvc2013_64/include/QtWidgets") include_directories("D:/qt5.6/qt5/5.6/msvc2013_64/include/QtCore") include_directories("D:/qt5.6/qt5/5.6/msvc2013_64/include/QtXml") include_directories("D:/qt5.6/qt5/5.6/msvc2013_64/include/QtGui") include_directories("D:/qt5.6/qt5/5.6/msvc2013_64/include/QtOpenGL") ADD_DEFINITIONS(${QT_DEFINITIONS}) include_directories("..") add_library(geometryfusion_aos STATIC geometryfusion_aos.cpp treeandbrick.cpp treeandbrick_indexed.cpp treeandbrick_incremental.cpp treeandbrick_incremental_recursive.cpp mesh.cpp #meshcelltraversal.cpp mesh_interleaved.cpp mesh_interleaved_meshcell.cpp ) add_library(geometryfusion_mipmap_cpu STATIC geometryfusion_mipmap_cpu.cpp loopclosure.cpp )

 

 

 

3.使用cmake编译:

出现找不到OpenCV的错:自己把/opencv/build的路径加在cmake里

出现找不到qt5的错:把\qt5.6\qt5\5.6\msvc2013_64\lib\cmake的路径加在cmake里

configure、generate成功

4.用vs2013打开刚才cmake编译出来的Project.sln

 

auxiliary编译

A.先在属性管理器里的releaseX64中的C++常规里添加附加包含目录:D:\boost\boost_1_60_0

B.把threadpool.h文件中的

//#include <boost/thread/pthread/mutex.hpp>

注释掉,不然会产生冲突

C.修改memory.cpp如下

 

/* * memory.cpp * * Created on: Feb 27, 2013 * Author: steinbrf */ #include "memory.hpp" //#include <unistd.h> #include <fstream> #include <string> #include <Windows.h> long long getTotalSystemMemory() { /* long long pages = sysconf(_SC_PHYS_PAGES); long long page_size = sysconf(_SC_PAGE_SIZE); return pages * page_size;*/ MEMORYSTATUSEX status; status.dwLength = sizeof(status); GlobalMemoryStatusEx(&status); return status.ullTotalPhys; } long long getAvailableSystemMemory() { /*long long pages = sysconf(_SC_AVPHYS_PAGES); long long page_size = sysconf(_SC_PAGE_SIZE); return pages * page_size;*/ MEMORYSTATUSEX status; status.dwLength = sizeof(status); GlobalMemoryStatusEx(&status); return status.ullAvailPhys; } ProcessMemoryStats getProcessMemory(){ std::fstream file("/proc/self/statm"); ProcessMemoryStats result; file >> result.size; file >> result.resident; file >> result.shared; file >> result.trs; file >> result.drs; file >> result.lrs; file >> result.dt; result.pageSize = 1;// sysconf(_SC_PAGE_SIZE); return result; }

 

 

 

D.报uint未识别,直接把包含uint的那个函数注释掉,这个可能是因为opencv2.4.9里没有uint,opencv3.0可能就有了

改完这些地方编译(build)即可成功

 

camerautil编译

A.同样在属性管理器里加上boost

编译即可成功

 

geometryfusion_aos编译

A.在属性管理器里加上boost

B.在definition.h文件的末尾修改ALIGNED的定义:

#define ALIGNED __declspec(align(16))

 

在此文件末尾添加:

#define posix_memalign(p, a, s) (((*(p)) = _aligned_malloc((s), (a))), *(p) ?0 :errno)

编译即可成功

 

geometryfusion_mipmap_cpu编译

A.在属性管理器加上boost

B.他有好多用变量初始化数组个数的写法,把这些数组改为用new 分配,如:

int *vxt = new int[_imageWidth]; int *vyt = new int[_imageWidth]; int *vzt = new int[_imageWidth];

C.把

__attribute__ ((aligned (16)))

变成 ALIGNED

即可编译成功

 

onlinefusion编译

A.在属性管理器的包含目录加上boost,加上QGLViewer(D:\libQGLViewer-2.6.3)

B.在附加库目录里加上boost(D:\boost\boost_1_60_0\stage\lib);qt5(D:\qt5.6\qt5\5.6\msvc2013_64\lib);QGLViewer(D:\libQGLViewer-2.6.3\QGLViewer)

C.在附加依赖项里把qt5的lib名称改对,加上QGLViewer2.lib

D.报错找不到glx.h时,把这个头文件直接注释掉

E.在onlinefusionviewer.cpp里加上

#include<QGLViewer/manipulatedFrame.h>

F.把definition.h里的 not define 统统变成 !define

即可编译成功。

 

最后进入bin文件夹,把depth和rgb文件夹考到bin文件夹下,从命令行运行即可。注意这里编译fastfusion时都是用release编译的。

 

 

 

转载请注明原文地址: https://www.6miu.com/read-26465.html

最新回复(0)