Fastfusion在windows下搭建

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

废话不多说,直接上

搭建环境: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编译的。

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值