Ubuntu 16.04 + Kinect 2的环境配置及简单保存图像操作(ROS消息转cv::Mat)

本文环境配置部分主要参考如下链接:
https://blog.csdn.net/sunbibei/article/details/51594824

文章目录

  • 1.环境配置
    • libfreenect2
    • iai-kinect2
  • 2.利用Kinect 2保存图像

1.环境配置

在已经安装ROS-Kinetic的基础上,进行环境配置:
在ROS环境里使用Kinect2, 主要依靠iai-kinect2这个包。 Github地址: https://github.com/code-iai/iai_kinect2 。

首先, 需要安装其libfreenect2, 步骤如下(以下默认以ubuntu14.04或更新的版本是系统版本, 别的系统, 参见原始网站说明):

libfreenect2

  • 下载 libfreenect2 源码
    git clone https://github.com/OpenKinect/libfreenect2.git
    cd libfreenect2
  • 下载upgrade deb 文件
    cd depends; ./download_debs_trusty.sh
  • 安装编译工具
    sudo apt-get install build-essential cmake pkg-config
  • 安装 libusb. 版本需求 >= 1.0.20.
    sudo dpkg -i debs/libusb*deb
  • 安装 TurboJPEG
    sudo apt-get install libturbojpeg libjpeg-turbo8-dev
  • 安装 OpenGL
    sudo dpkg -i debs/libglfw3*deb
    sudo apt-get install -f
    sudo apt-get install libgl1-mesa-dri-lts-vivid
  • 还有一些可选项,如:OPCL、CUDA等,可参见上述参考链接。
  • Build
    cd ..
    mkdir build && cd build
    cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2 -DENABLE_CXX11=ON
    make
    sudo make install(默认安装到本地)
  • 设定udev rules:
    sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/
    然后重新插拔Kinect2.
  • 尝试运行Demo程序:
    ./bin/Protonect, 不出意外, 应该能够看到如下效果:
    Ubuntu 16.04 + Kinect 2的环境配置及简单保存图像操作(ROS消息转cv::Mat)_第1张图片

iai-kinect2

该包为ROS包,使用时直接放到工作区间编译即可。

cd ~/catkin_ws/src/
git clone https://github.com/code-iai/iai_kinect2.git
cd ~/catkin_ws
catkin_make

运行Launch文件,启动kinect节点。

roslaunch kinect2_bridge kinect2_bridge.launch

此时应该没有报错,一切正常。
可以在rqt中查看图像。

2.利用Kinect 2保存图像

以下列出核心代码,主要为ros图像消息转cv::Mat。
所需头文件为:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

以下为保存图像函数:

void saveimage(const sensor_msgs::ImageConstPtr& color) 
{
  std::ostringstream oss;
  oss.str("");
  oss << "./" << std::setfill('0') << std::setw(4) << image_frame;
  // 所有文件都保存在当前路径下
  const std::string baseName = oss.str();
  const std::string colorName = baseName + "_color.jpg";
  OUT_INFO("saving color: " << colorName);
  //转换图像
  cv::Mat image;
  image = cv_bridge::toCvShare(color, "bgr8")->image;
  cv::imwrite(colorName, image);
  OUT_INFO("saving complete!");
  ++image_frame;
}

主要将ROS中的sensor_msgs::Image类型转换为cv::Mat,以便于利用open cv直接处理。
到此结束。

你可能感兴趣的:(编程,ROS,Linux)