6.100ASK_V853-PRO开发板支持MIPI摄像头

news2024/11/26 7:33:23

0.前言

​ 100ASK_V853-PRO开发板支持4LINE的MIPI摄像头和2LINE的MIPI摄像头,使用百问网提供的Tina SDK包生成的镜像,系统已经配置好了,可以直接使用。本章介绍如何去适配一个MIPI摄像头,本文所用的2LINE的MIPI摄像头,大家可以在百问网官方淘宝店铺上购买。100ASK_V853-PRO开发板
在这里插入图片描述

全志Linux Tina-SDK开发完全手册:https://tina.100ask.net/

如果您想适配自己的摄像头,强烈建议您参照以下开发指南进行操作:

Camera_开发指南:https://tina.100ask.net/SdkModule/Linux_Camera_DevelopmentGuide-01/

1.VIN框架介绍

V853支持并口CSI、MIPI,使用VIN camera驱动框架。

Camera 通路框架

• VIN 支持灵活配置单/双路输入双ISP 多通路输出的规格

• 引入media 框架实现pipeline 管理

• 将libisp 移植到用户空间解决GPL 问题

• 将统计buffer 独立为v4l2 subdev

• 将的scaler(vipp)模块独立为v4l2 subdev

• 将video buffer 修改为mplane 方式,使用户层取图更方便

• 采用v4l2-event 实现事件管理

• 采用v4l2-controls 新特性

在这里插入图片描述

VIN 框架

• 使用过程中可简单的看成是vin 模块+ device 模块+af driver + flash 控制模块的方式;

• vin.c 是驱动的主要功能实现,包括注册/注销、参数读取、与v4l2 上层接口、与各device 的下层接口、中断处理、buffer 申请切换等;

• modules/sensor 文件夹里面是各个sensor 的器件层实现,一般包括上下电、初始化,各分辨率切换,yuv sensor 包括绝大部分的v4l2 定义的ioctrl 命令的实

现;而raw sensor 的话大部分ioctrl 命令在vin 层调用isp 库实现,少数如曝光/增益调节会透过vin 层到实际器件层;

• modules/actuator 文件夹内是各种vcm 的驱动;

• modules/flash 文件夹内是闪光灯控制接口实现;

• vin-csi 和vin-mipi 为对csi 接口和mipi 接口的控制文件;

• vin-isp 文件夹为isp 的库操作文件;

• vin-video 文件夹内主要是video 设备操作文件;

image-20221122113602939

驱动路径位于linux-4.9/drivers/media/platform/sunxi-vin 下。

sunxi-vin:
│ vin.c ;v4l2驱动实现主体(包含视频接口和ISP部分)
│ vin.h ;v4l2驱动头文件
│ top_reg.c ;vin对各v4l2 subdev管理接口实现主体
│ top_reg.h ;管理接口头文件
│ top_reg_i.h ;vin模块接口层部分结构体
├── modules
│ ├── actuator ;vcm driver
│ │ ├── actuator.c
│ │ ├── actuator.h
│ │ ├── dw9714_act.c
│ │ ├── Makefile
│ ├── flash ;闪光灯driver
│ │ ├── flash.c
│ │ └── flash.h
│ └── sensor ;sensor driver
│ ├── ar0144_mipi.c
│ ├── camera_cfg.h ;camera ioctl扩展命令头文件
│ ├── camera.h ;camera公用结构体头文件
│ ├── Makefile
│ ├── ov2775_mipi.c
│ ├── ov5640.c
│ ├── sensor-compat-ioctl32.c
│ ├── sensor_helper.c ;sensor公用操作接口函数文件
│ ├── sensor_helper.h
├── platform ;平台相关的配置接口
├── utility
│ ├── bsp_common.c
│ ├── bsp_common.h
│ ├── cfg_op.c
│ ├── cfg_op.h
│ ├── config.c
│ ├── config.h
│ ├── sensor_info.c
│ ├── sensor_info.h
│ ├── vin_io.h
│ ├── vin_os.c
│ ├── vin_os.h
│ ├── vin_supply.c
│ └── vin_supply.h
├── vin-cci
│ ├── sunxi_cci.c
│ └── sunxi_cci.h
├── vin-csi
│ ├── parser_reg.c
│ ├── parser_reg.h
│ ├── parser_reg_i.h
│ ├── sunxi_csi.c
│ └── sunxi_csi.h
├── vin-isp
│ ├── sunxi_isp.c
│ └── sunxi_isp.h
├── vin-mipi
│ ├── sunxi_mipi.c
│ └── sunxi_mipi.h
├── vin-stat
│ ├── vin_h3a.c
│ ├── vin_h3a.h
│ ├── vin_ispstat.c
│ └── vin_ispstat.h
├── vin_test
├── vin-video
│ ├── vin_core.c
│ ├── vin_core.h
│ ├── vin_video.c
│ └── vin_video.h
└── vin-vipp
├── sunxi_scaler.c
├── sunxi_scaler.h
├── vipp_reg.c
├── vipp_reg.h
└── vipp_reg_i.h

