BundleFusion复现手册——Win10+VS2013+Cuda8.0+KinectV2实时重建

2023-05-16

文章目录

  • 一 摘要
  • 二 操作环境
  • 三 工程环境配置
    • 3.1 装VS2013和CUDA8.0
    • 3.2 DirectX SDK 安装
    • 3.3 Kinect SDK 2.0
  • 四 VS2013代码生成(以离线数据为例)
    • 4.1 依赖配置
    • 4.2 CUDA设置
    • 4.3 显卡能力设置
    • 4.4 相机类型设置(以office3.sens离线数据为例)
    • 4.5 生成 FriedLiver.exe
    • 4.6 配置文件修改
    • 4.7 运行结果
  • 五 VS2013代码生成(KinectV2实时重建)
    • 5.1 依赖配置
    • 5.2 CUDA设置
    • 5.3 显卡能力设置
    • 5.4 相机类型设置(KinectV2实时重建)
    • 4.5 生成 FriedLiver.exe
    • 5.6 配置文件修改
    • 5.7 运行结果
  • 六 遇到的错误及解决办法
    • 找不到boost的array_wrapper.hpp
    • 错误error C2065: “SensorDataReader”: 未声明的标识符
    • FriedLive.exe实时重建显示界面卡死
    • FriedLive.exe实时重建显示界面闪退

一 摘要

BundleFusion由斯坦福大学、德国 MPII 以及微软研究院共同开发,用于实时构建高精度三维模型,是目前效果最好的开源算法框架。
论文:《BundleFusion: Real-time Globally Consistent 3D Reconstruction using Online Surface Re-integration》。
论文地址:https://arxiv.org/pdf/1604.01093.pdf
视频地址:https://www.youtube.com/watch?v=keIirXrRb1k
GitHub 地址:https://github.com/niessner/BundleFusion
本文主要介绍了如何使用官方离线数据以及kinectv2深度相机在开源算法框架 BundleFusion 中实现实时三维建图。

二 操作环境

在我的GTX1060台式机和GTX1065Ti笔记本均运行成功

环境项版本/型号
操作系统Win_x64
开发工具集Visual Studio 2013
计算架构CUDA8.0
深度相机Kinect V2
显卡GTX1060/GTX1065Ti

三 工程环境配置

3.1 装VS2013和CUDA8.0

一定要先安装VS再装CUDA8.0
CUDA8.0地址:https://developer.nvidia.com/cuda-80-ga2-download-archive
其他版本地址:https://developer.nvidia.com/Cuda-Toolkit-archive

3.2 DirectX SDK 安装

下载地址 http://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe

3.3 Kinect SDK 2.0

Kinect SDK 2.0 下载地址

下载并安装,连接上Kinect相机,并可以成功输出图像。
如果只想跑离线数据可以跳过这一步。

四 VS2013代码生成(以离线数据为例)

**此部分为以离线数据集为例,如若使用Kinect v2或其它深度相机直接略过此章直接跳到第五部分**

BundleFusion GitHub 地址:https://github.com/niessner/BundleFusion
从 GitHub 上下载,并解压,得到工程 BundleFusioin-master

4.1 依赖配置

mLib下载地址:https://github.com/niessner/mLib
解压后,替换掉目录 BundleFusioin-master/external/mLib

mLib external 下载地址
https://www.dropbox.com/s/fve3uen5mzonidx/mLibExternal.zip?dl=0
解压后,放到 BundleFusioin-master同级目录
网址访问不了的话可以从这个网盘下
https://pan.baidu.com/s/1CJysQCHl4t7RPfvqliwfew 提取码:0x4t

最终目录结构如下

BundleFusion-master/
	external/
		mLib/
			data/
			src/
			[...]
	FriedLiver/
		[...]
		FriedLiver.sln
		[...]
mLibExternal/
	include/
	libsWindows/
	[...]

4.2 CUDA设置

用 VS2013 打开 BundleFusion-master/FriedLiver/FriedLiver.sln 工程,如果 cuda 版本不是原代码设置的 cuda7.0,就会出现如下错误:
在这里插入图片描述

修改 BundleFusion-master/FriedLiver/FriedLiver.vcxproj 文件,用vscode、notepad++、记事本等打开该文件,并修改如下两行:

