项目地址:链接
库版本:
opencv:3.4.16
Eigen:3.4.0(低于该版本,cuda无法调用,往往离线版本报错是这个问题)
pangolin:0.8
Cmake: 3.25
Cuda:11.8
下载源码和编译
git clone --recursive https://github.com/XiaoHan-Git/RO-MAP.git
cd RO-MAP
cd dependencies/Multi-Object-NeRF
sh build.sh
cd ../../
sh build.sh
离线版本运行
cd dependencies/Multi-Object-NeRF
# Specify which GPU to use (one or two are recommended)
export CUDA_VISIBLE_DEVICES=0
# Since the visualization is implemented using OpenGL, set the environment variable to make it run on the GPU.
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia ./build/OfflineNeRF ./Core/configs/base.json [path_to_sequence] [Use_GTdepth(0 or 1)]
在线版本运行
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia ./examples/Monocular/mono_tum ./vocabulary/ORBvoc.bin ./dependencies/Multi-Object-NeRF/Core/configs/base.json /home/zhj/zhj/3dgs/code/new_RO-MAP/RO-MAP/data/room/
报错:段错误
原因:lie_lbd默认调用的opencv和系统使用的版本不一致,将其都设置为3.4.16的版本
解决:修改line_lbd的cmakelists.txt,定位到opencv 3.4.16,同时去掉在/usr/local寻找的默认地址
find_package(OpenCV
PATHS /home/zhj/zhj/3dgs/code/RO-MAP/dependencies/Multi-Object-NeRF/opencv/install/
NO_DEFAULT_PATH)
报错:Eigen无法对齐(一个很奇怪的问题,虽然public已经定位为对齐了,但是还是存在问题,不知道又没有大佬能够解释一下)
解决:ObjectMap.cc文件,添加下列代码
#include <Eigen/StdVector>
//修改mHistoryTwc
//std::map<double,Eigen::Matrix4f> mHistoryTwc;
std::map<double, Eigen::Matrix4f, std::less<double>, Eigen::aligned_allocator<std::pair<const double, Eigen::Matrix4f>>> mHistoryTwc;
运行:
下载room数据集:https://drive.google.com/file/d/1QSEgm4hcKkFA62VZaRZa-4epQ67suwdJ/view
保存到data文件下,运行下列代码
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia ./examples/Monocular/mono_tum ./vocabulary/ORBvoc.bin ./dependencies/Multi-Object-NeRF/Core/configs/base.json /home/zhj/zhj/3dgs/code/new_RO-MAP/RO-MAP/data/room/
运行成功