【ROS实践入门(九)ROS编译ORB-SLAM2运行】
【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运行】相关推荐
- 【ROS实践入门(六)消息msg和服务srv文件创建与使用】
[ROS实践学习入门系列(六)消息msg和服务srv文件创建与使用] 本内容经官网实例以及一些参考书总结而成,欢迎留言评论交流- 联系方式:ziyuanw#foxmail.com(#换成@) 一.创建 ...
- ROS入门、ROS完整教程
ROS学习入门 说明: 学习视频:古月居 ROS入门21讲 代码:https://github.com/huchunxu/ros_21_tutorials 文章目录 ROS学习入门 1. ROS常用命 ...
- Ubuntu下使用单目相机运行ORB SLAM2
环境:Ubuntu16.04+ROS Kinetic+USB单目摄像头 虽然ORB SLAM2的官方说明中表示没有ROS也可以编译运行,但要实时的跑ORB SLAM2还是需要ROS平台的,所以之前没有 ...
- ROS入门笔记(四):ROS实践(小海龟仿真)— ROS Topics
ROS入门笔记(四):ROS实践(小海龟仿真)- ROS Topics 文章目录 1 基础知识 1.1 运行ROS Master所在主机的资源地址 1.2 ROS常用命令 1.2.1 查看所有以ros ...
- ROS入门(九)——机器人自动导航(介绍、地图、定位和路径规划)
所用的学习链接: [奥特学园]ROS机器人入门课程<ROS理论与实践>零基础教程P289-314 [以上视频笔记见http://www.autolabor.com.cn/book/ROST ...
- ROS机器人入门课程《ROS理论与实践》零基础教程(推荐课程)
ROS的入门,对于纯小白的我来说很是痛苦,尤其是听完古月老师的21讲之后,更是浇灭了学习的兴趣,当时还在考虑要不要他的买课,还是算了,反正也听不懂,,,!!! 在一番挣扎之后,发现了赵虚左老师的课程, ...
- SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人"miiboo"中的大部分程序也采用ROS进行开发,所 ...
- 【一学就会的ROS基础入门教程 】03-1 ROS基础编程:ROS工作空间的创建、话题topic的发布与接收、以及话题消息的自定义使用
[一学就会的ROS基础入门教程 ]03-1 ROS基础编程:ROS工作空间的创建.话题topic的发布与接收.以及话题消息的自定义使用 文前白话 1.创建工作空间与功能包 关于工作空间的介绍 创建开发 ...
- orbslam2可视化_[Ubuntu] ORB SLAM2 编译调试
ORB SLAM2 是 2015年比较受到关注的一篇文章,它的主要思想是借助 ORB 描述子改进了 Sparse SLAM 的性能,使得其在稳定性和速度上都达到了比较好的程度.从创新性上来讲,它的主要 ...
- SLAM导航机器人零基础实战系列:(二)ROS入门——10.在实际机器人上运行ROS高级功能预览...
SLAM导航机器人零基础实战系列:(二)ROS入门--10.在实际机器人上运行ROS高级功能预览 摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了 ...
最新文章
- 绘制你的世界:探索构图和真实的深度感
- preact源码学习(2)
- DCMTK:OFnumeric_limits的单元测试
- Spring JdbcTemplate Curd
- 面向对象基础知识整理
- win7系统设置开机自动联网的方法
- 数据按时间拆开分批处理示例
- 如何为***选择合适的动态密码双因素认证方案
- ssh tar_2015年最佳情侣:tar和ssh
- 前端校验rules写法:
- 谣言易碎:诺基亚为何不能投靠Android阵营?
- 高通发布一系列新型WiFi芯片:兼容WiFi 6技术
- Flink Forward Asia 2019 - 总结和展望(附PPT下载链接)
- 图像处理-绘制直方图
- 2016-408-计组-有如下c语言程序段
- STM32F4 GPIO模式及工作原理详解
- 单行子查询返回多个行
- (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
- 感冒初期试试食疗方 盲目用药伤脾胃
- Linux配置JavaWeb环境(JDK+Tmocat+Mysql+Nginx+Redis+IDEA部署)