ubuntu14+ORB_SLAM2+ROS indigo实现摄像头实时定位

前几天一直在配置ORB_SLAM2的环境,踩过无数的坑,看了无数的教程,今天就来总结一下。我一开始用的ubuntu18.04发现实在太坑了,好多问题解决不了,果断换了一个14,终于成功了。流下的感动的泪水~~呜呜呜。有些坑不记得了,就没写,等我回想起来再补充哈

1.安装搭建ROS indogo环境

安装ROS源列表

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 --recv-key0xB01FA116  

安装软件(第一个命令用于更新指令,第二个用于安装ROS包,这里选择Desktop_full版本)

sudo apt-get update
sudo apt-get install ros-indigo-desktop-full

初始化依赖

apt-cache search ros-indigo  
sudo rosdep init  
rosdep update

 【坑】rosdep init报错很大程度都是网络问题

解决方案:

1.先在浏览器里复制粘贴报错信息里面的地址(https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list),如果访问不了则为网络问题,解决方法如下:https://www.jianshu.com/p/0bdafeee84e8

2.如果不是网络问题,参考https://blog.csdn.net/qq_41058594/article/details/102970901

3.如果运行rosdep update时显示timeout,多运行几次就可以了

环境安装

gedit ~/.bashrc
source source /opt/ros/indigo/setup.bash

 

ubuntu14+ORB_SLAM2+ROS indigo实现摄像头实时定位_第1张图片

到此,ROS indigo安装配置完成,下面可以进行测试。开启一个新的terminal,输入

roscore

再打开一个新的terminal,输入

rosrun turtlesim turtlesim_node

就会出现一个蓝色的界面,上面有只小乌龟(每次打开小乌龟的颜色都不一样)

ubuntu14+ORB_SLAM2+ROS indigo实现摄像头实时定位_第2张图片

再打开一个terminal,输入如下命令(前提是前面打开的roscore和turtiesim_node的终端不能关闭)

rosrun turtlesim turtle_teleop_key

 终端就会出现如下命令

Reading from keyboard
---------------------------
Use arrow keys to move the turtle.

然后在终端界面按上下左右方向键,就可以移动小乌龟,白色为乌龟的移动路线。出现如下界面,表示ROS indigo安装完成。
 

ubuntu14+ORB_SLAM2+ROS indigo实现摄像头实时定位_第3张图片

2.安装usb_cam

创建工作空间,在home目录下新建一个catkin_ws文件夹,命令如下

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(roscore那个终端不要关闭),输入

roslaunch usb_cam usb_cam-test.launch 

可以打开摄像头。这地方我遇到过一个坑。

(1)首先是设备号的问题,我用的虚拟机连接usb摄像头,设备号是video0刚好不需要修改,可以通过

ls /dev/video*

来查询设备号。如果是video0则不需要修改,如果是video1需要在launch文件中修改一下,命令如下

cd ~/catkin_ws/src/usb_cam/launch
gedit usb_cam-test.launch

ubuntu14+ORB_SLAM2+ROS indigo实现摄像头实时定位_第4张图片

(2)出现如下错误信息,我查了好多资料,终于试对了一个方法,原文链接:https://zhuanlan.zhihu.com/p/94971196

[*****.launch] is neither a launch file in package [******] nor is [******] a launch file name
The traceback for the exception was written to the log file

我这里也写下解决方案,命令如下(其中~/catkin_ws/src是我的路径,要根据自己的路径进行相应的修改)

cd ~/catkin_ws/
catkin_make
source devel/setup.bash
echo $ROS_PACKAGE_PATH ~/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks
export | grep ROS

如果没有出现上述错误,那就可以正常打开摄像头,并实时显示了。

3.安装Pangolin

如果是新环境,要先安装一下g++和git

sudo apt-get install g++
sudo apt-get install git
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 

4.安装Eigen3

sudo apt-get install libeigen3-dev

5.安装opencv2.4

从官网下载opencv2.4.11,然后解压到一个你找得到的位置(最后是home下了)

//安装依赖
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config

进入到opencv安装的目录下,我放在home下,所以cd ~/opencv-2.4.11,然后开始安装

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install

 【坑】安装opencv的时候有个错误

错误内容:/home/jim/beantechs/VSLAM/opencv-2.4.11/modules/contrib/src/rgbdodometry.cpp:65:47: fatal error: unsupported/Eigen/MatrixFunctions: No such file or directory
 #  include

解决方法:找到Eigen3的目录,搜索MatrixFunctions,拷贝整个unsupported目录到/home/jim/beantechs/VSLAM/opencv-2.4.11/modules/contrib/src/目录下

或是将对应的文件夹复制到/usr/include/下,举例Eigen安装到了/usr/include/eigen3/,则执行:

$ cd /usr/include/eigen3/
$ sudo cp -r unsupported/ ..
$ sudo cp -r Eigen/ ..

6.下载安装ORB_SLAM2

下载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

我在实际下载中发现libcholmod-dev(最后一个依赖)有问题,一直下载不下来,找了各种方法发现并不能解决,然后就没管他,继续往下安装了。

安装ORB_SLAM2的图优化工具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_mono.cc文件中是

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

要将引号中的**camera**/image_raw修改成你的摄像头打开后的窗口名字,大部分应该都/usb_camera/image_raw,切记不要加**,不然会报错的,我就是这里折腾了好久总是不对。

ubuntu14+ORB_SLAM2+ROS indigo实现摄像头实时定位_第5张图片

编译ORB_SLAM2

cd catkin_ws/src/ORB_SLAM2
mkdir build 
cd build 
cmake ..
make 

完成上述内容基本已经配置完成了。下面就开始测试啦~

7.单目摄像头实时检测

打开一个新的terminal,输入

roscore

重新打开一个terminal,输入打开摄像头指令

roslaunch usb_cam usb_cam-test.launch

打开第三个terminal,实现ORB_SLAM

cd ~/catkin_ws/src/ORB_SLAM2
rosrun ORB_SLAM2 Mono ./Vocabulary/ORBvoc.txt ./Examples/ROS/ORB_SLAM2/Asus.yaml

【坑】

(1)ORBvoc.txt文件没有解压,需要自己手动解压一下,路径是~/catkin_ws/src/ORB_SLAM2/Vocabulary

(2)运行时出现如下错误

terminate called after throwing an instance of 'std::runtime_error'
what():  Pangolin X11: Unable to retrieve framebuffer options

解决方法是注释掉display_x11.cc中的两句话

cd Pangolin\src\display\device
sudo gedit display_x11.cc

ubuntu14+ORB_SLAM2+ROS indigo实现摄像头实时定位_第6张图片

有人可能没有这两句话,那就把上面那一句的True:False改成False:False。我是注释掉之后发现还是报错,就把上面也改了,发现就没错误了。然后就成功运行了~

ubuntu14+ORB_SLAM2+ROS indigo实现摄像头实时定位_第7张图片

 

你可能感兴趣的:(ubuntu14+ORB_SLAM2+ROS indigo实现摄像头实时定位)