1. 程式人生 > >Ubuntu16.04 ros Kinect v2下執行RGBD-SLAM_v2

Ubuntu16.04 ros Kinect v2下執行RGBD-SLAM_v2

1、軟硬體

軟體--裝有ROS kinetic ubuntu 16.04

硬體--筆記本、kinect2攝像頭  turtlebot2

2.ROS 安裝

官網安裝http://wiki.ros.org/kinetic/Installation/Ubuntu

3.kinectv2 安裝

https://blog.csdn.net/qq_33835307/article/details/81272377

4.建立catkin 工作空間存放專案

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ../
catkin_make

cd ~/catkin_ws/src
git clone https://github.com/felixendres/rgbdslam_v2

此版本CMakelists是基於的pcl1.7,我們要改成1.8,否則編譯好之後執行會崩潰。

5.安裝g2o

sudo apt-get install cmake libeigen3-dev libsuitesparse-dev libqt4-dev qt4-qmake libqglviewer-dev qt5-qmake

下載g2o:g2o地址: https://github.com/felixendres/g2o

mkdir build
cd build
cmake ..
make
sudo make install

6.pcl安裝

pcl1.8地址:https://github.com/PointCloudLibrary/pcl/archive/pcl-1.8.0.tar.gz

在pcl-pcl-1.8.0目錄下,編譯

mkdir build
cd build
cmake ..
make
sudo make install

 7.編譯RGBDSLAM

  將在專案的cmakelsits檔案中將pcl1.7改成1.8,並且加

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

編譯如下:

cd ~/catkin_ws
catkin_make

8.軟體測試

開啟kinect2相機

roslaunch kinect2_bridge kinect2_bridge.launch

如果您遇到了“required process[rgbdslam-2] has died”......Iinitiating down問題,請不要著急,該問題主要是由於rgbdslam依賴庫g2o和pcl不相容引起的;參考https://blog.csdn.net/zhuoyueljl/article/details/78536996

由於原作者給出的是kienct1不能採用的是kinect2,需要單獨建立launch 檔案,建立rgbdslam_kinect2.launch

內容如下:

<!-- This file shows the most important parameters in their default settings,
     to make them easily available for beginners.

     The openni driver has to be started seperately, e.g. with "roslaunch openni_launch openni.launch" -->
<launch> 
<node pkg="rgbdslam" type="rgbdslam" name="rgbdslam" cwd="node" required="true" output="screen"> 

<!-- Input data settings-->
 <param name="config/topic_image_mono"              value="/kinect2/qhd/image_color_rect"/> 
<param name="config/camera_info_topic"             value="/kinect2/qhd/camera_info"/>
 <param name="config/topic_image_depth"             value="/kinect2/qhd/image_depth_rect"/> 
<param name="config/topic_points"                  value=""/> <!--if empty, poincloud will be reconstructed from image and depth --> 

<!-- These are the default values of some important parameters --> 
<param name="config/feature_extractor_type"        value="ORB"/><!-- also available: SIFT, SIFTGPU, SURF, SURF128 (extended SURF), ORB. --> 
<param name="config/feature_detector_type"         value="ORB"/><!-- also available: SIFT, SURF, GFTT (good features to track), ORB. --> 
<param name="config/detector_grid_resolution"      value="3"/><!-- detect on a 3x3 grid (to spread ORB keypoints and parallelize SIFT and SURF) --> 
<param name="config/optimizer_skip_step"           value="15"/><!-- optimize only every n-th frame -->
 <param name="config/cloud_creation_skip_step"      value="2"/>

<!-- subsample the images' pixels (in both, width and height), when creating the cloud (and therefore reduce memory consumption) -->
 <param name="config/backend_solver"                value="csparse"/><!-- pcg is faster and good for continuous online optimization, cholmod and csparse are better for offline optimization (without good initial guess)--> <param name="config/pose_relative_to"              value="first"/><!-- optimize only a subset of the graph: "largest_loop" = Everything from the earliest matched frame to the current one. Use "first" to optimize the full graph, "inaffected" to optimize only the frames that were matched (not those inbetween for loops) --> 
<param name="config/maximum_depth"           value="2"/> <param name="config/subscriber_queue_size"         value="20"/> 
<param name="config/min_sampled_candidates"        value="30"/><!-- Frame-to-frame comparisons to random frames (big loop closures) -->
 <param name="config/predecessor_candidates"        value="20"/><!-- Frame-to-frame comparisons to sequential frames--> 
<param name="config/neighbor_candidates"           value="20"/><!-- Frame-to-frame comparisons to graph neighbor frames--> 
<param name="config/ransac_iterations"             value="140"/> 
<param name="config/g2o_transformation_refinement"           value="1"/> 
<param name="config/icp_method"           value="icp"/> <!-- icp, gicp ... --> <!--
<param name="config/max_rotation_degree"           value="20"/>
<param name="config/max_translation_meter"           value="0.5"/>

<param name="config/min_matches"           value="30"/>   

<param name="config/min_translation_meter"           value="0.05"/>
<param name="config/min_rotation_degree"           value="3"/>
<param name="config/g2o_transformation_refinement"           value="2"/>
<param name="config/min_rotation_degree"           value="10"/>

<param name="config/matcher_type"         value="SIFTGPU"/>
 --> 
</node> 
</launch>

執行該專案結果截圖如下:

 

8.硬體測試

安裝turtlebot,具體參考https://blog.csdn.net/weixin_43540678/article/details/84031363

具體步驟為:

1.將電腦連線裝置,開啟裝置開關
2.roslaunch rgbdslam openni+rgbdslam.launch,開啟程式直到畫面出現,再執行3
3.roslaunch turtlebot_bringup minimal.launch,啟動底座
4.roslaunch turtlebot_teleop keyboard_teleop.launch,啟動遙控

 

參考:

1.https://blog.csdn.net/weixin_43540678/article/details/84031363

2.https://blog.csdn.net/weixin_43540678/article/details/84031363

3.http://wiki.ros.org/kinetic/Installation/Ubuntu

4.https://blog.csdn.net/qq_33835307/article/details/81272377

5.https://blog.csdn.net/github_34965845/article/details/81118369