基於Ubuntu 16.04,手持Kinect v2,實時跑通ORB_SLAM2


一、安裝ROS

ubuntu16.04對應的ROS版本為Kinetic,ROS Wiki傳送門:http://wiki.ros.org/cn/kinetic/Installation/Ubuntu,有詳細過程

二、創建並設置ROS工作空間

創建——打開終端(Ctrl+Alt+T),執行以下命令(catkin_ws是隨意取的文件夾名稱)

1 mkdir -p ~/catkin_ws/src 2 cd ~/catkin_ws/src 3 catkin_init_workspace

編譯——在上一步的終端中接着操作

1 cd ~/catkin_ws 2 catkin_make

設置環境變量——接上一步,打開.bashrc文件,將source ~/catkin_ws/devel/setup.bash寫入該文件最后一行,然后保存關閉文件,關閉終端

gedit ~/.bashrc

三、安裝依賴

1.安裝opencv(上文已有步驟,傳送門:https://www.cnblogs.com/pgzhanglin/p/13232863.html

2.安裝Kinect 2驅動libfreenect2

 1 cd catkin_ws/src  2 git clone https://github.com/OpenKinect/libfreenect2.git  3 cd libfreenect2  4 sudo apt-get install build-essential cmake pkg-config  5 sudo apt-get install libusb-1.0-0-dev  6 sudo apt-get install libturbojpeg libjpeg-turbo8-dev  7 sudo apt-get install libglfw3-dev  8 mkdir build && cd build  9 cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2 10 make 11 make install

PS:要找到libfreenect2,需要為基於cmake的第三方應用程序指定“cmake -Dfreenect2_DIR=$HOME/freenect2/lib/cmake/freenect2”(暫時沒用)

 

3.設置udev規則,使得設備可以訪問libfreenect2,並將設備接入電腦進行測試

1 sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/ 2 ./bin/Protonect

 

 4.安裝Kinect驅動程序與ROS之間的橋——iai_kinect 2

1 cd ~/catkin_ws/src/ 2 git clone https://github.com/code-iai/iai_kinect2.git 3 cd iai_kinect2 4 rosdep install -r --from-paths . 5 cd ~/catkin_ws 6 catkin_make -DCMAKE_BUILD_TYPE="Release"

 四、ROS下測試Kinect V2設備

1.修改.bashrc文件,在最后一行添加代碼 export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/zhanglin/catkin_ws/src/ORB_SLAM2/Examples/ROS 然后保存關閉文件

gedit ~/.bashrc

 

2.ROS啟動kinect v2

roslaunch kinect2_bridge kinect2_bridge.launch

3.接上步,打開一個新的終端

rosrun kinect2_viewer kinect2_viewer

五、使用Kinect V2傳感器,實時運行ORB_SLAM2

1.編譯ROS環境下的ORB_SLAM2(開始各種報錯,慢慢處理)

1 cd ~/catkin_ws/src/ORB_SLAM2/ 2 chmod +x build_ros.sh 3 ./build_ros.sh

2.出現的錯誤及解決方案(這里只列出我制作教程時出現的一個錯誤及解決方案,其他錯誤視情況而定)

鎖定兩文件路徑

locate boost_system
locate boost_filesystem

前往系統給出的路徑中,將libboost_system.so、libboost_system.so.1.58.0等四個文件復制到/Home/catkin_ws/src/ORB_SLAM2/lib路徑下,如下圖。

打開ORB_SLAM2/Examples/ROS/ORB_SLAM2文件夾下的CmakeLists.txt文件,在圖示位置添加兩行代碼:

${PROJECT_SOURCE_DIR}/../../../lib/libboost_filesystem.so

${PROJECT_SOURCE_DIR}/../../../lib/libboost_system.so

然后再次執行,成功!

1 cd ~/catkin_ws/src/ORB_SLAM2/ 2 chmod +x build_ros.sh 3 ./build_ros.sh

3.在ROS中啟動Kinect2

roslaunch kinect2_bridge kinect2_bridge.launch

4.打開新終端,鍵入rostopic list,查看Kinect2發布的話題

rostopic list

5.根據上一步發布的topic,更改ROS里面訂閱的內容

將ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_rgbd.cc的內容更改為

message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, "/kinect2/qhd/image_color_rect", 1); 

message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "/kinect2/qhd/image_depth_rect", 1);

6.重新編譯工程

1 cd ~/catkin_ws/src/ORB_SLAM2/ 2 chmod +x build_ros.sh 3 ./build_ros.sh

7.創建kinect2_qhd.yaml文件

在ORB_SLAM2/Examples/RGB_D文件夾下,復制一份TUM1.yaml文件,將其重命名為kinect2_qhd.yaml(里面是深度相機的內參,我們暫且用TUM1的參數,等以后我們可以自己實際標定一下該深度相機,屆時可以使用我們標定好的參數)

8.運行

roslaunch kinect2_bridge kinect2_bridge.launch

打開新終端,接着輸入

rosrun ORB_SLAM2 RGBD ~/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt ~/catkin_ws/src/ORB_SLAM2/Examples/RGB-D/kinect2_qhd.yaml

 

9.完結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM