USB摄像头实现ORB_SLAM2

文章目录


前言

这篇文章主要记录以下我是如何使用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* 进行查看.
USB摄像头实现ORB_SLAM2

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

USB摄像头实现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相机标定可以参考我这篇文章
注意把 以上文件所有文件改称你自己的文件路径.
最后运行成功界面:

USB摄像头实现ORB_SLAM2
USB摄像头实现ORB_SLAM2

总结

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

上一篇:Vscode书写ROS程序


下一篇:wiki上ROS核心教程学习笔记(初级教程)