Ubuntu下使用单目相机运行ORB SLAM2

来源:互联网 发布:威客网络兼职可靠吗 编辑:程序博客网 时间:2024/06/11 21:31

环境:Ubuntu16.04+ROS Kinetic+USB单目摄像头
虽然ORB SLAM2的官方说明中表示没有ROS也可以编译运行,但要实时的跑ORB SLAM2还是需要ROS平台的,所以之前没有把ORB SLAM2安装在ROS工作区内的应该是要删除重装了…

参考博客

1.ROS Kinetic安装:http://www.cnblogs.com/liu-fa/p/5779206.html
2.ROS中使用USB摄像头跑ORB SLAM2:http://blog.csdn.net/goding_learning/article/details/52950993
3.ORB SLAM2 ROS实例 单目摄像头:http://blog.csdn.net/xmy306538517/article/details/59501718

ROS Kinetic安装

由于我使用的Ubuntu版本为16.04,所以选择安装ROS Kinetic。
1.软件中心配置
一般都是配置好的,需要保证”restricted”, “universe,” 和 “multiverse.”前打勾。
2.添加源并设置密钥

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116

3.安装ROS

sudo apt-get updatesudo apt-get install ros-kinetic-desktop-fullapt-cache search ros-kinetic

4.初始化ROS和环境变量

sudo rosdep initrosdep updateecho "source /opt/ros/kinetic/setup.bash" >> ~/.bashrcsource ~/.bashrc

5.安装常用插件

sudo apt-get install python-rosinstall

之后注意在安装其他ROS插件时记得把ros-×××中的×××替换成kinetic,如下:

sudo apt-get install ros-kinetic-...

6.测试ROS

roscore

启动ROS环境,如果显示出started core service [/rosout] ,即为安装成功,如下图:

这里写图片描述

创建ROS工作区

mkdir -p ~/catkin_ws/srccd ~/catkin_ws/srccd ~/catkin_ws/catkin_makesource devel/setup.bash

usb_cam安装

注意要安装在工作区的src文件夹下。
1.下载usb_cam源码并配置环境

cd catkin_ws/srcgit clone https://github.com/bosch-ros-pkg/usb_cam.gitcd ..catkin_makesource ~/catkin-ws/devel/setup.bash

2.编译usb_cam

cd usb_cammkdir buildcd buildcmake ..make

3.测试usb摄像头
(1)打开新的终端,运行roscore

roscore

(2)回到原终端,先进入launch文件夹,再运行usb_cam中的launch文件,如果可以成功运行看到图像则安装成功。

cd launchroslaunch usb_cam usb_cam-test.launch

这里写图片描述
该usb_cam-test.launch是usb_cam中自带的launch文件,打开之后内容如下:

<launch>  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >    <param name="video_device" value="/dev/video2" />    <param name="image_width" value="640" />    <param name="image_height" value="480" />    <param name="pixel_format" value="yuyv" />    <param name="camera_frame_id" value="usb_cam" />    <param name="io_method" value="mmap"/>  </node>  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">    <remap from="image" to="/usb_cam/image_raw"/>    <param name="autosize" value="true" />  </node></launch>

其中video_device的默认设备为video0,可以根据情况更改,我电脑上的usb摄像头为video2,所以launch文件中被我更改成了video2。
如果不了解自己的usb摄像头为video几,可以运行如下命令查看:

ls /dev/video*

ORB SLAM2安装

同样安装在工作区下的src文件夹中。
由于之前已经装过一次ORB SLAM2,所以需要的库都已经配置好了,这里直接下载编译。

cd catkin_ws/srcgit clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2cd ORB_SLAM2chmod +x build.sh./build.sh

进入catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src,将ros_mono.cc 中的这行代码改成如下形式:

ros::Subscriber sub = nodeHandler.subscribe("/usb_cam/image_raw", 1,  &ImageGrabber::GrabImage,&igb);

其中的”/usb_cam/image_raw”为usb_cam打开launch文件后显示画面的窗口标题,如果不确定可以重新查看一下再更改。
返回catkin_ws/src/ORB_SLAM

cd ~cd catkin_ws/src/ORB_SLAM2chmod +x build_ros.sh./build_ros.sh

如果后两句命令运行出错,可能是路径问题,需要把包含Examples/ROS/ORB_SLAM2的路径添加到ROS_PACKAGE_PATH的环境中。

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS

运行ORB SLAM2

1.打开第一个终端,运行roscore

roscore

2.打开第二个终端,运行usb_cam

cd catkin_ws/src/usb_cam/launchroslaunch usb_cam usb_cam-test.launch

3.打开第三个终端运行ORB SLAM2

官方给的命令如下:

rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE

其中包含两个参数:
PATH_TO_VOCABULARY:视觉词典,一般可以直接使用catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt
PATH_TO_SETTINGS_FILE:摄像头内参,可以使用路径catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml,但需要将Asus.yaml中的参数改成自己使用摄像头标定后的参数,摄像头标定可以使用opencv或matlab工具箱。

成功运行的结果如图:

这里写图片描述