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

2023-05-16

--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。在 5.1、6.3 中我们还会提到这一点,并且给出了提供标定流程的参考文章。

      USB相机上几种不同焦距的镜头,依次是超广角,4mm,6mm,8mm,12mm

  • 相机在使用过程中,我们还可以调节许多参数,这里列出一些主要的参数:

    • 曝光:每一帧图像的感光时间,其值愈大则画面的整体亮度越大,曝光时间过长过短都可能会出现宽容度不够的情况(一片雪白或是漆黑无比),选择正确的曝光是算法能否奏效的关键。如传统的灯条特征选取算法就要求恰当的低曝光以保证灯条不会出现过曝而显现白色但同时又要能够看清装甲板中间的数字以便进行模板匹配、svm分类或其他数字识别;运用卷积神经网络的目标检测算法则需要相机采集到的画面能尽量接近数据集中图片的情况,一般来说需要高一些的曝光。

    • 帧率:相机每秒钟能够获取的图像数。一般来说,如果你的图像处理算法的速度够快,那么帧率越高越好,这能够保证你处理结果的实时性。一些相机提供了硬件触发 功能,这样能够让相机以固定的时间间隔触发采样,保证两帧之间的时间相同,以便于和机器人的控制进行时间线同步。视觉算法处理、数据传输、电控算法处理、再到控制执行机构动作,最后子弹在空中飞行——这几个过程中都有时间延迟,累加之后算是非常可观。高速的算法和确定的延迟时间是打造预测算法的基础。

    • 白平衡:设定白色是怎么样的“白”,本意是不管在任何光源下都让原本呈现白色的物体通过增加偏置而还原为白色。涉及到色温和颜色空间的概念,调节此参数即调整RGB三原色的混合比例。

    • 图像保存格式:图像的编码方法,如JPEG, RGB, YUYV, YUY2等,不同的编码格式保存的信息量可能有差别。我们会在 5.0 节进一步了解相关信息。

    • 分辨率:一张图像的像素数,常见的有1920x1080,1280x720,640x480,一般来说,分辨率越高则图像保留的细节就越多,但同时相机处理的数据量变大,会降低采集帧率和每秒传输的图像数量。在之后的图像处理中,同样意味着更大的开销和处理速度下降。

    • 增益:调节感光单元在进行电荷信号放大时的增益(gain,一般是用dB表示的,这需要你注意数量级),对于图像的亮度和各颜色信息的保存都有影响。在低曝光的时候可以有效提高成像质量,但同时也可能提高噪声(不规则噪声信号也会被放大)。

    • 对比度:图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,差异范围越大代表对比越大,在高动态范围和高宽容度的时候,提高对比度可以凸显图像中亮度不同部分的区别,相当于用一把刻度更精细的尺子去测量物体能够得到更精细度量信息。某些情况下,提高对比度所指的则是直接增加亮暗之间的差别,让亮部更亮,暗部更暗。

    • 饱和度:是HSV色彩空间中的概念,代表了一种颜色的纯度(Saturation)。

      这里推荐使用qv4l2这款软件,可以方便的给相机调参并实时显示效果。

这是软件qv4l2的截图,v4l2是linux自带的相机驱动程序,可以看到有许多可供我们调整的设置

工业相机的配置则需要使用厂商提供的sdk,OpenCV也提供了一些修改相机参数的函数