#第35行 7.0改为8.0

在这里插入图片描述

#第375行 7.0改为8.0

在这里插入图片描述

4.3 显卡能力设置

右键项目,打开属性页,设置显卡能力等级,选择适合你显卡的 compute 能力,显卡计算能力在这里查询

在这里插入图片描述

4.4 相机类型设置(以office3.sens离线数据为例)

输入数据可以为 Kinect v1,Kinect v2,PrimeSenseSensor,IntelSensor,RealSense,StructureSensor 以及 SensorDataReader(离线数据)
具体可以查看FriedLiver.cpp中 7-103 行的内容

	离线数据下载地址:
	http://graphics.stanford.edu/projects/bundlefusion/

	因为使用的是离线数据,将GlobalAppState.h中深度相机全部注释掉

在这里插入图片描述

4.5 生成 FriedLiver.exe

修改为 Release 版本,然后选择 生成->生成解决方法
编译通过后,如下图:

在这里插入图片描述

	编译可能失败,如果遇到错误可以看最后一章

BundleFusion-master/riedLiver/64/Release中生成可执行文件FriedLiver.exe

4.6 配置文件修改

BundleFusion-master/FriedLiver目录下的zParametersBundlingDefault.txtzParametersDefault.txt拷贝到BundleFusion-master/FriedLiver/X64/Release/

