0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于RK3576开发板的USB摄像头使用

ljx2016 来源:ljx2016 作者:ljx2016 2025-05-06 15:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. USB简介

USB:Universal Serial Bus(通用串行总线)。是一种常用于电子设备间通讯的通用标准接口。USB 总线作为一种高速串行总线,其极高的传输速度可以满足高速数据传输的应用环境要求。

具有供电简单(可总线供电)、安装配置便捷(支持即插即用和热插拔)、 扩展端口简易(通过集线器最多可扩展127 个外设)、传输方式多样化(4 种传输模式),以及兼容良好(产品升级后向下兼容)等优点。

1.1 EASY EAI Orin-Nano USB资源介绍

EASY EAI Orin-Nano有一路直出的USB3.0 HOST接口,还有一路直出的OTG接口。

wKgZPGgZuxqACBYgABBiD586vlU820.png

若不了解【USB HOST】、【USB Device】以及【OTG】的含义,又或者有【必须使下层USB作为HOST】的需求,可参考《USB_HOST与USB_Device》一文。

1.2 USB摄像头接入方案

wKgZO2gZuxqAUI47AADdNgPRzl4093.png

注意:虽然USB支持热插拔,但在没给底板加装外壳保护的情况下,很容易触碰到底板上的器件,甚至板卡附近有金属零件很容易造成板卡短路。因此也建议在插拔外设时,最好确保电源已经完全切断。

【建议】USB摄像头【直接】接入到底板的【上层】USB接口上。

wKgZPGgZuxuADpbUABBATP1PZ6M198.png

虽然采用多路扩展方案,理论上可扩展127个设备,但在实际接入多个USB摄像头时需要考虑USB通道的带宽,USB集线层数,以及要解决设备ID相同的问题,因此非必要【不建议】这么接。

USB的理论最大层数为7层(含RootHub)。

1.3 USB设备的接入管理介绍

在USB摄像头或者USB Hub进行物理连接后,我们需要知道这些USB设备是否被系统识别出来,则需要通过lsusb命令查看。

lsusb
wKgZO2gZuxuANRxGAACn3rUsY54565.png

另外,在文件系统中,USB Device管理目录为/sys/bus/usb/devices,可在此处查看到从root_hub开始挂载的USB设备以及Hub设备的拓扑关系。

USB设备的设备命名方式规则如下:

设备对象的命名规则
设备 命名规则 描述
总线对象 usb1、usb2 处理器自带的USB硬件,0号hub设备,所以其接口对象是由0开始计算。
直连的USB设备 root_hub-hub_port
注:以“-”段横杠分割
root_hub为所在的总线号码;
hub_port为处于该总线的第几个设备,0号设备总线本身,新接入的设备从1开始。
连在外扩hub的设备 root_hub-hub_port.device
注:以“.”句号分割
新接入的设备作为hub的子设备,编号从1开始
设备对象的接口命名规则
设备 命名规则 描述
设备对象的接口对象 device_object:config.interface
注:以“:”冒号分割设备对象和后续元素。后续元素有配置和接口,二者以“.”句号分割
device_object:设备对象,上面总线对象、质量设备、经过hub的设备统称为设备对象
config:USB设备的配置描述符,一个USB设备可在不同系统、不同架构下运行的前提就是使用了不同的配置描述符
interfece:USB设备的接口描述符,例如一个USB对讲机,有负责处理播音的接口以及负责录音的接口。

1.4 寻找可用的设备节点

rockchip平台,一个MIPI-CSI接口会对应20多个video节点(设备树定了就会生成这么多个),如下图所示。

wKgZPGgZuxuAWLNlAADvzgIeWh8195.png

而且MIPI-CSI camera对应的节点,会在修改内核设备树的时候固定下来(即:内核配好了MIPI-CSI Camera个数,无论MIPI-CSI摄像头是否有接上,它的video节点情况都是不会根据MIPI-CSI Camera的接入情况而【动态】改变)。

而一个USB camera会对应2个video节点,【一般会】排列在MIPI-CSI camera的后面。举个例子:内核配置了1路MIPI-CSI camera,那USB camera的节点就是/dev/video25和/dev/video26;内核配置了2路MIPI-CSI camera,那USB camera的节点就是/dev/video49和/dev/video50。以此类推。

但是【最准确】的方法,还是要看一下这个video节点的【描述信息】。Linux的v4l2框架会把这些节点的描述信息统一放在/sys/class/video4linux/目录下,如下图所示。

wKgZO2gZuxuADWWiAADHhD6GKVk928.png

随便进入一个描述,如video22。

wKgZPGgZuxyAX3T5AACoy7qNgMI403.png

通过cat命令,可以用查看这个name的内容是什么。

cat /sys/class/video4linux/video22/name
wKgZO2gZuxyANJVEAABr2viLxJY006.png

