上一篇博客主要讲述如何安装ROS indigo,这篇主要集中在安装usb_cam以及如何在ORB_SLAM2上实现实时定位。
安装usb_cam
创建一个工作空间,make一下
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
下面是安装usb_cam
cd catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam usb_cam
cd usb_cam
mkdir build
cd build
cmake ..
make
到这个步骤已经安装好usb_cam了,下面可以测试下是否安装成功。
打开一个新的terminal
roscore
重新打开一个新的terminal,输入下面指令打开摄像头
roslaunch usb_cam usb_cam-test.launch
在这个地方有几个坑,我应该都踩过,还是实践出真知我最终找到了解决方案。
(1)按照网上的教程,我在笔记本电脑上插入外置摄像头,然后再查看设备,我新插的设备应该是video1,但是我使用如下命名查看我的设备号,却是video0。输入如下命令查询设备号:
ls /dev/video*
输入上述指令之后就会发现你的摄像头设备对应的设备号,如果不是video0,需要在launch文件中修改,将launch文件中的设备号换成自己查询到的设备号。
cd ~/catkin_ws/src/usb_cam/launch
gedit usb_cam-test.launch
sudo apt-get install libglew-dev
sudo apt-get install cmake
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-de
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake -DCPP11_NO_BOOST=1 ..
make
安装Eigen3
sudo apt-get install libeigen3-dev
下载orb_slam2
cd catkin_ws/src
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
sudo apt-get install libqt4-dev qt4-qmake libqglviewer-dev libsuitesparse-dev libcxsparse3.1.2
libcholmod-dev
(注:最后一个依赖项需要使用table键来填充名称)
安装orb_slam提供的图优化工具g2o
cd catkin_ws/src/ORB_SLAM2/Thirdparty/g2o/
mkdir build
cd build
cmake ..
make
编译DBoW2
cd catkin_ws/src/ORB_SLAM2/Thirdparty/DBoW2
mkdir build
cd build
cmake ..
make
修改ros_mono.cc文件
cd catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src
gedit ros_mono.cc
将ros::Subscriber sub = nodeHandler.subscribe("**camera**/image_raw", 1, &ImageGrabber::GrabImage,&igb);换成ros::Subscriber sub = nodeHandler.subscribe("**/usb_cam**/image_raw", 1, &ImageGrabber::GrabImage,&igb);
编译orb_slam2
cd catkin_ws/src/ORB_SLAM2
mkdir build
cd build
cmake ..
make
在之前的步骤中需要标定摄像头,标定的话无论使用Matlab还是Opencv,网上很容易找到各种教程。但是由于种种原因,我暂时没有标定摄像头,也就是我使用的是ORB_SLAM2中设置的摄像头参数。如果标定好摄像头,可以打开Examples/ROS/ORB_SLAM2下的Asus.yaml文件,将文件中的摄像头参数替换成自己的。接下来就是激动人心的时刻了!
打开一个新terminal
roscore
然后开第二个terminal,输入如下指令打开摄像头
roslaunch usb_cam usb_cam-test.launch
打开第三个terminal,输入如下指令实现你的ROB_SLAM
cd ~/catkin_ws/src/ORB_SLAM2
rosrun ORB_SLAM2 Mono ./Vocabulary/ORBvoc.txt ./Examples/ROS/ORB_SLAM2/Asus.yaml
在这个过程中我还遇到两个问题,一个是ORBvoc.txt文件,可能需要自己解压一下,才可以访问到;第二个问题是,在输入如下指令实现ORB_SLAM2的时候,始终无法运行,索性修改了路径,如上面的指令。
rosrun ORB_SLAM2 Mono /home/albert/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/albert/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml
(注:albert是我的电脑名,这种方法我试了很多次就是不行,最终还是屈服了,先cd到一个目录再运行吧)