了解CV和RoboMaster视觉组(四)视觉组使用的硬件

本文探讨了视觉组在机器人竞赛中的硬件配备,包括相机的CMOS和CCD传感器原理、曝光方式选择,运算平台如minIPC、Intel NUC、Jetson等的性能比较,以及激光雷达、双目相机和低速IO外设在通信中的作用。

--NeoZng【neozng1@hnu.edu.cn】

 

4.视觉组接触的硬件

虽然别人总觉得视觉组就是整天对着屏幕臭敲代码的程序员,实际上我们也会接触很多的底层硬件与传感器,在使用硬件的同时很可能还需要综合运用其他学科的知识。

4.1.相机

  • 相机是机器人的眼睛。和人眼的成像原理一样,相机通过镜头汇聚光束使他们聚集在一块半导体感光元件上(相当于视网膜)从而产生可供读取的数据。随后图像随着数据线传如miniPC等运算平台(视网膜刺激视神经传到神经冲动到大脑)。时下的感光单元主要分为两种:CMOS和CCD。电类的工科生或是摄影爱好者对此应该不会感到陌生。

    • CMOS(complementary metal-oxide semiconductor)传感器是由金属氧化物半导体排成的阵列,和发光半导体相反,其上的pn结受光照时会产生电荷,传感器上的每一个像素点都配有放大器和AD(Analog-to-Digital converter,模拟-数字信号转换器)从而将电荷转换为数字信号,最后生成图像。优点是成本低,图像帧率高,但是固有不可消除的采集噪声会影响成像的质量。

    • CCD(charged couple device)传感器是由最简单的MOS电容器阵列构成的,与CMOS不同,CCD的每一行像素只配有一个信号处理器,这一行电容器采集到的电荷会以串行的方式依次通过每一行末端的信号处理器从而产生图像。因此CCD能达到更高的像素密度(CMOS上的op和ad都要占用空间),其优点是成像的一致性好,噪声很小,由于不能同时处理所有信号,其帧率一般不高。

    • 想要获得关于感光单元的更多信息,请参阅cmos和ccd

      这是我们实验室的一枚MV工业相机,可以看到正中间有一块小小的CMOS传感器晶片

    相机的快门还有全局曝光卷帘曝光之分。全局曝光时一次性采集所有感光单元的信息,而卷帘曝光则是分时逐行采集信息(根据其名“卷帘”就能看出是一排一排地采集数据)。若经费充足建议购买全局曝光的相机,其所有单元在同一时刻采样,曝光时间和我们设置的曝光时间才是真正一致的。而卷帘曝光的相机第一行首先完成曝光,接着是第二行、第三行...到最后一行完成曝光时,中间大概有数百ns甚至ms级的时间,这就导致整个画面其实不是在同一时间采样的,在面对高速运动的物体是会出现“果冻效应”,即图像的不同部分出现倾斜、断层等现象,极大地影响了成像质量和识别的效果。CCD相机一般使用全局快门,而CMOS相机使用全局快门的制造成本很高,需要为每个感光单元配置一个寄存器。​

    这两幅风扇的图像是在相同时刻分别用全局快门和卷帘快门的相机拍摄的

  • 镜头就像人的晶状体,不同的是,人的晶状体是可以改变焦距但像距固定,而一般使用的工业相机和USB相机配套的镜头是定焦但可以调节像距的。不过在小孔成像模型中,我们把透镜看作被压缩成一个点的大小,因此在这种情况下我们认为焦距和像距等同

    从透镜到小孔的近似过程,截取自知乎-龚健男的回答-凸透镜和小孔成像的原理与联系

    • 我们都知道镜头是一块凸透镜,在他的两边各有一个焦点,焦点即是所有平行进入透镜的光线的汇聚点。不同焦距的镜头其视距和视野范围不同,一般来说,视距大(看的远)的镜头,其视野范围小(可视角小)而视距短(看的近些)的镜头,视野范围大,典型的例子是广角镜头。拿生活中的例子来说,现在的手机的摄影系统都是由多个镜头组成的,每个镜头的焦距一般不同,从而适应不同焦段和视野的摄影需求。高级的镜头通常可以调节光圈大小,从而改变镜头的进光量。

    • 在比赛中,我们一般给步兵机器人配置广角镜头(适用近战,可视角广)或是4mm、6mm的镜头(中庸的选择,兼顾长短)。打击能量机关的步兵机器人会选择8mm、12mm的长焦镜头来获得更好的远距离成像效果。哨兵机器人可能会配置两个相机,分别搭载广角镜头和中短焦镜头,广角用于“广撒网”,对敌方目标进行大致的定位,之后交由另外一个相机进行精确的定位。有些打得准(弹道精度高)的队伍甚至为所有机器人都搭载了两枚镜头,让机器人成为各个距离都能实施自动打击的多面手。

      若想要更有针对性地选择镜头的焦距,可以根据相机成像模型进行视野要求和焦距之间相关关系的计算。

    • 由于凸透镜本身的性质和镜头制造的工艺问题,使得光线在通过镜头时无法保持物体在空间中原本的位置关系而发生畸变,好在这些畸变都能够通过数学建模并由反向解算而得到还原。这需要我们通过相机标定来去除这种畸变以便还原图像中物体的真实位置。畸变主要分为切向畸变和桶型畸变,我们可以利用标定板和畸变的数学关系来进行相机标定,OpenCV中也有相关的函数可供调用。关于成像模型、畸变和标定,可以参阅相机标定和OpenCV官方文档中的CameraCaliberation。在

