前言
本科毕设做的是一个基于ORB SLAM2的一个动态去除SLAM,感谢@XindaBack,学长帮了我很多忙。整个过程比较依赖github和百度以及CSDN上的文章,因此也想记录下自己做的东西。本人从纯小白学起,因此很多内容也没有理论支持,如有不对请及时指正,避免误导他人。如果有引用不当的问题也请提醒。
实验平台
实验目标:运行原ORB SLAM2系统以及改进后的系统,对同一个实验室真实环境建图,通过对稠密点云地图的分析对比进而评估改进系统的性能
硬件与软件:
- ROS平台(Ubuntu16.04为Kinetic)
- Kinect V2相机
- 相机驱动
安装ROS平台:
参考文章
Ubuntu16.04下安装ROS
安装好后,在你的home文件夹下应该有一个catkin_ws的文件夹,之后的驱动就安装在这个空间。
我在安装的时候,遇到了密钥不对的情况。自行百度应该可以解决。
安装Kinect V2相机驱动:
参考文章
ubuntu16.04安装 kinectV2 驱动,配置ROS下驱动并测试验证
安装好后,应该有的文件夹:home/catkin_ws/src/iai_kinect2
为了观察运行效果,首先需要打开两个终端,一个输入命令:
roslaunch kinect2_bridge kinect2_bridge.launch
另一个终端用于显示:
rosrun kinect2_viewer kinect2_viewer sd cloud
//命令中的sd、hd、qhd是不同的分辨率
保存图片序列:
这一步的目的是实时拍摄并保存带有时间戳文件及名字的RGB图、深度图序列,因为仅仅保存下来的图片并不能直接用于ORB SLAM2系统输入。
参考文章:
ROS下同时存储Kinect 深度和RGB图
按照文章步骤,在以下文件夹新建cpp程序,名字注意是save_rgbd_from_kinect2.cpp:
程序内容就是文章中的代码。注意第45-50行需要更改你的路径。我是在src文件夹下建了个叫dataset的文件夹。所以对应的代码更改为
string topic1_name = "/kinect2/qhd/image_color"; //topic 名称
string topic2_name = "/kinect2/qhd/image_depth_rect";
string filename_rgbdata="/home/arm19c/catkin_ws/dataset/rgbdata.txt";
string filename_depthdata="/home/arm19c/catkin_ws/dataset/depthdata.txt";
string save_imagedata = "/home/arm19c/catkin_ws/dataset/";
最后,在上一个文件夹,也就是kinect_viewer中,CmakeLists.txt文件需要更改:
在最后一行增加内容:
add_executable(save_rgbd_from_kinect2 src/save_rgbd_from_kinect2.cpp)
target_link_libraries(save_rgbd_from_kinect2
${catkin_LIBRARIES}
${OpenCV_LIBRARIES}
${PCL_LIBRARIES}
${kinect2_bridge_LIBRARIES}
)
之后再重新编译一遍整个驱动就好了。
检验效果的话,需要几个步骤:
- 首先在dataset文件夹下新建depth和rgb两个空文件夹,用于保存图像。(每次独立运行后,图片并不会覆盖,因为时间戳并不一致。因此每次运行之前需要确保这两个文件夹是空的)
- 开终端,运行
roslaunch kinect2_bridge kinect2_bridge.launch
- 拷贝associate.py到dataset文件夹
- 新开终端,运行
rosrun kinect2_viewer save_rgbd_from_kinect2 hd cloud
我的所有图像都是hd的。运行后,会发现dataset文件夹内自动生成了depthdata.txt和rgbdata.txt两个文件。生成时间戳文件:
python associate.py rgbdata.txt depthdata.txt > associate.txt
至此,你就得到了和标准TUM数据集类似的图像与对应的时间戳文件,不出意外是可以直接用于ORB SLAM2系统输入的。
相机校正
参考文章:
制作棋盘格纸
标定过程
注意打印的时候要选择原尺寸,不能缩放,否则格子大小会有变化。
注意:整个标定程序是包含在驱动程序中的,完全不需要对任何程序进行任何修改!我看到很多文章说因为qhd、hd等的原因需要修改程序。这里注意一下。
注意事项
我用的相机拍摄的帧率特别低,保存图像耗费时间比较长,所以我得移动特别慢。这还不是最重要的。由于存储图像慢,深度图和RGB图的时间戳之间差了有0.3秒?原来比如RGB图和深度图各600张,直接生成时间戳可能只有30几张匹配,因此需要修改对应的associate.py文件:
parser.add_argument('--max_difference', help='maximally allowed time difference for matching entries (default: 0.02)',default=0.3)
调整一下匹配的时间阈值就可以了
最后给一个在百度AI studio安装pytorch和tensorflow的教程:
使用百度AI studio创建pytorch tensorflow gpu环境 最好先看视频