关于自动化/控制本科学习的思考

由于笔者水平有限,文中难免存在一些不足和错误之处,诚请各位批评指正。

本文内容:

0 为什么写这个主题

1 自动化是学什么的

1.1 控制问题

1.2 从课程设置展开

1.3从机器人学展开

2 理论与实践的统一

2.1 主观思考

2.2 实践过程对理论学习的促进

3 理论基础与仿真分析

3.1 运动预测的例子

3.2 串级控制的例子

4 总结

0 为什么写这个主题

在大一第一个学期我就有了些关于理论学习与课外实践的统一性的思考,由于对自己的思考和结论并不自信,就只跟身边几个比较要好的同学交流过。这段时间看了李崇老师的关于自动化/控制的学习经历和经验分享,和东北大学action实验室发布在B站的控制组交流会,很有共鸣,再加上马上开学大二了,也算给自己不完整的大一做一个总结,故打算写一写自己对自动化专业的认识,还有关于理论与实践统一性的思考,以及理论与仿真在我的实践中的运用与我的思考

1 自动化是学什么的

我认为认识自动化专业要从本科的课程设置入手。以我的学校哈尔滨工程大学的自动化学院为例,我们学院有五个本科专业,在招生中为自动化类大类招生,包括自动化、探测制导、测控、电气自动化、机器人五个本科专业。从培养方案来看,专业课程设置可大致总结为:工学基础&控制理论+专业内容。主要区别就在不同专业有不同的专业内容:自动化是运动控制与过程控制,测控是导航……

1.1 控制问题

在认识自动化专业之前,先举一个控制问题的例子:空调。

我们用遥控器设置一个温度,是希望空调可以吹出合适温度的风来将室内的温度控制在我们设置的温度附近。控制室内温度保持在一定范围就是控制目标。

在这个控制问题中,室内空气就构成了一个系统(被控对象)。系统包含输入和输出,这里我们可以假设空调交换机的运行功率为输入,室内的温度为输出。

在设计空调的控制工程师眼中,问题是这样的:通过温度传感器测量室内实际温度,但传感器的测量值不一定准确,可能需要滤波来消除掉无用信号(噪声)并保留下有用信号(室内温度),这就是感知的过程。

得到了室内温度以后,我们还要结合目标温度来计算出合适的交换机功率,来控制温度的变化,而从实际温度和目标温度到交换机功率的这个过程,就需要由设计的控制器来计算。

交换机的工作就会引起室内温度的变换,室内温度的变化会反过来作用到我们感知得到的室内温度,进而影响控制器的输出(新的交换机功率)。经过这样不断往复的过程,我们就可以将室内温度控制在我们想要的范围内:

image-20200830144504870

1.2 从课程设置展开

在上面说过,自动化学院的课程设置主要包括工学基础控制理论专业内容,这里主要讲工学基础和控制理论是干什么的。

工学基础中的力学电学以及计算机程序设计等等则是给我们提供认识系统和改造系统的方法。而本科阶段最重要的课程是控制理论,包括自动(经典)控制理论现代控制理论,给我们提供分析系统和设计控制率的理论依据与方法。通俗来讲就是,我们通过力学与电学的知识可以对一个系统有一个初步认识或者进行定性甚至定量的建模,本科阶段一般是根据物理定律建立系统的微分方程。

而控制理论建立在微分方程的基础上,提供了分析系统的手段,经典/现代控制理论分别通过传递函数与状态空间的方式来分析系统、得到系统的特性,根据系统的特性和具体控制要求,我们可以通过控制理论得到能满足我们控制要求的控制算法或者控制率

这样一来,我们就从理论层面解决了这个控制问题,但这还没完,我们还需要具备实现控制算法的能力。通常情况下,我们利用编程的手段,通过计算机系统,包括单片机和plc等等数字计算平台来实现我们的控制算法,最后经过实机调试来完成对系统的控制。

上述过程听起来会有些晦涩,想深入了解这个过程可以从这个网站学习:http://ctms.engin.umich.edu/CTMS/index.php?aux=Home

1.3 从机器人学展开

除了从课程设置的角度展开,我们也可以从机器人学展开来认识自动化专业,因为机器人行业的各个环节都能见到自动化人的身影。

机器人可粗略分为感知、决策、控制三方面。

以自动驾驶为例,感知是最上游的环节,包括通过高精地图与IMU融合获取位置、速度等信息,通过激光雷达与摄像头融合识别周围环境中的车辆行人等障碍物等。有了感知得到的环境信息后,决策部分将决定车辆以怎样的行为应对当前环境,是出现突发情况需要急刹车,还是路况良好可以提速,还是前方车道修路需要变道。当决策环节给出实际决策结果后,就由控制部分来控制电机转速、方向盘转角等来实现决策给出的任务。