4.2.运算平台

  • 常见的运算平台有这几种:定制的minipc、Intel NUC、jetson系列、DJI manifold2(有cpu版本和gpu版本,分别相当于同配置的i7-8265u的minipc和jetson tx2,不过manifold的体积很小)、OpenMV、k210等。其实选型的空间并不大,不过需要大家根据预算平衡一下性能和价格。

    那么如何评价一个运算平台的性能呢,这里要提一下CPU和GPU运行的概念。CPU的时钟频率高,但是内部的运算单元(ALU、FPU等)数量有限,是为通用计算和程序控制所设计的,其实并不擅长进行大规模的并行运算,比较擅长单线程的流水线处理。GPU则相反,GPU有大量的低速运算单元,但是能够一次性处理巨量并行数据,因此尤其适合图形计算(相当于每一个运算单元计算一个像素的相关数据)。视频解码、单线进行的程序适合在CPU上运行;图形处理、显示渲染则适合用GPU进行。这也是为什么大家都说玩3A大作这些大型游戏需要一张好的显卡(GPU)。

    GPU和CPU的对比-来自知乎用户‘牛鸽’的专栏-https://zhuanlan.zhihu.com/p/156171120

  • 而一般用于评价性能的算力指标有GOPS(Giga Operations Per Second),MOPS(Million Operation Per Second),TOPS(Tera Operations Per Second)。若有F如TFLOPS,则是衡量浮点运算能力。英伟达官方也有一套衡量N家显卡机器学习算力的标准,参见CUDA GPU | NVIDIA Developer。若显卡的compute ability大于5,一般来说就比较适合进行机器学习的训练。(但是貌似官方没有给出定量的计算方法,可能是根据自家cuda内核数、tensor单元数和主频等参数通过一些加权方法得到的分数)

  • 在RM比赛中的识别算法中,传统的灯条匹配算法是更依赖CPU的,但是因为涉及到矩阵运算,OpenCV支持的一些图形库能够利用电脑GPU的能力进行加速。而新兴的基于卷积神经网络的目标检测算法则是非常依赖电脑的GPU性能。不过,Intel推出的OpenVINO部署平台(仅仅支持Intel的cpu)和腾讯优图开源的NCNN(适合arm架构)推理框架都能够通过优化CPU的运算来提高神经网络的性能。英伟达的TensorRT推理框架则是只支持自家的GPU(jetson平台上也可以部署),能进一步提高神经网络的推理速度。

  • 为了提供性能的大致参考指标,这里介绍一下下文所说的Nanodet(我们使用的是Nanodet-m,backbone使用的是shuffleNet V2)和传统算法。Nanodet是一款超轻量化的目标检测模型,是基于卷积神经网络的目标检测算法的代表之一,可以以此作为其他目标检测算法的基准(benchmark);下文提到的传统算法则是基于特征提取和灯条匹配完成的。我们在第五部分、第六部分会分别详尽地介绍这两个算法。

    以下分别介绍一下各个运算平台:

    • minipc:搭载i7-8265u, i7-8565u的minipc较为常见,在tb上能够找到各种大小的minipc,至于那些搭载intel J系列N系列的Genimi Lake架构的工控机、软路由、电脑棒、计算卡之类的玩意,是根本带不动神经网络的,如果是J1900甚至解码视频流都会出现卡顿。我们实验室曾经为了缩小体积购买了一台40x40x40大小的N4100 cpu的minipc,结果就是神经网络的目标检测大约10-12fps,传统的灯条匹配在不进行数字识别、环境光线简单的情况下也只有50-60fps。所以,从性能的角度考虑,至少是标准架构的i5-7代之后的cpu才能胜任RoboMaster赛场的视觉任务。

    • Intel NUC:8代和9代的nuc和上面提到的miniPC并没有什么区别,价格还要贵一些。而nuc10在nuc11登场后就成为了一个性价比比较高的选择,最近NUC11的价格也非常的不错。nuc11建议购买i5以上的配置,intel在第十一代cpu中挤了很多牙膏,用锐炬Xe显卡替代了万年不变的UHD630,这让nuc上运行神经网络成为可能。我们实验室同样配置了一台nuc11猎豹峡谷,cpu为i5-1135G7,运行传统算法能够达到250-350fps(全图检测),加入ROI检测后甚至处理一张图片只需要1ms左右的时间,速度不可谓不快。并且配合Intel OpenVINO推理框架,即使使用OpenVINO推理神经网络也能达到很好的效果。我们实测运行nanodet网络,使用Vulkan对Xe显卡加速后能够达到50-60fps的速度,若运行OpenVINO推理框架则拥有约150fps的速度。选择i7系列的nuc11,并且配置更高频率的内存条(核显没有显存使用的是内存因此需要更高频的内存来提供访存带宽),应该能够有进一步的提升。

      推荐购买薄款,厚款其实就是增加了一个2.5inch的机械硬盘位,当然也可以购买厚款然后把外壳拆了让机械组的同学帮忙设计一个亚克力外壳或3d打印一个外壳。

    • Jetson系列:使用jetson系列主要是看重其GPU性能。目前能够使用神经网络检测达到实时性要求的设备,应该只有jetson tx 2(有些吃力)、jetson Xavier NX和jetson Xavier AGX。若使用Tensorrt框架部署后,Xavier AGX的int8算力接近1080ti,浮点算力和1080持平,是当下最强力的边缘运算平台。Xavier NX的算力是AGX的2/3~3/5左右,tx2就要更劣一筹。其大小相对minipc和NUC来说有比较大的优势,哈工深的同学自己定制了一块Xavier NX载板,进一步缩小了运算平台的体积。不过由于jetson搭载的是ARM64架构的cpu,可能在某些软件的兼容性上有一些问题,如conda等,好在大多数可以在网上找到解决方案或替代方案。

      不推荐使用jetson nano、jetson tx1。

    • DJI Manifold:主要优势就是体积和重量,若不差钱且机械对体积重量要求高则可以选择这款。但是使用改造载板的Jetson Xavier NX应该在价格体积重量性能上完胜Manifold G系列了(没有催更DJI的意思,反正就算更新了也买不起)。

      不推荐使用Manifold1

    • OpenMV:32位架构的处理器算力在复杂的视觉处理场景明显不足,这里提到openmv主要是在飞镖系统上可能会用到这款运算平台,其扩展能力可以同时兼顾运动控制。openmv相对其他的运算平台优点就是体积非常小非常轻,并且编写其程序使用micropython,开发的速度很快。openmv也可以作为机器人上的辅助视觉功能,提供一些算法不那么复杂的处理工作。

    • k210/k510:勘智科技推出的人工智能处理芯片。特点是体积小,非常小!现在市面上能买到用micro-python开发的maixpy出品的k210芯片。AI算算力在同价位和大小属于独一档。特别提一下最新推出的k510芯片,算力到达了2.5TFOPS,超过了jetson tx 2的2.1 TFPLOS!如果队伍内的电控组或硬件组有能力的话,可以让组内的同学根据datasheet制作pcb板,进一步缩小运算平台的体积。nihui大神已经成功把ncnn移植到RISC-V上(即k210和k510的处理器架构),如果后续能移植linux mint等微型linux系统到k510上(机械狂喜ohhhhhhhhh),将会大大便利在这些soc上的开发。并且这些芯片同时提供了低速IO外设,从这里也可以看出它们是专为嵌入式边缘应用打造的。k210适合做飞镖制导,或作为机器人的辅助视觉单元,而k510的超强算力(同体积重量来说)甚至能够胜任整个机器人的控制!不过由于其cpu相比其他平台还是稍显孱弱,除非能在视频解码上进行优化,否则帧率可能会受限。

      各个运算平台大小的对比,从左起依次是k210、openmv、某N4100的minipc、Jetson nano、jetson Xavier NX、i7-8265u的minipc、intel NUC11猎豹峡谷​、intel NUC7 Bean canyon

  • 有些经费比较宽裕的队伍可能会专门搭建一台用于队伍网络服务的服务器+深度学习训练机+雷达站运算端。若预算不足,则可以选择在一些提供云服务器训练的商家购买GPU核时进行训练,价格也不算太贵。现在的显卡价格实在过高,不适合自己额外购置显卡,如果有钱当我没说。(挖矿的都给爷爬)

    若要搭建雷达站又苦于显卡太贵,这里推荐雷达可以使用搭载较好显卡的游戏本或者intel NUC 11幻影峡谷:i7-1185G7+RTX2060的配置进行前向推理还是没有任何问题的。

    之前在RM视觉交流群 就有小伙伴提出大家可以利用各自手里有的运算平台测试各种网络和传统算法,制作一个modle-zoo,如果有想法的同学或者已经测得数据的小伙伴可以戳我,让我们一起完善这个表格哦!