2.驱动配置

​ 100ASK_V853-PRO开发板支持4LINE双摄镜头模组和2LINE单摄镜头模组,下面我仅演示2LINE的MIPI摄像头如何进行配置。我们使用的是GC2053摄像头,使用的是全志已经内置的驱动程序,路径为:

kernel/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/gc2053_mipi.c

3.设备树配置

设备树配置路径:

device/config/chips/v853/configs/100ask/board.dts

camera相关配置:

                vind0:vind@0 {
                        vind0_clk = <300000000>;
                        status = "okay";

                        csi2:csi@2 {
                                pinctrl-names = "default","sleep";
                                pinctrl-0 = <&ncsi_pins_a>;
                                pinctrl-1 = <&ncsi_pins_b>;
                                status = "okay";
                        };
                        /*Online mode tp9953 uses online mode*/
                        tdm0:tdm@0 {
                                work_mode = <0>;
                        };

                        isp00:isp@0 {
                                work_mode = <0>;
                        };

                        scaler00:scaler@0 {
                                work_mode = <0>;
                        };

                        scaler10:scaler@4 {
                                work_mode = <0>;
                        };

                        scaler20:scaler@8 {
                                work_mode = <0>;
                        };

                        scaler30:scaler@12 {
                                work_mode = <0>;
                        };

                        actuator0:actuator@0 {
                                device_type = "actuator0";
                                actuator0_name = "ad5820_act";
                                actuator0_slave = <0x18>;
                                actuator0_af_pwdn = <>;
                                actuator0_afvdd = "afvcc-csi";
                                actuator0_afvdd_vol = <2800000>;
                                status = "disabled";
                        };
                        flash0:flash@0 {
                                device_type = "flash0";
                                flash0_type = <2>;
                                flash0_en = <>;
                                flash0_mode = <>;
                                flash0_flvdd = "";
                                flash0_flvdd_vol = <>;
                                status = "disabled";
                        };

                        sensor0:sensor@0 {
                                device_type = "sensor0";
                                sensor0_mname = "gc2053_mipi";
                                sensor0_twi_cci_id = <1>;
                                sensor0_twi_addr = <0x6e>;
                                sensor0_mclk_id = <0>;
                                sensor0_pos = "rear";
                                sensor0_isp_used = <1>;
                                sensor0_fmt = <1>;
                                sensor0_stby_mode = <0>;
                                sensor0_vflip = <0>;
                                sensor0_hflip = <0>;
                                sensor0_iovdd-supply = <&reg_aldo2>;
                                sensor0_iovdd_vol = <1800000>;
                                sensor0_avdd-supply = <&reg_bldo2>;
                                sensor0_avdd_vol = <2800000>;
                                sensor0_dvdd-supply = <&reg_dldo2>;
                                sensor0_dvdd_vol = <1200000>;
                                sensor0_power_en = <>;
                                sensor0_reset = <&pio PA 18 1 0 1 0>;
                                sensor0_pwdn = <&pio PA 19 1 0 1 0>;
                                sensor0_sm_hs = <>;
                                sensor0_sm_vs = <>;
                                flash_handle = <&flash0>;
                                act_handle = <&actuator0>;
                                status  = "okay";
                        };
                        sensor1:sensor@1 {
                                device_type = "sensor1";
                                sensor1_mname = "tp9953";
                                sensor1_twi_cci_id = <0>;
                                sensor1_twi_addr = <0x88>;
                                sensor1_mclk_id = <2>;
                                sensor1_pos = "front";
                                sensor1_isp_used = <0>;
                                sensor1_fmt = <0>;
                                sensor1_stby_mode = <0>;
                                sensor1_vflip = <0>;
                                sensor1_hflip = <0>;
                                sensor1_iovdd-supply = <&reg_aldo2>;
                                sensor1_iovdd_vol = <1800000>;
                                sensor1_avdd-supply = <>; /*<&reg_dcdc1>;*/
                                sensor1_avdd_vol = <3300000>;
                                sensor1_dvdd-supply = <>;//<&reg_dldo2>;
                                sensor1_dvdd_vol = <1200000>;
                                sensor1_power_en = <&pio PI 0 1 0 1 0>;
                                sensor1_reset = <&pio PH 13 1 0 1 0>;
                                sensor1_pwdn  = <>;
                                /*sensor1_pwdn = <&pio PE 13 1 0 1 0>;*/
                                sensor1_sm_hs = <>;
                                sensor1_sm_vs = <>;
                                flash_handle = <>;
                                act_handle = <>;
                                status  = "okay";
                        };

4.内核配置

在Tina根目录下执行make kernel_menuconfig

book@100ask:~/workspaces/tina-v853-open$ make kernel_menuconfig

注意:在进行内核配置前需要配置环境变量才可以进入内核调试,即在配置前输入

book@100ask:~/workspaces/tina-v853-open$ source build/envsetup.sh
...
book@100ask:~/workspaces/tina-v853-open$ lunch
... 输入1,选择方案1

在内核配置界面中,进入如下目录,输入M选中下面两项。

→ Device Drivers 
	→ Multimedia support 
		→ V4L platform devices
			<M>   sunxi video input (camera csi/mipi isp vipp)driver
			<M>     v4l2 new driver for SUNXI

在这里插入图片描述

可以看到全志已经支持了很多摄像头,找到我们需要适配的摄像头,输入M将gc2053驱动编为模块。

→ Device Drivers 
	→ Multimedia support 
		→ V4L platform devices 
			→ sensor driver select
				<M> use gc2053_mipi driver

注意:如果出现没有的路径,需要选择上一级目录才会打开。

在这里插入图片描述

5.Tina配置

在Tina根目录下输入make menuconfig,进入如下目录

 > Kernel modules 
 	> Video Support
 		<*> kmod-vin-v4l2.............................. Video input support (staging)

如下图所示

在这里插入图片描述

6.modules.mk配置

modules.mk主要完成两个方面:

  1. 拷贝相关的ko模块到小机rootfs中
  2. rootfs启动时,按顺序自动加载相关的ko模块。

modules.mk文件路径:

tina-v853-open/openwrt/target/v853/v853-100ask/modules.mk

驱动加载顺序配置

 define KernelPackage/vin-v4l2
   SUBMENU:=$(VIDEO_MENU)
   TITLE:=Video input support (staging)
   DEPENDS:=
   FILES:=$(LINUX_DIR)/drivers/media/v4l2-core/videobuf2-core.ko
   FILES+=$(LINUX_DIR)/drivers/media/v4l2-core/videobuf2-dma-contig.ko
   FILES+=$(LINUX_DIR)/drivers/media/v4l2-core/videobuf2-memops.ko
   FILES+=$(LINUX_DIR)/drivers/media/v4l2-core/videobuf2-v4l2.ko
   FILES+=$(LINUX_DIR)/drivers/media/platform/sunxi-vin/vin_io.ko
   FILES+=$(LINUX_DIR)/drivers/media/platform/sunxi-vin/modules/sensor/gc2053_mipi.ko
 #  FILES+=$(LINUX_DIR)/drivers/media/platform/sunxi-vin/modules/sensor_power/sensor_power.ko
   FILES+=$(LINUX_DIR)/drivers/media/platform/sunxi-vin/vin_v4l2.ko
   FILES+=$(LINUX_DIR)/drivers/input/sensor/da380/da380.ko
   AUTOLOAD:=$(call AutoProbe,videobuf2-core videobuf2-dma-contig videobuf2-memops videobuf2-v4l2 vin_io gc2053_mipi vin_v4l2 da380.ko)
 endef

 define KernelPackage/vin-v4l2/description
  Kernel modules for video input support
 endef

 $(eval $(call KernelPackage,vin-v4l2))

7.S00mpp配置

V853平台在完成modules.mk配置后,还需要完成.ko挂载脚本S00mpp的配置,以便开机快速启动摄像头模块。

S00mpp配置路径:

tina-v853-open/openwrt/target/v853/v853-100ask/busybox-init-base-files/etc/init.d/S00mpp

脚本对摄像头驱动进行了提前加载,应用需要使用的时候即可快速配置并启动。

#!/bin/sh
#
# Load mpp modules....
#

MODULES_DIR="/lib/modules/`uname -r`"

start() {
    printf "Load mpp modules\n"
    insmod $MODULES_DIR/videobuf2-core.ko
    insmod $MODULES_DIR/videobuf2-memops.ko
    insmod $MODULES_DIR/videobuf2-dma-contig.ko
    insmod $MODULES_DIR/videobuf2-v4l2.ko
    insmod $MODULES_DIR/vin_io.ko
#   insmod $MODULES_DIR/sensor_power.ko
    insmod $MODULES_DIR/gc4663_mipi.ko
    insmod $MODULES_DIR/vin_v4l2.ko
    insmod $MODULES_DIR/sunxi_aio.ko
    insmod $MODULES_DIR/sunxi_eise.ko
#   insmod $MODULES_DIR/vipcore.ko
}

stop() {
    printf "Unload mpp modules\n"
#   rmmod $MODULES_DIR/vipcore.ko
    rmmod $MODULES_DIR/sunxi_eise.ko
    rmmod $MODULES_DIR/sunxi_aio.ko
    rmmod $MODULES_DIR/vin_v4l2.ko
    rmmod $MODULES_DIR/gc4663_mipi.ko
#   rmmod $MODULES_DIR/sensor_power.ko
    rmmod $MODULES_DIR/vin_io.ko
    rmmod $MODULES_DIR/videobuf2-v4l2.ko
    rmmod $MODULES_DIR/videobuf2-dma-contig.ko
    rmmod $MODULES_DIR/videobuf2-memops.ko
    rmmod $MODULES_DIR/videobuf2-core.ko
}

case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    restart|reload)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
esac

exit $?

8.增加摄像头测试程序

在Tina根目录下执行make menuconfig,进入Tina配置界面后,进入如下目录,输入Y选中camerademo测试程序。

> Allwinner 
	> Vision
		<*> camerademo........................................ camerademo test sensor  ---> 

在这里插入图片描述

9.编译烧写镜像

在Tina的根目录下,输入make -j32

book@100ask:~/workspaces/tina-v853-open$ make -j32
...
book@100ask:~/workspaces/tina-v853-open$ pack
...

​ 生成镜像后,将tina-v853-open/out/v853/100ask/openwrt/目录下的v853_linux_100ask_uart0.img镜像拷贝到Windows电脑主机中,使用全志PhoenixSuit烧写工具烧写到开发板上。

​ 上电前需要连接插上12V的电源线,和两条Type-C,把开关拨向电源接口方向上电,烧写新镜像后等待启动系统,在命令行中输入lsmod

root@TinaLinux:/# lsmod 
Module                  Size  Used by
vin_v4l2              181099  0 
gc2053_mipi             8567  0 
vin_io                 21106  3 vin_v4l2,gc2053_mipi
videobuf2_v4l2          9304  1 vin_v4l2
videobuf2_dma_contig     8632  1 vin_v4l2
videobuf2_memops         948  1 videobuf2_dma_contig
videobuf2_core         22168  2 vin_v4l2,videobuf2_v4l2
xradio_wlan              598  0 
xradio_core           431911  1 xradio_wlan
xradio_mac            222724  1 xradio_core

