官网:https://arxiv.org/abs/1806.00557
项目地址:https://github.com/shichaoy/cube_slam
论文地址:https://arxiv.org/pdf/1806.00557.pdf
先跑跑项目,论文回头看。
项目安装血泪史
编译环境:Ubuntu-18.04.1 ROS-melodic-1.14.3 g++ -7.4.0
std::vector<>:添加头文件<#include<vector>
,虽然不是很明白std::vector明明是标准类里的为什么还要加这个头文件,貌似是因为重写了模板类。
usleep():添加头文件#include<unistd.h>
std::iota(): 1、CMakeLists中添加在C++11下编译
2、添加#include<numeric>
!!!最大的坑
C++的第三方库和Python、Java等不一样,后者只需安装一次,然后用的时候导入即可,C++中因为涉及到链接的问题(要链接两次)的问题,所以要指明具体路径,对于Eigen3、OpenCV这种在/usr/include路径下的没问题,但对有些库注意要重新编译!!!。我在编译前,已经安装过g2o等库,所以就直接编译了,但过程中发现问题。
两个解决方法:一、修改CMakeLists文件,把当前工程中target_link更改到之前自己编译的位置(貌似不光需要更改target_link,include部分也需要,具体并未尝试)
二、把down下来的工程中DBoW2和g2o库重新编译,然后再catkin_make整个工程。
这个只是警告,貌似是因为Eigen版本比较高,不用理会
EIGEN_DEPRECATED const unsigned int AlignedBit = 0x80;
另,编译的时候强烈建议-jx -lx, 我没加限制,最多的时候内存被这个占用了10G…
另2,第一次编译成功后rosrun时提示exec找不到,但rospack find是找的到package的…莫名的错误,我把build和devel删除重新编译就解决了…
Example结果演示:
基于单目相机的3D物体重构
采用的数据:
数据是单目相机拍摄的图片:
重构的结果演示:
从重构的结果看是采用立方体对物体进行描述(另一种主流方法是用椭球体,但基于RGBD相机,立方体可以用单目做)。