系统:Ubuntu16.04+ROS-Kinetic
ROS-Kinetic的安装请参考http://www.cnblogs.com/liu-fa/p/5779206.html
新建一个ros工作空间(如果有就不用了),参考http://www.cnblogs.com/huangjianxin/p/6347416.html
在你的工作空间下,我的是~/catkin_ws/src,下载ORB-SLAM到本地,git clone https://github.com/raulmur/ORB_SLAM.git ORB_SLAM,然后根据作者给的readme.md编译,这里主要说一下可能会碰到的问题吧
首先安装依赖项:Boost/g2o/DBoW2,后两个都在自带的Thirdparty里,我这里都没碰到什么问题
接着是编译ORB_SLAM,这里需要注意一点,在Indigo之后的ROS版本中都不带opencv了,所以我们需要在manifest.xml中注释掉opencv2,这在readme.md中作者提到了,但是好像很多人都没有注意,注释的方式是<!--depend package="opencv2"/-->
出现报错error: ‘YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY’ is not a member of ‘Eigen::internal::static_assertion<false>’,这里我参考http://blog.csdn.net/qq_33179208/article/details/53032687的建议安装了另一版本的Eigen3,再次编译就没问题了,使用命令rospack list检查ORB_SLAM是否已安装
最后就可以愉快地跑ros了,开启roscore,然后运行roslaunch ExampleGroovyHydro.launch就开启了ORB_SLAM,可以跑数据集*.bag,也可以用自己的相机跑,如果是用自己的相机跑,需要写如下launch文件,我用的是笔记本相机,还需要安装相机驱动,sudo apt-get install ros-kinetic-usb-cam
<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="camera" />
<param name="io_method" value="mmap"/>
<remap from="/usb_cam/image_raw" to="/camera/image_raw" />
</node>
<node pkg="image_view" type="image_view" name="image_view">
<remap from="/image" to="/ORB_SLAM/Frame" />
<param name="autosize" value="true"/>
</node>
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find ORB_SLAM)/Data/rviz.rviz" output="log">
</node>
<node pkg="ORB_SLAM" type="ORB_SLAM" name="ORB_SLAM" args="Data/ORBvoc.txt Data/Settings.yaml" cwd="node" output="screen">
</node>
</launch>