可以看到我们之前选中的VIN驱动和GC2053驱动已经装载进去了

10.运行camera测试程序

在开发板的串口终端界面输入camedemo -h可以输出camera测试程序的使用教程

root@TinaLinux:/# camerademo -h
[CAMERA]**********************************************************
[CAMERA]*                                                        *
[CAMERA]*              this is camera test.                      *
[CAMERA]*                                                        *
[CAMERA]**********************************************************
[CAMERA]******************** camerademo help *********************
[CAMERA] This program is a test camera.
[CAMERA] It will query the sensor to support the resolution, output format and test frame rate.
[CAMERA] At the same time you can modify the data to save the path and get the number of photos.
[CAMERA] When the last parameter is debug, the output will be more detailed information
[CAMERA] There are eight ways to run:
[CAMERA]    1.camerademo --- use the default parameters.
[CAMERA]    2.camerademo debug --- use the default parameters and output debug information.
[CAMERA]    3.camerademo setting --- can choose the resolution and data format.
[CAMERA]    4.camerademo setting debug --- setting and output debug information.
[CAMERA]    5.camerademo NV21 640 480 30 bmp /tmp 5 --- param input mode,can save bmp or yuv.
[CAMERA]    6.camerademo NV21 640 480 30 bmp /tmp 5 debug --- output debug information.
[CAMERA]    7.camerademo NV21 640 480 30 bmp /tmp 5 Num --- /dev/videoNum param input mode,can save bmp or yuv.
[CAMERA]    8.camerademo NV21 640 480 30 bmp /tmp 5 Num debug --- /dev/videoNum output debug information.
[CAMERA]    8.camerademo NV21 640 480 30 bmp /tmp 5 Num 1 --- 1/2: chose memory: V4L2_MEMORY_MMAP/USERPTR
[CAMERA]**********************************************************

