Mv series camera appnotes 4 jetson/zh

From wiki_veye
Jump to navigation Jump to search

English

1 概述

MV系列相机是为工业领域的AI应用推出的相机。其使用MIPI CSI-2接口,尤其适合嵌入式运算平台使用。它具备丰富的数据格式和触发特性,极低的延时,极高的带宽和可靠的稳定性。

本文介绍了如何在英伟达Jetson平台使用MV系列相机。

1.1 支持的摄像机模组

系列 型号 状态
MV系列 MV-MIPI-IMX178M 完成
MV系列 MV-MIPI-SC130M 完成
MV系列 MV-MIPI-IMX296M 完成
MV系列 MV-MIPI-IMX287M 完成
MV系列 MV-MIPI-IMX265M 完成
MV系列 MV-MIPI-IMX264M 完成
RAW系列 RAW-MIPI-SC132M 完成
RAW系列 RAW-MIPI-AR0234M 完成
RAW系列 RAW-MIPI-IMX462M 完成
RAW系列 RAW-MIPI-SC535M 完成

此外,已经调通V-by-One HS连接模式的驱动。

1.2 支持的Jetson Board

Jetson型号 状态
Nano A02 完成
Nano B01 完成
Nano 2GB 完成
TX2 NX 完成
XAVIER NX 完成
TX2 Devkit 完成
AGX Xavier 完成
AGX Orin 完成
Orin NX 完成
Orin Nano 完成

1.3 支持的L4T版本

  • Jetpack4.6.1,L4T版本r32.7.1
  • Jetpack4.6.3,L4T版本r32.7.3
  • Jetpack4.6.4,L4T版本r32.7.4
  • Jetpack5.0.2,L4T版本r35.1
  • Jetpack5.1,L4T版本r35.2.1
  • Jetpack5.1.1,L4T版本r35.3.1
  • Jetpack5.1.2,L4T版本r35.4.1
  • Jetpack5.1.3,L4T版本r35.5
  • Jetpack6.0,L4T版本r36.3
  • Jetpack6.1,L4T版本r36.4
1.3.1 怎样查看当前L4T版本

在jetson板子上,查看当前L4T版本,尽量使用同一版本进行替换。

cat /etc/nv_tegra_release

如显示:

# R32 (release), REVISION: 7.1......

则表示当前L4T版本为32.7.1,对应的Jetpack版本是Jetpack32.6.1。

2 硬件准备以及安装

MV系列相机需要转接板才可以接入Jetson平台。支持情况如下表:

Camera型号 Jetson型号 转接板 FFC线(to 转接板) FFC线(to Jetson主板) 摄像机数量 额外供电
MV系列 Nano A02 ADP-MV1 30pin异面FFC 15pin异面FFC 1 5V DC(必须)
Nano B01 ADP-MV1 30pin异面FFC 15pin异面FFC 2 5V DC(必须)
Nano 2GB ADP-MV1 30pin异面FFC 15pin异面FFC 1 5V DC(必须)
TX2 NX ADP-MV1 30pin异面FFC 15pin异面FFC 2 5V DC(必须)
XAVIER NX ADP-MV1 30pin异面FFC 15pin异面FFC 2 5V DC(必须)
Orin Nano ADP-MV1 30pin异面FFC 15to22 pin 同面FFC 2 5V DC(必须)
Orin NX ADP-MV1 30pin异面FFC 15to22 pin 同面FFC 2 5V DC(必须)
TX2 Devkit ADP-N4 30pin异面FFC B2B连接器 6 5V或12V DC (必须)
AGX Xavier ADP-N4 30pin异面FFC B2B连接器 6 5V或12V DC (必须)
AGX Orin ADP-N4 30pin异面FFC B2B连接器 6 5V或12V DC (必须)
RAW-MIPI-SC132M Nano A02 N/A N/A 15pin异面FFC 1 N/A
Nano B01 N/A N/A 15pin异面FFC 2 N/A
Nano 2GB N/A N/A 15pin异面FFC 1 N/A
TX2 NX N/A N/A 15pin异面FFC 2 N/A
XAVIER NX N/A N/A 15pin异面FFC 2 N/A
Orin Nano N/A N/A 15to22 pin 同面FFC 2 N/A
Orin NX N/A N/A 15to22 pin 同面FFC 2 N/A
TX2 Devkit ADP-N5 15pin异面FFC B2B连接器 6 N/A
AGX Xavier ADP-N5 15pin异面FFC B2B连接器 6 N/A
AGX Orin ADP-N5 15pin异面FFC B2B连接器 6 N/A
RAW系列(RAW-MIPI-SC132M除外) Nano A02 N/A N/A 15to22 pin 同面FFC 1 N/A
Nano B01 N/A N/A 15to22 pin 同面FFC 2 N/A
Nano 2GB N/A N/A 15to22 pin 同面FFC 1 N/A
TX2 NX N/A N/A 15to22 pin 同面FFC 2 N/A
XAVIER NX N/A N/A 15to22 pin 同面FFC 2 N/A
Orin Nano N/A N/A 22pin 异面FFC 2 N/A
Orin NX N/A N/A 22pin 异面FFC 2 N/A
TX2 Devkit ADP-N5 15to22 pin 同面FFC B2B连接器 6 N/A
AGX Xavier ADP-N5 15to22 pin 同面FFC B2B连接器 6 N/A
AGX Orin ADP-N5 15to22 pin 同面FFC B2B连接器 6 N/A

