ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

USB摄像头实现ORB_SLAM2

2021-03-19 22:32:23  阅读:335  来源: 互联网

标签:catkin USB .. SLAM2 cam ORB usb


文章目录


前言

这篇文章主要记录以下我是如何使用USB 摄像头实现ORB_SLAM2,以及在编译过程中出现的错误是如何解决,希望能够帮助别人在实现这个框架的时候避免踩雷


提示:本文章的实现基础是 Ubuntu 18.04 , ros-melodic, 其他的Eigen3, OpenCV,Pangolin 请根据ORB_SLAM2 要求进行安装

具体实现步骤:

1. 编译 usb_cam

1. 创建catkin 工作空间:

$ mkdir -p ~/catkin_ws/src

2.编译catkin 工作空间

$ cd ~/catkin_ws/
$ catkin_make
$ source devel/setup.bash

3.下载 usb_cam package

把usb_cam的code放到catkin_ws/src

$ cd ~/catkin_ws/src
$ git clone https://github.com/bosch-ros-pkg/usb_cam

4. 修改 usb_cam-test.launch

$ cd usb_cam/launch/

把 usb_cam-test.launch 文件下 video device 修改成你自己的usb camera名称

<param name="video_device" value="usb_cam" />

以下是我修改成我的电脑usb camera 名称:

<param name="video_device" value="/dev/video4" /> 

如果你不确定你的usb camera 名称,可以打开一个新的terminal, 输入: ls -ltrh /dev/video* 进行查看.
在这里插入图片描述

5. 编译 usb_cam package

当前目录:~/catkin_ws/src/usb_cam

$ mkdir build
$ cd build
$ cmake ..
$ make

6. 测试 usb_cam 是否能正常运行

$ roslaunch usb_cam usb_cam-test.launch

2. 编译 ORB_SLAM2

1. 下载 ORB_SLAM2

把ORB_SLAM2 code下载下来放到catkin_ws/src/ 文件夹下面

$ cd ~/catkin_ws/src
$ git clone https://github.com/raulmur/ORB_SLAM2

在这里插入图片描述

2. 编译 ORB_SLAM2

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

如果在此处编译出现 error: ‘usleep’ was not declared in this scope
在ORB_SLAM2/include/ 下所有的头文件加入

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

然后再重新编译

3.编译ORB_SLAM2下面的ROS:

$ cd ..
$ cd Examples/ROS/ORB_SLAM2
$ mkdir build
$ cd build
$ cmake ..
$ make

如果在make 这一步出现问题: erro: undefined reference to symbol '_ZN5boost6system15system_categoryEv’
在~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/CMakeList.txt 文件找到以下部分:

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

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
)

然后再在Examples/ROS/ORB_SLAM2/build/重新编译

$ cmake ..
$ make

3.运行 usb_cam 和 ORB_SLAM2

1.运行 usb_cam

$ roslaunch usb_cam usb_cam-test.launch

2.查看usb camera 图片输出topic name

$ rostopic list

3.修改 ros_mono.cc 相机topic name

在/home/minnib/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_mono.cc 文件下修改相机订阅主题

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

把 /camera/image_raw 改成 usb_cam 输出图片的topic,我的 usb 摄像头输出图片的 rostopic 就是 /usb_cam/image_raw

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

4. 新建 usb cam 内参yaml文件

在~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/新建一个yaml文件 或者把 Monocular 文件夹下面的TUM1.yaml 复制过来,把里面的相机参数修改成为你usb_camera 内参

5.重新编译整个catkin 空间

6. 运行 usb_cam 和 ORB_SLAM2

$ roslaunch usb_cam usb_cam-test.launch
$ rosrun ORB_SLAM2 Mono /home/minnib/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/minnib/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/my_camera.yaml (usb_camera 内参文件)

Matlab相机标定可以参考我这篇文章
注意把 以上文件所有文件改称你自己的文件路径.
最后运行成功界面:

在这里插入图片描述
在这里插入图片描述

总结

提示:
1.编译过程中出错的两个地方在上面已经给出解决方法
2. 出现错误说没有发现ORM_SLAM 或者改参数没发生变化,检查是否修改后在各个package的build文件夹下是否已经重新编译了.
3. 注意修改成为自己的文件夹路径

标签:catkin,USB,..,SLAM2,cam,ORB,usb
来源: https://blog.csdn.net/Miniebin/article/details/115003597

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有