Ubuntu 16.04 ORB_SLAM2+ROS+usb_cam+AR

最近开始学习ORB_SLAM2,想试试它的AR功能。尝试的过程中遇到了一些问题,总结一下:

搭建ORB_SLAM2

ORB_SLAM2的搭建并不难,网上有很多教程,这个就不错点击打开链接

(我建议用opencv3.2,因为之前我装的3.0,没有成功,后来删了3.0换了3.2,就成功了)

ORB_SLAM2的源码git_hub上有:点击打开链接

ORB_SLAM2有四个Examples,跑AR的话需要安装ROS,其他的例子,下载数据集就可以跑了。

ROS安装

ROS的安装稍微麻烦一点,它有许多版本,具体要看你用的ubuntu版本了,我用的ubuntu 16.04,所以我用的是ROS Kinetic。如果是ubuntu 14.04的话,用ROS Indigo就行了。网上也有很多教程,但是你自己在操作的过程中可能会遇到一些问题,可能是这些博客没有指出来的。所以我建议如果是像我这种刚接触Linux或者ROS的小白,最好先了解一下Linux和ROS的基础知识,像什么shell、bashrc、source、export这些,还有ROS的topic、node什么的。虽然可能不会用它们进行多深入的工作,但是稍微了解一下这些概念,看起教程来会容易很多。你就会知道为什么要这么做,就算哪出错了,你也可以自己搞定了~

具体安装过程我就不啰嗦了,网上有写得很好的。我就把我遇到的一些问题,或者值得注意的地方写一写。

我主要参考的这篇博文:点击打开链接(注意,kinetic的k应该是小写的,文中貌似不太对)

我装的是ros-kinetic-desktop-full,用了15分钟左右吧。


有关环境配置

在安装ROS期间,你会看到提示说需要source 多个setup.bash文件中的某一个,或者甚至提示添加这条'source’命令到你的启动脚本里面。

这些操作是必须的,因为ROS是依赖于某种组合空间的概念,而这种概念就是通过配置脚本环境来实现的。

这可以让针对不同版本或者不同软件包集的开发更加容易。如果你在查找和使用ROS软件包方面遇到了问题,请确保你已经正确配置了脚本环境。

一个检查的好方法是确保你已经设置了像ROS_ROOT和ROS_PACKAGE_PATH这样的环境变量,可以通过以下命令查看:

$export | grep ROS

如果发现没有配置,那这个时候你就需要’source’某些’setup.bash’文件了。

在终端下输入:

gedit ~/.bashrc

在最后面添加相应的setup.bash文件,这样就不用每次开启一个终端又需要重新配置。

修改完之后记得在终端 source ~/.bashrc 一下,让刚刚的修改立即生效。


有关ROS工作空间

一般我们都会创建一个ROS的工作空间:catkin_ws(把它放在home下就行了)

创建完之后记得把catkin_ws的setup.sh添加到.bashrc后面。

一般创建ROS的package都是在catkin_ws/src下面,比如后面要讲的usb_cam,就把它直接安装到catkin_ws/src就行了。

ORB_SLAM2也可以安装到catkin_ws/src下,这样你就不用把ORB_SLAM2添加到ROS的环境变量中去了。

当然,你也可以把ORB_SLAM2安装到其他地方,不过你要记得把ORB_SLAM2的setup.sh路径添加到.bashrc后面哦。


有关ORB_SLAM AR

我主要参考了这两篇博客点击打开链接点击打开链接

1. 安装usb_cam驱动

usb_cam的驱动直接安装在catkin_ws/src下面就行了,因为之前已经把catkin_ws的setup.sh添加到.bashrc中了。如果你安装在其他地方,你还得把usb_cam的setup.sh添加到.bashrc中。

usb_cam的下载地址:点击打开链接,在catkin_ws中catkin_make一下就好了。

安装完之后就可以测试一下,有两种方法

第一种:

a. 在一个终端下启动ROS内核:roscore

b. 在第二个终端输入:rosrun usb_cam usb_cam_node (这个时候是看不到画面的)

c. 在第三个终端输入:rosrun image_view image_view image:=/usb_cam/image_raw

(前提是你安装好了image-view:sudo apt-get install ros-kinetic-image-view)

第二种:

直接在一个终端下输入:roslaunch usb_cam usb_cam-test.launch

2. 编译ORB_SLAM2中的ROS

一个终端下输入:

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/wnw/Projects/ORB_SLAM2-master/Examples/ROS

(根据你自己的路径修改

或者你可以直接写在.bashrc最后面,记得要source一下哦~

然后在这个终端下继续编译ORB_SLAM2 ROS

mkdir build

cd build

cmake .. -DROS_BUILD_TYPE=Release

make -j

编译完之后,记得在.bashrc后面加入:

source /home/wnw/Projects/ORB_SLAM2-master/Examples/ROS/ORB_SLAM2/build/devel/setup.bash

3. 运行ROS中的Demo


直接跑MonoAR吧~

开始之前还有个地方需要改:


把ros_mono_ar.cc中的

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

改为:

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

(看到没有,路径变了哟。因为我们的图片都是从/usb_cam/image_raw发送过来的)

然后再把Example编译一下~

这下可以开始了:

a. 在一个终端输入:

roscore(回车)

b. 在第二个终端输入:

roslaunch usb_cam usb_cam-test.launch(回车)

c. 在第三个终端输入:

rosrun ORB_SLAM2 MonoAR /home/wnw/Projects/ORB_SLAM2-master/Vocabulary/ORBvoc.txt /home/wnw/Projects/ORB_SLAM2-master/Examples/Monocular/TUM1.yaml(回车)

(路径按照自己的写哦,TUM1.yaml是参数设置文件,主要是相机的内参,这个得自己标定。如果懒得标定,直接用TUM1.yaml吧,凑合着用吧)



跑出来的效果是这样的:

相关文章

ubuntu退出redis的示例:指定配置文件方式启动源码redis:roo...
ubuntu中mysql改密码忘了的解决方法:1.在终端中切换到root权...
ubuntu安装mysql失败的解决方法原因:可能是原有的MySQL还有...
使用centos和ubuntu建站的区别有以下几点1.CentOS是Linux发行...
ubuntu图形界面和字符界面切换的方法:可以通过快捷键CTRL+A...
ubuntu中重启mysql失败的解决方法1.首先,在ubuntu命令行中,...