摘要 :本系统以两个树莓派及自带摄像工具为摄像机和核心芯片,与激光笔和支架构成的单摆结构以及以太网络交换机等组合构成一个基于互联网的摄像测量系统。激光笔两次到达最高点的时间差就是单摆的周期,由单摆的周期计算细线长度。再根据两个摄像机捕捉的坐标算出光点的轨迹与OA边的夹角θ ;摄像机获得的视频通过树莓派传输到网口,经过交换机,再经过树莓派送出显示。系统完成了全部功能,实验结果表明,测试误差完全满足要求。
关键词:树莓派;以太网交换机;互联网
1 系统方案
本系统主要由树莓派及其摄像机、转换模块、以太网络交换机、显示器等几部分组成,系统框图如图 1 所示。
1.1 摄像机的论证与选择
方案一:星瞳科技的OpenMV摄像机。OpenMV集成 FIFO 芯片(AL422B),方便 MCU 读取图像,具有自动图像控制功能,支持 VGA、QVGA 等各种尺寸输出,自带嵌入式微处理器、高灵敏度,清晰快速,分辨率高。
方案二:树莓派 4B 带的 500 万像素广角摄像头,传输速率优于 OpenMV,像素优于OpenART。
方案三:逐飞科技的OpenART视觉传感器图像识别模块。OpenART和OpenMV所具备的功能和特点相似,但是对OpenART的具体使用方法不太熟悉。
综合比较,选择方案二,采用树莓派摄像机。
1.2 终端的论证与选择
方案一:STM32。STM32有极高的性能,主流的 Cortex 内核,丰富合理的外设,合理的功耗,合理的价格,强大的软件支持,全面丰富的技术文档,芯片型号种类多,覆盖面广。
方案二:树莓派。一款基于 ARM 的微型电脑主板,以 SD/MicroSD 卡为内存硬盘,卡片主板周围有 1/2/4 个 USB 接口和一个 10/100 以太网接口(A 型没有网口),可连接键盘、鼠标和网线,同时拥有视频模拟信号的电视输出接口和 HDMI 高清视频输出接口,功能非常强大。
综合考虑选择方案二,终端用树莓派
1.3 数据传送方式的论证与选择
方案一:交换机:摄像机→有线传输→交换机→有线传输→树莓派→显示
方案二:路由器:摄像机→无线发送→路由器→无线接收→树莓派→显示
由于题目要求使用以太网交换机,故选择方案一,用交换机有线传输数据
2 理论分析与计算
2.1 机械结构的设计分析
2.1.1 单摆
175cm 左右的支架采用三角形结构固定,非常牢固,不会对激光笔的摆动造成影响。摆的柔性透明细线采用直径小于 0.2mm 的单股透明钓鱼线,排除了激光笔被吊起后自转的影响。本赛区的重力加速度为 9.7947N/Kg,计算时取 9.8N/Kg。综上,此系统是较为理想的单摆系统。
2.2 单摆物理模型的分析与计算
2.2.1 𝒍的计算
激光笔的摆动是简谐运动,整个模型可视为单摆系统,摆做简谐运动的周期跟摆长的平方根成正比,跟重力加速度的平方根成反比,跟振幅、摆球的质量无关。根据单摆的周期公式:
所以,根据摆的周期可计算出细线长度𝑙。单摆的周期 T 根据摄像机得到的两次过最低点的时间间隔得到。
2.2.2 𝜽的计算
摄像机A识别的坐标(xA,yA)、摄像机B识别的坐标(xB,yB),根据空间几何原理有,可计算出光点的轨迹与OA边的夹角 θ。
2.3 网络协同工作原理
以太网交换机工作于 OSI 网络参考模型的第二层(即数据链路层),是一种基于MAC(Media Access Control,介质访问控制)地址识别、完成以太网数据帧转发的网络设备。交换机在端口上接受发送过来的数据帧,根据帧头的目的 MAC 地址查找 MAC 地址表然后将该数据帧从对应端口上转发出去,从而实现数据交换。交换机的工作过程可以概括为"学习、记忆、接收、查表、转发"等几个方面:通过"学习"可以了解到每个端口上所连接设备的 MAC 地址;将 MAC 地址与端口编号的对应关系"记忆"在内存中,生产 MAC 地址表;从一个端口"接收"到数据帧后,在 MAC 地址表中"查找"与帧头中目的MAC地址相对应的端口编号,然后,将数据帧从查到的端口上"转发"出去。MAC地址有 48 位,但它通常被表示为 12 位的点分十六进制数。MAC 地址全球唯一,由 IEEE对这些地址进行管理和分配。每个地址由两部分组成,分别是供应商代码和序列号。其中前 24 位二进制代表该供应商代码。剩下的 24 位由厂商自己分配。
3 电路与程序设计
3.1 摄像头程序框图
摄像头实现激光笔图像获取和坐标数据,显示图像并将图像和坐标数据传送给树莓派,程序框图如图 4 所示,摄像头程序源码见附录一。
3.2 传输数据框图
摄像机节点的树莓派负责获取摄像机拍摄的图像,并将摄像机的图像、坐标数据送到网口,程序框图如图 5 所示。
3.3 终端树莓派程序框图
终端树莓派负责接受来自网口的两个摄像机的数据、图像信息,进行细线长度𝑙和角度θ的计算,并将计算结果和图像送显示屏显示。终端程序框图如图 6 所示,子程序框图见附录三
4 测试方案与测试结果
4.1 测试结果及分析
4.1.1 两个摄像节点的实时视频图
系统调试完成后,首先进行摄像机节点实验,拍摄的视频图像如图 7 所示。
4.1.2 终端节点的实时视频图
终端节点可分别和同时显示两个摄像机的实时视频,并用红色方框实时框柱激光笔轮廓,如图 8 所示。
4.1.3 细线长度𝒍测量数据表
进行多次细线长度测量实验,记录如表 1 所示。
4.1.4 𝜽角测量数据表
进行多次角度测量实验,记录如表 2 所示。
4.2 误差分析
1.激光笔摆动时还是存在轻微的自转现象,与理想状态存在误差;
2.摄像机捕捉激光笔的精度不够高;
3.程序的逻辑还有待优化。
附录一:摄像头源码
import sensor, image, time, pyb, lcd
from pyb import UART
import json
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000 )
sensor.set_auto_whitebal(False)
#关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡。
lcd.init()
threshold = (21, 70, 16, 92, -45, 65)
clock = time.clock()
uart = UART(3, 115200)
uart.init(115200, bits=8, parity=None, stop=1) #8 位数据位,无校验位,1 位停止位、
while(True):
clock.tick()
img = sensor.snapshot()
blob = img.find_blobs([threshold],area_threshold=20, pixels_threshold=20)
if blob:
FH = bytearray([0xb3,0xb3])
uart.write(FH)
for b in blob:
img.draw_rectangle(b[0:4],color=(255,0,0))
img.draw_cross(b[5], b[6])
x = b.cx()
y = b.cy()
z = clock.fps()
#print(x, y, end = ',')
data = bytearray([x,y,int(z),0x00,0x00,0x00])
uart.write(data)
lcd.display(img) #print( int(z) )
#uart.write("%x %x \r"%(x,y)) #以 16 进制的格式输出,(16 进制不能这样输出啊,浪费
了我两天的时间)
#img.draw_circle((50, 50, 30), color = (250, 0, 0))
#print("FPS %d" % clock.fps())
附录二:交换机原理
附录三:终端子程序框图
1.测量并计算𝑙的子程序框图如图 1 所示:
2.测量并计算𝜽的子程序框图如图 2 所示: