【ROS实践入门(九)ROS编译ORB-SLAM2运行】

本内容经官网实例以及一些参考书总结而成,欢迎留言评论交流~

联系方式:ziyuanw#foxmail.com(#换成@)

本文只探讨ROS工作空间内ORB—SLAM2实时摄像头的编译及运行效果,至于在TUM等数据集上效果可参见ORB-SLAM2的github 项目说明中给出的详细教程:

https://github.com/raulmur/ORB_SLAM2

一、ORB-SLAM2项目准备:

1.准备工作:

创建一个catkin_ws工作空间:

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

进入~/catkin_ws/src:

cd ~/catkin_ws/src

下载GitHub 项目:

git clone https://github.com/raulmur/ORB_SLAM2
  • PS:如果电脑装的是Opencv4的请用下面这条(由于原版CMakeLists.txt中OpenCV只支持opencv3版本及以下,因此网上有个好心人特意把项目中所有的Opencv都替换为了4版本,再也不用担心编译报错找不到Opencv了:):
  • 一般报错为:CMake Error at CMakeLists.txt:35 (message):OpenCV > 2.4.3 not found.-- Configuring incomplete, errors occurred!
git clone https://github.com/Windfisch/ORB_SLAM2.git

2.下载并编译必要的第三方依赖库

如果之前用过编译完成过的就不用管了。

  • OpenCV
  • Eigen3
  • g2o
  • DBoW2 and g2o (Included in Thirdparty folder)
  • ROS

若没有编译好环境的我这里给一个简要方法:

安装几个依赖项和库
Boost:

sudo apt-get install libboost-all-dev 

1.编译General Graph Optimization:g2o:(编译g2o需要先安装下面三个内容)

 sudo apt-get install libblas-devsudo apt-get install liblapack-devsudo apt-get install libeigen3-dev

然后进入刚刚第一步下载完成的ORB-SLAM2/Thirdparty目录下:

cd ~/catkin_ws/ORB_SLAM2/Thirdparty/g2o/
mkdir build
cmake ..
make

2.编译DBoW2:

cd ~/catkin_ws/ORB_SLAM2/Thridparty/DBoW2
mkdir build
cmake ..
make

后面的opencv网上也有很多方法,ROS本机已经编译好了。

3.编译ROS版本ORB-SLAM2

首先查看一下文件结构:

可以发现有两个build的命令:build.sh和build_ros.sh,要编译ROS版本就只需执行build_ros.sh。

①注意要编译的ROS版本的ORB-SLAM2在Examples文件夹的ROS目录下,因此需要将其加入ROS可执行的环境变量中:

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS
  • 上面的PATH对于我的电脑来说是(根据自己的工作空间进行修改):
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/ziyuan/catkin_ws/src/ORB_SLAM2/Examples/ROS
  • echo $ROS_PACKAGE_PATH查看ROS环境变量:

②修改相机节点设备号:

修改~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/下的ros_mono.cc文件:

(PS:如果想后面实验一下AR文件下的效果建议一块也修改了,方法一样)

  • 因为默认节点名称为camera/image_raw但是根据上一篇博客我的usb_cam节点为usb_cam/image_raw,设备号为2,如果不修改可能在ORB-SLAM2编译完成后是黑屏的。
    ros::NodeHandle nodeHandler;ros::Subscriber sub = nodeHandler.subscribe("/usb_cam/image_raw", 2, &ImageGrabber::GrabImage,&igb);

③编译:

直接用作者已经给写好的编译命令即可。

为了能够使编译命令可执行,首先需要修改一下其权限:

chmod +x build.sh
chmod +x build_ros.sh

首先编译ORB-SLAM:

./build.sh

然后在编译ROS版本的ORB-SLAM:

./build_ros.sh

编译过程错误:

  • 错误1:

/home/ziyuan/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/AR/ViewerAR.cc:233:9: error: ‘usleep’ was not declared in this scope
         usleep(mT*1000);