2.1 MV系列摄像头使用ADP-MV1的连接方式

2.1.1 MV系列摄像头与ADP-MV1的连接

二者使用0.5mm间距*30P的FFC异面线连接,注意接触面向外。

TOP BOTTOM
ADP-MV1 to MV-MIPI-X
ADP-MV1 to MV-MIPI-X
2.1.2 供电

ADP-MV1需要独立的5V供电,可以使用杜邦线直接从Jetson主板取电。

ADP-MV1 power supply


2.1.3 使用ADP-MV1连接到Nano和Xavier NX

Nano系列和NX系列采用这种连接方式。

MV camera and Xavier NX connection


2.1.4 使用ADP-MV1连接到Orin Nano和 Orin NX

二者使用15P转22Pin的FFC同面线连接,注意接触面方向。

MV camera connect to Orin Nano and Orin NX


2.2 MV系列摄像头使用ADP-N4的连接方式

2.2.1 MV系列摄像头与ADP-N4的连接

二者使用0.5mm间距*30P的FFC同面线连接,注意接触面向外。

MV-MIPI-CAM to ADP-N4
2.2.2 供电

ADP-N4需要独立的供电。它支持两种供电方式,二选其一即可。

  • 5V DC 接到 J19-9。可以使用杜邦线直接从Jetson主板取电。
  • 12V DC 接到J11。需使用外置适配器供电。
2.2.3 使用ADP-N4的连接到TX2和AGX
ADP-N4 to AGX XAVIER
ADP-N4 to AGX XAVIER


ADP-N4 to AGX Orin
ADP-N4 to TX2 Devkit

2.3 RAW系列摄像头直接连接到Jetson主板

2.3.1 RAW系列摄像头连接到Nano和Xavier NX

RAW-MIPI-SC132M使用15pin异面FFC线,其他RAW系列相机使用15to22pin同面FFC线。注意相机端,FPC排线银色接触面向外。

RAW camera and Jetson Nano connection
2.3.2 RAW系列摄像头连接到Orin Nano和 Orin NX

RAW-MIPI-SC132M使用15to22pin同面FFC线,其他RAW系列相机使用22pin异面FFC线。注意相机端,FPC排线银色接触面向外。

RAW-MIPI-IMX462-ORIN NX


2.4 RAW系列摄像头使用ADP-N5的连接方式

2.4.1 RAW系列摄像头与ADP-N5的连接

RAW-MIPI-SC132M使用15pin异面FFC线,其他RAW系列相机使用15to22pin同面FFC线。

RAW-MIPI-IMX462 connect with ADP-N5


2.4.2 使用ADP-N5连接到TX2和AGX
ADP-N5 to AGX Xavier


2.5 V-by-One-HS-KIT摄像机连接示意图

V-by-One-HS-KIT connection with Jetson


3 更新Jetson系统

本章节描述怎样更新Jetson的L4T系统以支持MV摄像头模组。操作系统更新方法,请参考更新Jetson操作系统

