ubuntu16 ROS kinetic 安裝LSD-SLAM及報錯處理詳解

首先感謝CSDN上的大佬們,在大佬們的幫助下我終於在Jetson TX2上成功安裝的LSD-SLAM,因此記錄下辛酸的安裝過程。

平臺:NVIDIA Jetson TX2

系統:ubuntu16 + ROS kinetic

LSD-SLAM官網:https://vision.in.tum.de/research/vslam/lsdslam

LSD-SLAM github:https://github.com/tum-vision/lsd_slam

在LSD-SLAM官網上介紹了ubuntu12和ubuntu14環境下的,但是ubuntu16的不太一樣,下面開始安裝過程。

 

一、安裝依賴項

1. 安裝 ROS Kinetic

    LSD-SLAM的運行是基於ROS的,因此必須先安裝 ROS,安裝教程可以參考ROS官網,或者是  這個教程

2. 安裝其他依賴項

sudo apt-get install ros-kinetic-libg2o ros-kinetic-cv-bridge liblapack-dev libblas-dev freeglut3-dev libsuitesparse-dev libx11-dev

  注意:LSD-SLAM官方安裝的依賴項中有libqglviewer-dev,LSD-SLAM依賴的是qt4,但是在ubuntu16下用這個命令安裝的是qt5,因此上面的命令中我刪掉了

3. 安裝libqglviewer-dev-qt4

3.1 刪除libqglviewer-dev

sudo apt remove libqglviewer-dev

3.2 安裝libqglviewer-dev-qt4,並創建相關鏈接

sudo apt install libqglviewer-dev-qt4  
cd /usr/lib/x86_64-linux-gnu  
sudo ln -s libQGLViewer-qt4.so libQGLViewer.so

二、安裝 LSD-SLAM

1. 創建工作空間

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

上面的過程是在根目錄下創建了一個   rosbuild_ws  的工作空間,需要注意的是第7行的命令需要根據自己工作空間的地址來修改

2. 獲取LSD-SLAM

  獲取LSD-SLAM源碼有兩種,第一種是獲取官方的源碼,命令如下,但是在編譯的過程中會報錯

git clone https://github.com/tum-vision/lsd_slam.git lsd_slam

  第二種是獲取被修正過的源碼,命令如下:(感謝大佬)

git clone https://github.com/gjgjh/lsd-slam.git lsd_slam

   按理說直接用修改過的編譯不會出錯,但是我在jetson TX2上面編譯lsd_slam_core的時候報錯了,解決辦法見下 問題3.1

3. 編譯

cd package_dir
rosmake lsd_slam

   出現下面的結果表示全部編譯完成,看到:

    Finished <<< lsd_slam_viewer [PASS] [ 8.93 seconds ] [ 4 warnings  ]   和 Finished <<< lsd_slam_core [PASS] [ 473.94 seconds ] [ 1 warnings  ]

    更加詳細的結果如下:

