基本操作之甩鍋先:……(你懂得)
編譯環境:Ubuntu14.04 LTS(64位),ROS Indigo,OpenCV2.4.9
這次給出 64位 這個信息,有沒有感到困惑?其實真正原因是,我之前編譯總是失敗以至於都懷疑是不是只有32位的才可以。實踐證明,64也是可以噠,放心撒~~~
同理也給出了OpenCV的版本,這是因為我在編譯的時候遇到了ROS找不到Opencv的問題,其實,在安裝ROS的時候由於安裝的是 full 版所以 OpenCV 自然也是已經安裝上了,但是安裝路徑我卻沒有查到。Indigo 默認的安裝的 OpenCV 版本是 2.4.8,然而我電腦上自己自定義路徑安裝了 OpenCV2.4.9 等版本,沒有 2.4.8。反正不管怎么說,就是ROS找不到OpenCV,於是我就把 2.4.9 版本的手動移到了 /usr/include 下,然后,,然后竟然通過了(即使不是2.4.8版本)。
已經安裝了 ROS 的朋友們自己看看在 /usr/include 下是不是有 opencv 這個文件夾,如果沒有編譯的時候可能會出錯。反正我的是沒有,也不知道是不是自己之前不小心刪掉了,沒有也沒關系,下面會給出相應的解決方法。
還有一點,按照原作者網頁編譯了N次,均告失敗。翻了各種帖子,最終只有這一篇讓我解決了大部分問題,是用 catkin_make 編譯的,然后又綜合別的網頁最后總算是成功了。
還要說明的一點是,需要把之前編譯 ORB 時設置的環境變量注釋掉,否則不能運行這個,可能會提示找不到啟動文件。不只是這次,以后每次重新編譯slam程序時,只要涉及到了修改 ~/.bashrc 中的環境變量都需要把以前的 ROS_PACKAGE_PATH 之類的都注釋掉。運行哪個 slam 程序就取消哪個注釋,不用的都要注釋掉。
下面是具體步驟:
1、創建工作空間並獲取源碼
打開終端窗口,輸入:
mkdir -p ~/lsd-slam_ws/src
初始化工作空間:
cd ~/lsd-slam_ws
catkin_make
source devel/setup.bash
下載源碼:
cd src
git clone https://github.com/tum-vision/lsd_slam.git
下載完后大概這樣:
然后切換分支:
cd lsd_slam
git checkout catkin
效果如下:
然后下載用到的數據包,鏈接在此,下載好后移到 ~/lsd-slam_ws 下。
2、安裝依賴項及更改文件
首先安裝依賴項,(為了避免輸出看起來太亂,建議新開一個窗口執行):
sudo apt-get install ros-indigo-libg2o ros-indigo-cv-bridge liblapack-dev libblas-dev freeglut3-dev libqglviewer-dev libsuitesparse-dev libx11-dev
安裝好后修改 lsd_slam/lsd_slam_viewer 下的 package.xml
以及修改 lsd_slam/lsd_slam_core 下的 package.xml
在文件上右鍵選擇 open-with - - gedit 編輯即可,兩個文件中都添加內容:
<build_depend>cmake_modules</build_depend>
<run_depend>cmake_modules</run_depend>
保存退出,
然后編輯 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)
然后在 102、108和113行左右的 target_link_libraries 的括號里最后面添加 X11 庫:
保存退出。這里啰嗦一下,由於之前我安裝的 OpenCV2.4.9 路徑不是默認路徑,而是自己定義的 ~/opencv-2.4.9/share/OpenCV(為了方便版本切換),所以這里的路徑才是這樣的,同時也要將OpenCV的環境變量也從 2.4.13 切換成 2.4.9(切換環境變量后新開的窗口才會更新變量,原來已開的窗口保存的是更新前的變量,這個上篇文章也說過了) 。多版本 OpenCV 的安裝,環境變量的配置與切換可以參考我上篇編譯 ORB 的文章,這里就不再贅述了。
然后編輯 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)
與剛才不同的是,這里我們要再多修改一個地方,在第 73 行下插入一行:
add_dependencies(viewer lsd_slam_viewer_generate_messages_cpp)
之前我沒有添加這句,結果出現了這種錯誤:
In file included from /home/gao/lsd-slam_ws/src/lsd_slam/lsd_slam_viewer/src/main_viewer.cpp:25:0:
/home/gao/lsd-slam_ws/src/lsd_slam/lsd_slam_viewer/src/PointCloudViewer.h:30:41: fatal error: lsd_slam_viewer/keyframeMsg.h: No such file or directory
#include "lsd_slam_viewer/keyframeMsg.h"
然后在 target_link_libraries 的括號里最后面添加 X11 庫 (79 行左右):
保存退出。
3、編譯
把依賴裝好,並且更改為文件后,回到原來的窗口,然后開始編譯(如果不回到原來窗口而是新開窗口編譯的話,別忘了先source相關的setup文件,前面的文章已經說過了):
cd ~/lsd-slam_ws
catkin_make
然后我最開始提到的問題就出現了,找不到 opencv ,如圖:
怎么辦呢?沒有就給它弄過去唄,首先進入 opencv2.4.9 的安裝文件夾,我的是 ~/opencv-2.4.9,然后進入 include 文件夾,就可以看到 opencv 文件夾了:
然后把這個 opencv 文件夾拷到 /usr/include 下
然后重新 catkin_make,最后結果如圖:
4、運行
新開窗口啟動 ROS:
roscore
新開窗口,運行 viewer:
cd ~/lsd-slam_ws
source devel/setup.bash
rosrun lsd_slam_viewer viewer
然后會彈出一個名稱為 PointCloud Viewer 的窗口,由於沒有數據輸入,故黑屏。
新開窗口,運行 core:
cd ~/lsd-slam_ws
source devel/setup.bash
rosrun lsd_slam_core live_slam image:=/image_raw camera_info:=/camera_info
然后顯示 “WAITING for ROS camera calibration!”
注:要盡快運行數據包,否則程序長時間檢測不到輸入就會自動停止,就需要重新啟動了。
在新開窗口運行數據包:
cd ~/lsd-slam_ws
rosbag play LSD_room.bag
效果如圖:
當你“看完了所有的帖子”,“嘗試了所有的方法之后”還是解決不了問題,但這並不代表沒有辦法可以解決這個問題,只是你看的還不夠多,做的還不夠多。你以為你看了所有,嘗試了所有,事實是你忽略了太多東西。
這是這次我最大的收獲,共勉!!