第一步:首先安裝ROS kinetic:php
參考:http://www.javashuo.com/article/p-adamaxei-kn.htmlnode
https://blog.csdn.net/xuehuafeiwu123/article/details/52549872python
1. 配置Ubuntu的資源庫:"restricted","universe"和"multiverse"linux
打開系統設置->軟件與更新:git
確保"restricted","universe"和"multiverse"這三個選項被勾選。github
而後更改download from:在下拉框中選擇其餘站點->選擇最佳服務器->選擇服務器。ubuntu
2. 設置軟件源:sources.list bash
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. 更新軟件及安裝app
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 clonehttps://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中查看獲得的環境的點雲信息。