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)
还没有任何评论哟~
