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

  

    

 

 

 

 

 

           

 

posted @ 2018-07-28 17:24  Iridescent18  阅读(5107)  评论(3编辑  收藏  举报