LSD-SLAM在Ubuntu16.04 kinectic跑通記錄

LSD-SLAM源代碼是源代碼在ROS fuerte + Ubuntu 12.04和ROS indigo + Ubuntu 14.04,本次使運行在Ubuntu16.04 kinectic。

1.安裝ROS Kinetic

Ref : http://wiki.ros.org/kinetic/Installation/Ubuntu

a.安裝ubutnu系統(https://wiki.ubuntu.org.cn/%E9%A6%96%E9%A1%B5)

b.安裝對應ubuntu版本的ROS系統

注意:比如ubuntu14.04 對應ROS indigo, ubuntu16.04 對應ROS kinetic,本ppt以ROS kinetic爲例

 1)添加ROS軟件源

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

2)添加祕鑰

   $sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key  C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

3)安裝

   $sudo apt-get update

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

4)初始化rosdep

   $sudo rosdep init

   $rosdep update

5)設置環境變量

  $echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

  $source ~/.bashrc

6)安裝rosinstall

  $sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential

7)測試安裝   $roscore

2.LSD-SLAM安裝

1. 創建rosbuild工作空間:   

sudo apt-get install python-rosinstall
mkdir ~/rosbuild_ws
cd ~/rosbuild_ws
rosws init . /opt/ros/kinetic
mkdir package_dir
rosws set ~/rosbuild_ws/package_dir -t .
echo "source ~/rosbuild_ws/setup.bash" >> ~/.bashrc
bash
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 
rosmake lsd_slam 

4.編譯報錯:

報錯1.編譯過程中出現錯誤: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

報錯2.編譯過程中出現錯誤:invalid initialization of non-const reference of type 'qreal& {aka double&}' from an rvalue of type 'qreal {aka double}'

 

分析:qt中的qreal表示小數,在Ubuntu14.04中qreal就是float,但是Ubuntu16.04中qreal變爲了double。錯誤中的變量x, y, z的類型是float,getPosition函數的形參類型是qreal,也就是double,所有x, y, z的值會自動轉型爲double,並存儲在一個臨時變量中,這會導致getPosition函數的實參變爲了右值,但是右值不能初始化非const的引用。

解決方法:

1) lsd_slam_viewer/src/PointCloudViewer.h

第135行:將float x, y, z修改爲qreal x, y, z或者double x, y, z

2) lsd_slam_viewer/src/PointCloudViewer.cpp

第325行:將float x, y, z修改爲qreal x, y, z或者double x, y, z

3).報錯:       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的最後加上:

#OpenCV3.4.3 我係統多opencv版本

set(OpenCV_DIR /usr/local/opencv-3.4.3/share/OpenCV)

find_package(OpenCV 3.4.3 REQUIRED)

include_directories(SYSTEM ${OpenCV_INCLUDE_DIRS} /usr/local/opencv-3.4.3/include)

link_directories(${OpenCV_LIBRARY_DIRS} /usr/local/opencv-3.4.3/lib)

rosbuild_add_executable(videoStitch src/main_stitchVideos.cpp)

target_link_libraries(videoStitch ${OpenCV_LIBS})  

3.報錯

 

解決:將文件lsd_slam_viewer/src/KeyFrameDisplay.cpp的頭文件:#include "opencv2/opencv.hpp"註釋掉

報錯4.報錯

 

解決:在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.報錯

$ rosmake lsd_slam

[rosmake-0] Finished <<< lsd_slam_viewer [FAIL] [ 2.87 seconds ] [ rosmake ] Halting due to failure in package lsd_slam_viewer.

解決方案是:

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:"pwd"

https://github.com/tum-vision/lsd_slam/issues/316

報錯6.報錯

$ rosmake lsd_slam

錯誤信息:

[rosmake-3] Starting >>> lsd_slam_viewer [ make ]

[rosmake-3] Finished <<< lsd_slam_viewer [SKIP] No rule to make target None

viewer始終無法得出的可執行的二進制文件

解決方法是:

採用的qt4

報錯7.報錯

rosrun lsd_slam_core live_slam image:=/image_raw camera_info:=/camera_info

報錯:

*** Error in `/home/name/rosbuild_ws/package_dir/lsd_slam/lsd_slam_core/bin/live_slam': double free or corruption (out): 0x08f11900 ***

解決方案是採用eigen3.2.5,下載見 https://bitbucket.org/eigen/eigen/downloads/?tab=tags,詳情見https://github.com/tum-vision/lsd_slam/issues/208

本系統有兩個eigen3.2.9和3.2.5,實現版本切換可採用爲:https://blog.csdn.net/qq_36594547/article/details/102955881

6.編譯通過和運行結果

 

 

 

參考:

  1. https://github.com/tum-vision/lsd_slam/issues
  2. https://www.cnblogs.com/cc111/p/9382694.html
  3. https://blog.csdn.net/softimite_zifeng/article/details/78632653

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章