orbslam2单目(ORB_SLAM2+kinect稠密建图实战项目总结)
学完ORB_SLAM2源码后 ,想用一个小项目巩固所学知识 。思虑良久~决定在ORB_SLAM2源码的基础上添加稠密建图的线程 ,并用kinect2相机实现自己卧室的三维重建 。
话不多说 ,先上效果图 。
带闭环的稠密地图重建
不带闭环的稠密地图重建
在完成这个小项目的过程中 ,每当遇到编译和运行环节 ,屏幕上大概率会出现红红的warnings和errors 。一开始还能稳住心态 ,遇到问题就google ,但后来发现很多博客或github上的issue并不会把修改code的原理讲清楚且有些答案本身就有错误 ,对于新手小白不太友好 。如果不求甚解 ,盲目地相信博客 ,还可能造成不可逆转的后果 ,比如像我一样 。 。 。误修改权限导致ubuntu系统崩溃 ,痛心疾首!恨不得当场摔鼠标键盘!
为此我记录下自己在ORB_SLAM2+kinect2稠密建图实战过程中踩过的坑,注明那些容易犯错的地方 ,警醒自己一定要真正把问题搞明白!重要的事情说三遍 ,真正把问题搞明白!真正把问题搞明白!真正把问题搞明白!
那么首先,我们让代码跑起来~
高翔博士开源了不带闭环的稠密建图 ,地址如下:
https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map
在此基础上大佬们开源了另一个带闭环的稠密建图 ,地址如下:https://github.com/tiantiandabaojian/ORB-SLAM2_RGBD_DENSE_MAP
我们将以带闭环的稠密建图为基础 ,搭建环境并对其中的部分bug做修改 ,方便大家快速跑出效果图 。
具体的安装流程参照以下博客即可 ,这里我主要记录一下可能出现的问题 ,分析原因并给出解决办法(在本机上已实验证明可行)
ORB SLAM 2 + 构建点云地图 复现 - 简书
使用ORBSLAM2进行kineticV2稠密建图 ,实时转octomap建图以及导航 - 古月居
问题记录:
1. 安装Kinect开源驱动iai_kinect2和libfreenect2(为什么这里要装两个驱动?)
iai_kinect2是ros的驱动 ,而libfreenect2是kinect2的驱动 ,iai_kinect2可以建立在libfreenect上也可以在OpenNI上 。这里如果出现编译错误 ,将error复制粘贴到搜索框一般都比较容易解决 。
2. 使用iai_kinect2里面的kinect2_calibration进行标定时生成的yaml文件不全
经过实验 ,发现标定颜色/深度/同步的照片张数至少要50张才能正常生成yaml文件 。
3. 编译ORB-SLAM2_RGBD_DENSE_MAP-master时出现很多与eigen3有关的warnings ,且忽视warnings运行后出现段错误。
ubuntu18下对应的ros版本为melodic,默认是3.3以上 ,而运行ORB-SLAM2_RGBD_DENSE_MAP-master最高是3.2的版本 。
查看eigen3的版本
pkg-config--modversion eigen3
删除和安装eigen可以参考以下链接:ubuntu16.04卸载 、安装eigen_TB81266的博客-CSDN博客_ubuntu卸载eigen3
4. 编译ORB-SLAM2_RGBD_DENSE_MAP-master时缺失ORBvoc.txt.tar.gz ,并有与pcl1.7相关的warnings
原始的ORB-SLAM2_RGBD_DENSE_MAP-master中的Vocabulary中没有ORBvoc.txt.tar.gz,需要从其他地方拷贝过来 ,与pcl1.7有关的warnings可以忽略 。需要注意的是当一次编译没通过时最好删除所有产生的build文件 ,以免影响第二次编译。
5. 成功编译了ORB-SLAM2_RGBD_DENSE_MAP-master ,但最后运行时不显示点云地图
查阅了大量资料 ,都说是pcl库的问题 ,实际上不是 ,将pointcloudmapping.h 文件中bool loopbusy;改为bool loopbusy=false即可 。
参考博客:ORBSLAM2_稠密地图+回环__YAO阿瑶的博客-CSDN博客_orbslam 稠密地图
6. 运行ORB-SLAM2+kinect后可以显示画面 ,但地图画面很窄 ,看上去有些奇怪
kinect2分辨率设置不合理 。Kinect2的topic一共有三种 ,对应不同的分辨率 。其中hd是1920的 ,qhd是四分之一的960的 ,而sd是最小的 。选择qhd比较合适 ,对应的Camera.width: 960; Camera.height: 540
视觉SLAM实战(二):ORB-SLAM2 with Kinect2 - 半闲居士 - 博客园
7. 运行ORB-SLAM2+kinect时地图扭曲,
内参和畸变参数设置不对 ,需要根据标定结果进行设置 ,值得注意的是在yaml文件中设置的内参是相机标定结果的一半 。
ORB-SLAM2:(三)仿真实现&kinect2在线定位建图_$南山种豆$的博客-CSDN博客
补充:
build.sh和build_ros.sh是脚本文件,运行脚本文件可以使编译过程自动运行 ,但要注意运行前需要chmod +x build_ros.sh ,提高权限 ,否则可能找不到该脚本文件 。
由于个人设置了两个ros工作空间 ,本以为不同工作空间互不影响 ,但实际上如果出现了相同的节点名 ,会产生很多预料之外的后果 。例如 ,本想运行带稠密建图的节点结果ros一直在执行不带稠密建图的节点 ,找原因浪费了大量的时间 。 。 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!