由于最近想在学习ROS机器人操作系统,发现很多机器人都会用kinect作为外部视觉传感器,用于导航和建图等。于是,我也想跳坑一下kinect(毕竟实验室闲置了这么多kinect2)。于是乎,边按教程来装kinect的驱动,然后一边记录安装流程,为以后再安装的时候提供一个参考,避免重复造轮子。首先按照这个博主的博客(该博主使用的是Ubuntu14.04,ROS-indigo,我使用的kinetic)来安装ROS下的kinect2驱动,把kinect2给驱动起来,才是后续实现各种功能的前提!
本人的Linux系统配置是:64位、Ubuntu16.04、ROS-kinetic。默认已经安装好了ROS,并可以无错误的运行roscore等。
1.下载libfreenect2源码,看其他教程我以为要把libfreenect2下载到~/catkin_ws/src,其实不是:
#注意libfreenect是个独立的kinect驱动,应该安装在ROS工作空间之外,我把它下载到了/home目录下了
git clone https://github.com/OpenKinect/libfreenect2.git
cd libfreenect2
2.安装编译工具:
sudo apt-get install build-essential cmake pkg-config
3.安装 libusb. 版本需求 >= 1.0.20:
sudo dpkg -i debs/libusb*deb
4.安装 TurboJPEG:
sudo apt-get install libturbojpeg libjpeg-turbo8-dev
5.安装 OpenGL:
sudo dpkg -i debs/libglfw3*deb
sudo apt-get install -f
sudo apt-get install libgl1-mesa-dri-lts-vivid
6.Build:
#当前目录为/home/用户名/libfreenect,即所下载的libfreenect文件夹下
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2 -DENABLE_CXX11=ON
make
make install
针对上面cmake
命令的说明, 第一个参数, 是特别指定安装的位置, 你也可以指定别的你觉得高兴的地方, 但一般标准的路径是上述示例路径或者/usr/local
。 第二个参数是增加C++11的支持。
7.设定udev rules:
sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/
#上面的运行后,如果提示找不到文件或目录,可以运行下面的命令
sudo cp ~/catkin_ws/src/libfreenect2/platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/
然后重新插拔Kinect2.
8.一切搞定, 现在可以尝试运行Demo程序:
#此时你所在的目录应该在libfreenect/build/,然后再运行以下命令
./bin/Protonect
不出意外, 应该能够看kinect的图像。
9.首先创建一个ros工作空间/并完成初始化:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ..
catkin_make
10.在ROS环境里使用Kinect2, 主要依靠iai-kinect2这个包。利用命令行从Github上面下载工程源码到工作空间内src文件夹内:
#还是到刚才那个工作空间
cd ~/catkin_ws/src/
git clone https://github.com/code-iai/iai_kinect2.git
cd iai_kinect2
rosdep install -r --from-paths . #注意最后这还有个点
cd ~/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE="Release"
在运行 rosdep install -r --from-paths . 出问题了。
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
kinect2_viewer: Cannot locate rosdep definition for [kinect2_bridge]
iai_kinect2: Cannot locate rosdep definition for [kinect2_registration]
kinect2_calibration: Cannot locate rosdep definition for [kinect2_bridge]
kinect2_bridge: Cannot locate rosdep definition for [kinect2_registration]
#将原来的:
rosdep install -r --from-paths .
#替换为:
rosdep install --from-paths ~/catkin_ws/src/iai_kinect2 --ignore-src -r
在运行 catkin_make -DCMAKE_BUILD_TYPE="Release" 时出问题了。
CMake Error at iai_kinect2/kinect2_bridge/CMakeLists.txt:22 (find_package):
Could not find a package configuration file provided by "freenect2" with
any of the following names:
freenect2Config.cmake
freenect2-config.cmake
Add the installation prefix of "freenect2" to CMAKE_PREFIX_PATH or set
"freenect2_DIR" to a directory containing one of the above files. If
"freenect2" provides a separate development package or SDK, be sure it has
been installed.
-- Configuring incomplete, errors occurred!
See also "/home/zsy/camyros_ws/kinect_ws/build/CMakeFiles/CMakeOutput.log".
See also "/home/zsy/camyros_ws/kinect_ws/build/CMakeFiles/CMakeError.log".
Makefile:1340: recipe for target 'cmake_check_build_system' failed
make: *** [cmake_check_build_system] Error 1
Invoking "make cmake_check_build_system" failed
这个问题困扰了我好久,虽然很多博客,和iai_kinect2的github上都有解决方案,但是作为初学者的我还是一脸懵比。。。
这个前面libfreenect2安装的位置不是标准的两个路径下, 需要提供参数指定libfreenect2所在路径:
catkin_make -Dfreenect2_DIR=path_to_freenect2/lib/cmake/freenect2 -DCMAKE_BUILD_TYPE="Release"
是啥意思啊?