最近准备弄一下ORB-SLAM的实验,先写下本博文记录一下Kinect2的配置~
先给出一个视频看看效果哈~
基于 Kinec的3D重建
最终的建图效果
基于 Kinec的3D重(最终建图效果)
目录
安装Kinect2的驱动
#下载libfreenect2源代码
git clone https://github.com/OpenKinect/libfreenect2.git
#安装cmake编译器和必要的依赖
sudo apt-get install build-essential cmake pkg-config libturbojpeg libjpeg-turbo8-dev mesa-common-dev freeglut3-dev libxrandr-dev libxi-dev
sudo apt-get install libglfw3-dev
sudo apt-get install libopenni2-dev
#安装最新版libusb-dev
sudo apt-get install libusb-dev
#缺少这个依赖下面会报错[来自github解答](https://github.com/OpenKinect/libfreenect2/issues/984)
sudo apt-get install libturbojpeg0-dev
#开始编译过程
cd libfreenect2
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2 #地址可以修改,但是后面对应也有些需要修改。
make
sudo make install
#设定udev rules:(填好自己libfreenect2的路径)
sudo cp ~/libfreenect2/platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/
然后运行下面代码测试
./bin/Protonect
./bin/Protonect gl # to test OpenGL support.
./bin/Protonect cl # to test OpenCL support.
./bin/Protonect cpu # to test CPU support.
貌似报错了,试试重启
发现还是不行,原来是插头的问题,换一个口就可以了~
接下来安装iai_kinect2。但此处改为安装一个比较好的工程(https://github.com/ArghyaChatterjee/SDK-Installation-ROS-Wrapper-for-Kinect-v2-on-Ubuntu-18.04):
git clone https://github.com/ArghyaChatterjee/SDK-Installation-ROS-Wrapper-for-Kinect-v2-on-Ubuntu-18.0
cd iai_kinect2
rosdep install -r --from-paths
rosdep install --from-paths ~/catkin_ws/src/SDK-Installation-ROS-Wrapper-for-Kinect-v2-on-Ubuntu-18.04/iai_kinect2 --ignore-src -r
然后cm一下
cd ~/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE="Release"
貌似是源文件不是cpp文件,重命名一下即解决。但还是报错
将kinect2_viewer的CMakeLists.txt修改如下:
cmake_minimum_required(VERSION 2.8.3)
project(kinect2_viewer CXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBT_USE_DOUBLE_PRECISION -Wall")
# Unused warnings
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wuninitialized -Winit-self -Wunused-function -Wunused-label -Wunused-variable -Wunused-but-set-variable -Wunused-but-set-parameter")
# Additional warnings
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Warray-bounds -Wtype-limits -Wreturn-type -Wsequence-point -Wparentheses -Wmissing-braces -Wchar-subscripts -Wswitch -Wwrite-strings -Wenum-compare -Wempty-body -Wlogical-op")
# Check for c++11 support
INCLUDE(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
IF(COMPILER_SUPPORTS_CXX11)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
ELSEIF(COMPILER_SUPPORTS_CXX0X)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
ELSE()
MESSAGE(ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
ENDIF()
find_package(catkin REQUIRED COMPONENTS roscpp rostime std_msgs sensor_msgs message_filters cv_bridge image_transport compressed_image_transport compressed_depth_image_transport kinect2_bridge)
## System dependencies are found with CMake's conventions
find_package(OpenCV REQUIRED)
find_package(OpenMP)
find_package(PCL REQUIRED)
find_package(Pangolin REQUIRED)
if(OPENMP_FOUND)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()
################################################
## Declare ROS messages, services and actions ##
################################################
###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if you package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES kinect2_viewer
# CATKIN_DEPENDS other_catkin_pkg
# DEPENDS system_lib
)
###########
## Build ##
###########
# Display additional files in qtcreator
execute_process(COMMAND find ${PROJECT_SOURCE_DIR} -type f OUTPUT_VARIABLE FILES_STRING)
string(REPLACE "\n" ";" FILES_LIST ${FILES_STRING})
add_custom_target(additional_files_${PROJECT_NAME}
SOURCES
${FILES_LIST}
)
include_directories(include
${catkin_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}
${kinect2_bridge_INCLUDE_DIRS}
)
add_executable(kinect2_viewer src/viewer.cpp)
target_link_libraries(kinect2_viewer
${catkin_LIBRARIES}
${OpenCV_LIBRARIES}
${PCL_LIBRARIES}
${kinect2_bridge_LIBRARIES}
)
include_directories(
${Pangolin_INCLUDE_DIRS}
/home/kwanwaipang/catkin_ws/src/ORB_SLAM2/include
)
#############
## Install ##
#############
# all install targets should use catkin DESTINATION variables
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
# install(PROGRAMS
# scripts/my_python_script
# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )
## Mark executables and/or libraries for installation
install(TARGETS kinect2_viewer
# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
## Mark cpp header files for installation
# install(DIRECTORY include/${PROJECT_NAME}/
# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
# FILES_MATCHING PATTERN "*.h"
# PATTERN ".svn" EXCLUDE
# )
## Mark other files for installation (e.g. launch and bag files, etc.)
# install(FILES
# # myfile1
# # myfile2
# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
# )
#############
## Testing ##
#############
## Add gtest based cpp test target and link libraries
# catkin_add_gtest(${PROJECT_NAME}-test test/test_kinect2_bridge.cpp)
# if(TARGET ${PROJECT_NAME}-test)
# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
# endif()
## Add folders to be run by python nosetests
# catkin_add_nosetests(test)
target_link_libraries(kinect2_viewer
${catkin_LIBRARIES}
${OpenCV_LIBRARIES}
${PCL_LIBRARIES}
${kinect2_bridge_LIBRARIES}
${Pangolin_LIBRARIES}
/home/kwanwaipang/catkin_ws/src/ORB_SLAM2/lib/libORB_SLAM2.so
)
即可正常编译
测试
roslaunch kinect2_bridge kinect2_bridge.launch
rosrun kinect2_viewer kinect2_viewe
安装rtabmap
sudo apt-get install ros-melodic-rtabmap-ros
然后运行
roslaunch kinect2_bridge kinect2_bridge.launch
roslaunch rtabmap_ros rgbd_mapping_kinect2.launch resolution:=hd
开启rviz
roslaunch kinect2_bridge kinect2_bridge_custom_rviz_qhd.launch #to open qhd video stream in ROS.
roslaunch kinect2_bridge kinect2_bridge_custom_rviz_hd.launch #to open hd video stream in ROS.
roslaunch kinect2_bridge kinect2_bridge_custom_rviz_sd.launch #to open sd video stream in ROS.
整体效果如视频所示
rtabmap
http://wiki.ros.org/rtabmap_ros
Real-Time Appearance-Based Mapping。这是一个基于具有实时约束的全局环路闭合检测器的RGB-D SLAM方法,建立的应该是稠密SLAM地图
这个包可以用于创建环境的3D点云以及用于导航的2D的栅格地图
学习教程可以参考:https://www.ncnynl.com/archives/201806/2453.html
补充
按照网上的资料安装好驱动如下:
./bin/Protonect
然后安装包
再运行
roscore
roslaunch kinect2_bridge kinect2_bridge.launch
rosrun kinect2_viewer kinect2_viewer
roslaunch kinect2_bridge kinect2_bridge.launch depth_method:=opengl reg_method:=cpu
查看图像
rosrun kinect2_viewer kinect2_viewer sd cloud
rosrun rqt_image_view rqt_image_view
rosrun image_view image_view image:=/kinect2/hd/image_color
参考资料:
https://github.com/ArghyaChatterjee/SDK-Installation-ROS-Wrapper-for-Kinect-v2-on-Ubuntu-18.04
https://blog.csdn.net/moumourenaini/article/details/103377012
https://blog.csdn.net/moumourenaini/article/details/103377012
https://blog.csdn.net/p942005405/article/details/87978803
https://blog.csdn.net/yeluohanchan/article/details/75769512
https://www.cnblogs.com/gaoxiang12/p/5161223.html