[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 环境:
1 | export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS |
其中 PATH/ORB_SLAM2/Examples/ROS 需要按照你的实际目录进行配置。
进入 Examples/ROS/ORB_SLAM2 目录,在命令行运行如下指令:
1 2 3 4 | mkdir build cd build cmake .. -DROS_BUILD_TYPE=Release make -j |
如果编译没有问题则进入下一步。
3、运行 ROS 例程(使用 USB 摄像头):
1)启动 ros 内核:
在一个窗口打开 roscore:
1 | roscore |
2)启动 USB Camera 摄像头节点:
新建 usb_cam.launch 文件,保存在 ORB_SLAM2/Examples/ROS/usb_cam/src/usb_cam/launch 目录下,请根据你的实际需要放置在相应目录下。
usb_cam.launch 文件内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <launch> <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" > <param name="video_device" value="/dev/video0" /> <param name="image_width" value="640" /> <param name="image_height" value="480" /> <param name="pixel_format" value="yuyv" /> <param name="camera_frame_id" value="usb_cam" /> <param name="io_method" value="mmap"/> <remap from="/usb_cam/image_raw" to="/camera/image_raw"/> </node> <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen"> <remap from="image" to="/camera/image_raw"/> <param name="autosize" value="true" /> </node> </launch> |
其中 /dev/video0 请根据实际摄像头端口设置。
快捷键 Ctrl + Alt + T 新建窗口,在 ORB_SLAM2 根目录打开 usb_cam 节点:
1 2 | source Examples/ROS/usb_cam/devel/setup.bash roslaunch usb_cam usb_cam.launch |
3)启动 ORB_SLAM2 的 Mono 节点(单目):
快捷键 Ctrl + Alt + T 新建窗口,在 Examples/ROS 目录下执行如下命令打开 ORB_SLAM2 节点:
1 2 | source Examples/ROS/ORB_SLAM2/build/devel/setup.bash rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE |
其中 PATH_TO_VOCABULARY 和 PATH_TO_SETTINGS_FILE 分别是字典树和设置文件路径。例如:
1 | rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.bin Data/ORB_SLAM2/Monocular/USBCam.yaml |
如果一切没有问题,则大功告成了。
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:
1 | roscore |
3)启动 ORB_SLAM2 的 RGBD 节点(深度):
快捷键 Ctrl + Alt + T 新建窗口,在 Examples/ROS 目录下执行如下命令打开 ORB_SLAM2 节点:
1 2 | source Examples/ROS/ORB_SLAM2/build/devel/setup.bash rosrun ORB_SLAM2 RGBD PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE |
其中 PATH_TO_VOCABULARY 和 PATH_TO_SETTINGS_FILE 分别是字典树和设置文件路径。例如:
1 | rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.bin Data/ORB_SLAM2/Monocular/USBCam.yaml |
4)运行 rosplay 播放数据集:
快捷键 Ctrl + Alt + T 新建窗口,打开 usb_cam 节点运行如下命令:
这次我们使用 RGBD 节点运行这个数据集。运行命令如下:
1 | rosbag play PATH_TO_BAG_FILE |
其中 PATH_TO_BAG_FILE 是你在 1) 中下载的 bag 文件保存地址。例如:
1 | rosbag play /home/robot/Develop/ORB_SLAM2/Data/rgbd_dataset_freiburg1_desk/rgbd_dataset_freiburg1_desk.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 新建窗口,执行以下命令:
1 2 | source Examples/ROS/ORB_SLAM2/build/devel/setup.bash rosrun ORB_SLAM2 MonoAR ~/Data/ORB_SLAM2/Vocabulary/ORBvoc.bin ~/Data/ORB_SLAM2/Monocular/USBCam.yaml |
然后就可以看到如下图的效果了,点击 [Insert Cube] 就可以自动查找平面以及放入虚拟正方体了。
相关问题:
1)错误:You should double-check your ROS_PACKAGE_PATH
有时候在运行:
1 | cmake .. -DROS_BUILD_TYPE=Release |
这一行的时候可能出现如下错误:
[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 文件,检查以下设置是否正确:
1 | export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS |
其中 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)
请执行如下命令进行驱动升级并且重启(注意保存):
1 2 3 4 | sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update sudo ubuntu-drivers autoinstall sudo reboot |
非常好,支持