4.3.激光雷达

(To be continued)


4.4.特殊相机

  • 双目相机

    双目相机应该是最早出现的也是最成熟的立体视觉方案。利用两个相机的视差和他们固定的相对位置信息,通过3d数学的几何解算方法计算对应点之间的位置偏差,得到物体的深度信息。关于双目相机的测距原理,请参考《机器人视觉测量与控制》这本书。这篇教程较为详细地讲述了双目相机测距的基本原理和用法。

     双目相机

    OpenCV也提供了双目标定的例程和大致的原理说明。同步双目相机(两个相机在一块pcb上,公用一个相机号,在Linux系统下只有一个文件)的标定要比两个单独的相机更容易标定,使用两个单独相机也需要尽量让参数保持一致以便得到更简单的解算模型。

    双目相机通过视差由相似三角形得到的测距精度显然是要比单目高的,不过解算的开销要远大于单目。但是提升的精度对于我们补偿算法的影响其实并不大,而且高精度也带来对误差敏感性的提升。单目相机在目前的RMUC赛场是应该是足够满足我们的需求了。不过,了解双目标定和解算的原理对于理解3维重建、学习3d数学与线性代数是有很大的帮助的。我们会在 6.3 中详细介绍距离解算和三维重建的内容。

    西北工业大学WMJ战队在2021赛季采用了双目视觉,可以看到他们的哨兵云台拥有一个像《机器人总动员》中WallE一样的长条形大脑袋。不知道他们会不会开源他们的双目视觉解算方案呢~

    (to be continued)

  • 深度相机

    生产深度相机的规模化厂家目前主要有4个:ZED、intel Realsense、奥比中光、Kinect。大部分厂商采用的解决方案都是双目➕TOF/结构光的方案,相机内部的DSP芯片会融合多个信息来源的图像进而结算得到深度图。使用深度相机的时候,厂家一般都是对其进行了彻底的封装,我们对于其原理只需要有大致的了解即可。

    intel深度相机拍摄得到的深度图像,像素的不同颜色表示距相机的距离不同

    相机提供了相应的SDK供我们进行二次开发,调用对应的函数接口就可以得到相机视野范围内各个点和相机的距离。商用产品的闭源特性让我们很难进行深度DIY(深度相机还是不够有深度呀~)。目前市面上的深度相机帧率受限,最高的为intel D435,能够在800x640的分辨率下达到60fps的速度(深度图90Hz,而RGB光学相机的采样频率是60Hz故同步时也仅有60Hz)。

 Intel D435深感相机,采用usb3.0-typec连接

 笔者所在学校的实验室居然还有一个kinect Xbox360体感相机,确定不是买来玩游戏的吗...

