ubuntu16.04下跑通LSD-SLAM的过程记录

 第一步:首先安装ROS kinetic:php

  参考:http://www.javashuo.com/article/p-adamaxei-kn.htmlnode

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

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

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

    

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

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

2. 设置软件源:sources.list    bash

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. 更新软件及安装app

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 clonehttps://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中查看获得的环境的点云信息。

相关文章
相关标签/搜索