光电编码器是一种集光、机、电于一体的高分辨率角位移传感器,它以光电转换技术为核心,输出与角位置信息相对应的角度代码来实现角位移的测量[1-2],广泛应用于航空航天、工业控制等领域[3-4]。出厂前的光电编码器都需要经过性能指标检测,其性能检测准确性则由编码器检测系统的检测精度决定。该检测精度主要又由检测系统中基准光电编码器的精度决定。随着科学技术的进步,许多提高光电编码器精度的方法应运而生[5]。Hou等[6]研究了光电编码器的非线性误差,提出一种基于谐波分析的方法对误差进行补偿。陈洪月等[7]用粒子群优化算法对误差反传(back progagation,BP)神经网络进行优化,将优化后的网络用于误差训练。洪喜等[8]采用径向基函数(radial basis function,RBF)神经网络提高基准光电编码器的精度,将神经网络的训练值用于补偿。董凯炎等[9]利用傅里叶技术拟合测角误差,其拟合结果可对基准光电编码器的误差进行补偿。利用BP神经网络算法进行非线性误差拟合,容易出现局部极小值且存在过拟合的现象,会影响网络训练效果。利用RBF神经网络算法的非线性自适应滤波器对输出信号进行滤波,如果拟合中心点为样本中的数据,就不能反映正式样本的状况。利用极度梯度提升树(extreme gradient boosting,XGBoost)算法进行误差修正,其正则化项可防止过拟合,且当训练数据较少或者存在缺失时,损失函数能够进行优化,处理缺失或者稀疏的数据,大大提升算法的效率。实验结果显示,XGBoost能够高精度逼近非线性误差曲线,具有较强的非线性拟合性,且修正光电编码器误差的效果优于神经网络。
1 光电编码器检测系统的误差构成传统的编码器对比检测法系统框图如图1所示。该系统主要由基准光电编码器、待测光电编码器、电机、联轴节、支架、电机驱动器以及上位机构成,其误差来源主要有:基准光电编码器的既定误差、装调误差以及数据采集卡带来的误差[10-11]。其中基准光电编码器带来的误差要远大于装调误差以及数据采集卡带来的误差[12]。故考虑从基准光电编码器的误差出发,对其进行补偿,进而提高整个编码器检测系统的精度[13]。
![]() |
图 1 编码器精度检测装置 Figure 1 Precision measurement system for photoelectric encoder |
用静态精度
$ \varepsilon =\frac{\sum _{i=1}^{n}\left|{e}_{i}\right|}{n},\;\;i=\mathrm{1,2},3,\cdots,n $ | (1) |
式中:
标准差的计算公式为
$ \sigma =\sqrt{\frac{\sum _{i=1}^{n}{\left({e}_{i}-\overline{e}\right)}^{2}}{n-1}},\;\;i=\mathrm{1,2},3,\cdots,n $ | (2) |
式中,
误差最大值的计算公式为
$ {e}_{\rm{{max}}}={\rm{max}}\left|{\theta }_{i,{\rm{T}}}-{\theta }_{i,{\rm{L}}}\right|,\;\;i=\mathrm{1,2},3,\cdots,n $ | (3) |
式中:
XGBoost算法是在梯度提升决策树(gradient boosting decision tree,GBDT)的基础上提出的机器学习系统,具有防过拟合性好、计算效率高、样本适应度高等特点。其学习器包括分类树以及线性分类器。本文利用分类树作为学习器。其核心为根据样本特征生长出新的叶子节点,分裂生长出新的树。每次添加一棵树,就学习一个新函数,去拟合上次预测的残差[14]。如训练完成的系统由 K棵树组成,当预测某个样本的值时,就根据这个样本的特征,在每棵树中落到对应的叶子节点处。每个叶子节点有唯一的权重值,即分数对应。一棵树的得分用F表示,将样本值在每棵树的得分加起来就是该样本的预测值
$ \widehat{y}=\mathrm{\varPhi }\left({x}_{i}\right)=\sum\nolimits _{k=1}^{K}{f}_{k}\left({x}_{i}\right) $ | (4) |
$ F=\left\{f\left(x\right)={\omega }_{q\left(x\right)}\right\}\left(q:{{\boldsymbol{R}}}^{m}\to T,\omega \in {{\boldsymbol{R}}}^{T}\right) $ | (5) |
式中:
模型的偏差和方差决定模型的精度。模型偏差由损失函数表示,正则项则用于防止过拟合现象。目标函数 Obj可以由损失函数以及正则项的和组成,其表达式为
$ Obj={\sum }_{i=1}^{n}l\left({y}_{i},{\widehat{y}}_{i}\right)+{\sum }_{k=1}^{K}{\varOmega}\left({f}_{k}\right) $ | (6) |
式中:第一部分表示回归树预测分数和真实分数的差值即训练误差;第二部分为正则化项,即每棵树的复杂度之和,目的是控制模型复杂度,防止过拟合。
$ \mathrm{\varOmega }\left(f\right)=\gamma T+\frac{1}{2}\lambda {‖\omega ‖}^{2} $ | (7) |
正则化项由两项组成,式中第一项 Τ表示叶子节点数目;
在构建每一棵树模型时,采用贪心算法来决定叶子节点的分裂以及树的最大深度,确保每棵树的增益值最大。在叶子节点分裂过程中,叶子节点的权值用
$ {g}_{i}={\partial }_{{\widehat{y}_{i}}^{\left(t-1\right)}}l\left({y}_{i}\text{,}{\widehat{y}}_i^{\left(t-1\right)}\right) $ | (8) |
$ {h}_{i}={\partial }_{{\widehat{y}_{i}}^{\left(t-1\right)}}^{2}l\left({y}_{i}\text{,}{\widehat{y}}_i^{\left(t-1\right)}\right) $ | (9) |
式中:
$ Gain=\frac{1}{2}\left[\frac{{G}_{{\rm{L}}}^{2}}{{H}_{{\rm{L}}}+\lambda }+\frac{{G}_{{\rm{R}}}^{2}}{{H}_{{\rm{R}}}+\lambda }-\frac{{\left({G}_{{\rm{L}}}+{G}_{{\rm{R}}}\right)}^{2}}{{H}_{{\rm{L}}}+{H}_{{\rm{R}}}+\lambda }\right]-\gamma $ | (10) |
式中:
XGBoost在原有的决策树上进行优化,使用梯度提升算法来确保较小的损失值,若构成一棵新的树模型损失值要大于原有的树模型,则停止生成新的树。XGBoost每进行一次迭代就是增加一棵树,
$ {\widehat{y}}_{i}^{\left(t\right)}=\sum\nolimits _{K=1}^{K}{f}_{k}\left({x}_{i}\right)={\widehat{y}}_{i}^{\left(t-1\right)}+{f}_{t}\left({x}_{i}\right)\text{,}{f}_{k}\in F $ | (11) |
式中:
利用XGBoost修正基准光电编码器误差,先随机选取一定量的样本数据作为训练集进行训练,其训练结果决定了误差补偿的效果。完成训练后,再将剩余的样本数据输入训练分类树,将其预测值与真实值进行比较,验证XGBoost机器学习补偿系统的泛化推广能力[15]。
3 基准编码器误差补偿实验 3.1 编码器检测系统装置为获得XGBoost误差补偿的训练样本,采用自准直仪和多面棱体对基准光电编码器进行误差检测[16]。基准光电编码器选型为SIMOTICS S-1FL6伺服电机所自带的21位增量式编码器,其出厂静态精度
![]() |
图 2 基准光电编码器误差检测系统结构 Figure 2 Structure of error detection system for reference photoelectric encoder |
检测方法为:首先将多面棱体与基准光电编码器同轴连接,调节初始位置,然后进行测量[17]。多面体每转过一面,自准直仪对角度进行一次标定。为了提高样本数据的值使其更接近真实值,用金属24面棱体进行3次测量,共得72个数据集,取3次测量误差的平均值,检测平均误差结果见表1。
![]() |
表 1 编码器误差检测结果 Table 1 Encoder error detection results |
在MATLAB上建立模型并验证。由于数据集的个数较少,将训练数据集与验证数据集的比例划分为7∶3,并将数据集打乱。经过多次训练调试发现,将输入数值映射到0~100之间,学习率设置为0.15,树的最大深度设置为6,训练效果最好。其训练能力如图3所示。
![]() |
图 3 XGBoost机器学习训练能力 Figure 3 XGBoost machine learning training ability |
可以看出,经过XGBoost学习的曲线高度逼近编码器的实际检测误差。
使用学习样本数据外的数据作为补偿系统的测试数据,用以验证测试样本的泛化能力,其泛化能力如图4所示。
![]() |
图 4 XGBoost机器学习泛化能力 Figure 4 XGBoost machine learning generalization ability |
由图4可以看出,经过学习的分类树网络能够较好地拟合误差曲线,其泛化能力很好。补偿前后误差对比如图5所示。
![]() |
图 5 补偿前后编码器误差对比 Figure 5 Comparison of encoder error before and after compensation |
可以看出,XGBoost具有较好的非线性拟合能力,使用补偿系统后,编码器的误差在0附近波动,其补偿效果很好。
为了验证XGBoost训练补偿方法的有效性,利用BP神经网络与RBF神经网络进行误差补偿。BP神经网络与RBF神经网络的拓扑结构均设置为 1×6×1,两种网络补偿前后的误差图像如图6、图7所示。
![]() |
图 6 BP神经网络补偿对比图 Figure 6 Comparison diagram of BP neural network compensation |
![]() |
图 7 RBF神经网络补偿对比图 Figure 7 Comparison diagram of RBF neural network compensation |
可以看到,两种神经网络的误差补偿效果不如XGBoost机器学习的补偿效果。其误差补偿效果的对比结果如表2所示。
![]() |
表 2 各补偿系统补偿效果对比 Table 2 Comparison of compensation effect of each compensation system |
分析表中数据可知,3种补偿系统均使得静态精度、标准差、最大误差值有较大的改善,其中XGBoost的补偿效果最好。经过XGBoost补偿系统补偿优化,静态精度由3.15″降低至0.09″,标准差由3.62″降低至0.13″,最大误差值由5.53″降低至0.39″。
4 结 论利用XGBoost算法设计了一个误差补偿系统。首先,对编码器检测系统的误差来源进行分析,确立了误差补偿效果评价的标准。使用24面棱体对基准光电编码器进行精度标定,将得到的数据集在MATLAB上使用XGBoost机器学习系统进行补偿。补偿后的结果表明,该方法具有较好的误差补偿效果,理论上能够进一步提高光电编码器检测系统的精度。在实际建立XGBoost机器学习系统模型时,通常需要根据样本数据进行不同的参数调节以及算法优化,以获得最好的补偿效果。将XGBoost用于对光电编码器误差的补偿,补偿过后的光电编码器具有更高的精度,可将此误差补偿方法用于其他测量系统当中。
[1] | 汤天瑾, 曹向群, 林斌. 光电轴角编码器发展现状分析及展望[J]. 光学仪器, 2005, 27(1): 90–96. |
[2] | INCZE I I, SZABÓ C, IMECS M. Incremental encoder in electrical drives: modeling and simulation[M]// RUDAS I J, FODOR J, KACPRZYK J. Computational Intelligence and Informatics: Principles and Practice. Berlin, Heidelberg: Springer, 2010: 287 − 300. |
[3] | 吴文峰, 李志斌, 杨勇, 等. 基于LabVIEW的光栅编码器动态特性检测系统[J]. 微特电机, 2019, 47(3): 25–28. |
[4] | LU L, WANG L, WANG W, et al. A self-calibration method for error of photoelectric encoder based on gyro in rotational inertial navigation system[J]. Microsystem Technologies, 2019, 25(6): 2145–2152. DOI:10.1007/s00542-018-4139-0 |
[5] | BHANGU B S, RAJASHEKARA K. Control strategy for electric starter generators embedded in gas turbine engine for aerospace applications[C]//Energy Conversion Congress & Exposition. Phoenix: IEEE, 2011: 1461 − 1467. |
[6] | HOU B, ZHOU B, LI X, et al. Periodic nonlinear error analysis and compensation of a single-excited petal-shaped capacitive encoder to achieve high-accuracy measurement[J]. Sensors, 2019, 19(10): 2412. DOI:10.3390/s19102412 |
[7] | 陈洪月, 张坤, 刘治翔, 等. 基于PSO-BP神经网络光电编码器误差补偿研究[J]. 传感技术学报, 2017, 30(8): 1182–1186. |
[8] | 洪喜, 续志军, 杨宁, 等. RBF网络在编码器误差补偿中的应用[J]. 光电工程, 2009, 36(8): 139–142. |
[9] | 董凯炎, 史姝倩, 刘杰, 等. 一种光电编码器精度自动检测系统[J]. 传感技术学报, 2019, 32(3): 463–468. |
[10] | 刘丰文, 邓文和. 25位绝对式编码器[J]. 光电工程, 2000, 27(6): 66–68. |
[11] | JIA H K, YU L D, ZHAO H N, et al. A new method of angle measurement error analysis of rotary encoders[J]. Applied Sciences, 2019, 9(16): 3415. DOI:10.3390/app9163415 |
[12] | YU H. Angle measurement based on in-line digital holographic reconstruction[J]. Optics and Lasers in Engineering, 2021, 137: 106385. DOI:10.1016/j.optlaseng.2020.106385 |
[13] | 王义文, 焦环宇, 刘献礼, 等. 绝对式编码器输出信号的误差自动补偿[J]. 光电工程, 2015, 42(1): 89–94. |
[14] | 李占山, 刘兆赓. 基于XGBoost的特征选择算法[J]. 通信学报, 2019, 40(10): 101–108. DOI:10.11959/j.issn.1000-436x.2019154 |
[15] | 李叶紫, 王振友, 周怡璐, 等. 基于贝叶斯最优化的Xgboost算法的改进及应用[J]. 广东工业大学学报, 2018, 35(1): 23–28. |
[16] | 杨金利, 魏晓蓉. 绝对式光电编码器测角误差自动检测系统[J]. 光学与光电技术, 2021, 19(5): 30–35. |
[17] | 董静, 万秋华, 于海, 等. 小型绝对式光电编码器误码自动检测系统[J]. 中国光学, 2016, 9(6): 695–703. |