在RMUA赛场上,深度相机由于开发方便,赛场场地小,经常被用作视觉SLAM中的一环。期待有学校能够扬长避短,将深度相机部署到RMUC赛场上。(我们跃小鹿今年就是要用RealSense啦!)​

(to be continued)


4.5.低速IO外设

在处理完图像并得到装甲板、能量机关扇叶相对相机中心的角度或找到救援目标和矿石之后,我们要设法和电控通信,让下位机能够接收到数据,告诉机器人目标在哪个方向、敌人处于什么状态,进而控制电机、气缸等来执行我们的任务。同时也需要从电控获取一些信息,如敌我的颜色、当前工作模式(自瞄、激活能量机关还是手动)。以下介绍两种通信方法和对应的协议。CS专业、了解过计算机网络或学习过嵌入式开发的同学对此应该不陌生。

  • 串行通信:常用通信方法之一就是通过串口(Serial Port)。为了方便简单起见,我们使用的都是异步串行通信,通过一个usb转串口芯片将解算好的数据发送给电控,电控经过一定处理后再控制电机动作。

    • 串口通信的基本知识:在最简单的串口使用中,通信需要两条线路,一条用于发送,一条用于接收(其实还需要一根共地连接线)。顾名思义,串口通信就是将数据像“串”一样一位一位的顺着一条线发送出去。任何通信方法都需要制定通信协议,串口通信也不例外。异步串口通信中需要通信的双方提前约定好波特率数据位停止位奇偶校验位。因为使用的是最简单的两线通信,需要关闭硬件流控制。关于串口通信的更多基本信息,请参考What is Serial Communication and How it works?

    • 串口在Linux上作为一个设备,同样会以文件的形式挂载在/dev分区,使用时需要赋予串口权限:

      
      sudo chmod 777 /dev/ttyUSB0 #当电脑只连接了一个串口时,将挂载为ttyUSB0,其实和赋予文件的读写权限差不多  

      若不想每次使用都输入一次,希望永久赋予串口权限,参考这个教程:永久打开串口权限

    • 串口通信协议:通信发送开始时,先发送一位0表示开始发送,紧接着是8位的数据(相当于一次发送一个byte,低位在前),然后是一位奇偶校验位(如果开启此功能),最后是一位停止位1(可以设置不同的位数)。以上便是串口通信的一个数据包。显然单单通过这样简单的协议(一个数据包传送8位数据,最多可以表示256种状态),我们无法完成复杂的通信功能。因此,在此基础上我们定制一套自己的通信协议以完成数据包更大、数据类型更复杂的通信,形成一个简单的协议栈。

      • 一个简单的协议需要包含帧头(标明数据包的开始)、数据内容(需要传送的数据)和帧尾(表明一个数据包结束)。

      • 在数据包中可以增加用于数据校验的校验码,通信中常使用的有CRC(cyclic redundant check)、奇偶校验、和校验、哈希校验等。

      • 高层的通信协议(在这里为我们自己制定的通信协议)是以底层协议为基础(这里为串行通信协议)。

    • 刚刚入门没有看懂或是想要更具体的实例,请参考这篇文章:在串口通信的基础上定制一个简单的通信协议-NeoZng

       这是一个USB转串口的芯片

  • CAN:另一种被广泛使用的方法是CAN(Controller Area Network)通信,CAN是一种由博世开发的通信规范和协议,是一种应用广泛的现场总线,在工业测控和工业自动化等领域有很大的应用。其最大的特点就是稳定性(使用了差分通信的方法)和灵活性(设备只要挂载在总线上就可以使用,不需要额外的连接)。我们在比赛中大量使用了DJI生产的电机,这些电机都非常的智能,通过集成了mcu的电子调速器,我们可以跳过下位机器,直接通过CAN与电调上的微控制器进行通信,将控制信息直接发送给电调从而控制电机的转动。

    • 想要让运算平台支持CAN通信,有两种方法:

      • Jetson、树莓派等主办上自带 40 pin接口,只需要一个CAN收发器即可实现CAN通信。

      • 购买一个USB转CAN接口,也可以实现CAN通信。

      希望学习具体的例子,在Linux上利用CAN进行通信,请看这里:在Jetson Xavier NX上实现CAN通信并控制3508电机-NeoZng

    • CAN通信的基本知识:和串口一样,必然也需要一个通信协议。不同的是,其信号是通过其总线上电平的差值来表示的,这样能够有效抑制共模信号(因为噪声对两条线的影响通常是一样的,相减之后噪声的影响便被消除了)。并且由于采用了总线,其通信机制更为复杂一些,不在此赘述,想要详细了解其硬件构成和通信协议,请参阅一篇易懂的CAN通讯协议指南。

    • 注意CAN的带宽有限,不要在一条总线上挂载过多的大流量设备,否则会出现丢帧、乱码等情况。

     一个CAN收发器

  • 对于其他的通信方法如SPI、I2C等,其实都大同小异只要了解了通信的基本原理,都能够很快上手对应的API。感兴趣的同学可以自行搜索学习具体的软硬件实现。

