mipi接口的摄像头驱动并发布话题
情况: 需要跑ORBSLAM, 之前一直使用USB接口的相机, 打开摄像头一般使用的是ROS下的usb-cam-node进行驱动,采集图像并发布成topic的形式,或者使用opencv的videoCapture进行图像的捕捉;
因为某些原因需要将usb接口的camera转换成mipi接口的相机; 还是使用了原先usb_cam_node进行摄像头的驱动,输入/dev/video, 对应的width和height之后,结果出现了如下的提示:
最主要的就是[ERROR], 提示如下:
[ERROR] [1608815170.494006746]: /dev/video4 is no video capture device capability is 2216693760
在usb_cam_node中找到对应的代码如下:
if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)){ROS_ERROR_STREAM(camera_dev_ << " is no video capture device capability is " <<cap.capabilities );exit(EXIT_FAILURE);}
这里的cap是v4l2_capability类型的变量,
struct v4l2_capability
{u8 driver[16]; // 驱动名字u8 card[32]; // 设备名字u8 bus_info[32]; // 设备在系统中的位置u32 version; // 驱动版本号u32 capabilities; // 设备支持的操作u32 reserved[4]; // 保留字段
};
将2216693760转换成十六进制即为: 0x84201000, 对应到v4l2_capability所表示的devide的所支持的操作分别是:
V4L2_CAP_DEVICE_CAPS
V4L2_CAP_STREAMING
V4L2_CAP_EXT_PIX_FORMAT
V4L2_CAP_VIDEO_CAPTURE_MPLANE
其中,最后一项操作的解释如下:
/* Is a video capture device that supports multiplanar formats */
#define V4L2_CAP_VIDEO_CAPTURE_MPLANE 0x00001000
而对应到usb_cam.cpp中报错部分的代码, 需要的是支持下面两种操作的设备:
V4L2_CAP_VIDEO_CAPTURE
V4L2_CAP_STREAMING
接下来对V4L2一个简单的总结:
Video for Linuxtwo(Video4Linux2)简称V4L2,是V4L的改进版。V4L2是linux操作系统下用于采集图片、视频和音频数据的API接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。在远程会议、可视电话、视频监控系统和嵌入式多媒体终端中都有广泛的应用。
在Linux下,所有外设都被看成一种特殊的文件,成为“设备文件”,可以象访问普通文件一样对其进行读写。一般来说,采用V4L2驱动的摄像头设备文件是/dev/video0。V4L2支持两种方式来采集图像:内存映射方式(mmap)和直接读取方式(read)。V4L2在include/linux/videodev.h文件中定义了一些重要的数据结构,在采集图像的过程中,就是通过对这些数据的操作来获得最终的图像数据。Linux系统V4L2的能力可在Linux内核编译阶段配置,默认情况下都有此开发接口。
应用程序通过V4L2进行视频采集的原理
V4L2支持内存映射方式(mmap)和直接读取方式(read)来采集数据,前者一般用于连续视频数据的采集,后者常用于静态图片数据的采集,本文重点讨论内存映射方式的视频采集。
应用程序通过V4L2接口采集视频数据分为五个步骤:
首先,打开视频设备文件,进行视频采集的参数初始化,通过V4L2接口设置视频图像的采集窗口、采集的点阵大小和格式;
其次,申请若干视频采集的帧缓冲区,并将这些帧缓冲区从内核空间映射到用户空间,便于应用程序读取/处理视频数据;
第三,将申请到的帧缓冲区在视频采集输入队列排队,并启动视频采集;
第四,驱动开始视频数据的采集,应用程序从视频采集输出队列取出帧缓冲区,处理完后,将帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据;
第五,停止视频采集。
具体的程序实现流程可以参考下面的流程图:
关于usb接口的相机和MIPI接口的相机之间还有一个需要注意的区别是如下的类型:
/* Stream type-dependent parameters*/
struct v4l2_streamparm {__u32 type; /* enum v4l2_buf_type */union {struct v4l2_captureparm capture;struct v4l2_outputparm output;__u8 raw_data[200]; /* user-defined */} parm;
};
结构体包含两个结构体, 但是需要注意的v4l2_captureparm只能用于CAPTURE type, 而mipi接口的摄像头是不具有这种操作性的,即capability中没有这项
其对应的相关调用如下:
函数:ioctl(fd,VIDIOC_G_PARM,struct v4l2_streamparm *argp); //VIDIOC_S_PARM作用:流相关 (如帧率)
如有疑问,欢迎交流: wx: baobaohaha_ 欢迎对SLAM有兴趣的小伙伴一起交流学习~~
参考:
V4L2对应的函数和变量详解
V4L2和MIPI接口的简要说明
V4L2学习流程分析
V4L2基础编程
V4L2官网讲解 英文
V4L2下摄像头的详细参数调整
mipi接口的摄像头驱动并发布话题相关推荐
- rp3399之mipi接口ov4689摄像头驱动
linux的驱动程序移植的精髓在于移植而不是编写,移植不代表简单了. 驱动程序包一般有几个或者几十个文件,另外有设备树进行配置资源,一个驱动的整个框架构成.加载过程.调试方法的掌握很关键了. 进入正题 ...
- 三星 摄像头 linux,基于Linux 3.0.8 Samsung FIMC(S5PV210) 的摄像头驱动框架解读(一)...
FIMC这个名字应该是从S5PC1x0开始出现的,在s5pv210里面的定义是摄像头接口,但是它同样具有图像数据颜色空间转换的作用.而exynos4412对它的定义看起来更清晰些,摄像头接口被定义为F ...
- linux的DRM之mipi应用程序,LCD之MIPI接口
LCD之MIPI接口 (因本人之局限性,内容仅供参考.错误之处,敬请指出.谢谢!)linux 说到mipi接口,它不仅是一个简简单单的一个接口.而是一个两层概念的叠加:物理传输系统结构(物理层面) 和 ...
- linux mipi摄像头驱动,VS-RK3399 在linux系统下面调试Mipi camera接口介绍
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 debian系统目前支持Usb camera是没有问题,走UVC功能接口.那么mipi 接口camera和并口接口的camera,在Debian系统怎么设 ...
- 学习笔记(一)-古月ROS机器视觉开发入门 -ROS摄像头驱动及数据接口
ROS摄像头驱动及数据接口 二维摄像头 我们平常用的最多的就是二维摄像头,大部分笔记本上都会自带一个2d的摄像头,这种摄像头的接口一般是USB接口,市面上看到的罗技摄像头.RGB摄像头等,它们的底层协 ...
- mipi接口 1280(RGB)*720 LCD屏开发驱动笔记帖
ps:创业开发产品,自学笔记,不一定适合教材性的阅读,零碎整理,自我总结用 材料:4.1寸lcd屏两块,屏自带触控,屏幕资料具备,rk3399和MK8788开发版上分别开发. 开发环境: 1]rk33 ...
- 常见摄像头接口USB、DVP、MIPI接口的对比
常见摄像头接口DVP.MIPI.USB的比较 引言 摄像头传感器已经广泛用于嵌入式设备了,现在的手机很多都支持多个摄像头. 在物联网领域,摄像头传感器也越来越被广泛使用.今天就来简单聊一聊几种常见的摄 ...
- 摄像头的MIPI接口、DVP接口和CSI接口听语音 zhuanzai
摄像头的MIPI接口.DVP接口和CSI接口听语音 在现实生活中,摄像头随处可见,但是对于一个电子工程师来讲,理解摄像头的使用方法还是非常有必要的,一般来讲,摄像头的接口主要有MIPI接口.DVP接口 ...
- 古月居ROS机器视觉开发——ROS摄像头驱动及数据接口(一)
ROS机器视觉 文章目录 ROS机器视觉 一.摄像头分类 二.ROS驱动摄像头 1.安装功能包 2.参数设置 3.功能包详解 总结 古月居,想具体了解的可以去看古月居的课程,我只是简单的记录一下笔记. ...
最新文章
- 更改管理GPO的域控制器
- 刻意练习:Python基础 -- Task12. 模块
- 构建根文件系统之busybox(一)浅析
- 程序员面试题精选100题(18)-用两个栈实现队列[数据结构]
- Python接口测试-模块引用与映射
- [USACO1.2]回文平方数 Palindromic Squares
- 5.10 阻尼倒数法
- python蟒蛇实例
- IOS 蓝牙开发(六)蓝牙手柄 GameController开发
- 超详细 excel 基础知识
- 航班延误来领钱,信用卡航班延误险最全攻略(2018年版)
- 微信小程序创建直播间流程
- Calendar(日历)
- LVM挂盘(centos7 使用parted命令分区挂盘操作详细)
- centos7搭建GRE隧道进行通信
- 网闸虚拟服务器,tcp客户端和tcp服务器端 网闸
- ICC Profile
- access找不到输入表或者dual_神奇的DUAL表总结
- ublox_f9p 代码中接入别人编译好的连接库(PPP定位)
- 带你搞明白单侧双侧T检验