BundleTrack 编译日记
BundleTrack: 6D Pose Tracking for Novel Objects without Instance or Category-Level 3D Models
记录一下编译BundleTrack过程中遇到的问题。
WSL2 + cuda 环境
考虑到BundleTrack需要使用cuda,而虚拟机上cuda无法使用,故选择用WSL来运行。
本机的显卡是Nvidia Geforce MX110,安装了cuda9.2和cudnn7.4,在主机的anaconda环境中能正常使用。
在WSL2里安装cuda的过程参考此博客,注意检查windows版本,确保高于20150。
下载驱动时发现cuda9.2可用的ubuntu版本最高只有17.10,故另外开了一个WSL2环境,安装了ubuntu16.04。
安装完cuda用pytorch测试,可用。但tensorflow导入失败,出现以下问题:
ImportError: libcublas.so.9.0: cannot open shared object file: No such file
未解决,暂且搁置。
安装依赖
BundleTrack要求cmake版本在3.10及以上,下载cmake3.10,安装。
安装boost,用apt-get安装了。
开始安装pcl,按照要求应该安装pcl 1.9,安装方法参考
pcl需要依赖eigen,flann,vtk,应该先安装这几个库。
下载eigen,下载了3.4.0版本,编译安装。
下载flann,下载了1.9.1版本,编译安装。
下载vtk。
安装openssl,参考。
编译pcl 1.9.1出现问题,根据这篇文章,vtk版本改为8.2.0,编译安装。
报错:
undefined reference to `qh_zero’
安装qhull,解决。
pcl安装失败,报错无法解决,换成1.9.0和最新的1.12.0都无法安装成功,最后1.11.0终于成功。
安装opencv,以及opencv_contrib。
安装yaml-cpp,编译安装了0.6.0版本。
安装blas和lapack,参考。
编译
报错:
nvcc fatal : Unsupported gpu architecture ‘compute_75’
参考文章,修改CMakeLists.txt中
arch=compute_75,code=sm_75
75改为70。
报错:
no matching function for call to ‘passFilterPointCloud’
这下就不是库的问题了,涉及PointCloudRGBNormal::Ptr和boost::shared_ptr转换失败的问题。
尝试修改代码使类型一致,但牵连太多,治标不治本,怀疑pcl版本不同造成。
由文章获得启发,将所有boost::shared_ptr改成std::shared_ptr,boost::make_shared也改成std::make_shared。
成功解决,果然是因为pcl版本问题,似乎从pcl 1.11起用的就是std::shared_ptr而非boost::shared_ptr。
报错:
fatal error: opencv2/cudafeatures2d.hpp: No such file or directory
opencv没有安装带有cuda的,需重新安装。
参考文章
报错:
ERROR: Maxwell, Pascal, Volta, Turing, Ampere, Auto Generations are supported.
cmake参数CUDA_GENERATION=Kepler需改为CUDA_GENERATION=Auto
安装完成后继续编译,报错:
undefined reference to `uuid_unparse_lower@UUID_1.0’
undefined reference to `uuid_generate@UUID_1.0’
参考文章,获得解决。
报错:
error: ‘cv::xfeatures2d::SIFT’ has not been declared
opencv_contrib模块出现问题。
参考文章提供的测试代码,发现同样报错,检查发现明明已经成功安装,合理怀疑存在版本问题。
参考网站,将cv::xfeatures2d::SIFT改为cv::SIFT,问题解决。
报错,与anaconda有关,参考文章,得到解决。
报错:
No rule to make target ‘/usr/local/lib/libyaml-cpp.so’
yaml-cpp库安装问题。
参考文章,修改参数重新编译安装。
终于编译成功!