Ubuntu16.04运行ORB_SLAM2流程及出现问题总结

一 配置ORB_SLAM2过程

先在官网上下载代码:https://github.com/raulmur/ORB_SLAM2
看readme 找個教程:https://blog.csdn.net/learning_tortosie/article/details/79881165

1、前面的依赖我都安装过,从安裝Pangolin开始:
a. 安装依赖项

 sudo apt-get install libglew-dev libpython2.7-dev

b. 从Github将项目下载到本地

 git clone https://github.com/stevenlovegrove/Pangolin.git

c. 编译安装

 cd Pangolin
 mkdir build
 cd build
 cmake ..
 make –j
 sudo make install

2、opencv
因为之前安裝过ros系統,里面自动安裝了opencv版本是3.3.1-dev的
可以查看:

cd /opt/ros/kinetic/include
ll

可以看到这条记录

drwxr-xr-x 4 root root 4096 3月 9 17:15 opencv-3.3.1-dev/

看到readme中说现在的工程是可以支持opencv 3 的,所以我自始至终都沒有动过opencv

3、安装Eigen3,它是一个开源线性库,可进行矩阵运算

sudo apt-get install libeigen3-dev

4、安装DBoW2和g2o

DBoW2是DBow库的改进版本,DBow库是一个开源的C++库,用于索引图像并将其转换为单词表示形式。

g2o是一个开源的C ++框架,用于优化基于图的非线性误差函数。

这两个库在ORB-SLAM2项目的第三方文件夹中,在此不单独编译,后续统一编译

5、编译ORB-SLAM2,第三方库中的DBoW2和g2o

cd ORB_SLAM2
chmod +x build.sh
./build.sh

二、运行单目的例子

有TUM、KITTI、EuRoC三种数据集,本实验使用TUM数据集,从http://vision.in.tum.de/data/datasets/rgbd-dataset/download下载序列并解压缩

在这里插入图片描述

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml rgbd_dataset_freiburg1_xyz

其中PATH_TO_SEQUENCE_FOLDER为数据集的存储路径,并将tumx.yaml与下载的数据集对应,比如TUM1.yaml,TUM2.yaml 和TUM3.yaml 分别对应 freiburg1, freiburg2 和 freiburg3。

运行結果:
在这里插入图片描述

三、运行RGB-D例子

下载associate.py放到ORB_SLAM2/Examples/RGB-D文件夹下
运行命令:

python2 associate.py /home/yuxin/ORB_SLAM2/rgbd_dataset_freiburg1_xyz/rgb.txt /home/yuxin/ORB_SLAM2/rgbd_dataset_freiburg1_xyz/depth.txt > associations.txt

这里要注意用python2,我之前安裝的anaconda环境默认用的python 是python3,用错会报错,下载和生成的文件如下图:
在这里插入图片描述

之后运行RGB-D的例子:

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml rgbd_dataset_freiburg1_xyz Examples/RGB-D/associations.txt

在这里插入图片描述

四、摄像头信息的读取和显示

1、之前已经创建了工作空间catkin_ws
具体见上篇博客

 mkdir -p ~/catkin_ws/src
 cd ~/catkin_ws/src

2、下载usb_cam包

git clone https://github.com/bosch-ros-pkg/usb_cam.git usb_cam

3、编译工作空间

 cd ..
 catkin_make

4、将摄像头的连接线插入电脑的USB接口

5、启动usb_cam节点

roslaunch usb_cam usb_cam-test.launch

在这里插入图片描述

参考这里

五、Ros上运行ORB_SLAM2

已经创建了工作空间catkin_ws,将ORB-SLAM2项目移动到其子文件夹src下。
(1)将包含Examples/ROS/ORB_SLAM2的路径添加到ROS_PACKAGE_PATH环境变量中。打开.bashrc文件并在最后添加以下行。

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

其中PATH为ORB-SLAM2项目所在路径,我的路径为/home/yuxin/catkin_ws/src。此外,还要在./bashrc文件写入

source /home/yuxin/catkin_ws/devel/setup.sh

最后在终端执行命令

source ./bashrc

2、编译ROS下的ORB-SLAM2

