1.安装仿真环境

此安装环境是从github下载的,由中科院软件所孵化的北京中科重德智能科技有限公司提供的机器人仿真环境,配置方法如下:

(1)克隆包到工作空间

$ cd ~/catkin_ws/src
$ git clone https://github.com/DroidAITech/ROS-Academy-for-Beginners.git

(2)安装依赖项

$ cd ~/catkin_ws
$ rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y

(3)编译并刷新环境

$ catkin_make
$ echo "source ~/catkin_ws/devel/setup.bash" >>	~/.bashrc
$ source ~/.bashrc

2.安装功能包及依赖项
安装ORB_SLAM2功能包,编译之前要为它安装eigen数学计算库以及对OpenGL进行封装的轻量级的OpenGL输入/输出和视频显示的Pangolin库。并且功能包需要OpenCV视觉库处理图像以及特征,不过OpenCV并不需要在编译ORB_SLAM2之前安装。(这些工具库没有必要放到工作空间中)
(1)安装链接库

 $ sudo apt-get install libboost-all-dev libblas-dev liblapack-dev

(2)下载ORB_SLAM2源码包

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

(3)请看小白的其它博客,完成Eigen、Pangolin与OpenCV的编译安装。

(4)编译ORB_SLAM2功能包

#修改环境变量,在本窗口临时生效
$ export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src/ORB_SLAM2/Examples/ROS
$ cd ORB_SLAM2
$ chmod +x build.sh
$ ./build.sh
$ chmod +x build_ros.sh
$ ./build_ros.sh
 
$ cd 
$ gedit .bashrc
#在文件末尾加上:(始终生效)
$ export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src/ORB_SLAM2/Examples/ROS

(5)安装依赖项

$ sudo apt-get -y install libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip 

./build_ros.sh编译过程中,会出现以下报错

意思是“包含未定义的引用”,原因是系统编译的时候找不到boost的链接库,解决方法是修改/ORB_SLAM2/Examples/ROS/ORB_SLAM2/CmakeLists.txt,添加一句-lboost_system,如下图

接下来再重新编译即可编译成功

3.启动仿真环境下的RGB-D SLAM
同样先启动roscore,启动ORB_SLAM2功能之前要修改一下ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_rgbd.cc源文件,因为我们仿真环境中的机器人发布的话题名称和算法订阅的话题名称是不相同的,我们要将ros_rgbd.cc源文件当中订阅的话题名称修改为机器人发布的名称(注意RGB-D摄像头会同时发布彩色图像和深度图像两个话题),

然后重新编译ORB_SLAM2功能包。

(1)修改ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_rgbd.cc源文件

    message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "camera/depth_registered/image_raw", 1);  
#depth_registered 改成depth
    message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "camera/depth/image_raw", 1);

(2)接下来打开新的终端,启动ORB_SLAM功能节点

$ roslaunch orbslam2_demo ros_orbslam2.launch

(3)再打开新的终端启动gazebo仿真环境

$ roslaunch robot_sim_demo robot_spawn.launch

(4)最后打开键盘控制节点,通过按键控制机器人四处移动,完成建图

$ rosrun robot_sim_demo robot_keyboard_teleop.py

最终构建的是一个三维点云形态的地图,效果如下: