rgbdslam_v2在Ubuntu18.04+ROS_melodic的運行以及相關問題解決

軟硬件

(1)軟件:裝有ROS_melodic的Ubuntu18.04系統
(2)硬件:臺式機和kinectV1攝像頭

下載、安裝、運行以及遇到的問題

主要參考:https://blog.csdn.net/qq_29828623/article/details/60765043
https://blog.csdn.net/zhuoyueljl/article/details/78536996?reload

建立ROS工作空間、下載rgbdslam_v2、安裝

注意:如果是ros其他的版本可以把melodic改成對應的版本

#Prepare Workspace
source /opt/ros/melodic/setup.bash 
mkdir -p ~/rgbdslam_catkin_ws/src
cd ~/rgbdslam_catkin_ws/src
catkin_init_workspace
cd ~/rgbdslam_catkin_ws/
catkin_make
source devel/setup.bash

#Get RGBDSLAM
cd ~/rgbdslam_catkin_ws/src
wget -q http://github.com/felixendres/rgbdslam_v2/archive/indigo.zip
unzip -q indigo.zip
cd ~/rgbdslam_catkin_ws/

#Install
rosdep update
rosdep install rgbdslam
catkin_make 

遇到的問題及解決方案

catkin_make時遇到的一些問題以及解決方案:


1. opencv版本問題,我一開始使用的是opencv4.1.0 
 (目前,這樣修改可以編譯通過,但是之後還會遇到一些問題,最後我是鏈接了opencv3.2.0才成功運行的)
 
openni_listener.cpp   ->     需要修改drawKeypoints()最後一個參數5爲cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS
cv::drawKeypoints(visualization_img_, new_node->feature_locations_2d_, kp_img, cv::Scalar(0,255,0), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);

graph_mgr_io.cpp ->	需要修改drawKeypoints()最後一個參數
cv::drawKeypoints(canvas, newernode->feature_locations_2d_, canvas, cv::Scalar(255), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);

2. g2o版本問題,graph_manager.cpp 和 transformation_estimation.cpp會出現問題
需要使用作者提供的g2o庫(當然用自己下載的g2o庫也可以,得修改相關代碼)

3. misc.cpp ->  需要修改804行內聯函數round()的函數名,我改成了ROUND(),880和881行函數調用也要一起修改

4. feature_adjuster.cpp  ->  ORB::create需要修改倒數第三個參數0爲ORB::HARRIS_SCORE
detector = ORB::create(10000, 1.2, 8, 15, 0, 2, ORB::HARRIS_SCORE, 31, static_cast<int>(thresh_));

提前說明:以上的問題修改花了我大半天的時間,運行後出現了“required process[rgbdslam-1] has died”…Iinitiating down問題。開始以爲是第二個鏈接的博客中所說的g2o與pcl衝突問題,花了大半天時間卸載並安裝g2o與pcl-1.8,結果還是出現了這個問題。這次,仔細的看了下發現有程序運行終止是由於cv::Exception。刪除了build和delve文件夾後,重新catkin_make,發現雖然編譯成功了,但是最後會出現下圖所示的警告,大概意思應該是opencv版本不是3.2.0導致的。(一開始把4.1.0改成了3.4.7還是不行,只能下載3.2.0了)
opencv_conflict於是,還是老老實實的用作者提供的g2o庫pcl-1.8,以及opencv3.2.0opencv_contrib-3.2.0。果然,上面四個問題中只出現了第3個問題,最後也能成功運行了(~自己測試的結果,並不代表所有人)

g2o和pcl-1.8的安裝參考上面鏈接的第二個博客。

安裝opencv3.2.0時遇到的問題及解決方案:

opencv的編譯:CMAKE_INSTALL_PREFIX是選擇安裝的目錄,當需要管理多個版本時,安裝在指定位置。如圖下圖所示,這裏選擇安裝在ros的工作空間目錄下,sudo make install後會出現bin, include, lib, share文件夾。值得注意的是,opencv的cmake文件在share/OpenCV文件夾下,這是rgbdslam_v2的CMakeLists文件需要設置的OpenCV_DIR。
Project_tree

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=~/rgbdslam_catkin_ws -D OPENCV_EXTRA_MODULES_PATH=~/rgbdslam_catkin_ws/install_lib/opencv_contrib-3.2.0/modules -DENABLE_PRECOMPILED_HEADERS=OFF ..

另一個參數OPENCV_EXTRA_MODULES_PATH是設置opencv附加模塊的路徑,即opencv_contrib-3.2.0中的modules文件夾。-DENABLE_PRECOMPILED_HEADERS=OFF加上可以解決/usr/include/c++/7/cstdlib:75:15: fatal error: stdlib.h: No such file or directory問題。
出現ICV: Downloading ippicv_linux_20151201downloading protobuf-cpp-3.1下載超時的問題,下載這兩個包,然後放到指定位置。
ippicv_linux_20151201下載地址
protobuf-cpp-3.1下載地址
兩個壓縮包分別放到opencv-3.1.0/3rdparty/ippicv/downloads/linuxopencv_contrib-3.2.0/modules/dnn/.download/bd5e3eed635a8d32e2b99658633815ef/v3.1.0下。(注意,如果是在圖形界面操作,.download文件需要顯示隱藏文件夾才能看到)