特别的,对于MV系列相机,除了在linux系统中增加了摄像头的驱动,我们还增加了一个内核补丁——veye_mv_l4t_<verion>.patch,并提供编译好的Image文件。

这个patch具备两个功能:

  1. 增加了黑白相机的Y10和Y12两种数据格式的支持。
  2. 增加了trigger模式的支持。

4 raw data图片格式说明

在TX2和XAVIER上,10 bit depth和12 bit depth的raw data在内存中的存储格式是不符合V4L2标准的。我们扩展了linux内核中的定义以支持这种情况。

TY10、TY12、XY10和XY12是我们新增的类型。

4.1 Nano
Depth Bit order FourCC Enumerator
8 B7 B6 B5 B4 B3 B2 B1 B0 GREY V4L2_PIX_FMT_GREY
10 0 0 0 0 0 0 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 'Y10 ' V4L2_PIX_FMT_Y10
12 0 0 0 0 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 'Y12 ' V4L2_PIX_FMT_Y12
4.2 TX2
Depth Bit order (X is undefined) FourCC Enumerator
8 B7 B6 B5 B4 B3 B2 B1 B0 GREY V4L2_PIX_FMT_GREY
10 0 0 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 X X X X TY10 V4L2_PIX_FMT_TX2_Y10
12 0 0 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 X X TY12 V4L2_PIX_FMT_TX2_Y12
4.3 XAVIER and Orin
Depth Bit order (X is undefined) FourCC Enumerator
8 B7 B6 B5 B4 B3 B2 B1 B0 GREY V4L2_PIX_FMT_GREY
10 0 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 X X X X X XY10 V4L2_PIX_FMT_XAVIER_Y10
12 0 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 X X X XY12 V4L2_PIX_FMT_XAVIER_Y12

同时,我们提供了工具软件,以便将特殊的数据格式转为标准格式。https://github.com/veyeimaging/pixel_layer_convert

推荐使用vooya作为播放器。

4.4 Trigger模式的支持

Jetson系统的默认驱动只支持视频流模式。在其VI驱动中,数据接收功能具有超时机制。我们增加了一个可设的vi_time_out_disable选项,可以动态打开和关闭这个超时机制。

具体应用参考下面的应用范例。

5 系统状态检测

完成系统更新后,重启Jetson主板。

Jetson系统启动过程中,会检测所有i2c bus上摄像头是否存在,如果存在则生成/dev/videoX设备节点。

在Jetson板端执行以下命令来检测是否正确连接摄像头。

dmesg | grep mvcam

可以看到linux启动阶段probe到的相机型号和以及相机的版本号:

比如下面这个提示,表示在i2c-10总线上检测到了MV-MIPI-IMX178M摄像机。

mvcam 10-003b: camera is: MV-MIPI-IMX178M

mvcam 10-003b: firmware version: 0x1080103

5.1 /dev/videoX设备节点

摄像头模组在Jetson系统中映射为/dev/videoX设备节点。

操作系统启动过程中,按照i2c bus从小到大的顺序探测摄像头。X值是按照探测的逻辑顺序从0开始递增的。

举例说,如果只接入一个摄像头,无论硬件连接到哪个位置,X都为0。如果接入5个,则按照i2c bus从小到大,X为[0-4]。

v4l2-ctl命令中,使用-d /dev/videoX来访问不同的摄像头。

gstreamer中,v4l2src可以通过指明device=/dev/videoX来访问不同的摄像头。

6 配置命令行全局变量

为了后面描述方便,此处根据sensor尺寸,配置全局变量。

  • MV-MIPI-IMX178M

export WIDTH=3088

export HEIGHT=2064

export FPS=22

  • MV-MIPI-SC130M

export WIDTH=1280

export HEIGHT=1024

export FPS=108

  • MV-MIPI-IMX296M

export WIDTH=1440

export HEIGHT=1088

export FPS=60

  • MV-MIPI-IMX265M

export WIDTH=2048

export HEIGHT=1544

export FPS=45

  • MV-MIPI-IMX264M

export WIDTH=2432

export HEIGHT=2056

export FPS=28

  • MV-MIPI-IMX287M

export WIDTH=704

export HEIGHT=544

export FPS=319

  • RAW-MIPI-SC132M

