zoukankan      html  css  js  c++  java
  • ubuntu16.04下跑通LSD-SLAM的过程记录

     第一步:首先安装ROS kinetic:

      参考:https://blog.csdn.net/softimite_zifeng/article/details/78632211

          https://blog.csdn.net/xuehuafeiwu123/article/details/52549872

        1. 配置Ubuntu的资源库:"restricted","universe"和"multiverse"

          打开系统设置->软件与更新:

        

          确保"restricted","universe"和"multiverse"这三个选项被勾选。

          然后更改download from:在下拉框中选择其他站点->选择最佳服务器->选择服务器。

    2. 设置软件源:sources.list    

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

    3. 设置 keys

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

    4. 更新软件及安装

    1 sudo apt-get update
    2 sudo apt-get install ros-kinetic-desktop-full

     注意区分大小写,如果不小心写成sudo apt-get install ros-Kinetic-desktop-full,解决方法如下:  

    1)报错:E: 无法定位软件包 ros-Kinetic-desktop-full
       解决:后来发现应该是sudo apt-get install ros-kinetic-desktop-full.怎么样,有没有发现什么?把‘k’敲成‘K’啦.
    重新输入:
    sudo apt-get install ros-kinetic-desktop-full
    2)报错:下列软件包有未满足的依赖关系:
         ros-kinetic-desktop-full : 依赖: ros-kinetic-desktop 但是它将不会被安装
                                     依赖: ros-kinetic-perception 但是它将不会被安装
                                    依赖: ros-kinetic-simulators 但是它将不会被安装
         E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

    解决: 

    1 sudo apt-get update
    2 sudo apt-get install ros-kinetic-desktop
    3 sudo apt-get install ros-kinetic-simulators 

      再输入:

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

     5. 安装完可以查看可用的package(有什么用呢??)

    apt-cache search ros-kinetic

    6. 初始化 rosdep 

    1 sudo rosdep init
    2 rosdep update
    3)报错:Traceback (most recent call last):
          File "/usr/bin/rosdep", line 3, in <module>
          from rosdep2.main import rosdep_main
         ImportError: No module named 'rosdep2'
      解决:将python的默认版本设为2
         sudo update-alternatives --config python
         选择1

    7. 环境配置   

    1 echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
    2 source ~/.bashrc    
    4)报错:bash:/opt/ros/Kinect/setup.bash:没有那个文件或目录
      错误原因:还是这个K!!!
      解决:在终端输入:gedit  ~/.bashrc
      在打开文件的最后找到bash: /opt/ros/Kinetic/setup.bash将Kinetic的K改成小写即可,删除重复的多余配置
       
    8. 安装building package的依赖
    sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential

     9. 测试ROS安装是否成功

    roscore 

       
     出现这样的结果,说明安装成功。

    第二步:安装LSD-SLAM

         参考:https://blog.csdn.net/softimite_zifeng/article/details/78632653

    1. 创建rosbuild工作空间:   

    1 sudo apt-get install python-rosinstall
    2 mkdir ~/rosbuild_ws
    3 cd ~/rosbuild_ws
    4 rosws init . /opt/ros/kinetic
    5 mkdir package_dir
    6 rosws set ~/rosbuild_ws/package_dir -t .
    7 echo "source ~/rosbuild_ws/setup.bash" >> ~/.bashrc
    8 bash
    9 cd package_dir

    2. 安装依赖

    sudo apt-get install ros-kinetic-libg2o ros-kinetic-cv-bridge liblapack-dev libblas-dev freeglut3-dev libsuitesparse-dev libx11-dev
    sudo apt install libqglviewer-dev-qt4  
    cd /usr/lib/x86_64-linux-gnu  
    sudo ln -s libQGLViewer-qt4.so libQGLViewer.so.2

    3.获取LSD-SLAM

    git clone https://github.com/tum-vision/lsd_slam.git lsd_slam

    4. 编译

    rosmake lsd_slam 

    由于原版本支持的系统是ubuntu12.04和14.04,直接在16.04的版本上编译,会报错。可以直接下载运行我已经修改好的代码https://github.com/Chatoyant19/LSD-SLAM

    或者根据报错提示自己修改:

    1)报错:ERROR [gendeps] 1 Finding dependencies for /home/cc/rosbuild_ws/package_dir/lsd_slam/lsd_slam_viewer/cfg/LSDSLAMViewerParams.cfg 

     

    解决:删除lsd_slam_viewer/cfg/LSDSLAMViewerParams.cfglsd_slam_core/cfg/LSDDebugParams.cfg两个文件中出现的单引号
           lsd_slam_viewer/cfg/LSDSLAMViewerParams.cfg:
             第20行scaledDepthVarTH:单词 point's和keyframe's 中出现了单引号,删除单引号    

             第21行absDepthVarTH:单词 point's
             第24行cutFirstNKf:单词 keyframe's
           lsd_slam_core/cfg/LSDDebugParams.cfg
             第11行plotStereoImages:单词 what's

             第12行plotTracking:单词 what's
             第48行continuousPCOutput:单词 Keyfram's
      2)报错:
          main_stitchVideos.cpp:(.text+0xd65c):对‘cv::imshow(cv::String const&, cv::_InputArray const&)’未定义的引用
          main_stitchVideos.cpp:(.text+0xd668):对‘cv::String::deallocate()’未定义的引用       main_stitchVideos.cpp:(.text+0xd672):对‘cv::waitKey(int)’未定义的引用
          main_stitchVideos.cpp:(.text+0xd715):对‘cv::fastFree(void*)’未定义的引用
          main_stitchVideos.cpp:(.text+0xd7b5):对‘cv::fastFree(void*)’未定义的引用
          main_stitchVideos.cpp:(.text+0xd84d):对‘cv::fastFree(void*)’未定义的引用
          main_stitchVideos.cpp:(.text+0xd8e5):对‘cv::fastFree(void*)’未定义的引用       main_stitchVideos.cpp:(.text+0xd985):对‘cv::fastFree(void*)’未定义的引用      CMakeFiles/videoStitch.dir/src/main_stitchVideos.cpp.o:main_stitchVideos.cpp:(.text+0xda25): 跟着更多未定义的参考到 cv::fastFree(void*)      …
    解决:在lsd_slam_viewer中的CMAKELISTS.txt的最后加上:
        find_package(OpenCV REQUIRED)
        rosbuild_add_executable(videoStitch src/main_stitchVideos.cpp)
        target_link_libraries(videoStitch ${OpenCV_LIBS})
          
    3)报错:

          

     

    解决:lsd_slam_viewer/src/PointCloudViewer.h中,第135行:将float x, y, z修改为qreal x, y, z     
        lsd_slam_viewer/src/PointCloudViewer.cpp中,第326行:将float x, y, z修改为qreal x, y, z 
        
    4)报错:  

    解决:将文件lsd_slam_viewer/src/KeyFrameDisplay.cpp的头文件:#include "opencv2/opencv.hpp"注释掉
    5)报错:

      

    解决:在lsd_slam_core中的CMAKELISTS.txt的最后增加boost_system库的链接: 
          
    find_package(OpenCV REQUIRED)
            # build live ros node
            rosbuild_add_executable(live_slam src/main_live_odometry.cpp)
            target_link_libraries(live_slam lsdslam boost_system ${OpenCV_LIBS})
            # build image node
            rosbuild_add_executable(dataset_slam src/main_on_images.cpp)
            target_link_libraries(dataset_slam lsdslam boost_system ${OpenCV_LIBS})     

      终于,编译通过!!!        

      


    5. 运行LSD-SLAM    

     5.1 下载数据集并解压:http://vmcremers8.informatik.tu-muenchen.de/lsd/LSD_room.bag.zip

     5.2 打开终端输入命令:roscore

     5.3 另打开一个新的终端,输入命令:rosrun lsd_slam_viewer viewer

     

    1)报错:rospack: error while loading shared libraries: librospack.so: cannot open shared object file: No such file or directory    
    解决:首先我们要先确定操作系统里面是否包含了这个共享库:在终端中输入命令:
         
    sudo updatedb
         locate rospack
          可以看到librospack.so所在的地址:
         
    将共享库目录添加到共享库配置文件/etc/ld.so.conf中
         由于权限问题,需要在root下输入以下命令:
          
    cat /etc/ld.so.conf
          echo "/opt/ros/kinetic/lib" >> /etc/ld.so.conf
          ldconfig  

      5.4 再打开一个新的终端,输入命令:rosrun lsd_slam_core live_slam image:=/image_raw camera_info:=/camera_info

    5.5 再打开一个新的终端,cd到解压后的数据集LSD_room.bag所在的目录下,输入命令:rosbag play ./LSD_room.bag

       弹出的DebugWindow DEPTH窗口不能正常显示。

    解决方法一:将lsd_slam/lsd_slam_core/src/util/settings.cpp的第38行更改为:bool displayDepthMap = false;//true

    此时DebugWindow DEPTH窗口不再显示。

    解决方法二:修改lsd_slam/lsd_slam_core/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp:在line 73增加

     

    cv::imshow(displayQueue.back().name, displayQueue.back().img);
    cv::waitKey();
    displayQueue.pop_back();

     

     

    点云窗口只显示相机的移动不显示点云地图的解决方法:在lsd_slam/lsd_slam_core/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp中的lines 119 and 125
    用 'return 1'替换cv::waitKey(milliseconds)

    重新编译lsd_slam(rosmake lad_slam),然后重新执行步骤2~5,就可在PointCLoud Viewer中查看得到的环境的点云信息。

      

        

               

  • 相关阅读:
    GL_TRIANGLE_FAN Vs GL_TRIANGLE_STRIP
    Color bleeding与caustics概念解析
    Two path ray tracing与Photon Mapping(粒子跟踪)
    右手定则判断法线方向
    正确使用atoi
    深入探讨透视投影坐标变换
    gluBuild2DMipmaps与glTexImage2D与glGenTexture()函数
    OpenGL纹理贴图流程
    int main( int argc, char ** argv)在VS2008中的配置的一个实例
    c++标准库中vector数组遍历时的用法
  • 原文地址:https://www.cnblogs.com/cc111/p/9382694.html
Copyright © 2011-2022 走看看