ORB-SLAM默认订阅的话题为/camera/image_raw,而usb_cam节点发布的话题为/usb_cam/image_raw,因此需要在catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_mono.cc中修改订阅的话题,这点要特别注意。因为源文件的更改必须要重新编译。
在这里插入图片描述重新运行:

 chmod +x build.sh
 ./build.sh

报错:
在这里插入图片描述
解決方法:安裝rospkg
参考这里,直接采用方式一解決了

pip install rospkg

再编译ros

chmod +x build_ros.sh
./build_ros.sh

报错:

usr/bin/ld: CMakeFiles/Stereo.dir/src/ros_stereo.cc.o: undefined
reference to symbol ‘_ZN5boost6system15system_categoryEv’
/usr/lib/x86_64-linux-gnu/libboost_system.so: 无法添加符号: DSO missing from
command line collect2: error: ld returned 1 exit status
CMakeFiles/Stereo.dir/build.make:182: recipe for target ‘…/Stereo’
failed make[2]: *** […/Stereo] Error 1 CMakeFiles/Makefile2:104:
recipe for target ‘CMakeFiles/Stereo.dir/all’ failed make[1]: ***
[CMakeFiles/Stereo.dir/all] Error 2

在这里插入图片描述

解決方法:
1、参考这里
打开Examples/ROS/ORB_SLAM2/CMakeLists.txt
下面代码增加 -lboost_system,在重新编译。

set(LIBS
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
-lboost_system
)

2、出错原因是libboost_system.so 与libboost_filesystem.so找不到链接目录
查找boost_system和boost_filesystem的目录,参考这里

locate boost_system
......
locate boost_filesystem
......

运行以下命令:

sudo cp -r /usr/lib/x86_64-linux-gnu/libboost_system.so /home/yuxin/catkin_ws/src/ORB_SLAM2/lib
sudo cp -r /usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0 /home/yuxin/catkin_ws/src/ORB_SLAM2/lib
sudo cp -r /usr/lib/x86_64-linux-gnu/libboost_filesystem.so /home/yuxin/catkin_ws/src/ORB_SLAM2/lib
sudo cp -r /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0 /home/yuxin/catkin_ws/src/ORB_SLAM2/lib

编译通过

3、运行单目节点

运行单目节点前要先将摄像头接入电脑,然后启动usb_cam节点。

roslaunch usb_cam usb_cam-test.launch

可以打开摄像头窗口
在这里插入图片描述

另外开个终端运行命令:

rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE

这个命令我是输入的绝对路径,结果报错了。
重新编译了几遍都是报:段错误核心转移这个错误
在这里插入图片描述
这里一定要注意输入的绝对路径是否正确,否则就像我一样绕很多的弯路了。
当时也怀疑是路径错了,没检查仔细,就换成了相对路径

rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml

还是报错:

Input sensor was set to: Monocular Failed to open settings file at: Examples/Monocular/TUM1.yaml

当时我就迷了,然后就又转回上面核心转移的问题,并且迷之坚信自己的绝对路径是对的,开始展开大搜索
解決办法这里

删除掉ORBSLAM的cmakelists中的 -march=native 以及 g2o 的cmakelists中的-march=native
重新执行ORBSLAM目录下的./build.sh等,还是不行,继续

按照官方error修正:
换成3.2的Eigen,下载了3.2.10,然后源码编译安裝,包括Pangolin刪掉build,重新编译安裝,以及catkin_ws/src/ORB_SLAM2文件夾下的build文件夹删掉,catkin_ws/src/ORB_SLAM2/Thirdparty下DBoW2和g2o中的build删掉,catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2中的build也删掉,重新编译,

./build.sh
./build_ros.sh

重新运行这两句:

roslaunch usb_cam usb_cam-test.launch
rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE

好吧,一模一样的错误,Eigen又换成了3.1版本再走重新编译的老路,嘎嘎,还是不行,./build.sh编译的時候遇到了错误:
error: ‘StorageIndex’ is not a member of ‘g2o::LinearSolverEigen…
在这里插入图片描述
参考这里
在ORB-SLAM2中的include文件夹里面的system.h加入#include<unistd.h>
打开Thirdparty/g2o/g2o/solvers/linear_solver_eigen.h
将以下代码:

template <typename MatrixType>
class LinearSolverEigen: public LinearSolver<MatrixType>
{ public: typedef Eigen::SparseMatrix<double, Eigen::ColMajor> SparseMatrix;
typedef Eigen::Triplet<double> Triplet;
typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, SparseMatrix::Index> PermutationMatrix;

修改为:

template <typename MatrixType>
class LinearSolverEigen: public LinearSolver<MatrixType>
{ public:
typedef Eigen::SparseMatrix<double, Eigen::ColMajor> SparseMatrix;
typedef Eigen::Triplet<double> Triplet;
typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, int> PermutationMatrix;

然后再重新./build.sh编译,继续报错:
catkin_ws/src/ORB_SLAM2/src/System.cc:134:28: error: ‘usleep’ was not declared in this scope usleep(1000);
在这里插入图片描述
参考这里
在报错的这些文件中添加头文件:
#include <unistd.h>
终于编译通过了,然后./build_ros.sh,报错:
在这里插入图片描述
还是老样子在这个报错文件中加入#include<unistd.h>编译通过,最后还是核心转移这个错,就很抓狂。

又把第三方库中的DBoW2和g2o的源码下下来便已安装,DBoW2过程很顺利,g2o编译的时候报错,明确要求Eigen的版本要是3,于是我又下了Eigen 3.3.9,源码编译安装,顺带着Pangolin,又走了一遍便以流程,还是一模一样的错误,段错误核心转移,感觉像个魔咒。也想起来readme中说了本来就支持Eigen 3,真是着魔了,不知道自己在这折腾个啥。
在这里插入图片描述不得不放弃这个核心转移错误了,想起之前运行

rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml

时的报错是Input sensor was set to: Monocular Failed to open settings file at: Examples/Monocular/TUM1.yaml

换这个方向入手
在这里插入图片描述
觉得不对了,改了下,在catkin_ws/src/ORB_SLAM2下运行rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml,成了,高兴啊~
在这里插入图片描述没过几秒钟,又是段错误核心转移:

Framebuffer with requested attributes not available. Using available
framebuffer. You may see visual artifacts.init done opengl support
available New Map created with 118 points

真是崩溃啊,找了很久,解決办法这里
Pangolin/src/display/device/display_x11.cpp中修改
在这里插入图片描述
我的Pangolin版本比较新,就沒有上图注释掉的那两句話,然后参考这里

把GLX_DOUBLEBUFFER , glx_doublebuffer ? True : False,
改成:
GLX_DOUBLEBUFFER , glx_doublebuffer ? False : False,
重新编译安裝Pangolin,再重新编译./build.sh,/build_ros.sh

roslaunch usb_cam usb_cam-test.launch
rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml

这回大功告成了:
在这里插入图片描述
真的是太曲折了,这时候我又返回试试绝对路径的核心转移报错,好嘛,还是一模一样的报错,仔细检查一看路径给错了,改了重新运行,也OK,都怪自己不细心。这其中应该还有我忘记的魔改,记不清楚了,这块磨了我好几天。不同环境可能遇到的问题不同,还有就是我这个就比较迂回,瞎倒持半天,其他人可能要容易的多。