export WIDTH=1080

export HEIGHT=1280

export FPS=120

  • RAW-MIPI-IMX462M

export WIDTH=1920

export HEIGHT=1080

export FPS=60

  • RAW-MIPI-AR0234M

export WIDTH=1920

export HEIGHT=1200

export FPS=60

  • RAW-MIPI-SC535M

export WIDTH=2432

export HEIGHT=2048

export FPS=50

7 v4l2-ctl 应用范例

7.1 安装v4l2-utils

sudo apt-get install v4l-utils

7.2 使用v4l2-ctl配置参数
7.2.1 列出相机支持的数据格式

v4l2-ctl --list-formats-ext

下面是在XAVIER系统下,MV-MIPI-IMX178M的例子:

ioctl: VIDIOC_ENUM_FMT

        Index       : 0

        Type        : Video Capture

        Pixel Format: 'UYVY'

        Name        : UYVY 4:2:2

                Size: Discrete 3088x2064

                        Interval: Discrete 0.045s (22.000 fps)

        Index       : 1

        Type        : Video Capture

        Pixel Format: 'NV16'

        Name        : Y/CbCr 4:2:2

                Size: Discrete 3088x2064

                        Interval: Discrete 0.045s (22.000 fps)

        Index       : 2

        Type        : Video Capture

        Pixel Format: 'GREY'

        Name        : 8-bit Greyscale

                Size: Discrete 3088x2064

                        Interval: Discrete 0.045s (22.000 fps)

        Index       : 3

        Type        : Video Capture

        Pixel Format: 'XY10'

        Name        : XAVIER 10-bit/16-bit Greyscale

                Size: Discrete 3088x2064

                        Interval: Discrete 0.045s (22.000 fps)

        Index       : 4

        Type        : Video Capture

        Pixel Format: 'XY12'

        Name        : XAVIER 12-bit/16-bit Greyscale

                Size: Discrete 3088x2064

                        Interval: Discrete 0.045s (22.000 fps)

需要特别说明的是,MV系列相机提供的UYVY和NV16模式仅作调试使用,且最大宽度不能超过2880。

7.2.2 列出驱动中实现的相机的可配置参数

v4l2-ctl -L

User Controls

                   trigger_mode 0x00981901 (int)    : min=0 max=2 step=1 default=0 value=0 flags=volatile, execute-on-write

                    trigger_src 0x00981902 (int)    : min=0 max=1 step=1 default=1 value=1 flags=volatile, execute-on-write

                    soft_trgone 0x00981903 (button) : flags=write-only, execute-on-write

                     frame_rate 0x00981904 (int)    : min=1 max=22 step=1 default=22 value=22 flags=volatile, execute-on-write

                          roi_x 0x00981905 (int)    : min=0 max=2712 step=8 default=0 value=0

                          roi_y 0x00981906 (int)    : min=0 max=1744 step=4 default=0 value=0

Camera Controls

low_latency_mode 0x009a206d (bool)   : default=0 value=0

               preferred_stride 0x009a206e (int)    : min=0 max=65535 step=1 default=0 value=0

            vi_time_out_disable 0x009a2078 (bool)   : default=0 value=0

可以使用下面的方法设置和获取参数。

v4l2-ctl --set-ctrl [ctrl_type]=[val]

v4l2-ctl --get-ctrl [ctrl_type]

以上所有功能,均可使用mv_mipi_i2c.sh实现。

需要指出的是,以上参数在开始取图的状态均不可修改。下面进行逐个说明:

7.2.3 配置触发模式

v4l2-ctl --set-ctrl trigger_mode=[0-2]

0:流模式

1:普通触发模式

2:快速连续触发模式

7.2.4 配置触发源

v4l2-ctl --set-ctrl trigger_src=[0-1]

0: 软触发

1: 硬触发

7.2.5 软触发一次

v4l2-ctl --set-ctrl soft_trgone=1

7.2.6 设置帧率

v4l2-ctl --set-ctrl frame_rate=[1-max]

随分辨率的调整,最大帧率会自动更新。

7.2.7 设置ROI和数据格式

举例:

v4l2-ctl --set-ctrl roi_x=0

v4l2-ctl --set-ctrl roi_y=0