那么,我们则需要使用以下命令,对【所有video节点】进行扫描与【筛选】。

grep -i "usb" /sys/class/video4linux/video*/name
wKgZPGgZuxyALbIPAACAZjgI-oo737.png

2. 快速上手

2.1 例程源码下载

到【百度网盘】上下载相关的单例程序:

链接:https://pan.baidu.com/s/1RXHMGpmGSEfFy0rb1VkXSg?pwd=1234

提取码: 1234

比如在windows环境中,就把单例程序下载到:此电脑D:BaiduNetdisk (无规定,用户可自主选择),如下图所示。

wKgZO2gZuxyAcL2tAACzjzn_OTw582.png

然后把例程【复制粘贴】到nfs挂载目录中。(不清楚目录如何构建的,可以参考《入门指南/开发环境准备/nfs服务搭建与挂载》)

wKgZPGgZuxyAdw_5AAEDr7CBhzE034.png

2.2 例程编译&运行

通过adb shell进入开发板环境,执行下方命令定位到demo目录,并且执行编译操作。

cd /home/orin-nano/Desktop/nfs/02_camera/
./build.sh
wKgZO2gZux2ALcfhAARnkhV_id4539.png

编译成功后,相关的demo会生成在Release目录下。

执行下方命令以运行demo,如下所示。

sudo ./Release/test-usbCam-single 49  ##需要root权限

执行效果如下所示。

wKgZPGgZux2AAXg8AABMW6Vj5_0978.png

然后把/tmp/photo拷贝到当前目录下的Release内

cp /tmp/photo ./Release/

再通过组合键【Ctrl+Shift+T】创建一个新窗口,定位到nfs服务器的对应位置。

wKgZO2gZux2AEmOxAACKiBD90sU960.png

最后使用mplayer工具播放图片,命令如下所示。

mplayer -demuxer rawvideo -rawvideo w=1280:h=720:format=bgr24 ./Release/photo -loop 0
wKgZPGgZux2AL77CABMCYsJUSss055.png

例程默认分辨率为1280x720,故w和h的参数对应填入1280和720。当出现图片异常时,说明分辨率等不太对应于手头的摄像头,所以需要调整usbcamera_init()的分辨率,例如640x480。

3. 测试USB摄像头API案例

示例代码路径为:02_camera/test-usbCam/single-cam.c。USB Camera API的测试案例代码逻辑流程如下所示:

wKgZO2gZux6AL281AABSz27uAFE832.png

3.1 源码说明

int main()
{
    if(1 == argc){
        printf("nerr: Missing parameter!n");
        printf("================= [usage] ==================n");
        printf("example:n");
        printf("t%s < 49/50 >n", argv[0]);
        printf("--------------------------------------------n");
        return 0;
    }
    int cameraIndex = atoi(argv[1]);
    
	char *pbuf = NULL;
	int ret = 0;
	int skip = 0;
	FILE *fp = NULL;

	ret = usbcamera_init(CAMERA_INDEX, CAMERA_WIDTH, CAMERA_HEIGHT, 0);
	if (ret) {
		printf("error: %s, %dn", __func__, __LINE__);
		goto exit3;
	}

	pbuf = (char *)malloc(IMAGE_SIZE);
	if (!pbuf) {
		printf("error: %s, %dn", __func__, __LINE__);
		ret = -1;
		goto exit2;
	}

	//跳过前10帧
	skip = 10;
	while(skip--) {
		ret = usbcamera_getframe(CAMERA_INDEX, pbuf);
		if (ret) {
			printf("error: %s, %dn", __func__, __LINE__);
			goto exit1;
		}
	}

	/* tips: 可以在Ubuntu下用mplayer播放录制图像
	*	mplayer -demuxer rawvideo -rawvideo w=1280:h=720:format=bgr24 photo -loop 0
	*/
	fp = fopen("/tmp/photo", "w");
	if (!fp) {
		printf("error: %s, %dn", __func__, __LINE__);
		ret = -1;
		goto exit2;
	}
	fwrite(pbuf, 1, IMAGE_SIZE, fp);
	fclose(fp);

exit1:
	free(pbuf);
	pbuf = NULL;
exit2:
	usbcamera_exit(CAMERA_INDEX);
exit3:
    return ret;
}