在开发板的串口终端界面输入camerademo NV21 640 480 30 bmp /tmp 5,将会拍摄5张照片放在/tmp目录下,将/tmp目录下的文件拷贝到电脑端即可查看相应的图片。

具体教程可以参考:https://tina.100ask.net/SdkModule/Linux_Camera_DevelopmentGuide-06/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/513627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是应用交付网络(ADN)

从CDN到ADN CDN&#xff08;内容分发网络&#xff09;在90年代末受到麻省理工学院的启发并完成发明&#xff0c;00年代初成立第一家成功的CDN商业企业Akamai。CDN的目标是相对于最终用户在空间上分配服务&#xff0c;以提供高可用性和高性能。随着互联网的发展&#xff0c;CDN…

建筑行业搭建BI数据可视化平台,已成为大势所趋

建筑行业的项目管理是一个系统而复杂的过程&#xff0c;其重点主要是寻求造价、质量、工期等几个方面的平衡点&#xff0c;并且对项目的整个过程必须要有一个清晰和直观的了解。 因此可以通过BI数据可视化分析将各个节点的系统数据、业务数据完整的呈现&#xff0c;将各管理层…

数字孪生园区可视化大屏系统-广州华锐互动

工业园区是现代工业化生产的重要组成部分&#xff0c;也是推动经济发展和提升城市形象的重要载体。而数字孪生园区可视化大屏系统作为一种新兴的技术应用&#xff0c;可以为工业园区的建设、管理和发展带来很大的价值。 首先&#xff0c;数字孪生园区可视化大屏系统可以帮助工业…

[C++]普通二叉搜索树实现

目录 1 二叉搜索树的基本概念 2 二叉搜索树的构建 2.1 二叉搜索树的结点 2.2 搜索树类的结构 3 成员函数 3.1 插入 3.2 查找 3.3 删除&#xff08;重点&#xff09; 3.4 默认成员函数的辅助函数 4 普通的二叉搜索树的效率 1 二叉搜索树的基本概念 二叉搜索树又称二叉…

Java框架学习05(Spring事务详解)

1、什么是事务&#xff1f; 事务是逻辑上的一组操作&#xff0c;要么都执行&#xff0c;要么都不执行。 我们系统的每个业务方法可能包括了多个原子性的数据库操作&#xff0c;比如下面的 savePerson() 方法中就有两个原子性的数据库操作。这些原子性的数据库操作是有依赖的&…

相亲交友app开发上线运营的整个流程是什么

一、相亲交友app开发基本流程 1、需求分析&#xff1a;需求分析是相亲交友app源码开发的第一步&#xff0c;也是最重要的一步。在需求分析阶段&#xff0c;可以了解客户对于系统的需求&#xff0c;确定系统功能实现的大致方向和功能。 2、系统架构&#xff1a;系统架构阶段就是…

这里有一份教你每天用领英获取20个询盘的免费课程,手慢无

于2023年3月22日&#xff0c;我们圆满完成了深圳宝安的外贸分享交流会&#xff0c;时隔两个月即将迎来我们的广州场。 在上次深圳会议&#xff0c;有幸邀请到江西省跨境电商协会会长莅临 给大家分享了&#xff1a; 如何帮助传统制造业从“0”开始做外贸、如何借助平台为企业…

浅谈霍尔电流传感器在电池柜监测中的应用

安科瑞 耿敏花 摘要&#xff1a;本文分析了霍尔电流传感器的工作原理&#xff0c;浅谈其在电池柜监测中的应用。 关键词&#xff1a;霍尔电流传感器 工作原理 充放电电流 电池柜 引言 大多数的工厂里&#xff0c;使用到的电池柜&#xff0c;它是将许多的新组装的电池一起…

不合格机器人工程讲师为何不分享成功的案例

不合格机器人工程讲师如何坦然面对失败 除了失败&#xff0c;更多的失败&#xff0c;也并非一无所获。 博客分享过&#xff0c;但是关注度&#xff08;浏览量&#xff09;不高&#xff0c;大部分成功案例都是学生/毕业生自身努力的结果&#xff0c;教育引导的作用小于他们自身…