v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY

设置roi后,最大帧率会自动调整。请注意,摄像机roi参数需要符合摄像机手册中的要求。

7.2.8 preferred_stride

preferred_stride指一行图像数据需要的内存大小。Jetson平台的图像数据是unpacked存储的,即10bit depth和12 bit depth的数据格式下,一个像素占用两个字节。

  • 普通情况下,buffer需要64字节对齐。

preferred_stride= ALIGN_UP(width*bytes_per_pixel,64)

比如宽度为3088时:

8bit depth,preferred_stride=3136。

10bit depth,preferred_stride=6208。

12bit depth,preferred_stride=6208。

  • 如果使用VIC buffer,则需要256字节对齐。

preferred_stride= ALIGN_UP(width*bytes_per_pixel,256)

7.3 流模式

7.3.1 设置图像格式

以最大画面为例:

v4l2-ctl --set-ctrl roi_x=0

v4l2-ctl --set-ctrl roi_y=0

v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY

v4l2-ctl --set-ctrl frame_rate=$FPS

7.3.2 帧率统计

v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=/dev/null

7.3.3 保存图片到文件
7.3.3.1 MV-MIPI-IMX178M
  • raw8格式

v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=3136

v4l2-ctl -d /dev/video0 --set-fmt-video=width=3088,height=2064,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-3136x2064.raw

  • raw10格式

v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=6208

v4l2-ctl -d /dev/video0 --set-fmt-video=width=3088,height=2064,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-3104x2064.raw

  • raw12格式

v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=6208

v4l2-ctl -d /dev/video0 --set-fmt-video=width=3088,height=2064,pixelformat=XY12 --stream-mmap --stream-count=1 --stream-to=y12-3104x2064.raw

7.3.3.2 MV-MIPI-SC130M

由于宽度1280是64和256的整数倍,不需要设置preferred_stride。

  • raw8格式

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1280,height=1024,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-1280x1024.raw

  • raw10格式

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1280,height=1024,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-1280x1024.raw

7.3.3.3 MV-MIPI-IMX296M
  • raw8格式

v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=1472

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1440,height=1088,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-1472x1088.raw

  • raw10格式

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1440,height=1088,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-1440x1088.raw

7.3.3.4 MV-MIPI-IMX265M
  • raw8格式

v4l2-ctl -d /dev/video0 --set-fmt-video=width=2048,height=1544,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-2048x1544.raw

  • raw10格式

v4l2-ctl -d /dev/video0 --set-fmt-video=width=2048,height=1544,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-2048x1544.raw

  • raw12格式

v4l2-ctl -d /dev/video0 --set-fmt-video=width=2048,height=1544,pixelformat=XY12 --stream-mmap --stream-count=1 --stream-to=y12-2048x1544.raw

7.3.3.5 MV-MIPI-IMX264M
  • raw8

v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2056,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-2432x2056.raw

  • raw10

v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2056,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-2432x2056.raw

  • raw12

v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2056,pixelformat=XY12 --stream-mmap --stream-count=1 --stream-to=y12-2432x2056.raw

7.3.3.6 RAW-MIPI-SC132M
  • raw8格式

v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=1088

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1080,height=1280,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-1088x1280.raw

  • raw10格式

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1080,height=1280,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-1080x1280.raw

7.3.3.7 MV-MIPI-IMX287M
  • raw8

v4l2-ctl -d /dev/video0 --set-fmt-video=width=704,height=544,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-704x544.raw

  • raw10

v4l2-ctl -d /dev/video0 --set-fmt-video=width=704,height=544,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-704x544.raw

  • raw12

v4l2-ctl -d /dev/video0 --set-fmt-video=width=704,height=544,pixelformat=XY12 --stream-mmap --stream-count=1 --stream-to=y12-704x544.raw

7.3.3.8 RAW-MIPI-AR0234M
  • raw8格式

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1200,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-1920x1200.raw

  • raw10格式

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1200,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-1920x1200.raw

7.3.3.9 RAW-MIPI-IMX462M
  • raw10格式

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1088,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-1920x1088.raw

  • raw12格式

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1088,pixelformat=XY12 --stream-mmap --stream-count=1 --stream-to=y12-1920x1088.raw