vim 打开对应的文件,头文件加上一个:  #include <unistd.h>  执行成功。

  • 错误2(github上解决方法):https://github.com/raulmur/ORB_SLAM2/issues/494

CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/RGBD.dir/all' failed
make[1]: *** [CMakeFiles/RGBD.dir/all] Error 2
make[1]: *** 正在等待未完成的任务....
/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

解决方法:

vim 打开/home/ziyuan/catkin_ws/src/ORB_SLAM2/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
)

至此,ORB-SLAM两个版本均已编译完成,下面开始使用单目相机实时执行。

二、实时相机执行

1.usb_cam驱动和节点配置

首先需要安装usb_cam的ROS版本驱动(参考上一篇博客),完成之后开始实验效果命令:

由作者给出的说明可知道,执行单目相机节点之前需要做两项准备工作:

rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE

①. PATH_TO_VOCABULARY

ORBvoc.txt特征词典文件路径:

/home/ziyuan/Documents/ORB_SLAM2/Vocabulary/ORBvoc.txt

②. PATH_TO_SETTINGS_FILE

即相机设置文件,默认名为Asus.yaml,可以将里面的相机参数修改为自己标定过的参数:

/home/ziyuan/Documents/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml

2.执行:

  • 记得更新一下catkin_ws的环境配置source devel/setup.bash

①CTRL+ALT+T打开第一个终端roscore

roscore

②CTRL+Shift+T打开第二个终端,打开usb_cam相机节点:

source devel/setup.bash
roslaunch usb_cam usb_cam-test.launch

③CTRL+Shift+T打开第三个终端的,执行单目ORB_SLAM2实时usb_cam效果

rosrun ORB_SLAM2 Mono /home/ziyuan/Documents/ORB_SLAM2/Vocabulary/ORBvoc.txt  /home/ziyuan/Documents/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml

效果如下:(场景再识别能力很不错,但是场景突变时运行实时容易卡顿)

CTRL+C退出,完成之后可以在~/catkin_ws/src/ORB_SLAM2自动将关键帧保存为KeyFrameTrajectory.txt

格式为:时间戳+平移+旋转(四元数形式)

  • PS:(本案例完成之后不要忘记ROS的环境变量发生了变化可参考:
export ROS_PACKAGE_PATH=/home/ziyuan/catkin_ws:$ROS_PACKAGE_PATH
  • https://wiki.ros.org/ROS/EnvironmentVariables#ROS_PACKAGE_PATH)
  • https://answers.ros.org/question/62520/ros_package_path-environment/

上一篇:【ROS实践入门(八)ROS使用USB视觉传感器相机】

下一篇:待续

参考资料:

【1】ROS官网

【2 】ROS上基于usb_cam相机使用: https://blog.csdn.net/pengrui18/article/details/88958487

【3】ROS机器人高效编程。

【4】ORB-SLAM2作者github网站https://github.com/raulmur/ORB_SLAM2。

【5】https://vision.in.tum.de/data/datasets/rgbd-dataset/file_formats

【ROS实践入门(九)ROS编译ORB-SLAM2运行】相关推荐

  1. 【ROS实践入门(六)消息msg和服务srv文件创建与使用】

    [ROS实践学习入门系列(六)消息msg和服务srv文件创建与使用] 本内容经官网实例以及一些参考书总结而成,欢迎留言评论交流- 联系方式:ziyuanw#foxmail.com(#换成@) 一.创建 ...

  2. ROS入门、ROS完整教程

    ROS学习入门 说明: 学习视频:古月居 ROS入门21讲 代码:https://github.com/huchunxu/ros_21_tutorials 文章目录 ROS学习入门 1. ROS常用命 ...

  3. Ubuntu下使用单目相机运行ORB SLAM2

    环境:Ubuntu16.04+ROS Kinetic+USB单目摄像头 虽然ORB SLAM2的官方说明中表示没有ROS也可以编译运行,但要实时的跑ORB SLAM2还是需要ROS平台的,所以之前没有 ...

  4. ROS入门笔记(四):ROS实践(小海龟仿真)— ROS Topics

    ROS入门笔记(四):ROS实践(小海龟仿真)- ROS Topics 文章目录 1 基础知识 1.1 运行ROS Master所在主机的资源地址 1.2 ROS常用命令 1.2.1 查看所有以ros ...

  5. ROS入门(九)——机器人自动导航(介绍、地图、定位和路径规划)

    所用的学习链接: [奥特学园]ROS机器人入门课程<ROS理论与实践>零基础教程P289-314 [以上视频笔记见http://www.autolabor.com.cn/book/ROST ...

  6. ROS机器人入门课程《ROS理论与实践》零基础教程(推荐课程)

    ROS的入门,对于纯小白的我来说很是痛苦,尤其是听完古月老师的21讲之后,更是浇灭了学习的兴趣,当时还在考虑要不要他的买课,还是算了,反正也听不懂,,,!!! 在一番挣扎之后,发现了赵虚左老师的课程, ...

  7. SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人"miiboo"中的大部分程序也采用ROS进行开发,所 ...

  8. 【一学就会的ROS基础入门教程 】03-1 ROS基础编程:ROS工作空间的创建、话题topic的发布与接收、以及话题消息的自定义使用

    [一学就会的ROS基础入门教程 ]03-1 ROS基础编程:ROS工作空间的创建.话题topic的发布与接收.以及话题消息的自定义使用 文前白话 1.创建工作空间与功能包 关于工作空间的介绍 创建开发 ...

  9. orbslam2可视化_[Ubuntu] ORB SLAM2 编译调试

    ORB SLAM2 是 2015年比较受到关注的一篇文章,它的主要思想是借助 ORB 描述子改进了 Sparse SLAM 的性能,使得其在稳定性和速度上都达到了比较好的程度.从创新性上来讲,它的主要 ...

  10. SLAM导航机器人零基础实战系列:(二)ROS入门——10.在实际机器人上运行ROS高级功能预览...

    SLAM导航机器人零基础实战系列:(二)ROS入门--10.在实际机器人上运行ROS高级功能预览 摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了 ...

最新文章

  1. 绘制你的世界:探索构图和真实的深度感
  2. preact源码学习(2)
  3. DCMTK:OFnumeric_limits的单元测试
  4. Spring JdbcTemplate Curd
  5. 面向对象基础知识整理
  6. win7系统设置开机自动联网的方法
  7. 数据按时间拆开分批处理示例
  8. 如何为***选择合适的动态密码双因素认证方案
  9. ssh tar_2015年最佳情侣:tar和ssh
  10. 前端校验rules写法:
  11. 谣言易碎:诺基亚为何不能投靠Android阵营?
  12. 高通发布一系列新型WiFi芯片:兼容WiFi 6技术
  13. Flink Forward Asia 2019 - 总结和展望(附PPT下载链接)
  14. 图像处理-绘制直方图
  15. 2016-408-计组-有如下c语言程序段
  16. STM32F4 GPIO模式及工作原理详解
  17. 单行子查询返回多个行
  18. (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  19. 感冒初期试试食疗方 盲目用药伤脾胃
  20. Linux配置JavaWeb环境(JDK+Tmocat+Mysql+Nginx+Redis+IDEA部署)

热门文章

  1. canva画图 图片居中裁剪_html5 canvas 自定义画图裁剪图片
  2. Flyway数据库版本管理工具
  3. 山东大学软件学院2021软件项目管理考试回忆
  4. 512-rear chassis fan not detected的解决方法
  5. 2022 年年度最佳开源软件
  6. 动态网页编程新手入门必读
  7. 母亲的牛奶 Mother's Milk(usaco)
  8. Windows 10搭建SVN服务器
  9. ffmpeg学习笔记1-----udp流多路节目实现分离
  10. Spring Data Jpa 复合主键