[Ubuntu] ORB SLAM2 在 ROS 上编译&调试(含AR)

0、安装环境:
Ubuntu 14.04.3 LTS
ROS indigo
USB Cam (请参照文章 [ROS] 安装 USB Camera 驱动并调用 中的方法安装 USBCam 库)。

本文中我们将 usb_cam 驱动安装在:ORB_SLAM2/Examples/ROS 目录中。

1、编译 ORB SLAM2 库:
请参照文章 [Ubuntu] ORB SLAM2 编译&调试 中的方法完成 ORB SLAM2 工程的基本编译。

2、编译 ROS 例程:
首先请确认您已安装 ROS 环境,如果没有请 移步这里>>。我这里使用的是 indigo 版本。

打开 ~/.bash.rc 文件,将 ORB_SLAM2 路径添加到 ROS 环境:

其中 PATH/ORB_SLAM2/Examples/ROS 需要按照你的实际目录进行配置。

进入 Examples/ROS/ORB_SLAM2 目录,在命令行运行如下指令:

如果编译没有问题则进入下一步。

3、运行 ROS 例程(使用 USB 摄像头):
1)启动 ros 内核:
在一个窗口打开 roscore:

2)启动 USB Camera 摄像头节点:
新建 usb_cam.launch 文件,保存在 ORB_SLAM2/Examples/ROS/usb_cam/src/usb_cam/launch 目录下,请根据你的实际需要放置在相应目录下。

usb_cam.launch 文件内容如下:

其中 /dev/video0 请根据实际摄像头端口设置。

快捷键 Ctrl + Alt + T 新建窗口,在 ORB_SLAM2 根目录打开 usb_cam 节点:

3)启动 ORB_SLAM2 的 Mono 节点(单目):
快捷键 Ctrl + Alt + T 新建窗口,在 Examples/ROS 目录下执行如下命令打开 ORB_SLAM2 节点:

其中 PATH_TO_VOCABULARY 和 PATH_TO_SETTINGS_FILE 分别是字典树和设置文件路径。例如:

如果一切没有问题,则大功告成了。

4、运行 ROS 例程(使用 ROS BAG):
1)首先从 tum vision 网站下载数据,这里和之前的教程一样,我们仍然使用 freiburg1_desk 这个数据集,不过这次我们下载的是 ROS BAG 格式的文件数据:
http://vision.in.tum.de/rgbd/dataset/freiburg1/rgbd_dataset_freiburg1_desk.bag

这个数据包有 380 MB 左右,如果速度慢的可以下载我百度网盘的文件:
http://pan.baidu.com/s/1bEYssm

我这里将其放置在 Data/rgbd_dataset_freiburg1_desk/rgbd_dataset_freiburg1_desk.bag 目录下面。

2)启动 ros 内核:
在一个窗口打开 roscore:

3)启动 ORB_SLAM2 的 RGBD 节点(深度):
快捷键 Ctrl + Alt + T 新建窗口,在 Examples/ROS 目录下执行如下命令打开 ORB_SLAM2 节点:

其中 PATH_TO_VOCABULARY 和 PATH_TO_SETTINGS_FILE 分别是字典树和设置文件路径。例如:

4)运行 rosplay 播放数据集:
快捷键 Ctrl + Alt + T 新建窗口,打开 usb_cam 节点运行如下命令:

这次我们使用 RGBD 节点运行这个数据集。运行命令如下:

其中 PATH_TO_BAG_FILE 是你在 1) 中下载的 bag 文件保存地址。例如:

其中 /home/robot/Develop/ORB_SLAM2/Data/rgbd_dataset_freiburg1_desk/rgbd_dataset_freiburg1_desk.bag 是我的 bag 文件存放地址,请根据你的实际情况进行修改。

5、运行 ROS AR 例程:
在新版的 ORB_SLAM2 代码库中,作者新增了 ROS 下的一个简单 AR 例程,这个例程直接调用摄像头,并且可以将一个方块放在视野里平面的位置(如地面等)。这个例程对于做 AR 的人可以仔细研究下。

1)参照步骤 3 里 2)小结的内容打开 usb_cam 摄像头节点;

2)快捷键 Ctrl + Alt + T 新建窗口,执行以下命令:

然后就可以看到如下图的效果了,点击 [Insert Cube] 就可以自动查找平面以及放入虚拟正方体了。

相关问题:
1)错误:You should double-check your ROS_PACKAGE_PATH
有时候在运行:

这一行的时候可能出现如下错误:
[rosbuild] rospack found package "ORB_SLAM2" at "", but the current
directory is
"/home/robot/Develop/MSF/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2". You should
double-check your ROS_PACKAGE_PATH to ensure that packages are found in the
correct precedence order.

这通常是因为没有设置好 ORB_SLAM2 的环境变量或者前后设置存在冲突。请打开 ~/.bash.rc 文件,检查以下设置是否正确:

其中 PATH/ORB_SLAM2/Examples/ROS 需要按照你的实际目录进行配置。

2)错误:Pangolin X11: Failed to create an OpenGL context

有时候在运行时出现如下错误:
X11 Error: BadValue (integer parameter out of range for operation)
X11 Error: BadValue (integer parameter out of range for operation)
terminate called after throwing an instance of 'std::runtime_error'
what(): Pangolin X11: Failed to create an OpenGL context
Aborted (core dumped)

请执行如下命令进行驱动升级并且重启(注意保存):

One Comment

Add a Comment

您的邮箱地址不会被公开。 必填项已用 * 标注