本帖最后由 IT_Buddhist 于 2023-3-15 23:18 编辑
在前面我写了一篇PID算法通俗解读,我想读过的人一般都能够写出一个完整的PID算法了,可是当你好不容易把算法写出来了,在场地上一跑,可能会发现还不如你的比例巡线呢?问题出在哪里?对就是PID参数! 正确调整控制器参数可以提高巡线系统的稳定性和准确性。然而,传统的手动调参方法非常耗时且需要专业知识。基于机器学习的PID巡线调参方法则可以通过自动化优化控制器参数,提高系统性能并节省时间和人力成本。 下面我将讲述一下如何通过实现基于机器学习的PID调参。 1、收集数据 为了使用机器学习算法进行PID参数调整,需要首先收集巡线系统的输入和输出数据。这些数据将用于训练机器学习模型。对于巡线来说,通过测得的光感值来控制电机的Power,电机的Power会影响赛车的走向,赛车的走向又会影响光感值,因此在这里我的输入和输出都是光感值。前面的光感值为输入,后面的光感值为输出。为了得到一个通用的学习模型,我通过使用PID当前的PID算法对一个圆环进行巡线。当然这里只是为了获得训练学习模型的数据,因此PID参数可以随便设置,只要保证小车在巡线时不发生飞线即可,同时为了防止飞线,你也可以将圆环的黑线尽量画宽一点。 我使用的样本收集程如下(具体见附件PID_YangBen.ev3)。该巡线程序会将需要的数据输出到一个abc.rtf的文件。文件中包含的数据有:光感目标值(黑线边缘值),电机驱动值,PID参数值,每次PID计算的时间和光感值。
使用的巡线场地为一个圆环,圆环的尺寸如下:当然,如果你巡线的曲率比较小,可以使用大一点的圆,曲率比较大,可以使用小一点的圆。生成的样本数据和你的小车质量、圆环曲率、光感目标值(黑线边缘值),电机驱动值,PID参数值,等等因素有关,不同的条件会生成不同的样本数据。 2、建立模型 根据收集的数据,建立一个机器学习模型,以预测巡线系统的输出。这里可以使用许多不同的机器学习算法,例如神经网络、决策树或支持向量机。我是使用Python中的numpy模块进行数据训练。 在运行PID_YangBen.ev3巡线程序生成训练数据后,通过LEGO MINDSTORMS Education EV3 软件的内存浏览功能,导出程序的输出文件abc.rtf文件。再运行EV3 PID参数自动调试程序,会得到如下界面: 通过“读取样本” 按钮,打开样本abc.rtf文件,最后会生成一个学习模型曲线图:黑色数据表示样本数据,红色数据表示预测数据,该图形表示预测数据和样本数据吻合度。 3、优化控制器参数 通过第二部建立的机器学习模型,就可以依据输入来预测输出。通过设定相同的初始条件,根据设定的PID参数列表,就可以模拟出不同的PID参数得到的巡线效果。 在EV3PID.exe程序界面,点击“生成参数” 按钮,会依据表格中的PID参数范围和步长,在右边的列表中生成要仿真的PID参数列表,再点击“仿真”按钮,程序会依据预测模型右边列表中的PID参数进行一一仿真。 4、验证和迭代 在仿真完成后,系统会自动对仿真结果按照优劣程度进行排序,一般效果比较好的PID参数会排在前面,点击每行参数前面的多选框,可以看到仿真的结果曲线。一般来说,你可以选取3-4个波峰的曲线进行实际验证。
通过结果曲线,你可以选择适合的参数进行实际验证,一般来说,3到4个波峰的参数就是比较好的参数。
关于PID自动学习程序 的实现程序详见: 链接:https://pan.baidu.com/s/1OfJtyTe3LwAMh02Z0wTOzg?pwd=euhg 提取码:euhg
|