### 配置 OpenVINO 在 NVIDIA Orin NX 平台上的方法 #### 环境准备 为了在 NVIDIA Orin NX 上成功配置使用 OpenVINO,需要确保基础环境满足特定需求。NVIDIA Orin NX 基于 ARM 架构设计,因此安装过程需特别注意兼容性依赖项。 1. **确认硬件驱动版本** 如果已预先安装了 NVIDIA 的驱动程序,则应验证其版本是否适合运行深度学习工作负载[^2]。推荐使用官方支持的最新稳定版驱动以获得最佳性能支持。 2. **设置 CUDA cuDNN 支持** 安装适用于 Jetson 平台的 CUDA 工具包以及 cuDNN 库是非常重要的一步。这些件能够显著提升 GPU 加速效果并增强模型推理效率[^3]。具体操作可以参考 NVIDIA 提供的相关文档完成适配。 #### OpenVINO 安装流程 目前 Intel 主导开发的 OpenVINO 已经扩展至部分非 x86 架构处理器的支持范围,包括某些基于 ARM 的 SoC 如 Jetson Nano/AGX Xavier 等系列模块。尽管如此,对于较新型号像 Orin NX 来说仍可能存在一定局限性或者额外定制化调整的需求: 1. 下载对应平台预编译好的二进制文件包(通常为 `.tgz` 或者 `.deb` 文件形式),可以从官方网站获取最新发行版本链接地址。 2. 解压下载下来的压缩档案,并按照指引执行初始化脚本 `setupvars.sh` ,以便加载必要的路径变量定义: ```bash source /path/to/openvino/bin/setupvars.sh ``` 3. 测试基本功能正常与否——利用附带示例应用程序来验证整个链条能否顺利运作起来。例如尝试运行 object detection demo 查看是否有预期输出显示画面中的目标物体类别及其位置框坐标信息等内容。 #### 处理潜在挑战 当面对实际应用场景时可能会遇到如下几个方面的问题需要注意解决办法: - **网络条件约束下的解决方案** 当前所处物理位置可能导致互联网接入质量不佳从而影响在线模式下持续更新参数权重等情况发生;对此可采取措施如提前下载好所需资源离线导入方式处理、运用本地持久化存储机制暂存中间计算成果等待后续时机再上传云端服务器保存永久记录等等手段加以克服困难局面出现的可能性[^4]. ```python import cv2 as cv from openvino.runtime import Core, Model ie_core = Core() model_xml_path = "/absolute/path/model.xml" compiled_model = ie_core.compile_model(model=model_xml_path, device_name="GPU") input_layer = compiled_model.input(0) output_layer = next(iter(compiled_model.outputs)) image = cv.imread("/test/image.jpg") resized_image = cv.resize(image,(w,h)) # w h are input size defined by your model input_data={input_layer.any_name: resized_image} results=compiled_model(input_data)[output_layer] print(results) ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值