专栏感知J6B vio scenario sample

J6B vio scenario sample

新手村2025-10-30
131
0

1. 功能概述

本文的sample实现单路、多路VIO通路接入和处理,以下介绍1V、2V、6V接入的场景。

1.1. 软件架构说明

调用VIO API来实现整个数据通路,实现多路camera接入。同时能够dump每一路数据的图像。 软件控制图如下:

../../_images/vio_scenario_sample_soft.png

1.2. 硬件数据流说明

每个场景的图中已经标明硬件连接关系。

备注

运行sample示例需要硬件外设满足场景图中的硬件连接关系,如果不满足则需要根据当前的硬件连接更改配置文件 hb_j6dev.json 或更换硬件外设。 修改配置文件参考:VIN配置 章节。

1V 场景如下:

../../_images/J6b_vio_1V.png

2V 场景如下:

../../_images/J6b_vio_2V.png

6V 场景如下:

../../_images/J6b_vio_6V.png

1.3. 代码位置及目录结构

sample代码位置在SDK工程目录 {sdk_dir}/test/samples/platform_samples/source/S83_Sample/S83E04_Module/vio_scenario_sample。
根目录包含 Kconfig 和外部接口的 Makefile , Kconfig 用于控制该sample是否加入整体编译;cfg目录中包含了本sample使用到的JSON配置文件;src目录下的 vio_scenario_sample.c 是main入口的所在文件。

1.4. API流程说明

API流程图如下:

../../_images/api_flow1.png

主干代码:

如果不做单独的sensor开关流,上面代码中的hb_cam_start和hb_cam_stop可不调用,hb_vio_start_pipeline和hb_vio_stop_pipeline已经对应包含了sensor开关流功能。

其他sample文档中涉及这两对api的代码的解释同上,具体可参考 VIO 应用处理接口 。

获取数据及释放数据的代码:

2. 编译

2.1. 编译环境

本sample的编译环境使用SDK中的build工具,请参考: Build 环境建立

2.2. 编译说明

本sample编译需要VPS系统相关的头文件:

编译依赖的库有如下:

编译命令:

3. 运行

3.1. 支持平台

J6B Plus Evm

3.2. 硬件环境搭建

接口连接如下:

../../_images/j6b_evm_plus_hardware1.png

模组:联创模组OVX8D、IMX623,LONGHORN-ISX031。

连接方式: 一路OVX8D FOV120通过4合1线束的C口连接到板子的DES1;

一路IMX623 FOV60通过4合1线束的D口连接到板子的DES1;

四路ISX031通过4合1线束的ABCD口连接到板子的DES2。

3.3. 板端部署及配置

刷写系统软件镜像后,本sample的可执行文件位于板端: /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/;
需要用到的配置文件位于板端: /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/。

3.4. 运行指南

3.4.1. 运行方法

1V测试命令:

2V测试命令:

6V测试命令:

3.4.2. 运行命令行说明

vio_scenario_sample:应用程序名字。

下面的表格是具体参数的说明:

参数名

用法

是否必需

-v

指定VIO的配置文件

-c

指定camera的配置文件

-m

pipeline的掩码,bit0代表pipeline0,bit1代表pipeline1,以此类推

-l

循环获取数据帧数

-s

开启dump,代表需要保存到当前运行目录下的数据帧数

-t

程序运行时间(单位毫秒,不建议与-l参数同时使用,使用其中一个即可)

-e

指定hbplayer显示的PYM ds层,不设置默认为-1,代表不使用hbplayer

-r

开启自恢复模式,0:不开启,1:开启,默认为0不开启

例如上面的1V测试命令:

-v 参数是 /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_1V_cpe0_sen_cim0_isp0_pym0_mode2_sample/vpm_config.json,代表VIO配置文件的所在位置,json里面的具体配置可参考 VPM配置
-c 参数是 /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/1V_OVX8D_RX0/hb_j6dev_plus.json,代表camera的配置文件的所在位置,json里面的具体配置可参考J6X Camera配置说明
-m 参数是1,表示使能pipe0数据流;
-l 参数是1000,表示获取PYM数据1000帧;
-s 参数是10,表示dump前面10帧PYM的数据。
除了上述已有参数外,可增加 -t 参数,例如 -t 50000 表示程序最长运行时间为50000ms。 当 -t 参数与 -l 参数同时使用时,各线程在满足其中任意一个条件,即已获取指定的PYM数据帧数或者已达到指定的运行时间后就会退出,一般情况下不建议同时使用这两个参数。
可增加 -e 参数,例如 -e 2 表示通过hbplayer看图工具显示PYM ds层第2层。
可增加 -r 参数,例如 -r 1 表示开启自恢复模式,在热拔插后能够进行自恢复,支持最长15s,15s后没插上就自动报错退出。

1.21.3.4.3. 运行结果说明

