前几天一直在配置ORB_SLAM2的环境,踩过无数的坑,看了无数的教程,今天就来总结一下。我一开始用的ubuntu18.04发现实在太坑了,好多问题解决不了,果断换了一个14,终于成功了。流下的感动的泪水~~呜呜呜。有些坑不记得了,就没写,等我回想起来再补充哈
安装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
解决方案:
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
到此,ROS indigo安装配置完成,下面可以进行测试。开启一个新的terminal,输入
roscore
再打开一个新的terminal,输入
rosrun turtlesim turtlesim_node
就会出现一个蓝色的界面,上面有只小乌龟(每次打开小乌龟的颜色都不一样)
再打开一个terminal,输入如下命令(前提是前面打开的roscore和turtiesim_node的终端不能关闭)
rosrun turtlesim turtle_teleop_key
终端就会出现如下命令
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.
然后在终端界面按上下左右方向键,就可以移动小乌龟,白色为乌龟的移动路线。出现如下界面,表示ROS indigo安装完成。
创建工作空间,在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
(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
如果没有出现上述错误,那就可以正常打开摄像头,并实时显示了。
如果是新环境,要先安装一下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
sudo apt-get install libeigen3-dev
从官网下载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
错误内容:/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/ ..
下载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,切记不要加**,不然会报错的,我就是这里折腾了好久总是不对。
编译ORB_SLAM2
cd catkin_ws/src/ORB_SLAM2
mkdir build
cd build
cmake ..
make
完成上述内容基本已经配置完成了。下面就开始测试啦~
打开一个新的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
有人可能没有这两句话,那就把上面那一句的True:False改成False:False。我是注释掉之后发现还是报错,就把上面也改了,发现就没错误了。然后就成功运行了~