13 测试方案和测量结果
-
测量一个边长为1米的正方形,取三个顶点分别作为O、A、B点。
-
在O点上方,用细线悬挂激光笔,激光笔常亮向下指示,静止时激光笔的光点和O点重合。
-
将两个D8M摄像头子卡插到DE10-Nano开发板上,放于A、B两点,作为摄像节点A和摄像节点B。
-
第三个DE10-Nano开发板作为终端节点。
-
使用HDMI线将三个HDMI显示器分别连接到摄像节点A、B和终端节点DE10-Nano开发板上的HDMI接口。
-
编写摄像节点程序和终端节点程序,并分别放到摄像节点A、B和终端节点DE10-Nano开发板中的SoC Linux系统中(也可直接使用友晶提供的完整解决方案)。
-
用交换机组件局域网实现两个摄像节点和终端节点之间的网络互联。
先用OTG转接线将USB HUB连接到DE10-Nano开发板的USB OTG接口,然后再将鼠标和键盘连接到USB HUB上,输入vi 指令编辑配置文件,修改A的IP地址为192.168.1.10,然后输入:wq保存并退出;输入reboot重启Linux。
同样地,设置摄像节点B的IP为192.168.1.11,终端节点的IP为192.168.1.12。
第二步是运行摄像节点A、B的软件,首先输入insmod dma_buffer.ko加载驱动;然后输入./camera_side_v2运行摄像节点程序,后面的第一个参数是摄像节点A或B,第二个参数是终端节点的IP,第三个参数是摄像节点A、B的IP。运行完成之后会弹出一个窗口,在这个窗口中会显示摄像节点A、B拍摄到的画面。
接下来输入python3 main_ui.py运行终端节点软件,后面的这三个参数分别是192.168.1.10 192.168.1.11 192.168.1.12摄像节点A、B和终端节点的IP。
运行完成之后会弹出一个窗口,这是摄像节点A、B拍摄到的画面,这里是消息显示窗口,这里会显示测量的结果,下面是三个按钮。
拉动激光笔偏离静止点,要保证激光笔经过O点做直线运动,然后点击Start按钮开始测量,在消息窗口会显示计时的秒数,大约10s后,会在result窗口显示出测量结果:线长为70.56cm,角度为61°,实际的线长为70cm,角度为60°,线长的误差为0.56cm,角度的误差为1°。
可以通过点击Show Camera A Data按钮和Show Camera B Data按钮来查看摄像节点采集到的数据集以及拟合出的曲线图。
这个是摄像节点A的数据点和曲线图:
这个是摄像节点B的数据点和曲线图:
另外还给出了摄像节点A、B计算出的振幅、周期和线长,可以看到,摄像节点A的振幅>摄像节点B的位移,所以我们最终选择摄像节点A计算出的线长70.56cm。
题目要求能够测量的线长范围为50cm ~ 150cm,角度范围为0° ~ 90°,我们这里采取了线长为59、101和139的线长进行测量,可以看到,测量线长的误差绝对值在1cm以内,测量角度的误差绝对值在3°以内,且测量时间约为10s左右,满足题目的要求。
14 测试过程视频演示
视频参考微信原文:2021年全国大学生电子设计竞赛D题——基于互联网的摄像测量系统(三)