打开 zParametersDefault.txt 配置文件,选择输入类型,这里使用离线数据,修改第 2 行,设置s_sensorIdx = 8 。如果用深度相机(如:Kinect v2实时运行,修改为对应的序列号。

在这里插入图片描述

修改第 49 行,设置s_hashNumSDFBlocks = 100000

在这里插入图片描述
数据集下载 http://graphics.stanford.edu/projects/bundlefusion/
我这里用的是官方实例同款office3.sens
将下载的office3.sens放置到BundleFusion-master/FriedLiver/x64/data

4.7 运行结果

点击FriedLive.exe运行

在这里插入图片描述
运行结束后,BundleFusion-master/FriedLiver/X64/data/office3.sens同目录下生成office3.ply
meshlab打开查看重建效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五 VS2013代码生成(KinectV2实时重建)

**此部分为RGB-D相机实时重建部分,如若使用离线数据请看第四章**

BundleFusion GitHub 地址:https://github.com/niessner/BundleFusion
从 GitHub 上下载,并解压,得到工程 BundleFusioin-master

5.1 依赖配置

mLib下载地址:https://github.com/niessner/mLib
解压后,替换掉目录 BundleFusioin-master/external/mLib

mLib external 下载地址
https://www.dropbox.com/s/fve3uen5mzonidx/mLibExternal.zip?dl=0
解压后,放到 BundleFusioin-master同级目录
网址访问不了的话可以从这个网盘下
https://pan.baidu.com/s/1CJysQCHl4t7RPfvqliwfew 提取码:0x4t

最终目录结构如下

BundleFusion-master/
	external/
		mLib/
			data/
			src/
			[...]
	FriedLiver/
		[...]
		FriedLiver.sln
		[...]
mLibExternal/
	include/
	libsWindows/
	[...]

5.2 CUDA设置

用 VS2013 打开 BundleFusion-master/FriedLiver/FriedLiver.sln 工程,如果 cuda 版本不是原代码设置的 cuda7.0,就会出现如下错误:
在这里插入图片描述

修改 BundleFusion-master/FriedLiver/FriedLiver.vcxproj 文件,用vscode、notepad++、记事本等打开该文件,并修改如下两行:

#第35行 7.0改为8.0

在这里插入图片描述

#第375行 7.0改为8.0

在这里插入图片描述

5.3 显卡能力设置

右键项目,打开属性页,设置显卡能力等级,选择适合你显卡的 compute 能力,显卡计算能力在这里查询

在这里插入图片描述

5.4 相机类型设置(KinectV2实时重建)

输入数据可以为 Kinect v1,Kinect v2,PrimeSenseSensor,IntelSensor,RealSense,StructureSensor 以及 SensorDataReader(离线数据)
具体可以查看FriedLiver.cpp中 7-103 行的内容

打开GlobalAppState.h,KinectV2是第二个,用哪个将哪个取消注释,并安装对应 SDK。

在这里插入图片描述

4.5 生成 FriedLiver.exe

修改为 Release 版本,然后选择 生成->生成解决方法
编译通过后,如下图:

在这里插入图片描述

	编译可能失败,如果遇到错误可以看最后一章

BundleFusion-master/riedLiver/64/Release中生成可执行文件FriedLiver.exe

5.6 配置文件修改

BundleFusion-master/FriedLiver目录下的zParametersBundlingDefault.txtzParametersDefault.txt拷贝到BundleFusion-master/FriedLiver/X64/Release/

打开 zParametersDefault.txt 配置文件,选择输入类型,这里是Kinectv2,修改第 2 行,设置s_sensorIdx = 2

修改第 49 行,设置s_hashNumSDFBlocks = 100000

在这里插入图片描述
在Release文件夹下创建scans文件夹,用来存放扫描后的mesh

在这里插入图片描述

然后直接点击FriedLive.exe 运行,点击Tab键,显示窗口会出现帮助等操作,按2 加载彩色深度图,9 直接把扫描的结果保存到scans 文件中

5.7 运行结果

在这里插入图片描述

六 遇到的错误及解决办法

找不到boost的array_wrapper.hpp

编译时遇到了一个问题,找不到boost的array_wrapper.hpp,
解决办法:用array.hpp替换array_wrapper.hpp

错误error C2065: “SensorDataReader”: 未声明的标识符

在这里插入图片描述

解决办法:出现这个问题是因为没有修改对应的GlobalAppState.h和zParametersDefault.txt中的输入数据类型,或者是两个文件中的输入数据类型不一致,前面有讲过了怎么改,改成你所用的深度相机或者离线数据的接口就可以了

FriedLive.exe实时重建显示界面卡死

DepthSensiong.cpp作如下修改
将987行:

bGotDepth = g_CudaImageManager->process()

替换为

bool bGotDepth;
while (!(bGotDepth = g_CudaImageManager->process()));

FriedLive.exe实时重建显示界面闪退

启动程序时保证相机前方不能有遮挡,最好0.5m内不要有物体

有问题欢迎评论!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BundleFusion复现手册——Win10+VS2013+Cuda8.0+KinectV2实时重建 的相关文章

  • ROS Service 相关API接口与命令行介绍

    目录 二 Service2 1 常用函数接口ros ServiceClient类ros ServiceServer类 2 2 常用命令行工具rosservice相关2 2 1 rosservice call2 2 2 rosservice
  • [Eigen中文文档] 将STL容器与Eigen一起使用

    文档总目录 本文目录 摘要使用对齐分配器std vector 的情况另一种选择 为 Eigen 类型特殊化 std vector 英文原文 Using STL Containers with Eigen 摘要 同样 xff0c 如果使用足够
  • [Eigen中文文档] 按值将Eigen对象传递给函数

    文档总目录 本文目录 按值传递和按引用传递Eigen的处理 英文原文 Passing Eigen objects by value to functions 按值传递和按引用传递 按值传递 xff1a 传入函数的参数是原始数据类型 xff0
  • [Eigen中文文档] 编译器对堆栈对齐做出了错误的假设

    文档总目录 本文目录 局部解决方案全局解决方案 英文原文 Compiler making a wrong assumption on stack alignment 这是 GCC 的错误 xff0c 已在 GCC 4 5 中修复 如果遇到此
  • 基于百问网imx6ull-qemu开发板的linux驱动开发体验

    目录 1 安装kvm2 获取百问网imx6ull qemu开发镜像3 运行百问网imx6ull qemu开发镜像4 获取百问网imx6ull qemu开发板内核源码和工具链5 下载百问网快速入门资料6 设置环境变量7 为了后续编译驱动 xf
  • ubuntu 更新源详细操作步骤

    由于linux系统自带的镜像源都在国外 xff0c 国内用户下载或更新软件会比较慢 xff0c 有时是非常慢 xff0c 所以国内某些机构 xff0c 如大学 xff0c 研究院所 xff0c 就在国内建了linux的镜像源服务器供国内li
  • error LNK2019: 无法解析的外部符号

    错误描述 1 gt 11 ObjectDetection obj error LNK2019 无法解析的外部符号 public cdecl cv VideoCapture VideoCapture void 0VideoCapture 64
  • windows下OpenCV的安装配置部署详细教程

    零 简介 OpenCV的全称是Open Source Computer Vision Library xff0c 是一个跨平台的计算机视觉库 OpenCV是由英特尔公司发起并参与开发 xff0c 以BSD许可证授权发行 xff0c 可以在商
  • linux安装软件报错:有未能满足的依赖关系

    一 问题描述 解决了上一个问题 另外一个进程已经为 dpkg 状态数据库 加锁 又一个问题接踵而来 xff08 真是深得命运宠爱呀 xff09 二 问题分析 很明显 xff0c 这不是重启能解决的问题了 xff0c 继续向命运抗争吧 1 依
  • rviz显示urdf模型:No transform from [base_link] to [base_footprint]

    问题描述 No transform from base link to base footprint 创建URDF模型在rviz中显示时 xff0c 可以显示模型形状 xff0c 但不显示颜色 xff0c 如下图 xff1a 问题分析 rv
  • Error: Error document empty. ERROR: Model Parsing the xml failed

    问题描述 创建urdf模型时想检查一下模型结构 xff0c 结构出现了以下错误 xff1a Error Error document empty at line 72 in build urdfdom UJ3kd6 urdfdom 0 4
  • CMake Error: The current CMakeCache.txt directory is different...

    零 问题描述 开始学ROS时 xff0c 需要编译别人的功能包 xff0c 常常把别人的工作空间拿过来使用 xff0c 但编译时会出现各种错误 xff0c 如下的目录问题 xff1a CMake Error The current CMak
  • Could not find a package configuration file provided by “slam_karto” with any of the following names

    零 问题描述 使用ROS时 xff0c 需要编译别人的功能包 xff0c 但编译时会出现各种错误 xff0c 如下的缺少功能包的问题 xff1a CMake Error at opt ros kinetic share catkin cma
  • AS5047开发简介

    本文有麦粒电子撰写 xff0c 并提供相应产品服务 AS5047是ams公司研发的14bit精度的磁传感器 xff0c 只需要一个磁铁悬于芯片上方就可以检测出相应的角度信息 针对不同的应用场景 xff0c 该芯片还配置了不同的输出接口 xf
  • 舵机PWM转模拟电压(带正反控制)

    舵机PWM转模拟电压 xff08 带正反控制 xff09 本文由 麦粒电子 撰写 xff0c 并提供相应产品服务 叙述 上文讲到讲遥控器接收机信号转换成模拟电压 xff0c 用于驱动直流无刷电机的案例 其中的信号转换器4路转换信号可用于DI
  • mbedtls加密组件使用示例

    目录 1 mbedtls aes组件的使用1 1 AES ECB加解密接口使用1 2 AEC CBC加解密接口使用1 3 AES 使用CFB加解密接口使用1 4 AES 使用OFB加解密接口使用1 4 AES 使用CTR加解密接口使用1 2
  • 2021-10-07

    舵机PWM信号转继电器开关信号 本文由 麦粒电子 撰写 xff0c 并提供相应产品服务 叙述 航模玩家经常需要DIY改装 譬如飞行器做一个投弹的开关 xff0c 船用模型做一个投食机关 再或者弄一些彩灯控制 往往这些功能只需要有一个简单的开
  • 舵机PWM信号转互斥继电器开关信号

    本文由 麦粒电子 撰写 xff0c 并提供相应产品服务 叙述 上次的PWM转继电器开关方案得到大家的不少好评 xff08 博客链接 xff09 xff0c 但是发现有些玩家需要一路PWM同时去控制两路继电器开关通断 xff0c 并且两者是互
  • AMS5601开发 AB角度磁编码器

    AMS5601的ardunio和STM32驱动开发 本文有麦粒电子撰写 xff0c 并提供相应硬件产品服务 前言 目前ams关于磁编码芯片用的比较多的可能是ams5600 xff0c 能够输出pwm信号 xff0c 电压信号以及I2C通信数
  • Spring Security 登录密码验证过程(UsernamePasswordAuthenticationFilter)

    Spring Security主要是一个由一堆Filter组成的过滤器链 每个Filter做自己的事情 今天我跟一下登录的密码认证过程 主要是UsernamePasswordAuthenticationFilter这个类 1 web xml

随机推荐