[ rosmake ]    /home/nvidia/.ros/rosmake/rosmake_output-20200104-144823/lsd_slam_viewer/build_output.log
[rosmake-0] Finished <<< lsd_slam_viewer [PASS] [ 8.93 seconds ] [ 4 warnings  ]                                                             
[rosmake-0] Starting >>> lsd_slam_core [ make ]                                                                                              
^[`[ rosmake ] [ make ] [ lsd_slam_core: 11.9 sec ]                                                                  [ 1 Active 47/48 Complet[ rosmake ] Output from build of package lsd_slam_core written to:                                                [ 1 Active 47/48 Complete ]
[ rosmake ]    /home/nvidia/.ros/rosmake/rosmake_output-20200104-144823/lsd_slam_core/build_output.log
[rosmake-0] Finished <<< lsd_slam_core [PASS] [ 473.94 seconds ] [ 1 warnings  ]                                                             
[ rosmake ] Results:                                                                                                                         
[ rosmake ] Built 48 packages with 0 failures.                                                                                               
[ rosmake ] Summary output to directory                                                                                                      
[ rosmake ] /home/nvidia/.ros/rosmake/rosmake_output-20200104-144823  

4. 測試

4.1 下載數據集,不過這個數據集比較難下載,因此可以從這個鏈接下載:https://download.csdn.net/download/sunshinefcx/12080535

4.2 打開一個termial,輸入以下命令:

roscore

4.3 打開一個新的termial,輸入以下命令,將會彈出PointCloud Viewer窗口:

rosrun lsd_slam_viewer viewer

4.4 再打開一個新的termial,輸入以下命令:

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

4.5 再打開一個新的termial,輸入以下命令:

rosbag play ./LSD_room.bag
./LSD_room.bag 需要換成自己平臺上數據集所在的路徑

三、問題彙總

首先想要安裝LSD-SLAM,在編譯的過程中必須將 lsd_slam_viewer 和 lsd_slam_core都編譯通過,我在編譯完成lsd_slam_viewer之後,在編譯lsd_slam_core的時候報錯了,報錯內容如下所示:

問題3.1

      _mm_store_ps(SSEData+4*11, _mm_add_ps(_mm_load_ps(SSEData+4*11),_mm_mul_ps(J3w,J3)));
                                                                                 ^
  /home/nvidia/jc-lsd-slam/rosbuild_ws/package_dir/lsd_slam/lsd_slam_core/src/Tracking/LGSX.h:356:11: error: expected ‘;’ before ‘J4w’
      __m128 J4w = _mm_mul_ps(J4,weight);
             ^
  /home/nvidia/jc-lsd-slam/rosbuild_ws/package_dir/lsd_slam/lsd_slam_core/src/Tracking/LGSX.h:357:79: error: ‘J4w’ was not declared in this scope
      _mm_store_ps(SSEData+4*15, _mm_add_ps(_mm_load_ps(SSEData+4*15),_mm_mul_ps(J4w,J4)));
                                                                                 ^
  /home/nvidia/jc-lsd-slam/rosbuild_ws/package_dir/lsd_slam/lsd_slam_core/src/Tracking/LGSX.h:362:11: error: expected ‘;’ before ‘J5w’
      __m128 J5w = _mm_mul_ps(J5,weight);
             ^
  /home/nvidia/jc-lsd-slam/rosbuild_ws/package_dir/lsd_slam/lsd_slam_core/src/Tracking/LGSX.h:363:79: error: ‘J5w’ was not declared in this scope
      _mm_store_ps(SSEData+4*18, _mm_add_ps(_mm_load_ps(SSEData+4*18),_mm_mul_ps(J5w,J5)));
                                                                                 ^
  /home/nvidia/jc-lsd-slam/rosbuild_ws/package_dir/lsd_slam/lsd_slam_core/src/Tracking/LGSX.h:367:11: error: expected ‘;’ before ‘J6w’
      __m128 J6w = _mm_mul_ps(J6,weight);
             ^
  /home/nvidia/jc-lsd-slam/rosbuild_ws/package_dir/lsd_slam/lsd_slam_core/src/Tracking/LGSX.h:368:79: error: ‘J6w’ was not declared in this scope
      _mm_store_ps(SSEData+4*20, _mm_add_ps(_mm_load_ps(SSEData+4*20),_mm_mul_ps(J6w,J6)));
                                                                                 ^
  /home/nvidia/jc-lsd-slam/rosbuild_ws/package_dir/lsd_slam/lsd_slam_core/src/Tracking/LGSX.h:374:11: error: expected ‘;’ before ‘resw’
      __m128 resw = _mm_mul_ps(res,weight);
             ^
  /home/nvidia/jc-lsd-slam/rosbuild_ws/package_dir/lsd_slam/lsd_slam_core/src/Tracking/LGSX.h:375:79: error: ‘resw’ was not declared in this scope
      _mm_store_ps(SSEData+4*21, _mm_add_ps(_mm_load_ps(SSEData+4*21),_mm_mul_ps(resw,J1)));

解決辦法:

   去掉lsd_slam_core文件夾下面CMakeLists.txt中的 add_definitions("-DENABLED_SSE")  即可

   解決方案來源: https://github.com/tum-vision/lsd_slam/issues/274 

 

在編譯  lsd_slam_viewer  遇到的問題可以參考下面的幾篇,再次就不再贅述了:

     https://www.cnblogs.com/GJGJH/p/9704384.html

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

或者在LSD-SLAM github上找解決方案:https://github.com/tum-vision/lsd_slam/issues

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