第一步:首先安裝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.cfg和lsd_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中查看得到的環境的點雲信息。