对于感知、决策和控制三方面,自动化专业或者控制科学与工程学科都有对应的课程与学科,具体细节不再展开。

2 理论与实践的统一

这里的理论指的是在学校课内学到的理论知识,实践指的是在学校课程以外动手做一些课外作品,可以是在实验室中跟大家一起做比赛,也可以是自己做平衡车、无人机这样可以应用各种算法的作品。

发展基础科学、工程学科的重要目的都是提高或创造生产力,只有生产力的扩大才能把蛋糕越做越大。对于每一个个体来说,将自己所学最终转换成生产力才是实现价值的重要途径。研究更好的控制算法(科研)、将学到的内容应用到实际设备或生产中(工程)、将学问传给更多人(教学)都是将知识转换成生产力的途径,只是不同的方法有不同的时间周期和特点。

我们当中大多数人毕业以后都会去做工程师,在高校做科研和教学的毕竟是少数,因此这里从工程角度展开来论述,理论与实践的统一性对本科学习的意义。

2.1 主观思考

从这里往下就是很主观的内容了,如果认为我的思考和结论有问题,诚请批评指正。

主要结论如下:理论基础决定发展上限,而实践能力决定能否将所学理论转换为生产力。此外,实践过程对理论学习有极大的促进作用:

  1. 理论基础决定发展上限这个可以说是所有人的共识,这里不再展开。
  2. 实践能力意味着将所学理论转换为生产力能力,这点不用过多论证也能得到大多数人的认同。尽管如此,这点仍然被很多人忽略。通俗来讲就是,学了理论知识,要会用,用在实际生产生活中。控制工程师的工作就是把控制问题解决,解决控制问题既需要理论支撑也需要足够的实践能力,由此可以看出理论与实践是辩证统一的。理解理论与实践的统一性与实践能力的重要性对自动化专业的本科学习有至关重要的意义。除此之外,良好的实践能力也有利于就业和升学,这里就不过多展开。
  3. 实践过程对理论学习有极大的促进作用,这点我在大一一年的RoboMaster备赛中感触颇多。

2.2 实践过程对理论学习的促进

在实践过程中,我们会遇到各种各样的问题,很多问题都可以通过学校课程的理论知识来分析和解决。带着问题去学习相应的理论知识会有极强的动力,学习的过程会很高效很过瘾。并且用所学理论解决实际工程问题比解决课后习题要更有成就感。

举个简单的例子,在RoboMaster比赛的云台控制中,需要陀螺仪测量云台的转动角速度,测量的角速度会作为控制器输入的一部分信息。但控制器中的微分环节对信号的质量要求较高,因为微分过程会放大信号高频噪声的幅值(考虑sin(100t)这个函数,幅值为±1,经过求导后得到100cos(100t),幅值扩大了100倍)。为了避免高频噪声影响系统的稳定性,我们需要通过低通滤波器(只有低频率的部分可以通过即低通)来滤去高频噪声。但滤波器存在相位滞后,会影响信号的实时性,简单来说就是信号经过低通滤波器后会比原始信号滞后一点点,就像这样(左右图为MATLAB和单片机平台的加速度计滤波效果对比):

image-20200831142030365

信号的滞后就会影响控制结果的滞后,这样带来的直观感受就是云台不“跟手”了。RoboMaster对操作手来说就是一个射击游戏,云台不“跟手”,就像是用显卡不好的电脑玩游戏那样,感觉操作起来黏黏糊糊不够干脆利落,这显然会影响操作手的发挥。因此,滤波器的设计需要在滤波程度和实时性之间找到一个平衡。借着设计滤波器这个契机,我浅显的学习了一下数字信号处理的内容,包括冲激响应、幅频响应和相频响应等,也正是冲激响应这个概念让我有了学习控制理论的想法这个后面再说。

了解了幅频响应和相频响应,就能直观的对比滤波器的特性。通过MATLAB的filter designer可以方便的设计并分析滤波器,这样一来,就能根据实际需求把握恰当的滤波器的滤波效果和滞后程度:

image-20200830153115943

再后来偶然在论坛上看到了一篇官方发布的云台系统辨识方法的博客,感觉很牛,但是看不懂啊!这又是拉普拉斯变换又是传递函数的这我不懂啊。后来看到了一个从冲激响应出发的经典控制理论的系列,从拉普拉斯变换到传递函数再到一阶系统二阶系统再到伯德图等等内容都讲的非常直观明了。我也习惯把学到的内容写到我的博客里:https://www.cnblogs.com/HongxiWong/。经典控制理论入门以后,我慢慢发现PID的参数整定也可以从严谨理论的角度进行分析,不再是一味的看着串口打印的阶跃响应图像来凭感觉调参,这是我把第一次把经典控制理论用在做比赛中。