g2o版本的管理:

由於要用到新版本的g2o,因此不得不刪除了舊版本,重新安裝了新版本。再運行rgbd-slam-v2的時候,就出現瞭如下圖錯誤,可以知道是g2o出了問題。

那麼問題又來了,要麼改源代碼,要麼管理新舊g2o版本。舊版本的g2o可以像上面的OpenCV一樣選擇安裝目錄,此處選擇安裝在~/rgbdslam_catkin_ws,g2o的G2OConfig.cmake文件在~/rgbdslam_catkin_ws/lib/g2o中。然後設置G2O_DIR,CMakeLists文件中的g2o相關代碼如下。
在這裏插入圖片描述
此處有坑: 如下圖所示,作者設置了在項目下的cmake-modules文件夾中尋找.cmake文件,因此優先在這個文件夾中有FindG2O.cmake文件(被坑了好久,所以猜測這個優先級高於set()語法),需要刪除這個文件,才能自己設置的G2O_DIR才生效。
在這裏插入圖片描述

再次編譯、運行rgbdslam_v2

接下來終於可以再次編譯rgbdslam_v2了,在重新catkin_make之前,rgbdslam_v2的CMakeLists文件需要設置的OpenCV_DIR,加下下面的設置代碼(主要是尋找opencv的cmake文件的路徑,可以根據自己的情況設置):

set(OpenCV_DIR ~/rgbdslam_catkin_ws/share/OpenCV)

set_opencv_dir
同時,將CMakeLists中第6行的設置改成

set(USE_SIFT_GPU  0 CACHE BOOL "build with support for siftgpu") 

準備開始運行

  1. 打開一個終端輸入
roscore
  1. 打開第二個終端輸入
roslaunch openni_launch openni.launch device_id:=#2

執行上面腳本可能會遇到primesense_Warning: USB events thread - failed to set priority. This might cause loss of data...,可以在運行openni_launch前先運行sudo -s參見此處

  1. 打開第三個終端輸入
source ~/rgbdslam_catkin_ws/devel/setup.bash
roslaunch rgbdslam rgbdslam.launch

安裝:openni + ros接口

sudo apt-get install ros-melodic-openni-camera ros-melodic-openni-launch

更詳細的內容,參見此處此處

運行過程中遇到的問題以及解決方案

錯誤提示

[camera/camera_nodelet_manager-1] process has died [pid 5531, exit code -11, cmd /opt/ros/melodic/lib/nodelet/nodelet manager __name:=camera_nodelet_manager __log:=/home/xshen/.ros/log/5dfeecc6-ea97-11e9-8369-049226d630de/camera-camera_nodelet_manager-1.log].
log file: /home/xshen/.ros/log/5dfeecc6-ea97-11e9-8369-049226d630de/camera-camera_nodelet_manager-1*.log

解決
Now it is necessary to specify the device number to connect to. In my case:
roslaunch openni_launch openni.launch device_id:=#2
(就是在最後加上device_id)

錯誤提示

DRM_IOCTL_I915_GEM_APERTURE failed: Invalid argument

解決

sudo apt-get remove beignet
sudo apt purge beignet
sudo apt-get remove beignet-opencl-icd
sudo apt purge beignet-opencl-icd

錯誤提示

[ERROR] Failed to contact master at [localhost:11311]. Retrying...
[ERROR] [1446531999.044935824]: [registerPublisher] Failed to contact master at [localhost:11311]. Retrying...

解決
請檢查 roscore 是否正常打開。每次進行運行測試時都要首先運行 roscore。

終於終於,成功運行結果如下(本人已哭~~)

rgbdslam_v2_run

在數據集上測試

下載鏈接:http://vision.in.tum.de/data/datasets/rgbd-dataset/download#freiburg1_xyz
需要下載ROS.bag格式的數據。

準備開始運行(拔掉kinect數據線)

  1. 打開一個終端輸入
roscore
  1. 打開第二個終端輸入
source ~/rgbdslam_catkin_ws/devel/setup.bash
roslaunch rgbdslam rgbdslam.launch
  1. 打開第三個終端(進入到.bag文件所在目錄)輸入
rosbag play rgbd_dataset_freiburg1_xyz.bag (自己的數據集名字)

在RGBDSLAM的GUI界面上按空格鍵(沒有顯示的話,就多按幾下),運行結果如下
Data_Set_result

錯誤提示

Warning: TF_OLD_DATA ignoring data from the past for frame kinect at time 1.30503e+09 according to authority unknown_publisher

解決

需要將 rgbdslam.launch 文件中
<param name="config/topic_image_depth"             value="/camera/depth_registered/sw_registered/image_rect_raw"/>
改爲
<param name="config/topic_image_depth"             value="/camera/depth/image "/>

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