图片格式请参考上面:raw data图片格式说明 章节。

7.3.3.10 RAW-MIPI-SC535M
  • raw8格式

v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2048,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-2432x2048.raw

7.3.4 实时预览

对于支持GREY格式的摄像头,可以使用qv4l2或者vlc进行视频预览。

7.3.4.1 使用qv4l2预览画面

Install qv4l2,

sudo apt install qv4l2

1. Open VLC with command line vlc to launch.

2. Hit the (Play) button to call the open media window.

Play mv camera using qv4l2


7.3.4.2 使用VLC预览画面

Install vlc,

sudo apt-get install vlc

1. Open VLC with command line vlc , or click the icon to launch.

2. Hit the (Play) button to call the open media window.

3. In Capture Device >> Device Selection >> Video device name, select the camera video node.

4. Hit Advanced Options... button

5. Type in the width and height, for example, 1280 and 1024.

6. Hit OK to save the settings and see the video feed.


Play mv camera using VLC
7.3.4.3 使用gstreamer预览UYVY格式图像

:为了提高最高帧率和带宽,部分模组升级固件后不再提供UYVY格式。具体请通过脚本的fmtcap指令读取寄存器确认。

export DISPLAY=:0

UYVY模式支持的最大宽度为2880,使用如下命令可以进行实时预览。

  • MV-MIPI-IMX178M

v4l2-ctl -d /dev/video0 --set-fmt-video=width=2816,height=2064,pixelformat=UYVY

gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw,format=(string)UYVY, width=(int)2816, height=(int)2064, framerate=(fraction)22/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nv3dsink sync=false

  • MV-MIPI-SC130M, MV-MIPI-IMX296M, MV-MIPI-IMX265M,MV-MIPI-IMX264M,MV-MIPI-IMX287M

v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=UYVY

v4l2-ctl -d /dev/video0 --set-ctrl frame_rate=$FPS

gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw,format=(string)UYVY, width=(int)$WIDTH, height=(int)$HEIGHT, framerate=(fraction)$FPS/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nv3dsink sync=false

7.3.4.4 使用opencv预览GREY格式图像

sudo apt install python3-opencv

  • 我们提供了一个简单的sample实现此功能:

python3 ./v4l2dev_2_opencv_show_grey.py --roix 0 --roiy 0 --width 640 --height 480 --fps 30

7.4 触发模式

7.4.1 准备工作

v4l2-ctl --set-ctrl roi_x=0

v4l2-ctl --set-ctrl roi_y=0

v4l2-ctl --set-ctrl low_latency_mode=1

v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY

v4l2-ctl --set-ctrl frame_rate=$FPS

如有必要,设置合适的preferred_stride.

比如,MV-MIPI-IMX178M,3088*2064:

v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=3136

比如,MV-MIPI-IMX296M,1440*1088:

v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=1472

7.4.2 软触发
7.4.2.1 设置模式

v4l2-ctl --set-ctrl trigger_mode=1

v4l2-ctl --set-ctrl trigger_src=0

v4l2-ctl --set-ctrl vi_time_out_disable=1

7.4.2.2 开始取图
  • MV-MIPI-IMX178M

v4l2-ctl --set-fmt-video=width=3088,height=2064,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-3104x2064.raw

  • MV-MIPI-SC130M

v4l2-ctl --set-fmt-video=width=1280,height=1024,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-1280x1024.raw

  • MV-MIPI-IMX296M

v4l2-ctl --set-fmt-video=width=1440,height=1088,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-1472x1088.raw

  • MV-MIPI-IMX265M

v4l2-ctl -d /dev/video0 --set-fmt-video=width=2048,height=1544,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-2048x1544.raw

  • MV-MIPI-IMX264M

v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2048,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-2432x2048.raw

  • RAW-MIPI-SC132M

v4l2-ctl --set-fmt-video=width=1080,height=1280,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-1080x1280.raw

  • MV-MIPI-IMX287M

v4l2-ctl -d /dev/video0 --set-fmt-video=width=704,height=544,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-704x544.raw

  • RAW-MIPI-AR0234M

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1200,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-1920x1200.raw

  • RAW-MIPI-IMX462M

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1088,pixelformat=XY10 --stream-mmap --stream-count=-1 --stream-to=y8-1920x1088.raw

  • RAW-MIPI-SC535M

