数显千分表测量泵箱步进精度 简 介本文介绍了使用数显千分表测量泵箱推杆步进精度的实验方法。由于无法直接获取数显表的通讯协议研究人员采用摄像头拍摄数值并通过AI识别记录数据的方式。实验发现无线传输命令存在延迟和丢失问题改用串口直接发送控制命令后数据稳定性显著提高。通过对100-500个步进数据的采集和分析发现测量结果存在线性误差和周期性波动。研究还揭示了AI图像识别过程中数据丢失会导致异常突变通过数据插值处理后误差曲线更加平滑。实验为精密机械运动控制提供了有价值的测量方法和误差分析案例。关键词数显千分表AI识别数字使用数显千分表矫正泵箱进程数显千分表01【数显千分表】一、背景介绍昨天我们通过这款数显千分表测试了一款泵箱推杆步进的精度 使用了相机对数显千分表的数值进行拍照 然后呢再使用AI进行识别 从而对记录数据进行处理 之所以通过图像采样再进行AI识别来获得数据 是因为这款数显千分表本身的对外通讯协议 现在还没有得到因此只能采用这种直观的方法来记录数据。 对数据进行处理会发现它的线性误差的变化规律 但在这个过程中会发现其中有一些波动是因为使用WIFI传输步进电机上升命令时 会出现延迟或者丢失引起的数据变化 因此关于这部分呢为了消除WIFI传输数据丢失的问题 下面使用有限的串口 直接对泵箱控制器进行发送命令 这样从而避免WIFI的命令丢失 重新测试泵箱步进线性精度。二、测量结果下面通过Python编程自动通过串口发送泵箱运动命令 这样可以保证之前WIFI命令丢失的问题不再发生 发送命令1秒钟之后 对摄像头拍摄数显千分表的数字变化进行采集 泵箱每往上前进一步 就记录一下数显表数字变化的图片。 将100个图像通过豆包给出识别的数字纯文本数列 绘制出来可以看到测量结果显示数列随着步进步数呈现线性上升趋势。 而且变化非常光滑消除了之前由于WIFI传输命令丢失所带来的数据波动 对采集的数据进行线性拟合 这样我们可以得到泵箱步进线性误差 绘制出实测数据与线性拟合数据之间的误差曲线 可以看到前面呈现上下波动的幅度在15微米左右 后面突变的峰值误差比较大具体什么原因造 现在还不清楚后面再重复进行测量一遍 查看这个现象是否属于测量设备中的偶发现象。接下来再重新测试100个上升一步之后的数据变化 查看数据拟合之后线性误差规律。 这一次整个数据线性拟合误差呈现波动形式。 最高与最低之间分别是正偏差115和负偏差100。 对应的线性误差的变化幅度为21.5微米。接下来我们测量连续200个泵箱步进之后的千分表测量数据 查看对应的线性误差变化规律。 这是将200个测量数据图片 通过阿豆转换成数字之后 进行线性拟合计算出的线性误差 能够明显看到前后两段与前面两次测量的结果变化有相似之处 中间这个突变的误差与第1次测量出现的这样一个突变也类似。 根据现在我们测量结果来看 这样的线性误差似乎是周期性的 但具体是否是周期性 这就需要我们连续测量更多数字 才能够将它的周期性充分的显示出来。▲ 图1.2.1 测量200个数值图片▲ 图1.2.2 测量500个数值图片▲ 图1.2.3 测量400个数值图片接下来我们连续采集420个数据 将采集到的数据图片使用AI进行转换 转换成数据发现产生了较大的波动 特别是后期波动更大经过查看 实际上是AI识别的数据本身图片出现问题 也就是图片在截取的时候由于它的宽度不够 将数显千分表的数字丢了前面的一个数位 我们刨掉后边由于丢掉数位引起的波动 使用前420个数据进行拟合 计算出的线性误差明显出现了比较大的波动 特别是在中间和最后可以看到数字出现了幅度超过400的跳动 这已经不符合我们理解的常理 下面我们再继续重复测试 这次测试400个数据每个数据采集命令 发送之后等待一秒进行拍照留取照片。 使用线性拟合之后我们计算出它的线性误差 可以看到仍然出现了一些剧烈的波动。 比如在一开始出现了幅度超过200的这样的一个波动 似乎其中出现了这样的一波动是遗漏了某个数据。 我们查看在这个位置附近的前后拍摄的照片的数字 基本上都是呈现200这样一个等差序列 不应该出现幅度超过200的剧烈变动 但是我们查看AI给出的原始识别数据 发现在这个位置前后的确出现了一个巨大的波动 数字跳动超过了350接近于400 对照一下原始记录的数字数字源表存储的图片 相邻两个数字分别对应的26和28图片 相邻两个数字分别对应的26和28图片 显然中间27这个图片 AI并没有给出识别结果并将它遗漏了 这样就使得这个数字前后数据的增加从原本。 从原本跳动为200 一下子增加到跳动400 这也就产生了这些突变的地方。 由此我们可以知道这些突变是因为AI在识别大量数据过程中遗漏了某些图片而造成的数据丢失。 最初可以看到AI给出的时候 原本每行应该在11个数字左右 但实际上我们可以看到有两行的数字显然因为丢失数据而减小了 最终我们可以看到刚才在展示的测量性误差过程中的这种突变。 最后的来源是因为AI识别遗漏了数据所造成的。根据前面分析由于丢失数据造成的数据前后两个突变超过了350 那么我们对原始数据进行扫描 但凡前后数据相差超过300的 都中间补上一个前后数据的平均值 我们重新计算线性误差 可以看到整个的数据就没有了前面突变的情况 但是仍然存在着无法消除的4个间断点。 那么这些间断点的具体原因 还需要进一步通过查找相对应的前后数据。 看是否是因为AI识别中产生的错误。※总结 ※本文测试了数显千分表测量泵向步进的精度 特别是检验它的步进线性度。 但是我们可以看到在使用AR对采集图片识别过程中 由于中间会出现数据的丢失 从而造成信息度数据出现突跳。 但是进行补偿之后仍然会发现其中有较大的凸起 这部分呢我们留在后面再进一步。 进行查找看原始的图片数据和图片所对应的数值是否能够对得上。#!/usr/local/bin/python# -*- coding: gbk -*-## TEST1.PY -- by Dr. ZhuoQing 2026-06-08## Note:#fromheadmimport*importserialfrom_astimportOrfromserial.serialutilimportSerialExceptionimportserialfrom_astimportOrfromserial.serialutilimportSerialException#------------------------------------------------------------#------------------------------------------------------------cportserial.Serial()cport.baudrate115200cport.timeout0.05try:cport.portCOM4except:printf(Set cport port COM4 error. )try:cport.open()exceptserial.serialutil.SerialException:printf(Open cport port COM4 error.)else:printf(Open cport port COM4 Ok.)#------------------------------------------------------------imgdirrd:\temp\imgdataforiinrange(400):cport.write(bm u 1\r)time.sleep(1)fnameos.path.join(imgdir,%d.jpg%i)tspsavecutimage(fname)printff(i)#------------------------------------------------------------printf(\a)#------------------------------------------------------------# END OF FILE : TEST1.PY##!/usr/local/bin/python# -*- coding: gbk -*-## TEST2.PY -- by Dr. ZhuoQing 2026-06-08## Note:#fromheadmimport*fromscipy.optimizeimportcurve_fit numstr20#------------------------------------------------------------#d [int(sss) for sss in tspgetdopstring(numstr).split(\r\n)]d[int(sss)forsssintspgetdopstring(numstr).split(,)]#d [dd for dd in d if dd 10000]#------------------------------------------------------------dd[d[0]]fornind[1:]:deltadabs(n-dd[-1])ifdeltad300:dd.append((ndd[-1])//2)dd.append(n)printf(len(dd))ddd#------------------------------------------------------------deflinefun(x,a,b):returna*xb param((max(d)-min(d)/len(d)),d[0])xarray(range(len(d)))param,convcurve_fit(linefun,x,d,p0param)printf(param)dfitlinefun(x,*param)#------------------------------------------------------------err[x1-x2forx1,x2inzip(dfit,d)]plt.plot(x,err,lw3)plt.xlabel(N,colorsteelblue,fontsize24)plt.ylabel(Error,colorsteelblue,fontsize24)plt.grid(True,whichboth,linestyle--,alpha0.7)plt.tight_layout()plt.show()exit()#------------------------------------------------------------plt.plot(x,d,lw3,labelOrigin)plt.plot(x,dfit,lw3,labelFit)plt.xlabel(N,colorsteelblue,fontsize24)plt.ylabel(DataFit,colorsteelblue,fontsize24)plt.grid(True,whichboth,linestyle--,alpha0.7)plt.legend(locupper left,fontsize24)plt.tight_layout()plt.show()#------------------------------------------------------------plt.plot(d,lw3)plt.xlabel(N,colorsteelblue,fontsize24)plt.ylabel(Data,colorsteelblue,fontsize24)plt.grid(True,whichboth,linestyle--,alpha0.7)plt.tight_layout()plt.show()#------------------------------------------------------------# END OF FILE : TEST2.PY#■ 相关文献链接:使用数显千分表矫正泵箱进程-CSDN博客● 相关图表链接:图1.2.1 测量200个数值图片图1.2.2 测量500个数值图片图1.2.3 测量400个数值图片