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中查看獲得的環境的點雲信息。

相關文章
相關標籤/搜索