程序运行时通过下面的命令可以看到每个IP的帧率,如果不开dump,帧率符合预期,则程序正常运行。

上面的命令只能间隔一秒以上执行一次,过快执行帧率数据会变成0。

1V测试结果:

../../_images/j6b_qnx_1v_pass.png

帧率如下:

../../_images/j6b_qnx_1v_fps1.png

2V测试结果:

../../_images/j6b_qnx_2v_pass1.png

帧率如下:

../../_images/j6b_qnx_2v_fps1.png

6V测试结果:

../../_images/j6b_qnx_6v_pass.png

帧率如下:

../../_images/j6b_qnx_6v_fps1.png
以6V测试为例,通过 -t 5000 指定运行时间为5000ms,测试结果如下,5000ms后线程正常退出。 其他场景下使用 -t 参数的现象均类似,不再赘述。
../../_images/vio_j6b_qnx_6v_time_pass.png
可以通过 -r 1 开启自恢复模式,此时在摄像头意外断开连接后,各pipe在报错的同时将尝试进行自恢复操作。当恢复正常连接后,各pipe将在当前loop报错结束、下一次loop到来后正常取流,不再继续报错:
../../_images/j6b_qnx_recovery.png

若选择通过hbplayer工具进行看图,hbplayer将在自恢复成功后继续正常显示实时图像。

其他场景下使用 -r 参数选择是否开启自恢复模式的现象均类似,不再赘述。

3.4.4. 运行可变更说明

3.4.4.1. 帧率变更
本sample中各个pipe的帧率可以通过改动配置文件内容实现。如果需要帧率为25fps,可直接修改所使用的 vpm_config.json 各pipe指定的 lpwm.json 文件中的 period 参数为40000,即40.000ms:
../../_images/j6b_25fps_lpwm_set.png
lpwm.json 配置文件中其他参数的功能说明和设置方法可参考: LPWM使用 。
以6V测试为例,本sample提供了设为 LPWM使用 中25fps场景推荐使用配置的 lpwm_25fps.json 文件: /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/6V_1xOVX8D_1xIMX623_RX0_4xISX031_RX4_SYNC/lpwm_25fps.json ,及指定使用该 lpwm.json 的 vpm_config.json 文件: /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_6V_cpe04_sen_cim04_isp0_pym04_sample/vpm_config.json 可以直接使用或参考修改;
此外,camera配置文件 hb_j6dev.json 中各port的 fps 参数也需要对应更改为25,或者可以直接使用环境变量选择帧率情形:

综上,6V 25fps场景的完整测试命令如下:

查看6V运行时的实时帧率为预期的25fps:

../../_images/j6b_6V_25fps.png

如果不需要25fps,那么执行如下命令,取消环境变量,再跑测试命令。

其他场景修改帧率的方法和过程均类似,不再赘述。

用户可在camera的配置文件中增加指定效果库文件,不配置或空时使用默认,例如指定 lib_CW_OX8DGB_AST1_065_L.so :
本sample提供了此场景下的 hb_j6dev.json 供参考,位于: /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/6V_1xOVX8D_1xIMX623_RX0_4xISX031_RX4_SYNC/hb_j6dev.json 。

3.4.5. 看图结果

Dump出的数据保存在当前目录下,例如上文中的6V测试命令执行后:

../../_images/j6b_qnx_6v_save.png
以 960x640_pipe5_pym_ds1_f2_roi_2.yuv 为例,该文件名具体代表宽960,高640的pipe5 PYM ds1层输出图像的第2帧(f2),对应loop次数为2(roi_2)。

需要额外说明的是,由于收敛时间,各pipe的前几帧图像可能出现效果不佳情况,属于正常现象,具体帧数也与实际模组有关,用户关注和使用后续正常帧即可。

此外,由于实际分配buffer时内存需要16对齐,当用户配置文件中设置的图像尺寸非16对齐时,按分配buffer大小dump出来的图像右侧就会出现无效数据,即右侧绿边,属于正常现象,可通过调整配置文件中的图像width为16的整数倍对齐内存大小或按图像实际大小保存。

本文的sample也支持通过hbplayer工具进行看图。首先在hbplayer中设置平台、IP地址等相关参数:

../../_images/hbplayer_set1.png
以6V测试为例,可在6V测试命令后增加-e参数 -e 2 显示ds层第二层:

执行命令后,点击hbplayer左侧栏中的connect即可完成连接并在右侧界面看到实时6V图像:

../../_images/j6b_qnx_cmdline_show.png ../../_images/j6b_qnx_6V_hbplayer.png
当满足 -l 或 -t 参数指定的条件后,sample将自动退出运行,也可通过 Ctrl+C 手动结束运行。其他测试场景连接hbplayer工具看图的方法和效果均类似,不再赘述。
感知
技术深度解析社区征文征程6
评论0
0/1000