v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2048,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-2432x2048.raw

7.4.2.3 进行软触发操作

在其他的shell终端,可以多次执行下面命令进行多次触发。

v4l2-ctl --set-ctrl soft_trgone=1

7.4.2.4 停止触发和采集

由于内核驱动中,死循环等待新图片,因此需要先取消vi_time_out_disable,然后再退出采集操作。

v4l2-ctl --set-ctrl vi_time_out_disable=0

在取图命令的终端中,按Ctrl+C退出采集操作。

7.4.3 硬触发

使用jetson-gpio进行触发操作,首先请安装并配置好jetson-gpio。

下面以使用jetson GPIO40(Board num)为模拟触发源,上升沿触发为例。

可以使用mv_mipi_i2c.sh脚本进行丰富的触发参数设置。

7.4.3.1 硬件连接
  • 使用ADP-MV1时
MV camera hardware trigger connection
  • 使用ADP-N4时

如采用公共触发源连接,则首先将J7成对短接,然后将jetson GPIO40接到J19-1。

ADP-N4 common trigger source

如采用独立触发源连接,则直接将 GPIO40接到J7-1---J7-11。

7.4.3.2 设置模式

v4l2-ctl --set-ctrl trigger_mode=1

v4l2-ctl --set-ctrl trigger_src=1

v4l2-ctl --set-ctrl vi_time_out_disable=1

7.4.3.3 开始取图
  • MV-MIPI-IMX178M

v4l2-ctl --set-fmt-video=width=3088,height=2064,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-3104x2064.raw

  • MV-MIPI-SC130M

v4l2-ctl --set-fmt-video=width=1280,height=1024,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-1280x1024.raw

7.4.3.4 进行硬触发操作

python gpio_trigger_jetson.py

Note:触发脚本链接

7.4.3.5 停止触发和采集

由于内核驱动中,死循环等待新图片,因此需要先取消vi_time_out_disable,然后再退出采集操作。

v4l2-ctl --set-ctrl vi_time_out_disable=0

在取图命令的终端中,按Ctrl+C退出采集操作。

8 Application demo

8.1 v4l2grab_mvcam_jetson

v4l2grab_mvcam是一个C语言开发的sample,支持流模式和触发模式。

代码以及使用请参考:https://github.com/veyeimaging/nvidia_jetson_veye_bsp/tree/master/mv_tools_jetson/examples/v4l2grab_mvcam

8.2 yavta(仅支持流模式)

8.2.1 yavta安装

git clone https://github.com/veyeimaging/yavta.git

cd yavta;make

8.2.2 设置图像格式

v4l2-ctl --set-ctrl roi_x=0

v4l2-ctl --set-ctrl roi_y=0

v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY

8.2.3 保存图片到文件
8.2.3.1 MV-MIPI-IMX178M
  • raw8格式

v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=3136

./yavta -c1 -Fy8-3136x2064.raw --skip 0 -f Y8 -s 3088x2064 /dev/video0

  • raw10格式

以XAVIER平台为例

v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=6208

./yavta -c1 -Fy10-3104x2064.raw --skip 0 -f XY10 -s 3088x2064 /dev/video0

  • raw12格式

以XAVIER平台为例

v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=6208

./yavta -c1 -Fy12-3104x2064.raw --skip 0 -f XY12 -s 3088x2064 /dev/video0

8.2.3.2 MV-MIPI-SC130M
  • raw8格式

./yavta -c1 -Fy8-1280x1024.raw --skip 0 -f Y8 -s 1280x1024 /dev/video0

  • raw10格式

以XAVIER平台为例

./yavta -c1 -Fy10-1280x1024.raw --skip 0 -f XY10 -s 1280x1024 /dev/video0

8.2.3.3 MV-MIPI-IMX296M
  • raw8格式

v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=1472

./yavta -c1 -Fy8-1472x1024.raw --skip 0 -f Y8 -s 1440x1088 /dev/video0

  • raw10格式

以XAVIER平台为例

./yavta -c1 -Fy10-1440x1024.raw --skip 0 -f XY10 -s 1440x1088 /dev/video0

8.2.3.4 MV-MIPI-IMX265M
  • raw8格式

