Advertisement

ROS系统学习6---摄像头图像数据的采集

阅读量:

上篇文章我们深入探讨了利用OpenCV框架打开图像并将其数据传输出去的技术方案。这种方法有效解决了部分实际应用中的问题。然而,在工程实际应用中,我们通常会遇到实时获取图像数据的需求。因此仅仅依赖本地存储的图片文件是无法满足现代工程需求的。本篇文章将继续围绕这一主题展开讨论,在方法上与上一篇文章形成良好的呼应关系。

USB摄像头:

首先,请安装一个USB相机。安装好之后,请将该相机连接到电脑上。输入相应的命令:

复制代码
    ls /dev/v*

如果看到"/dev/video0",则表示摄像头被成功驱动了。

为了验证上面的说法,我们可以下载个程序看看摄像头拍到的画面:

复制代码
    sudo apt-get install camorama

装完输入

复制代码
    camorama

正常的话就可以看到画面了。

至此, 各项准备工作已顺利完成. ROS提供了众多开源解决方案来实现对USB设备数据的读取, 其中包括如usb_cam、gscam等模块. 然而, 在尝试过程中发现这些方案均存在不足(可能是由于所选摄像头具有独特特性), 因此本人采取直接利用OpenCV库进行数据读取的方式. 该方法仅需对上一篇介绍的rosOpenCV.cpp文件进行相应调整即可实现.

复制代码
 #include <ros/ros.h>

    
 #include <image_transport/image_transport.h>
    
 #include <opencv2/highgui/highgui.hpp>
    
 #include <cv_bridge/cv_bridge.h>
    
 #include <stdio.h>
    
  
    
 int main(int argc, char** argv)
    
 {
    
   ros::init(argc, argv, "image_publisher");
    
   ros::NodeHandle nh;
    
  
    
   cv::Mat image;
    
   cv::VideoCapture cap(0);//0为要索引的摄像头
    
   if(!cap.isOpened()) 
    
   {
    
       ROS_INFO("can not opencv video device\n");
    
       return 1;
    
   }
    
   while (nh.ok()) 
    
   {
    
     cap >> image;//从摄像头抓取一帧图像
    
     cv::imshow("",image);
    
     cv::waitKey(3);
    
   }
    
  
    
   ros::spin();
    
 }

由此可见,在 ROS 平台中常说“驱动程序”,实际上它只是一个用于读取数据的 ROS 节点,并非我们通常所定义的那种能够连接软硬件的一个程序。值得注意的是 ROS 操作系统并不是一种常规的操作系统,在功能上与传统操作系统有着本质的区别。

其余格式摄像头以后会逐步补充上来。

全部评论 (0)

还没有任何评论哟~