• Ubuntu14.04运行lsdslam与问题解决


    本文是在Ubuntu14.04中运行LSDSLAM的步骤以及出现的一系列问题的解决,最终可以运行数据集和实时运行

    基本环境:Ubuntu14.04  opencv3.1.0  但是有问题,因此后来又安装了opencv2.4.9。感谢大佬。

    前序的工作和该博主完全一致:

    https://blog.csdn.net/softimite_zifeng/article/details/78632506

    出现的问题:

    已解决:raise Exception(r"""quotes not allowed in description string '%s'""" % description)

    不应该在描述中出现引号(单引号或双引号),可以通过查看错误内容得知需要修改的文件名:
    
    1) lsd_slam_viewer/cfg/LSDSLAMViewerParams.cfg
    
    第20行scaledDepthVarTH:单词 point's和keyframe's 中出现了单引号,删除单引号
    
    第21行absDepthVarTH:单词 point's
    
    第24行cutFirstNKf:单词 keyframe's
    
     
    
    2) lsd_slam_core/cfg/LSDDebugParams.cfg
    
    第11行plotStereoImages:单词 what's
    
    第12行plotTracking:单词 what's
    
    第48行continuousPCOutput:单词 Keyfram's

    之后,

    出现新的问题:

     main_stitchVideos.cpp:(.text+0x8f30): undefined reference to `cv::String::deallocate()'

      main_stitchVideos.cpp:(.text+0x8fc9): undefined reference to `cv::String::deallocate()'

      main_stitchVideos.cpp:(.text+0x8fdb): undefined reference to `cv::String::deallocate()'

      CMakeFiles/videoStitch.dir/src/main_stitchVideos.cpp.o: In function `inlayVid(int, char**)':

      main_stitchVideos.cpp:(.text+0x9c62): undefined reference to `cv::imread(cv::String const&, int)'

      main_stitchVideos.cpp:(.text+0x9c6a): undefined reference to `cv::String::deallocate()'

      main_stitchVideos.cpp:(.text+0x9cb3): undefined reference to `cv::imread(cv::String const&, int)'

      main_stitchVideos.cpp:(.text+0x9cbd): undefined reference to `cv::String::deallocate()'

      main_stitchVideos.cpp:(.text+0x9d02): undefined reference to `cv::imread(cv::String const&, int)'

      main_stitchVideos.cpp:(.text+0x9d0c): undefined reference to `cv::String::deallocate()'

      main_stitchVideos.cpp:(.text+0x9d5a): undefined reference to `cv::imread(cv::String const&, int)'

      main_stitchVideos.cpp:(.text+0x9d67): undefined reference to `cv::String::deallocate()'

      main_stitchVideos.cpp:(.text+0x9db1): undefined reference to `cv::imread(cv::String const&, int)'

      main_stitchVideos.cpp:(.text+0x9dbe): undefined reference to `cv::String::deallocate()'

      main_stitchVideos.cpp:(.text+0xa629): undefined reference to `cv::String::allocate(unsigned long)'

      main_stitchVideos.cpp:(.text+0xa654): undefined reference to `cv::imwrite(cv::String const&, cv::_InputArray const&, std::vector<int, std::allocator<int> > const&)'

      main_stitchVideos.cpp:(.text+0xa661): undefined reference to `cv::String::deallocate()'

      main_stitchVideos.cpp:(.text+0xa6c6): undefined reference to `cv::String::allocate(unsigned long)'

      main_stitchVideos.cpp:(.text+0xa6e7): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'

      main_stitchVideos.cpp:(.text+0xa6f4): undefined reference to `cv::String::deallocate()'

      main_stitchVideos.cpp:(.text+0xaec5): undefined reference to `cv::String::allocate(unsigned long)'

      main_stitchVideos.cpp:(.text+0xaee8): undefined reference to `cv::String::allocate(unsigned long)'

      main_stitchVideos.cpp:(.text+0xaf08): undefined reference to `cv::String::allocate(unsigned long)'

      main_stitchVideos.cpp:(.text+0xaf28): undefined reference to `cv::String::allocate(unsigned long)'

      main_stitchVideos.cpp:(.text+0xaf46): undefined reference to `cv::String::allocate(unsigned long)'

      main_stitchVideos.cpp:(.text+0xb146): undefined reference to `cv::String::deallocate()'

      main_stitchVideos.cpp:(.text+0xb1e2): undefined reference to `cv::String::deallocate()'

      main_stitchVideos.cpp:(.text+0xb20e): undefined reference to `cv::String::deallocate()'

      main_stitchVideos.cpp:(.text+0xb23f): undefined reference to `cv::String::deallocate()'

      main_stitchVideos.cpp:(.text+0xb270): undefined reference to `cv::String::deallocate()'

      CMakeFiles/videoStitch.dir/src/main_stitchVideos.cpp.o:main_stitchVideos.cpp:(.text+0xb33e): more undefined references to `cv::String::deallocate()' follow

      collect2: error: ld returned 1 exit status

      make[3]: *** [../bin/videoStitch] Error 1

      make[3]: Leaving directory `/home/zc/rosbuild_ws/package_dir/lsd_slam/lsd_slam_viewer/build'

      make[2]: *** [CMakeFiles/videoStitch.dir/all] Error 2

      make[2]: Leaving directory `/home/zc/rosbuild_ws/package_dir/lsd_slam/lsd_slam_viewer/build'

      make[1]: *** [all] Error 2

      make[1]: INTERNAL: Exiting with 3 jobserver tokens available; should be 2!

      make[1]: Leaving directory `/home/zc/rosbuild_ws/package_dir/lsd_slam/lsd_slam_viewer/build'

    -------------------------------------------------------------------------------}

    好像是因为opencv版本的问题,

    pkg-config --modversion opencv

    查看后发现是3.1.0

    想办法解决。

    找到了:

    https://www.cnblogs.com/cc111/p/9382694.html

    解决:   在lsd_slam_viewer中的CMAKELISTS.txt的最后加上:
        find_package(OpenCV REQUIRED) 
        rosbuild_add_executable(videoStitch src/main_stitchVideos.cpp)
        target_link_libraries(videoStitch ${OpenCV_LIBS})    

     接着还有一个报错,是在lsd_slam_core路径中的错误:

    解决:在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})

    然后还有一个错误:

    /usr/bin/ld: cannot find -lglut

    解决方法:我的是so.3   使用命令   locate libglut  找到的

    ln -sv libglut.so.3 libglut.so

    https://zh-ka-163-com.iteye.com/blog/2214601

    使用数据集来跑

    参考:

    https://blog.csdn.net/softimite_zifeng/article/details/78632506
    (1)下载数据集

    (2)roscore

    (3)rosrun lsd_slam_viewer viewer

    (4)rosrun lsd_slam_core live_slam image:=/image_raw camera_info:=/camera_info

    (5)rosbag play dataset/LSD_room.bag

    将上述命令中的dataset/LSD_room.bag替换为你之前下载的数据集的所在的路径

    然后出现问题:

    zc@ubuntu:~ $ rosrun lsd_slam_core live_slam image:=/image_raw camera_info:=/camera_info
    WAITING for ROS camera calibration!
    Received ROS Camera Calibration: fx: 254.326950, fy: 375.934387, cx: 267.381897, cy: 231.599091 @ 640x480
    RECEIVED ROS camera calibration!
    Started mapping thread!
    Doing Random initialization!
    Started constraint search thread!
    Started optimization thread
    Segmentation fault (core dumped)

    需要做的是到目录

    lsd_slam/lsd_slam_core/src/util/settings.cpp

    把其中的

    bool displayDepthMap = true;

    改成

    //bool displayDepthMap = true;
    bool displayDepthMap = false;

     这一步就是把debugdepth的那个界面不显示。

    点云图正常显示。

    然后就会出现新的问题:

    rosrun lsd_slam_core live_slam image:=/image_raw camera_info:=/camera_info
    WAITING for ROS camera calibration!
    Received ROS Camera Calibration: fx: 254.326950, fy: 375.934387, cx: 267.381897, cy: 231.599091 @ 640x480
    RECEIVED ROS camera calibration!
    Doing Random initialization!
    Started mapping thread!
    Started constraint search thread!
    Started optimization thread
    Done Random initialization!
    TRACKING LOST for frame 50 (0.00% good Points, which is 18.18% of available points, DIVERGED)!
    warning: reciprocal tracking on new frame failed badly, added odometry edge (Hacky).

    图片有显示,

     如果这个时候运行实时的命令,那么将会在优化线程的一步卡死。

    最后发现是opencv的版本问题,一开始用的是opencv3.1.0,最后修改成2.4.9解决问题,参考如下:

     然后这边对于opencv的解决方法:
    
    https://www.cnblogs.com/hxzkh/p/8488132.html    LSDSLAM
    
    https://www.cnblogs.com/hxzkh/p/8473190.html    ORBSLAM  中的opencv解决
    
    参考解决方法:
    
    https://answers.ros.org/question/219063/segmentation-fault-in-lsd_slam/
    
    https://blog.csdn.net/osgoodwu/article/details/79900620
    
    github上哟一个:
    
    https://github.com/tum-vision/lsd_slam/issues/30

    最后这个问题发现其实是opencv版本的问题,我的是3.1.0,之后又安装了一个2.4.9的opencv,然后就可以了:

    https://www.cnblogs.com/1228073191Blog/p/10927384.html

    安装一个opencv2.4.9

    然后更改:

    然后编辑 lsd_slam_core 下的 CMakeLists.txt 文件,11行左右添加:
    
    set(OpenCV_DIR ~/opencv-2.4.9/share/OpenCV)
    
    include_directories(~/opencv-2.4.9/include)
    
    find_package(cmake_modules REQUIRED)
    然后编辑 lsd_slam_viewer 下的 CMakeLists.txt 文件,11行左右添加:
    
    set(OpenCV_DIR ~/opencv-2.4.9/share/OpenCV)
    include_directories(~/opencv-2.4.9/include)
    find_package(cmake_modules REQUIRED)

    就可以运行数据集了。

    实时跑起来:

    https://blog.csdn.net/buptwbs/article/details/52460758

    (1)启动摄像头相关参考,主要是安装usb_cam

    https://blog.csdn.net/qq_25241325/article/details/82705003

    http://www.wh-robot.com/whb/?p=1232

    1. roscore
    2. rosrun lsd_slam_viewer viewer
    3. rosrun usb_cam usb_cam_node
    4. rosrun image_view image_view image:=/usb_cam/image_raw
    5. rosrun lsd_slam_core live_slam /image:=/usb_cam/image_raw _calib:=/home/zhangchi/Desktop/LSDSlamDataset/LSD_room/cameraCalibration.cfg 
    其中的calib的路径偷懒直接使用了数据集中的
  • 相关阅读:
    sublime 设置侧边栏颜色
    laravel 连接mongodb
    PHP empty(),isset()与is_null()的实例测试
    ubuntu 14.04 64位安装 深度截图
    ubuntu 14.04 64位安装 lightworks (解决libtiff4依赖)
    ubuntu LAMP 配置
    一个查询大学英语四六级的类
    jstree 权限树 简单教程
    对接ebay,订单系统开发
    常用的PHP判断 检测 函数.
  • 原文地址:https://www.cnblogs.com/1228073191Blog/p/10919650.html
Copyright © 2020-2023  润新知