  • 11
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 要在Ubuntu 16.04上安装ORB_SLAM2,您可以按照以下步骤进行操作: 1. 安装必要的依赖项:sudo apt-get install build-essential cmake pkg-config libopencv-dev libeigen3-dev libglew-dev libboost-all-dev libgtk2.-dev 2. 克隆ORB_SLAM2的GitHub存储库:git clone https://github.com/raulmur/ORB_SLAM2.git 3. 进入ORB_SLAM2目录:cd ORB_SLAM2 4. 创建build目录并进入:mkdir build && cd build 5. 运行cmake:cmake .. 6. 编译ORB_SLAM2:make -j4 7. 下载ORB_SLAM2的ORBvoc.txt文件:wget https://github.com/raulmur/ORB_SLAM2/blob/master/Vocabulary/ORBvoc.txt.tar.gz && tar -xzvf ORBvoc.txt.tar.gz 8. 运行ORB_SLAM2:./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /path/to/dataset/sequence 注意:在步骤7中,您需要将“/path/to/dataset/sequence”替换为您自己的数据集路径。 希望这可以帮助您安装ORB_SLAM2。 ### 回答2: ORB-SLAM2是一种开源的跨平台系统,用于在实时环境下进行大规模、几何性质不确定性较高的单目、双目和RGB-D相机SLAM。为了实现这个功能,ORB-SLAM2集成了多种先进的技术,包括视觉词典、几何信息、颜色一致性和实时优化等。 准备工作: 1. 操作系统:Ubuntu 16.04 LTS 2. 安装ROS Kinetic:打开终端,输入以下命令 ``` 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 421C365BD9FF1F717815A3895523BAEEB01FA116 sudo apt-get update sudo apt-get install ros-kinetic-desktop-full sudo rosdep init rosdep update echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc source ~/.bashrc sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential ``` 3. 安装ORB-SLAM2: - 创建ROS工作空间 ``` mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make ``` - 克隆ORB-SLAM2代码 ``` cd ~/catkin_ws/src git clone https://github.com/raulmur/ORB_SLAM2.git ``` - 编译ORB-SLAM2 ``` cd ~/catkin_ws catkin_make ``` - 设置环境变量 ``` echo "export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src/ORB_SLAM2/Examples/ROS" >> ~/.bashrc source ~/.bashrc ``` 使用ORB-SLAM2: - 在ORB-SLAM2中使用摄像头: ``` roslaunch usb_cam usb_cam-test.launch rosrun ORB_SLAM2 RGBD /home/user/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/user/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2.yaml ``` - 其中 `RGBD` 表示相机类型,`/home/user/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt` 是词典文件路径,`/home/user/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2.yaml` 是ORB-SLAM的参数文件路径。 - 可以用其他类型的摄像头,比如单目或双目摄像头。 - 在ORB-SLAM2中使用数据集: ``` rosrun ORB_SLAM2 RGBD /home/user/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/user/catkin_ws/src/ORB_SLAM2/Examples/RGB-D/TUM1.yaml ./rgbd_dataset_freiburg1_room ``` - 其中 `./rgbd_dataset_freiburg1_room` 是TUM RGB-D数据集中的房间环境数据。 总的来说,安装和使用ORB-SLAM2需要一定的技术基础和操作经验。在安装过程中可能会遇到各种问题,需要仔细阅读错误信息并进行调试。 ### 回答3: 在进行ubuntu16.04安装orb_slam2之前,需要确保你已经按照以下步骤安装了必要的依赖项: 1.安装CMake。你可以使用以下命令进行安装: sudo apt-get install cmake 2.安装必要的依赖项。你可以使用以下命令进行安装: sudo apt-get install libglew-dev libglfw3-dev libusb-1.0-0-dev libudev-dev 3.安装Pangolin。你可以使用以下命令进行安装: sudo apt-get install libpng-dev libjpeg-dev libeigen3-dev sudo apt-get install libboost-all-dev git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin mkdir build cd build cmake .. make -j4 sudo make install 4. 安装 OpenCV。你可以使用以下命令进行安装: sudo apt-get install libopencv-dev python-opencv 现在,让我们按照以下步骤进行orb_slam2的安装: 1.克隆orb_slam2的git存储库: git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2 2.切换到存储库的目录并进行编译: cd ORB_SLAM2 chmod +x build.sh ./build.sh ./build_ros.sh 3.这应该成功编译orb_slam2和RosNode。你可以使用以下命令启动RosNode: rosrun ORB_SLAM2 Mono /***path_to_vocabulary***/ORBvoc.txt /***path_to_settings***/TUM1.yaml 在这里,使用自己的路径和文件名替换"path_to_vocabulary"和"path_to_settings"。 这些命令将开始运行orb_slam2。现在,你可以运行图像视觉SLAM来了解其工作原理。 事实上,这仅是安装orb_slam2的一种方法。你也可以使用其他方法安装它,但是请注意,如果你安装时遇到任何问题,请检查是否满足依赖项和git存储库克隆等要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值