一、安裝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