1. 方案简介
本方案将演示如何利用EASY-EAI-Orin-Nano以及MIPI-CSI摄像头制作一个【网络摄像头(IPCamera)】:四路MIPI-CSI摄像头分别单独输出四路流。
1.1 接线示意图
摄像头与板卡连接:
板卡与局域网连接:
* 接线必须在断电时进行操作。
* 采用反向线连接IMX415摄像头与Cmaera1接口。(注意:用错线会烧坏摄像头或者核心板,因此在接线时务必要小心。)
* 接线端子卡扣与FPC线的蓝色塑料标识必须位于同一侧。如下图所示。
EASY EAI Orin-Nano默认搭配IMX415单目摄像头。同时配有一根0.5mm间距的40pin FPC反向线。
反向线:两端的蓝色标识不在同一侧面。
同向线:两端的蓝色标识处于同一侧面。
2.快速上手
如果您初次阅读此文档,请阅读:《入门指南/源码管理及编程介绍/源码工程管理》,按需管理自己工程源码(注:此文档必看,并建议采用【远程挂载管理】方式,否则有代码丢失风险!!!)。
2.1 源码工程下载
先在PC虚拟机定位到nfs服务目录,再在目录中创建存放源码仓库的管理目录:
cd ~/nfsroot mkdir GitHub cd GitHub
再通过git工具,在管理目录内克隆远程仓库(需要设备能对外网进行访问)
git clone https://github.com/EASY-EAI/EASY-EAI-Toolkit-3576.git
注:
* 此处可能会因网络原因造成卡顿,请耐心等待。
* 如果实在要在gitHub网页上下载,也要把整个仓库下载下来,不能单独下载本实例对应的目录。
2.2 开发环境搭建
通过adb shell进入板卡开发环境,如下图所示。
通过以下命令,把nfs目录挂载上nfs服务器。
mount -t nfs -o nolock < nfs server ip >:< nfs path in server > /home/orin-nano/Desktop/nfs/
2.3 例程编译
然后定位到nfs的挂载目录,再在目录中创建存放源码仓库的管理目录:
cd /home/orin-nano/Desktop/nfs/GitHub
进入到对应的开发实例目录执行编译操作,具体命令如下所示:
cd EASY-EAI-Toolkit-3576/Solutions/rtspIPCamera/ ./build.sh
2.4 例程运行及效果
执行下方命令,运行示例程序:
./Release/rtspIPCamera
执行效果如下所示。
2.5 非本地rtsp拉流
如果需要使用另一台计算机设备作为rtspClinet去拉流,则需要把127.0.0.1(本机IP)替换成rtspServer设备所在局域网的IP地址,具体操作如下。
首先通过ifconfig命令查看板卡的局域网IP地址。
sudo ifconfig
然后在另外一台计算机开启rtspClinet应用(以VLC为例),填上URL进行拉流。
3. 设计说明
3.1 总体逻辑框图
3.2 factory逻辑
3.3 代码组成
本开发实例相关的所有代码,均位于EASY-EAI-Toolkit-3576/Solutions/rtspIPCamera/中。其中:
总体逻辑位于:EASY-EAI-Toolkit-3576/Solutions/rtspIPCamera/src/main.cpp
factory逻辑位于:EASY-EAI-Toolkit-3576/Solutions/rtspIPCamera/src/appSource.cpp
摄像头控制逻辑位于:EASY-EAI-Toolkit-3576/Solutions/rtspIPCamera/src/camera/
3.4 调用关系
4. 开发指南
4.1 Toolkit仓库介绍
4.2 示例文件&目录结构
4.2.1 开发实例介绍
每个开发实例就是一个独立的项目,项目使用cmake构建自动编译部署。一个最简单的项目至少要包含以下元素:build.sh、CMakeLists.txt、main.c,如下所示。
具体介绍如下所示。
组成部分 | 描述 |
build.sh | 编译脚本,用于管理生成可执行文件后的部署准备工作,用户可自定义shell命令 |
CMakeLists.txt | 工程管理文件,用于组织整个工程结构,指导cmake生成Makefile |
include | 用于存放第三方应用库、头文件目录等 |
src | 用于存放实现本方案需求的源代码 |
4.2.2 可拓展的目录
可拓展的目录是指:开发过程中增加某些功能模块,功能代码。增加模式分为两种:
增加已编译的第三方库,在include、libs目录内添加头文件和库文件;
增加用户自定义的功能模块,推荐在src目录内增加;
具体情况如下所示,第三方模块相关的文件由include/3rd_model/xxx.h、libs/3rd_model/xxx.a。自定义的功能模块为src/mySrcCode、src/mySrcCode2。
4.3 CMakeLists.txt文件解析
4.3.1 编译环境配置部分:
第一部分为配置部分,配置部分如下所示。(获取当前方案目录、配置工具链、提取方案名称):
配置信息如下所示。
配置项 | 描述 |
CMake要求版本 | cmake_minimum_required函数指定,要求的最低版本 |
CMAKE_SYSTEM_NAME | cmake的系统类型,交叉编译必须 |
CMAKE_CROSSCOMPILING | cmake是否启动交叉编译 |
cross.camke | camke_host_system_information获取平台信息,发现不是armv7l或者aarch64就导入当前平台的交叉编译配置。 |
project项目名 | 由project函数指定 |
4.3.2 easyeai-api配置部分
第二部分是引入我司的功能组件库(针对当前方案进行:配置EASY EAI API头文件目录${XXX_INCLUDE_DIRS}、源码文件目录${XXX_SOURCE_DIRS}以及所依赖的库参数${XXX_LIBS}):
配置信息如下所示。
配置项 | 描述 |
api_inc | 最终通过target_include_directories关键字指定目标包含的头文件路径 |
api_srcs | 最终通过add_executable关键字指定所需easyeai-api的源码 |
sysLib_list | 最终通过target_link_libraries关键字指定easyeai-api所需的库参数 |
4.3.3 第三方库配置部分
第三部分配置第三方的库(针对当前方案进行:配置第三方头文件目录、库文件目录、配置第三方库链接参数以及配置源码目录):
配置信息如下所示。
配置项 | 描述 |
custom_inc | 自定义变量custom_inc,最终通过target_include_directories函数指定目标包含的头文件路径,在源码include目录下 |
link_directories | 由link_directories函数指定第三方库所在路径 |
custom_libs | 自定义变量custom_libs,最终通过target_link_libraries函数指定目标引用的库链接参数 |
aux_source_directory | 自定义变量dir_srcs,用于添加工程代码以及自定义的个人代码 |
例如添加个人库的目录组成方式如下所示。
aux_source_directory的修改方式为:
aux_source_directory(./src ./src/mySrcCode ./src/mySrcCode2 dir_srcs)
或
aux_source_directory(./src dir_srcs) aux_source_directory(./src/mySrcCode dir_srcs) aux_source_directory(./src/mySrcCode2 dir_srcs)
4.3.4 本方案配置部分
第四部分配置项目的编译信息,内容如下所示:
配置项如下所示。
配置项 | 需求 |
add_executable |
编译结果为${CURRENT_FOLDER}指定,即方案目录名; 编译的源文件为${dir_srcs}和${api_srcs}指定; |
target_include_directories | 指定头文件的名字,由${custom_inc}与${api_inc}指定; |
target_link_libraries | 指定的库编译参数,由${custom_libs}与${sysLib_list}指定; |
4.4 build.sh编译脚本:
4.4.1 路径定位部分
第一部分用于提取目录用于编译操作,内容如下所示:(进入build.sh脚本所在目录,并且提取当前目录绝对路径,提取当前目录名称)
4.4.2 清除编译部分
第二部分清除操作,清除目录为build、Release,内容如下所示:(执行build.sh脚本时,带入了参数“clear”,则清空编译输出)
4.4.3 编译操作
第三部分,编译直接调用cmake,内容如下所示:(重新编译,成部署目录,并把资源自动部署进板卡)
审核编辑 黄宇
-
开发板
+关注
关注
25文章
5682浏览量
104768 -
rk3576
+关注
关注
1文章
175浏览量
728
发布评论请先 登录
基于RK3576开发板的MIPI-DSI使用

评论