RV1126B MIPI-CSI双通道实录:DIS电子防抖工程框架与避坑指南

描述

 

调试移动场景下的视觉算法,画面抖动导致的特征点丢失和误判是绕不开的难题。尤其是在机器人巡检、手持设备等场景中,物理云台的响应延迟和成本限制,使得软件层面的电子防抖(DIS)成为刚需。

Rockchip RV1126B平台内置了硬件加速的DIS模块,但在实际部署中,从摄像头接线、内核驱动加载到应用层参数配置,任何一个环节出错都会导致出图异常。本文基于 EASY-EAI-Nano-TB 开发板,记录从零开始运行DIS方案的完整实操步骤,供嵌入式视觉工程师参考。

 

PART.01

编译环境准备与源码构建

DIS方案依赖特定的内核驱动和用户态库,建议在灵眸提供的Docker编译环境中进行操作,以避免依赖缺失。

开发板第一步:进入编译环境

在PC端Ubuntu系统中,启动EASY-EAI编译容器:

  •  
  •  
  •  

cd ~/develop_environment./run.sh 2404easyeai-compiler

第二步:获取Toolkit仓库

/opt目录下克隆完整的Toolkit仓库(注意不要单独下载某个目录,以免遗漏依赖):

  •  
  •  
  •  

cd /optmkdir EASY-EAI-Toolkit && cd EASY-EAI-Toolkitgit clone https://github.com/EASY-EAI/EASY-EAI-Toolkit-1126B.git

第三步:编译与部署

进入DIS实例目录,执行编译脚本。

  •  
  •  

cd EASY-EAI-Toolkit-1126B/Solutions/dis./build.sh all

参数说明:

./build.sh:仅编译,产物输出到Release/

./build.sh deploy:仅部署.ko驱动和.json配置到板端。

./build.sh all推荐。先执行deploy,再编译并将产物拷贝到板端/userdata目录。

./build.sh clear:清理build/Release/目录。


 

PART.02

板端运行与效果验证

编译完成后,通过串口或SSH登录到板卡后台,执行以下步骤启动DIS。

1. 停用3A服务

DIS运行需要独占ISP资源,需先停止系统默认的rkaiq_3A服务。

  •  
  •  

systemctl stop rkaiq_3A.service# 如需永久禁用,执行 systemctl disable rkaiq_3A.service

2. 加载内核驱动

插入DIS所需的FEC驱动模块。

  •  
  •  

cd /userdata/Solu/disinsmod video_rkfec.ko

3. 运行DIS例程

执行生成的dis可执行文件,指定分辨率、IQ文件及配置文件。

  •  

./dis -w 2688 -h 1520 -a /etc/iqfiles/ -r ./sc450ai_CRK4F4209_dis.json

-w: 视频宽度

-h: 视频高度

-a: AIQ IQfiles路径

-r: DIS配置JSON文件路径(必需)


 

4. 预览效果

运行成功后,终端会打印RTSP端口号。使用VLC播放器通过网络串流(如rtsp://<板卡IP>:8554/dis)进行预览。此时晃动镜头,可直观观察到画面的稳定效果。


 


 

PART.03

开发指南:工程结构与CMake解析

对于需要在DIS基础上进行二次开发的工程师,理解Toolkit的工程结构至关重要。

工程目录结构

一个标准的Solution实例包含以下核心元素:

build.sh:编译部署脚本。

CMakeLists.txt:CMake工程管理文件。

src/:存放业务源代码(如main.c)。

include/:存放头文件。

libs/:存放第三方预编译库(.a.so)。

CMakeLists.txt 逻辑拆解

为了适配嵌入式交叉编译,CMakeLists.txt通常分为四个逻辑块:

环境配置: 设置CMake最低版本,定义CMAKE_SYSTEM_NAME(如Linux),导入cross.cmake工具链文件,判断是否启用交叉编译。

API配置: 引入灵眸easyeai-api组件,配置头文件路径(api_inc)、源码路径(api_srcs)及链接库(sysLib_list)。

第三方库配置: 配置自定义的第三方库。通过link_directories指定库路径,通过target_include_directories指定头文件路径,通过aux_source_directory递归添加src目录下的源文件。

本方案配置: 将所有的源文件、头文件和库链接成一个可执行目标。

build.sh 脚本逻辑

路径定位: 脚本首先获取当前目录的绝对路径(SHELL_FOLDER),便于后续部署。

清除逻辑: 当传入参数为clear时,删除buildRelease文件夹。

编译逻辑: 调用cmake生成Makefile并执行make,随后将生成的驱动、配置文件和可执行文件拷贝至/mnt/userdata(板卡映射目录)。


 

写在最后
 

理解了上述数据流,也就掌握了DIS方案的核心逻辑:原始图像数据从Sensor经由MIPI CSI双通道进入VIPCAP,经过video_rkfec驱动模块进行硬件级的防抖矫正,最终交由应用层进行编码或算法分析。

基于此逻辑,我们在EASY-EAI-Toolkit中将驱动加载、IQ文件配置与应用层解耦。这意味着你可以很方便地复用这套框架——无论是更换不同分辨率的Sensor,还是在DIS稳定后的视频流上叠加自研的AI算法(如目标检测或人脸识别),只需调整CMakeLists.txt中的源文件引用和build.sh的部署逻辑,无需从头搭建底层通路。


 

开发板


 

以上工程框架已在EASY-EAI-Nano-TB开发板上完成验证。关于DIS算法内部参数的动态调节(如基于陀螺仪数据的融合防抖),以及多Sensor同步触发机制,我们将在后续的深度解析文章中探讨。

更多关于RV1126B平台的视觉方案与API调用细节,欢迎访问灵眸科技官网查阅。

 

 

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分