美文网首页
ORB-SLAM2编译安装和USB摄像头例程运行

ORB-SLAM2编译安装和USB摄像头例程运行

作者: Wafei | 来源:发表于2018-03-09 21:41 被阅读0次

    准备工作及软件版本说明

    注意:如果要使用USB摄像头运行ORB-SLAM2,不能使用虚拟机,否则会出现摄像头打开一片绿屏或者黑屏的现象。

    • 操作系统 :Ubuntu 16.04
    • ROS版本 :kinetic
    • eigen库版本 :3.2.10

    注意: eigen库如果用3.3.4的话 编译ORB-SLAM2时候会出现错误或者警告。

    • OpenCV版本:opencv3.4.1
    • USB摄像头:640*480,30帧

    安装ROS

    • 打开”Ubuntu Software Center“,把鼠标移到左上角的“Ubuntu Software Center”名字上,点击出现的“Edit ”,在下拉菜单里点击”Software Sources“。确保你的”restricted”, “universe,” 和 “multiverse.”前是打上勾的。就像这样:


    • 设置ROS软件源

    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

    • 设置密钥

    sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116

    • 安装ROS kinetic

    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install ros-kinetic-desktop-full

    • 安装完成后,可以用下面的命令来查看可使用的包:

    apt-cache search ros-kinetic

    • 初始化ROS

    sudo rosdep init
    rosdep update

    • 然后初始化环境变量(非常重要):

    echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
    source ~/.bashrc

    • 安装ROS Python插件

    sudo apt-get install python-rosinstall

    • 测试ROS(如果显示 started core service [/rosout] 则说明ROS安装成功)

    roscore

    安装ORB-SLAM2

    创建ROS工程

    • 使用ROS创建workspace

    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws/
    catkin_make
    mkdir ORB-SLAM2

    • 添加环境变量

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

    安装必备软件

    • 安装git cmake

    sudo apt-get install git cmake

    • 安装一些库

    sudo apt-get install libblas-dev liblapack-dev

    • 安装Pangolin

    sudo apt-get install libglew-dev
    sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
    sudo apt-get install libpython2.7-dev
    sudo apt-get install build-essential
    cd ~/catkin_ws/ORB-SLAM2
    git clone https://github.com/stevenlovegrove/Pangolin.git
    cd Pangolin

    • 编译安装Pangolin

    mkdir build
    cd build
    cmake -DCPP11_NO_BOOST=1 ..
    make

    • 安装OpenCV依赖

    sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

    • 下载OpenCV并解压到Ubuntu,然后进入OpenCV文件夹进行编译安装

    mkdir release
    cd release
    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
    make
    sudo make install

    • 安装eigen库(注意 请下载3.2.10版本,如果用3.3.x版本可能会造成ORB-SLAM2编译失败,因为eigen3.3.4版本修改了文件目录结构)
    • 下载Eigen,进入到在解压后的Eigen文件夹(例如eigen-eigen-07105f7124f9)下

    mkdir build
    cd build
    cmake ..
    make
    sudo make install

    • 下载ORB_SLAM2:

    git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

    • 编译安装

    cd ORB_SLAM2
    chmod +x build.sh
    vim build.sh

    把build.sh的make -j改成make(这是为了防止多线程编译出错,对于build_ros.sh文件也是同理,下面就不说了)

    • 运行build.sh

    ./build.sh

    • 注意坑1:如果在编译构建的过程中出现error:usleep()函数未定义的错误,要到报错误的代码文件里面加上(或者在头文件加也行):
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    • 修改环境变量(user就是用户的名字)

    export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/(user)/catkin_ws/ORB-SLAM2/Examples/ROS

    这个时候 打开~/.bashrc文件 最末端的时候应该是这个样子:


    • 编译安装ROS版本的ORB-SLAM2

    cd ORB_SLAM2
    chmod +x build_ros.sh
    ./build_ros.sh

    • 注意坑2:如果在编译构建的过程中出现关于boost库的错误,要到/Examples/ROS/ORB-SLAM2/CMakeLists.txt文件下修改 加上 -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
    )
    
    • ORB-SLAM2测试数据集
      (1)下载测试数据集
      Download a sequence from http://vision.in.tum.de/data/datasets/rgbd-dataset/download and uncompress it.
      (2)执行命令:
      Execute the following command. Change TUMX.yaml to TUM1.yaml,TUM2.yaml or TUM3.yaml for freiburg1, freiburg2 and freiburg3 sequences respectively. Change PATH_TO_SEQUENCE_FOLDERto the uncompressed sequence folder.

    ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER

    在ROS中使用usb摄像头跑ORB SLAM2

    • 由于使用USB摄像头作为图像输入,需要将图像信息作为topic发送出去,ROS官网提供了usb_cam的package代码,从github上下usb_cam的代码,下载链接:https://github.com/bosch-ros-pkg/usb_cam

    • 安装ROS usb_cam源码

    cd catkin_ws/src
    git clone https://github.com/bosch-ros-pkg/usb_cam.git
    cd ..
    catkin_make

    • 编译usb_cam

    mkdir build
    cd build
    cmake ..
    make

    • 测试一下usb摄像头
      首先开个新的终端,运行roscore(如果显示命令没有找到就说明的你没有source source /opt/ros/indigo/setup.bash)
      在运行该节点之前,需要先配置一下节点参数,打开src/usb_cam-develop/launch文件中的的launch文件,我这里只需要该设备号即可,笔记本电脑的video0一般是网络摄像头,插入usb摄像头一般是video1,若想看usb摄像头是哪个端口号,可cd到根目录中的dev文件夹下查看。

    ls /dev/video*
    cd /home/pan/catkin_ws/src/usb_cam
    cd launch
    gedit usb_cam-test.launch

    将其中的内容替换成(其中/dev/videoX要对应为usb摄像头)

    <launch>
      <node name="camera" 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 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>
    
    • 开三个终端,依次分别运行

    roscore

    roslaunch usb_cam usb_cam-test.launch

    rosrun ORB_SLAM2 Mono /home/(user)/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/(user)/catkin_ws/src/ORB_SLAM2/Examples/Monocular/MyCam.yaml

    • 运行时,首先是建图
      为了图像清晰,设置只选前两项。建图时尽量获得更多的特征点。


      初始化
      建图
      建图
    • 觉得生成地图OK之后,可以开启定位模式(把localization勾上)


      定位
      定位

    大功告成。

    相关文章

      网友评论

          本文标题:ORB-SLAM2编译安装和USB摄像头例程运行

          本文链接:https://www.haomeiwen.com/subject/rfimfftx.html