ORB_SLAM2 采用Astra相机获取数据
一、配置相机
1.内参文件配置
在进行案例实践前,需要先配置相机的内参文件。每款相机都需要通过相机标定获取其内参,此处以我手头的Astra相机为例进行配置。
在ORB_SLAM2功能包中自带了一个Asus.yaml内参文件,我们需要对其进行复制并修改。
# 进入功能包更目录
roscd ORB_SLAM2/
# 复制文件
cp Asus.yaml Astra.yaml
# 修改配置文件
vi Astra.yaml
此处以我的Astra相机为例,修改其内参如下
Camera.fx: 577.54679
Camera.fy: 578.63325
Camera.cx: 310.24326
Camera.cy: 253.65539
2.launch文件配置
由于ORB_SLAM2要求:若使用单目相机进行开发,首先应当启动相机的节点并且确保话题 /camera/image_raw 下存在内容,而我所使用的Astra相机默认重映射该节点至 /camera/rgb/image_raw ,所以需要进行修改launch文件。
# 进入launch文件目录
roscd astra_camera/launch
# 复制并修改launch文件
cp astrapro.launch astrapro_rgb.launch
gedit astrapro_rgb.launch
打开文件后需要将第88行重映射注释掉并保存文件。
配置完成后即可进行启动节点。
二、单目相机
1.相机节点
首先根据规定,打开相机节点并查看是否话题内容是否存在。
# 启动相机节点
roslaunch astra_camera astrapro.launch
# rqt工具查看话题
rqt_image_view
订阅 /camera/image_raw查看是否存在内容。
2.单目相机建图
单目相机ROS节点启动的命令如下:
# 进入ORB_SLAM2源码根目录下
roscd ORB_SLAM2
cd ../../..
# 运行节点
rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM2/Astra.yaml
其中运行节点的命令格式如下:
# 功能包 节点 磁带文件 相机内参文件
rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM2/Astra.yaml
此处运行单目相机进行建图,所选节点即为Mono,磁带文件默认保存在ORB_SLAM2源码根目录下的Vocabulary文件夹内。单目建图的运行效果如下,此时通过移动摄像头,左侧Map Viewer会实时进行建图,而右侧摄像头画面中绿色的一个个点即代表特征点所在:
此时,需要缓慢的移动相机,扫视周围的环境。在左侧Map Viewer中会将目前摄像头可以看到的点标记为红色,而之前看到但此时并未出现在摄像头内的点标记为黑色。
后期如果通过小车等方式进行建图扫视某环境一周时,可以达到闭环检测的要求。此时即可在Map Viewer左侧勾选打开Localization Mode选项(定位模式)即不建图仅定位。
在定位模式下,相机将根据之前所建点云图进行实时定位。
3.单目AR相机建图
单目AR相机ROS节点的启动大致相同,只需要将节点修改为MonoAR
# 进入ORB_SLAM2源码根目录下
roscd ORB_SLAM2
cd ../../..
# 运行节点
rosrun ORB_SLAM2 MonoAR Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM2/Astra.yaml
打开节点后,实现需要移动摄像头使得图像上红色文字SLAM NOT INTIALIZED变为绿色SLAM ON,此时相机会通过特征点寻找能够用于AR的平面。
点击左侧Draw Points可以查看当前特征点(图上绿色小点),同时可以点击Insert Cube添加方块并通过下方滑块调节方块大小以及网格大小、间距等内容。
三、深度相机
1.相机节点
由于ORB_SLAM2官方指定在使用深度相机进行建图时,相机的彩色信息应当发布在 /camera/rgb/image_raw ,而深度信息应当发布在 /camera/depth_registered/image_raw内,所以与单目相机存在不同。此处启动的相机节点应为astrapro.launch
# 启动相机节点
roslaunch astra_camera astrapro.launch
# rqt工具查看图像(可不打开)
rqt_image_view
此处打开rqt工具,确定彩色和深度信息的订阅。
2.深度相机建图
相比单目相机,深度相机可以快速依据现有建图找到自己的位置。
# 进入ORB_SLAM2源码根目录下
roscd ORB_SLAM2
cd ../../..
# 运行节点
rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM2/Astra.yaml