3 理论基础与仿真分析

第一次听说建模和仿真,是大一刚开学不久,听一个做智能车的学长讲的,意思是建模可以用来定性分析实际系统,进一步可以通过仿真来验证算法思路的可行性,但想要定量分析出实机上好用的参数比较困难。当时觉得特神秘,我不懂也没好意思问。后来疫情在家不能返校,也没有设备和机器人了,所幸做就做了些仿真分析,这才开始慢慢理解理论与仿真在实际开发中的作用。

3.1 运动预测的例子

同样是举一个简单的例子,关于Robmaster机器人的辅助瞄准运动预测。辅助瞄准这东西就是用计算机视觉识别和定位敌方装甲板,然后根据视觉识别的结果自动调整云台姿态实现辅助瞄准,通俗来说就是射击游戏里的自瞄挂。过程大概是这样的:视觉算法得到敌方装甲板位置→云台调整姿态瞄准敌人→开枪→子弹飞行一段时间击中装甲板。云台一般为双轴云台(可以上下左右运动,不能滚动):

image-20200831160805107

但实际比赛中目标是在不断运动的,如果枪口始终对准敌方装甲板的话,等子弹飞过去,敌人就不再原来的位置了,再加上视觉识别和控制器均存在一定的滞后。因此,面对远距离的目标,是有必要通过一定的算法来估计我们与敌人的相对运动趋势,进而预测敌人在一段时间后的位置,从而在瞄准中加入提前量。

我的思路是这样:根据视觉识别的结果与云台的坐标变换矩阵得到敌方装甲板的相对位置,根据位置的历史信息估计其xyz三个方向的速度与加速度分量,后通过子弹动力学模型计算子弹飞行时间,根据时间和速度与加速度信息估计子弹到达后的装甲板位置,最后将新的位置转换为姿态角输入云台姿态控制环节实现提前瞄准。

这个过程不需要很多高级的理论,但一定的理论基础能带来巨大的便利:计算相对位置需要惯性导航中的方向余弦矩阵、有了矩阵后还需要理解线性变换的概念,了解矩阵是线性变换的一种表示。高中都学过位置、速度与加速度的关系,因此根据位置信息估计速度与加速度其实就是一个提取信号微分的过程。一般方法就是直接两次位置相减然后除间隔时间,但这种方法会放大信号中的高频噪声,导致计算出的速度和加速度与真实值相差甚远。微小的高频噪声(图中难以分辨)经过微分以后会产生显著噪声:

image-20200831190455547

因此我们需要一种可以消除高频噪声的微分方法,经过查阅资料,了解到这么几种方法:

  1. 韩老师提出的TD(微分跟踪器),TD配合过渡过程在ADRC中发挥着重要作用;

  2. 状态观测器,可以假设系统是积分串联的,也就是说将信号本身及其微分作为状态,根据所需要的带宽配置极点即可。

  3. 卡尔曼滤波器,虽然卡尔曼滤波器与龙贝格观测器具有相同的状态方程,但由于卡尔曼滤波器可以考虑到信号的噪声特性,因此很多场合下要优于龙贝格观测器。image-20200831191736353

  4. 最小二乘法,用y=kx+b拟合信号,即为信号微分。其实早在高中数学课上老师就讲过最小二乘法,当时只知道用来作题,没想到还能用在做比赛中。

    image-20200901145223263

最后我决定试一试卡尔曼滤波器和最小二乘法,但是身边没有机器人没法测试啊,这时就可以利用仿真分析来对比验证了。为了避免平台不同造成的差异,这次我并没有用MATLAB,而是直接在F411上搭建仿真环境。

我发现卡尔曼滤波器和最小二乘法的效果相差并不大,因为这两种算法都属于典型的无偏估计。考虑到卡尔曼滤波的设计要同时调整QR两个矩阵的多个参数,而最小二乘法只需要确定样本数量一个参数,最终还是决定用最小二乘法估计目标的速度和加速度。但最小二乘法的缺点也比较明显:算法计算量会随着样本数的增加而增加,因此选择算法也需要考虑计算平台的计算能力。

有了位置、速度和加速度,我们就可以用中学就学过的运动学公式x = x0 + vt + 0.5at²来预测目标位置了。下面是预测0.15s单轴位置提前量的效果,黑色是实际位置紫色是实际提前位置,红色是估计速度和加速度的预测结果,绿色是仅估计速度的预测结果。可以看到估计速度和加速度的效果比只估计速度要好一些:

image-20200831154707440

3.2 串级控制的例子

理论与仿真的故事除了这个还有很多,另比较典型的一个例子是关于串级PID优化。在做云台控制仿真的时候,我对比不同的云台角度控制策略时发现,常用的角度-速度串级PID的抗扰性能很好但带宽很低,简单来说就是反应慢。然后一个大佬跟我讲,可以试试改一改内环的期望,把内环期望从外环输出改成外环输出与外环期望微分的和,下文称之为优化后的串级控制,于是我就搭了下面这个四种控制策略的对比仿真:

image-20200831160221017

这个仿真中控制器的目的是令云台角速度跟随目标角速度(角速度跟踪精确的结果就是角度跟踪必然精确,所以角速度跟踪准与角度跟踪准其实是一件事),四种策略从上往下分别是优化后的串级控制、只对角速度进行闭环、只对角度进行闭环、传统串级控制。并在2s时加入一个持续一秒的扰动,四种策略的角速度(左)与角度(右)跟随结果如下:

image-20200831161037974

可以看到红色的单速度环的跟踪速度在传统方法中是最好的,但抗扰动的能力很差。而绿色的单角度环控制不仅跟踪速度比不上单速度环,连抗扰动能力也是所有算法中最差的。至于紫色的传统的串级控制,这个频率的信号跟都跟不上,抗扰能力再好也是浮云。而我们基本看不到蓝色的优化串级控制的曲线,这是因为优化串级控制的跟踪速度和红色的单速度环几乎一致,是所有算法中最好的,并且在2~3s的扰动中表现的也最好,要知道优化后的串级控制与传统的串级控制可是用的同一套参数。

当时看到这个结果以后很震惊,但没想明白为什么,于是我就推了一下两种算法的闭环传递函数:

image-20200901142916273

image-20200901144816673

image-20200903231137760

image-20200901144905684

发现优化后的串级控制比传统串级控制器多了一个零点,想必就是这个零点提高了系统带宽。于是把结果丢到MATLAB里画了一下两个闭环系统的Bode图,发现这个零点让闭环系统的带宽提高了整整一个数量级,同时显著提升了闭环系统的实时性,可以说是非常成功的系统矫正了:

image-20200831191203233 image-20200831162758738

后来我就想如何从直觉上理解这个改动。单纯的速度闭环有较快的响应速度,但抗扰能力有限。当加入角度外环形成串级控制后客观上提高了闭环系统的抗扰性能,但降低了闭环系统的响应速度。故可以让控制信号中关于速度环的信息直接作为速度环期望的一部分,从而在跟踪目标信号的过程中一定程度隔离外环,仅用内环跟踪目标信号,而当扰动出现时串级控制就会开始发挥其康扰动的特性。从内环期望及其分量的变化可以看到,当扰动到来时,橙红色外环输出产生明显变化,黄色总期望值变小以抑制扰动。从控制效果来看,优化后的串级控制在速度跟随抗扰性能上仅比单速度环有微弱优势,但角度跟随上相比单速度环改善颇多。

image-20200906090750716

对外环来说,目标信号经过变换后与控制器输出共同作用到下一环节,不禁让人想到前馈控制。由于内环速度要明显快于外环,如果将速度闭环近似为1,这样就可以理解为外环的前馈控制了。对于电机位置控制来说,内环到外环就仅仅是一个简单的积分,因此设计前馈控制环节只需要对外环期望进行微分即可。从这个角度来看,这样的思路也可以应用于其他的串级控制系统中,只要内环速度快于外环并且明确内外环控制量之间的关系,就可以设计比较精确的前馈补偿环节。

4 总结

自动化对有明确目标的人是个很不错的专业,尽早明确自己的目标是至关重要的。明确目标后就可以尽快找一些项目锻炼自己的实践能力,平衡车和四轴无人机都是不错的选择。

除了自己搞也可以加入学校的各种本科生实验室,有一群志同道合的同学一起会进步的更快。参加各类比赛也是检验、提升自己的好方法。不过像电赛这样短周期的比赛,更多的是检验自己,而技术上的收获有限。

追求长足的进步,还是应当参加像飞思卡尔智能车、水下机器人大赛、RoboMaster、Robocon这样的长周期比赛。这类比赛的备赛中有足够长的时间钻研,结合课堂所学,把已有的东西做的更好。这样的比赛经历也会是成为本科生涯中难忘的经历。

原文地址:https://www.cnblogs.com/HongxiWong/p/13585316.html