其中usbcamera_init(),usbcamera_getframe(),usbcamera_exit()是对v4l2接口调用的易用化封装。具体实现于02_camera/commonApi/usb_camera/usb_camera.c。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    60

    文章

    8372

    浏览量

    281646
  • 摄像头
    +关注

    关注

    61

    文章

    5058

    浏览量

    102425
  • 开发板
    +关注

    关注

    25

    文章

    6122

    浏览量

    113234
  • rk3576
    +关注

    关注

    1

    文章

    228

    浏览量

    1369
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于RK3576开发板的PWN使用说明

    RK3576开发板使用PWN教程及Demo
    的头像 发表于 05-07 14:07 1922次阅读
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>的PWN使用说明

    基于RK3576开发板的RTC使用说明

    文章主要展示RK3576开发板的RTC信息和快速上手例程
    的头像 发表于 05-07 15:04 1781次阅读
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>的RTC使用说明

    基于RK3576开发板的人脸识别算法

    RK3576开发板展示人脸识别算法例程和API说明
    的头像 发表于 05-07 16:48 2483次阅读
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>的人脸识别算法

    【米尔RK3576开发板评测】带你初步了解米尔RK3576这块开发板

    这几天刚收到米尔邮寄过来的米尔RK3576开发板,收到板子的拆箱的第一感觉就是惊艳。巴掌大小的一块开发板上集成度非常高,布线很合理,元件布局也很整齐,黑色的板子也非常高端。 给大家看一下收到
    发表于 12-18 20:35

    【米尔RK3576开发板评测】+项目名称【米尔RK3576开发板评测】一个视频和你共同认识一下米尔RK3576开发板

    收到米尔RK3576开发板后,也对米尔RK3576开发板进行了了解,米尔这款开发板真的很不错,下面是官方的一些参数介绍: MYC-LR
    发表于 12-18 20:50

    米尔瑞芯微RK3576实测轻松搞定三屏八摄像头

    推出的MYD-LR3576开发板开发了一个三屏异显,8路摄像头输入的DEMO, 实测下来,RK3576轻松搞定了该任务。 MYD-LR
    发表于 01-17 11:33

    【作品合集】米尔RK3576开发板测评

    米尔RK3576开发板测评作品合集 产品介绍: RK3576 是瑞芯微一款面向AI市场推出的高性能处理器,它配备了四核Cortex-A72和四 核Cortex-A53 的 CPU,集成了6TOPS
    发表于 09-11 10:19

    【作品合集】灵眸科技EASY EAI Orin Nano(RK3576开发板测评

    试用体验】--WiFi连接与nfs共享 【EASY EAI Orin Nano(RK3576开发板试用体验】--USB摄像头使用 【EASY EAI Orin Nano(
    发表于 09-09 09:59

    360环视硬件平台为什么推荐使用米尔RK3576开发板

    。凭借先进的 SoC 架构与完善的多媒体引擎,它不仅具备 12路摄像头 的高清视频接入能力,还能将编码与 RTSP 低延迟推流 组合成体系化方案,为360环视提供稳定可靠的底座。 米尔RK3576开发板
    发表于 09-19 17:38

    RK3576机器人核心:三屏异显+八路摄像头,重塑机器人交互与感知

    开发板的实际演示证明,RK3576能够轻松处理三屏显示和八路摄像头输入的复杂任务,同时保持低功耗和低发热特性,为机器人应用提供了理想的性能基础。 实测见证:RK3576轻松驾驭三屏八
    发表于 10-29 16:41

    米尔RK3576开发板特惠活动!

    近日,米尔电子发布基于瑞芯微RK3576核心开发板RK3576作为国产热门处理器,其高性能数据处理能力、领先的AI智能分析、强大的扩展性与兼容性受到广大
    的头像 发表于 11-12 01:00 1978次阅读
    米尔<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>特惠活动!

    RK3576有多强?实测三屏八摄像头轻松搞定

    的MYD-LR3576开发板开发了一个三屏异显,8路摄像头输入的DEMO,实测下来,RK3576轻松搞定了该任务。MYD-LR
    的头像 发表于 01-16 08:06 1175次阅读
    <b class='flag-5'>RK3576</b>有多强?实测三屏八<b class='flag-5'>摄像头</b>轻松搞定

    迅为RK3576开发板摄像头实时推理测试-ppseg 图像分割

    迅为RK3576开发板摄像头实时推理测试-ppseg 图像分割
    的头像 发表于 07-11 14:31 700次阅读
    迅为<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b><b class='flag-5'>摄像头</b>实时推理测试-ppseg 图像分割

    迅为八核高算力RK3576开发板摄像头实时推理测试 ppyoloe目标检测

    迅为八核高算力RK3576开发板摄像头实时推理测试 ppyoloe目标检测
    的头像 发表于 07-14 15:18 1072次阅读
    迅为八核高算力<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b><b class='flag-5'>摄像头</b>实时推理测试 ppyoloe目标检测

    迅为八核高算力RK3576开发板摄像头实时推理测试 RetinaFace人脸检测

    迅为八核高算力RK3576开发板摄像头实时推理测试 RetinaFace人脸检测
    的头像 发表于 07-21 15:29 951次阅读
    迅为八核高算力<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b><b class='flag-5'>摄像头</b>实时推理测试 RetinaFace人脸检测