说到和电控方面的通信,这里不得不提一下广东工业大学的视觉控制一体解决方案:rm-control,他们机器人只使用了一个运算平台,将上位机下位机合二为一,通过CAN控制电机。这消除了minipc到单片机通信产生的延迟,并且有良好的兼容性和复用性,维护起来也很方便。很佩服第一个有这样的想法同时又将其付诸实践的同学。

图片稍后补充,深度相机待笔者深度使用后补充,双目相机的成像模型和解算也待笔者进一步了解后补充

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 【RoboMaster】我是这样搞定第一次单目相机测距的

    之前在做一个单目测距的小项目 xff0c 大概需要就是用单目相机 xff0c 对一个特定的目标进行识别并测算相机与该目标的距离 所以便去网上找了一堆教程 xff0c 这里给大家总结一下 xff0c 希望给小白们一个参考 首先是基本需求了 x
  • robomaster视觉规则细谈

    目录 攻击与检测 弹丸参数 增益点增益 升级效果 击打检测 涂装要求 裁判系统 机器人端各模块 赛事引擎各部分 客户端 服务器 能量机关 小能量机关 大能量机关 算法归纳 攻击与检测 弹丸参数 如图所示 xff0c 赛场中我们使用的弹丸有两
  • RoboMaster视觉教程(0)绪论

    背景 大四毕业了 xff0c 想着大学四年也需要总结一下 就从RoboMaster这个比赛写起吧 我是大二参加的比赛 xff0c 做视觉识别部分 当时的想法很简单 xff0c 因为很喜欢Linux不想焊板子调电控就参加了视觉部分 xff08
  • ROBOMASTER机甲大师赛视觉组学习方案

    ROBOMASTER机甲大师赛视觉学习方案 视觉技能学习踩坑硬件平台环境配置个人修为坑 机甲大师 xff08 RoboMaster xff09 是由大疆创新 xff08 DJI xff09 的创始人汪滔发起并承办 由共青团中央 全国学联 深
  • RoboMaster机甲大师——视觉组——计算平台的选型与感想(主流几款)

    RoboMaster机甲大师 视觉组 计算平台 xff08 工控机 xff09 的选型与感想 xff08 主流几款 xff09 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介 xff1
  • RoboMaster视觉教程(1)摄像头

    观文有感 之 RoboMaster视觉教程 xff08 1 xff09 摄像头 闲来垂钓碧溪上 今天钓到一篇RM视觉摄像头的好文 xff0c 记录一下笔记 xff1a 文章目录 观文有感 之 RoboMaster视觉教程 xff08 1 x
  • 了解CV和RoboMaster视觉组(一)摘要

    NeoZng neozng1 64 hnu edu cn 1 摘要 在阅读本文之前 xff0c 你需要有计算机科学的基本知识并至少掌握一门编程语言 xff0c 同时对robomaster比赛规则和过程有大致的了解 若只是希望知道视觉组的基本
  • 了解CV和RoboMaster视觉组(二)视觉在各兵种中的作用

    NeoZng neozng1 64 hnu edu cn 2 视觉在各兵种中的作用 2 1 装甲板识别 xff08 步兵 英雄 无人机 xff09 由于机器人上安装的图传模块到操作手看到的第一视角的延迟加上操作手反应速度的延迟 xff0c
  • 了解CV和RoboMaster视觉组(三)视觉组使用的软件

    NeoZng neozng1 64 hnu edu cn 3 视觉组接触的软件 进行视觉开发会用到各种各样的软件 开发环境 辅助工具等 xff0c 所以很有必要了解一些相关的快捷键 命令 使用技巧 选择一款适合自己的IDE能够提高开发效率
  • 了解CV和RoboMaster视觉组(四)视觉组使用的硬件

    NeoZng neozng1 64 hnu edu cn 4 视觉组接触的硬件 虽然别人总觉得视觉组就是整天对着屏幕臭敲代码的程序员 xff0c 实际上我们也会接触很多的底层硬件与传感器 xff0c 在使用硬件的同时很可能还需要综合运用其他
  • 了解CV和RoboMaster视觉组(五)滤波器、观测器和预测方法

    neozng1 64 hnu edu cn 5 3 滤波器 观测器 估计器和预测方法 这些装置之间的区别在于面对不同场景时候的不同解释 xff08 是否考虑信号的统计学特性 随机特点 参数是否变化等 xff09 滤波器在信号与系统中的定义为
  • 了解CV和RoboMaster视觉组(五)滤波器、观测器和预测方法:自适应滤波器

    neozng1 64 hnu edu cn 自适应滤波 自适应滤波以前述的wiener filter为基础 xff0c 这里我们也从统计与优化和控制理论两个角度来介绍它 xff0c 顺着上一篇介绍维纳滤波器的文章的思路继续进行推导 统计与优
  • ROBOMASTER机甲大师赛视觉组学习方案

    ROBOMASTER机甲大师赛视觉学习方案 视觉技能学习踩坑硬件平台环境配置个人修为坑 机甲大师 xff08 RoboMaster xff09 是由大疆创新 xff08 DJI xff09 的创始人汪滔发起并承办 由共青团中央 全国学联 深
  • 【Robomaster-ICRA-AI挑战赛跳坑篇】(二、TX2刷机)

    TX2刷机与程序下载 TX2安装在步兵车上作为机载计算机使用 xff0c 跑上层代码 xff0c RoboRTS代码托管在github上 xff1a https github com RoboMaster RoboRTS xff0c 目前一
  • RoboMaster步兵机器人简介

    RoboMaster步兵机器人简介 湖北工业大学 蔡饶 如下图所示 xff0c 设计的是一个基于麦克纳姆轮的四轮全向越障平台 xff0c 纵臂式独立悬挂 xff0c 搭载两轴云台和弹丸发射机构 xff0c 是大疆承办的RoboMaster机
  • robomaster麦轮运动解算

    1 资源与代码 1 1 参考文章 本文主要参考的三篇文章如下 xff1a 麦轮运动特性分析 xff1a https mp weixin qq com s biz 61 MzI3MTIyMjQwNQ 61 61 amp mid 61 2247
  • RoboMaster怎么设计新步兵悬挂

    流程 xff1a 明确需求 gt 提出可量化目标 gt 方案提出与评估 gt 细化方案 gt 任务分配 gt 画图设计 gt 图纸提交与验收 gt 加工 gt 装配 gt 机械调试 需求 xff1a 性能优越的悬挂 目标 xff1a 1 任
  • 了解CV和RoboMaster视觉组(四)视觉组使用的硬件

    NeoZng neozng1 64 hnu edu cn 4 视觉组接触的硬件 虽然别人总觉得视觉组就是整天对着屏幕臭敲代码的程序员 xff0c 实际上我们也会接触很多的底层硬件与传感器 xff0c 在使用硬件的同时很可能还需要综合运用其他
  • RoboMaster机器人运行教程(一)

    1 环境配置 系统 xff1a ubuntu16 04 xff0c 安装ROS 2 基础学习 需要C 43 43 和python基础 xff0c 和ROS的基础知识 xff0c 网上有很多教程 xff0c 推荐知乎大佬教程 xff1a 我的
  • RoboMaster机甲大师:裁判系统服务器搭建助手(RMServer Aid)

    RoboMaster机甲大师 裁判系统服务器搭建助手 RMServer Aid 更新 2022 03 28 写在前面 使用教程 软件简介 软件下载 软件安装 软件使用 打开软件 首次使用 1 组建局域网 2 配置RM环境 3 启动RM服务