中国品牌日:海尔智家向世界展示“中国”

品牌&#xff0c;在任何时候都是一个厚重的话题。什么是品牌&#xff1f;被咬掉一口的苹果、圆润张扬的对号、还有那个大大的黄色M&#xff0c;在诞生之初也不过是个商标。只是后来&#xff0c;它们跟智能手机、体育和快餐划上了等号&#xff0c;讲出了故事、收获了口碑&#x…

Android Framework——Binder 监控方案

作者&#xff1a;低性能JsonCodec 在 Android 应用开发中&#xff0c;Binder 可以说是使用最为普遍的 IPC 机制了。我们考虑监控 Binder 这一 IPC 机制&#xff0c;一般是出于以下两个目的&#xff1a; 卡顿优化&#xff1a;IPC 流程完整链路较长&#xff0c;且依赖于其他进程…

操作系统基础知识介绍之内存层次结构(一)

传统上&#xff0c;内存层次结构的设计者专注于优化平均内存访问时间&#xff0c;这由缓存访问时间、未命中率和未命中惩罚决定。 然而&#xff0c;最近&#xff0c;功率已成为主要考虑因素。 在高端微处理器中&#xff0c;可能有 60 MiB 或更多的片上高速缓存&#xff0c;并且…

并查集-- 一种路径压缩实现

并查集用于计算图连通分量。 比如回答这样的问题&#xff1a; 社交媒体中&#xff0c;用户A和用户B是否属于同一个圈子里的&#xff1f;一个城市到另一个城市是否是可达的&#xff1f; 并查集适用于并不需要计算出图上具体的路径&#xff0c;只需要计算是否连通。 public i…

JavaScript 链表

&#xff08;成功的唯一秘诀——坚持最终一分钟。——柏拉图&#xff09; 链表 众所周知&#xff0c;数组的查询比链表快&#xff0c;但插入比链表慢。 这是因为链表是一种动态的数据结构&#xff0c;不同于数组的是&#xff0c;链表分配内存空间的灵活性&#xff0c;它不会像…

解决车载U盘:USB设备未连接 问题

U盘是一种常用的便携式存储设备&#xff0c;用于存储和传输数据。在U盘上使用的文件系统类型决定了它可以支持的文件大小、安全性和其他特性。以下是几种常见的U盘文件系统类型&#xff1a; 1. FAT32:这是U盘上最常用的文件系统类型之一。FAT32文件系统支持的最大文件大小为4GB…

Revit楼板:建筑楼板和结构楼板区别和垫层生成

一、Revit中建筑楼板和结构楼板的区别 Revit中&#xff0c;在我们做项目时楼板是最常见的结构之一&#xff0c;几乎每次都需要使用它。分为建筑楼板和结构楼板&#xff0c;是不是有很多小伙伴就很好奇,为什么分为两种楼板&#xff0c;那么他们是什么时候使用的呢?之间又有何区…

从测试小白成功转型自动化测试,我是如何一步步掌握坚持下来的?

目录 学习自动化测试的初衷 克服困难&#xff0c;掌握自动化测试技能 自动化测试在日常工作中的应用 第一个自动化测试脚本的完成 自动化测试技能带来的机会和挑战 【自动化测试工程师学习路线】 学习自动化测试的初衷 作为一名测试新人&#xff0c;刚进入测试行业的时候…

工业视觉检测的8个技术优势

工业4.0时代&#xff0c;自动化生产线成为了这个时代的主旋律&#xff0c;而工业视觉检测技术也成为其中亮眼的表现&#xff0c;其机器视觉技术为设备提供了智慧的双眼&#xff0c;让自动化的脚步得以加速&#xff01; 在实际的生产应用中&#xff0c;视觉技术方案往往先被着手…

zed2i相机中imu内参的标定及外参标定

zed2i中imu内参的标定 参考&#xff1a; https://blog.csdn.net/weixin_42681311/article/details/126109617 https://blog.csdn.net/weixin_43135184/article/details/123444090 值得注意&#xff0c;imu内参的标定其实不是那么重要&#xff0c;大致上给一个值应该影响不大…

金字塔特征融合

金字塔的三种主要结构 FPN: Feature Pyramid Networks for Object Detection (CVPR 2017) PANet: Path Aggregation Network for Instance Segmentation (CVPR 2018) BiFPN: EfficientDet: Scalable and Efficient Object Detection (CVPR 2020) Deep High-Resolution Repre…