./yavta -c1 -Fy8-2048x1544.raw --skip 0 -f Y8 -s 2048x1544 /dev/video0

  • raw10格式

以XAVIER平台为例

./yavta -c1 -Fy10-2048x1544.raw --skip 0 -f XY10 -s 2048x1544 /dev/video0

  • raw12格式

以XAVIER平台为例

./yavta -c1 -Fy12-2048x1544.raw --skip 0 -f XY12 -s 2048x1544 /dev/video0

8.2.3.5 MV-MIPI-IMX264M
  • raw8格式

./yavta -c1 -Fy8-2432x2048.raw --skip 0 -f Y8 -s 2432x2048 /dev/video0

  • raw10格式

以XAVIER平台为例

./yavta -c1 -Fy10-2432x2048.raw --skip 0 -f XY10 -s 2432x2048 /dev/video0

  • raw12格式

以XAVIER平台为例

./yavta -c1 -Fy12-2432x2048.raw --skip 0 -f XY12 -s 2432x2048 /dev/video0

8.2.3.6 RAW-MIPI-SC132M
  • raw8

./yavta -c1 -Fy8-1080x1280.raw --skip 0 -f Y8 -s 1080x1280 /dev/video0

  • raw10

以XAVIER平台为例.

./yavta -c1 -Fy10-1080x1280.raw --skip 0 -f XY10 -s 1080x1280 /dev/video0

8.2.3.7 MV-MIPI-IMX287M
  • raw8格式

./yavta -c1 -Fy8-704x544.raw --skip 0 -f Y8 -s 704x544 /dev/video0

  • raw10格式

以XAVIER平台为例

./yavta -c1 -Fy10-704x544.raw --skip 0 -f XY10 -s 704x544 /dev/video0

  • raw12格式

以XAVIER平台为例

./yavta -c1 -Fy12-704x544.raw --skip 0 -f XY12 -s 704x544 /dev/video0

8.2.3.8 RAW-MIPI-AR0234M
  • raw8

./yavta -c1 -Fy8-1920x1200.raw --skip 0 -f Y8 -s 1920x1200 /dev/video0

  • raw10

以XAVIER平台为例.

./yavta -c1 -Fy10-1920x1200.raw --skip 0 -f XY10 -s 1920x1200 /dev/video0

8.2.3.9 RAW-MIPI-IMX462M

以XAVIER平台为例.

  • raw12

./yavta -c1 -Fy12-1920x1088.raw --skip 0 -f XY12 -s 1920x1088 /dev/video0

  • raw10

./yavta -c1 -Fy10-1920x1088.raw --skip 0 -f XY10 -s 1920x1088 /dev/video0

图片格式请参考上面:raw data图片格式说明 章节。

8.2.3.10 RAW-MIPI-SC535M
  • raw8

./yavta -c1 -Fy8-2432x2048.raw --skip 0 -f Y8 -s 2432x2048 /dev/video0

9 i2c脚本使用说明

我们提供了shell脚本来配置参数。

mv_mipi_i2c.sh user guide

10 参考资料

11 本文修改记录

  • 2024-08-13

增加Jetpack6.0的支持。

  • 2024-05-22

增加对RAW-MIPI-SC535M的支持。

增加Jetpack5.1.3的支持。

  • 2023-08-29

增加对RAW-MIPI-IMX462M和RAW-MIPI-AR0234M的支持。

  • 2023-07-31

调通V-by-One连接的驱动。

  • 2023-06-07

增加使用qv4l2和VLC预览画面的方法。

  • 2023-04-27

支持Jetpack5.1.1.

  • 2023-04-16

去掉flip和mirror的ioctl功能。

  • 2023-03-29

增加opencv sample。

  • 2023-03-37

增加MV-MIPI-IMX287M的相关描述。

  • 2023-02-22

支持Jetpack5.1

  • 2022-12-11

增加MV-MIPI-IMX264M的相关描述。

  • 2022-10-14

增加MV-MIPI-IMX296M和MV-MIPI-IMX265M的相关描述。

  • 2022-08-31

支持Jetpack5.0.2

  • 2022-06-23

增加ADP-N4的相关描述

  • 2022-05-20

第一个发布版本