随机推荐

  • Keil工程

    文章目录 1 Keil工程添加源文件和头文件 xff08 c和 h xff09 的方法1 方式一2 方式二 2 keil工程生成的MAP文件取消优化 1 Keil工程添加源文件和头文件 xff08 c和 h xff09 的方法 1 方式一
  • 2020-09-28

    通用异步收发器 xff08 Universal Asynchronous Receiver Transmitter xff0c 通常称作UART xff0c 是一种串行 异步 全双工的通信协议 xff0c 在嵌入式领域应用的非常广泛 UAR
  • 【cmake】CMakeList添加库|添加头文件|添加路径|add_executable、add_library、target_link_libraries|添加编译选项|宏开关

    目录 官网查阅 开胃菜例子 CMakeLists生成和添加依赖库 CMakeLists更多小例子 生成 so共享库文件 调用 so共享库文件 生成一个可执行程序的 CMakeList 生成一个 so动态库的 CMakeList add li
  • TCP连接的建立

    前言 xff1a TCP的问题已然困惑我很久了 xff0c 一直是一知半解 xff0c 靠记忆来记住TCP连接的过程 xff0c 不能根本上理解 xff0c 漏洞百出 xff0c 最近抽时间把TCP经典书籍 TCP IP详解 阅读了一下 废
  • 【Nokov】动作捕捉系统培训笔记

    Nokov度量科技 简介 xff1a Nokov是一种光学三维动作捕捉系统 xff0c 采用红外镜头捕捉被动发光标记点 xff0c 构建三维数据的动作采集与分析系统 xff0c 运用于运动分析 步态康复 模拟训练 机械仿生 机器人 无人机
  • 【Nokov】动作捕捉系统标定与机械臂各坐标系的说明

    导语 xff1a 这一周的工作先是完成了度量系统Nokov的标定 xff0c 然后对机械臂自身的编码器得到的坐标值与动作捕捉系统Nokov测得的坐标值进行了比较 xff0c 来观察二者之间的误差 在这个过程中我对Nokov软件Seeker的
  • 【Nokov】关于动捕系统获取刚体姿态的说明

    动作捕捉系统Nokov获取刚体的姿态信息 前言 xff1a 对于动捕系统软件Seeker的基本使用以及获取单个Marker的位置操作已经比较熟悉了 xff0c 对于机械臂而言 xff0c 接下来就是获取它的姿态信息 xff0c 经过昨天下午
  • 【机器人】机械臂与动捕Nokov的深入了解

    导语 xff1a 每次的实践操作后 xff0c 总能刷新我对机械臂以及Nokov的认识 xff0c 既让我惊喜不已 xff0c 同时也让我知道我掌握的还远远不够 xff0c 需要不断的学习 关于机械臂 示教器上NOA姿态表示方式 xff1a
  • Ubuntu18.04+ROS+kalibr标定工具箱安装编译

    目录 前言 一 安装ROS 1 设置镜像源 2 更新软件包索引 3 安装ROS 4 测试ROS是否安装成功 二 安装kalibr melodic 1 kalibr简介 2 安装kalibr 3 测试kalibr 参考文献 xff1a 前言
  • okhttp源码分析,Builder.ParseResult.parse(null, url) HttpUrl.parse(url) 方法详细分析

    在使用okhttp3时 以下方式具体对url进行了怎样的处理 查了许多资料没有发现有关介绍查询源码进行分析添加相关方法介绍 Request request 61 new Request Builder url 34 https www be
  • MP地面站二次开发教程(二)MP的框架与修改

    目录 MP高级功能 主界面基本修改 1 菜单名称背景修改 2 主窗体语言修改 3 主要窗体目录位置 4 菜单栏删除 5 入口函数 6 参数配置函数 定制修改步骤 1 主题环境修改 2 菜单精简 去掉冗余菜单按键 3 功能按键添加 新建按钮实
  • QGC地面站二次开发(三)Qt 简洁地面站

    目录 多机控制原理 多机控制实现 简洁地面站优化 1 飞机的飞行轨迹以不同的颜色区分 2 控制所有的飞机 3 将设定航线送给特定的飞机 多机控制原理 多机地面站支持 TCP UDP 和串口等三种连接方式 xff0c 首先我们需要对这两种连接
  • 基于51单片机的密码锁设计

    研究内容 本系统由STC89C52单片机系统 xff08 主要是STC89C52单片机最小系统 xff09 4 4矩阵键盘 LCD1602显示和报警系统等组成 xff0c 具有设置 修改六位用户密码 超次报警 超次锁定 密码错误报警等功能
  • 【gcc】gcc优化等级 -O1 -O2 -O3 -Os -Ofast -Og|gcc关闭优化

    目录 优化等级 O1 O2 O3 Os Ofast Og cmake 生成 debug和 release 版 Cmake设置优化等级 Debug和Release 方案 About table About question gcc g 43
  • 嵌入式期末复习题(二)

    考试题型 一 选择题 每小题2分 xff0c 15题 xff0c 共30分 二 填空题 每题2分 xff0c 10题 xff0c 共20分 三 简答题 每题5分 xff0c 4题 xff0c 共20分 四 分析题 每题5分 xff0c 3题
  • 嵌入式期末复习题(三)

    1嵌入式系统的定义 嵌入式系统是用于控制 监视或辅助操作机器和设备的装置 嵌入式系统是以应用为中心 xff0c 以计算机技术为基础 xff0c 软硬件可裁剪 xff0c 适应应用系统对功能 可靠性 成本 体积和功耗等严格要求的专用计算机系统
  • 解决Ubuntu 网速慢的问题

    Ubuntu 网速慢 xff0c 主要是把时间浪费在域名解析上 我们可以用dnsmasq解决这问题 具体如下 xff1a 1 安装dnsmasq 命令 sudo apt get install dnsmasq 2 编辑dnsmasq的配置文
  • C++中的char,char*,char[]

    char C 43 43 中的char是字符的意思 xff0c 可以用例如 39 a 39 来表示 xff0c 每个字符串string都是由很多个单独的字符char组成 char char 是一个指针 xff0c 例如 xff1a char
  • VSCode 运行C++程序

    0 省流自强版 本方法来自以下两个参考链接 xff0c 可自行参照去执行安装 xff1a 1 https code visualstudio com docs languages cpp 2 https www youtube com wa
  • 了解CV和RoboMaster视觉组(四)视觉组使用的硬件

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