「2019」「RM圆桌」第九期 PID控制深透析
![RM圆桌](https://hz-rm-bbs-web-prod.oss-cn-hangzhou.aliyuncs.com/avatar/pre/v1/000009529_avatar_big.jpg)
[attach]22266[/attach]
圆桌时间:2019年3月22日(周五) 19:00-20:00
圆桌嘉宾:@陈健(论坛昵称:@Extreme)
主持人:@快拆小分队
温馨提示:
在直播期间,大家可以直接移步至论坛技术交流版块,直播墙会自动实时更新内容。
本次活动,有一个小时的交流时间,嘉宾会根据大家的提问顺序,依次回答大家的问题,大家在看完底下的文章后,可以积极留言提问!
嘉宾曾在此之前写过
1、卡尔曼滤波器及其在云台控制中的应用 https://zhuanlan.zhihu.com/p/38745950
2、云台传递函数分析和应用 https://bbs.robomaster.com/article/3653
4、数字滤波器设计与实现(含代码) https://bbs.robomaster.com/thread-5727-1-1.html
大家可以了解下。
最后,希望大家可以踊跃提问有关PID控制方面遇到的问题哦!!
=========================================================
1.在从视觉组转到电控组时需要注意些什么方面的知识?
有点宽泛,有机会再回答。
2.如何快速入门PID?
这个问题太宽泛了,短时间无法详细的回复,先说几点吧,首先要对反馈系统有基本的了解,然后自己推导一遍PID的公式,最好能结合频域的知识理解一下。实战的话,最简单的先仿照例程搞一个速度环PID的程序,拿上电机然它动起来,实际改变参数,观察J-Scope曲线的变化,加深理解。
3.PID在调试时要注意什么?
一定要合理使用调试工具,把需要观测的数值打印程曲线出来, 可以用J-Link 的工具J-Scope,或者串口发送出来用上位机观察。例如对于串级PID需要打印出多个环节的给定值和、反馈值。然后调试的时候先调内环,保证内环的响应速度能够基本跟上,再加上外环,同时需要微调内环。一般来说用P、I控制器就够用了。
4.如何根据不同环境整来调整PID增益?
PID的鲁棒性较好,能够适应一定范围的系统模型变化,但是如果负载发生较大变化导致系统模型改变,需要对自适应PID或者其他控制器。具体实战我也没有操作过,但是有几个可以考虑的方向:1. 直接对导致系统模型变化的变量进行观测,例如云台的载弹量,然后针对不同情况调出多组PID参数进行切换。2. 对系统的模型进行在线辨识,然后调节PID参数。3.使用别的带有观测器的控制器。
5.需要什么工具吗?例如示波器之类的。
我们现在接触的基本上都是通过MCU控制,因此使用单片机的调试工具即可,使用虚拟示波器观察曲线。如果是涉及到到无法检测的中间量(例如电压、运动),可以使用示波器或者其他设备(例如激光运动传感器),这个要根据自己的需求来
6. pid调节现在比较正统的方法是matlab建模,但是该如何建立一个出色稳定的数学模型呢?
1对模型进行纯理论分析
2系统辨识
7. pid位置环的真实值与设定值有没有必要加入滤波,防止传感器数据突变呢?
这是两个问题,真实值基本上是来自传感器的观测值,这个需要根据传感器的特性来决定。
输出值滤波需要根据系统的特点来决定使用何种滤波器,一般会用到低通滤波器用来减小高频噪声,或者带通滤波器消除某个频段的震动(例如摩擦轮抖动)
8. 还有大佬对于matlab的小白你有一些建议吗?比如说推荐一些书籍,和重点的学习方向。
这个问题也是很宽泛,简单说下,MATLAB是一个工具,没必要为了学而学。
先快速入门MATLAB的基本语法,然后根据自己需要的方向具体去研究。附上知乎回答:https://www.zhihu.com/question/264214986/answer/281364821
9. 想问大佬关于底盘速度环PID的一些问题,我调底盘3508或者3510的时候,以电调传回来的转速做PID的测量值,调大P的话静止的时候,因为轮子反馈回来有个0-3的转速,用jscope看曲线,输出会振荡,给积分貌似起的作用不大,用微分底盘就会很抖,比例系数P给小了速度误差就会很大,不知道大佬有什么好办法解决这个问题吗?PID用的是普通PID。
1. 加上死区控制,当反馈速度小于某个值的时候不动作
2. 尝试自己用电机反馈的角度值来计算速度
3. 用PI控制器足够了,积分项影响很大的
10. 想问一下关于PID闭环嵌套的问题呢。如果我加了多个环,比如底盘的电机要加速度环、电流环和速度环,改如何进行嵌套呢?
这就是串级PID,嵌套方式从外到内依次是位置环、速度环、加速度环,位置环计算出来需要的速度,此即速度环的目标值,然后速度环再计算出需要的加速度,依次类推很容易理解的。然后关于计算频率,内环的计算频率要大于等于外环。
11. 对于扭矩不大的云台电机来说,自己调的时候稍微比例参数给大点云台会晃得很厉害,给小点劲又很小,请问有没有对此种系统合适的调参方式,或者说这种电机根本不适合吗?
电机的选型是需要根据系统实际负载情况来的,如果选了扭矩偏小的电机是无法达到理想的响应速度的,因为电机扭矩是有上限的,系统的转动惯量和阻力过大,限制了系统的加速度,这是物理规律无法突破的。
12.云台电机pid在调参数的的时候整体效果较硬,但微小角度左右用不上力,感觉微小角度pid起的作用不大,请问有什么注意点或者方法吗?
首先检查下是不是存在机械的空程,用手轻微拨动云台看能否读到响应的反馈值变化
然后再看控制器是否确实有输出值但是机械机构没有相应的动作
还有一个可能是内环速度环没有调好,仔细看速度环是否能够及时的跟上速度给定值
最后尝试把积分项加大,有助于减小误差。
13. 微分作用总是体现不出来,可以详细讲解一下微分的使用方法吗?
微分项是用来增加高频响应,现实生活中的系统都是带有低通效应的,因此微分项作用不是很大。个人调试云台、底盘的经验是只使用PI控制。
14. 在调试yaw轴时因为云台一边装有pitch轴电机,请问有必要在其对应一边加上重量差不多的配重吗,对yaw轴PID参数整定效果影响大吗?
有必要,否则在底盘启动和停止的时候容易发生云台往一个方向偏转。
有影响,会增加云台转动惯量导致响应速度变慢(所以推荐大家搞一搞下供弹)
15. 重心和质量变化比较大的部分的PID参数是否需要增加根据战场实际情况来调整,还是直接给一个中间值就好,还是说回去拿着柴刀去逼机械的朋友改图?
涉及到自适应PID,我没有实践过,上面有提到思路
进行把弹仓做到中间,减小负载变化
16.看曲线的时候一直不知道怎么才算是最好的效果,在双环调试过程中,曲线设定值与真实值响应速度很快而且几乎没有超调,但实际效果还是不理想很软容易撞一下就晃,对于此种情况有什么更好的调参方法吗,对于云台来说有更科学点看图法吗?
好的效果很明显啊,实际值能尽可能的跟踪上目标值。经常是需要在响应速度和超调量之间做出取舍,这个看自己系统的情况来判断。
很容易晃,是不是你在调试的时候没有加上实际负载,如果是PID的参数比较激进,在负载增大的情况下很容易发生震荡,建议用实际工况来调试。
看图就推荐J-Scope,然后吧所有环的给定、反馈值都打印出来,从内到外的调
17. 多个PID控制器同时作用的时候,怎么理论分析相互的制约关系。比如一个轨迹跟控制,设计目标是尽可能贴合一条预先设定的轨迹,中间有三个方向的PID控制器,X_controller,Y_controller,Z_controller(yaw),我可以知道三个PID的响应时间,比如角度Z_conctrller响应10度的平均响应时间是50ms,X方向响应100mm的平均响应时间是200ms,Y_controller直观体现是机器人的切线速度,这个速度大小怎么跟前面两者的响应时间做一个理论结合,然后大致得出Y的理论极限?
没太看懂问题,大概猜了一下是不是想根据系统两个方向的响应速度来估算剩下一个方向的响应速度上限。听上去不太可行,以转动惯量为例,转轴方向和位置都会影响转动惯量,所以估算响应速度不靠谱,但是对于质量分布已知的物体感觉可以分析一下。
18. 怎么才能结合机器人的动力学模型设计控制器?
先理论分析动力学模型,然后结合系统辨识的方法搞一波,对经典控制理论来说,搞出来个传递函数,后面就可以有针对的设计控制器了。
19. 怎样分析控制元件的参数上限然后知道结合机器人设计参数做出合理选型?怎样区分是控制器参数设计问题,还是本身已达到控制元件性能上限?
上面有类似的回答。分析负载的模型,查出电机的输出扭矩范围,可以推算出加速度过程。
以电机来说,简单的测试方法就是直接给电机发送最大控制值,然后观察反馈曲线,可以计算出最大加速度,接着就可以计算出响应速度,看看是否符合自己的需求。
20. 为什么不直接拿位置、速度、加速度分别乘 Kp1、Kp2、Kp3 而要用到PID的D项(位置除以dt)?相较于微分出来的结果与直接从传感器拿到数据会有什么不一样?是传感器数据不够平滑还是?有没有可能使用三个嵌套环然后每个环只调节P?中间会遇到什么问题?
你的意思是位置微分得到速度,速度微分得到加速度,速度积分得到位置,以此类推,所以用一个控制器就完成串级PID的功能?大胆的想法,建议自己试一下
21. 对一个机构来说,PID到底可以适应到什么程度的控制,我能不能理解这几个参数其实是跟机构的动力学模型是挂钩的,那动力学模型的自变量是角加速度、角速度、角度得到力矩,那PID如果使用了这三种自变量是不是就代表控制器的模型是贴近了实际的动力学模型,然后如果控制元件参数达标的话效果已经可以很理想?相应的我应该怎么考虑机器人机构的机械设计,除了了转轴在质心附近?
PID具有一定的鲁棒性,在系统模型不发生很大变化的情况下都可以取得较好的控制效果。
PID控制器从频率来理解其实就是一个带阻滤波器,肯定是贴近了实际的动力学模型才能取得控制效果。
结构的要求简单来说就是牢固稳定,刚度足够大,没有异常的振动模态,然后尽量减小转动惯量,减小负载。
22. 除了PID之外有没有别的控制器比较适合我们制作的机器人机构使用?如果有你们会推荐我们在哪些机构使用哪些控制器?
PID+滤波器足以适用绝大部分机构了。
23. 物体在垂直面上做转动控制(云台Pitch轴),需不需要把重力的分力考虑添加到控制器当中?或者怎么把这个力简化然后设计到控制器当中?或者是可以忽略的?这个可忽略的程度能不能帮忙量化一下?比如云台 -30 度 ~ +30度, 重力的分力:T(degree) = mg*cos(degree)*r , T- motor(最大连续转矩) = 3.0Nm.mg*cos(degree)*r , T- motor(最大连续转矩) = 3.0Nm。
看实际表现情况吧,可以考虑进去,做成简单的自适应PID控制器。
信息量不足,无法帮你量化啊,实在抱歉
24. 对于移动机器人的底盘而言,可以怎样考虑把摩擦力这个变量考虑进控制器当中,而达到物理环境更换之后(从家里到比赛场地)快速调参的目的?而不需要重复之前的调参过程?或者说如果本身控制器设计得好,摩擦作为模型得一个很小变量,是可以忽略的?
理论上来说首先需要能够观测出摩擦力,然后针对系统进行建模,然后可以从传递函数的角度进行设计控制器。但是实际来说,影响应该不会很大,比赛场地也不会让大家的车轮有明显的打滑,这个不用慌。
25. 首先有幸读了大佬《云台传递函数分析和应用》这篇文章,不知道有些问题能不能在这里面提出呢?
一.首先摄像机装在底盘时,观测量为x,y坐标,在这种情况下的速度值是用dx/dt直接得到吗?
二.摄像头转移到云台之后卡尔曼的输入量是不是就转化为了云台pitch yaw要动的角度值?这时我们是不是就要求角速度来对跳变的角度进行抑制了?
三.开源的代码中没有用到B和U,翻了知乎评论当时也有人问这个问题当时大佬的回答是 系统是纯观测的因此没用到B和U,这点我不太明白我的想法是U为加速度矩阵,B为dt的矩阵,用于预测下一刻角度值和角速度值?
1. 是
2. 是
3. B、u是目标实际的运动数据,从观测者角度来说确实是无法获取的,因此在建模的时候没有考
26.想问一下,我用3508电机进行系统辨识,发现3508电机是一个非线性系统,在高频段时的不能很好的反应系统的特性,该如何解决呢?
现实系统基本上都具有低通特性,因此高频段响应较差时很正常的现象。具体截止频率有到多少呢。
增加微分项,提高高频段的输出
27.想请教一下你们做辨识的流程是怎样的?
论坛有详细的帖子啊老铁,操作截图都给出来了https://bbs.robomaster.com/thread-4941-1-1.html。
有具体问题再问。
28.请问做系统辨识的时候出来的传递函数拟合度一直不高是怎么回事,有哪些因素会影响它呢?
从数据采集和模型选择两个角度考虑。传递函数需要选择合适的分子、分母阶数。
拟合度不需要太过要求,我之前做的结果也是只有80%左右,足够看出系统的问题和设计控制器了。
29.想知道pid的模糊化在电机控制中是不是没有太大的用处?
能调好当然有用处,我没研究过相关内容,没办法给出靠谱的建议。
30.对于电机负载变化情况有什么好的方法呢?例如P轴云台装满弹和不装弹的时候。
1. 直接对导致系统模型变化的变量进行观测,例如云台的载弹量,然后针对不同情况调出多组PID参数进行切换。
2. 对系统的模型进行在线辨识,然后调节PID参数。
3. 使用别的带有观测器的控制器。
31.您说根据云台载弹量不同情况下调出多组PID参数,那么怎样能够感知到云台的载弹量呢?
弹仓内加入传感器。
根据补弹量和发弹量计算,从裁判系统可以拿到数据。
32.进行系统辨识,是不是该辨识开环传递函数最好?
从设计控制器的角度来说,确实基本上都是针对开环传递函数来的,例如MATLAB的sisotool就是需要导入开环传递函数。但是其他环节的传递函数也是能分析出一些问题的,例如控制器的实际作用效果等
33.根据电机的转动惯量,额定转矩等电机的参数,而写出的关于电机的系统传递函数,这个方法可行么?
可行啊,这就是理论分析的过程,但是建议结合实际测试数据验证一下。还有从实际使用来说还需要加上负载吧,研究电机空载没什么意义。
34.用系统辨识调节串级PID时,是要先把速度环调好,然后再加上速度环对位置环进行系统辨识吗?
看你要辨识哪个环节咯,系统辨识简单来说就是根据输入值和输出值来推断中间环节的模型,开环、速度环、位置环都是可以去研究的。
35.所有电机的pid计算及运行频率多少比较好?
理论上来说越快越好,现在的单片机运算性能都不是瓶颈了,但是从实际物理系统来说,响应速度和反馈速度都是有限的,因此建议按照电机实际特性来。RM推出的多款电机反馈频率都是1kHz,因此1kHz的计算频率就是最佳值。
36.双环pid如果内外环频率一样大会有什么影响吗?
没影响啊,我就是这么用的
37.我想问一下如何做到在系统偏差较小的时候仍然能有较大的输出并且还可以不超调的那种?
要看结构的,有的好调有的不好调,不能强求哦。
具体来说,可以考虑对PID控制器进行一些修改,自己增加判断条件。
38.你好,我想问一下底盘四个电机反馈值用了滤波会更好吗?
看你用什么什么类型的滤波器了,在不发生较大延迟的情况下,低通一下会让电机运行的更加平滑。
39.pitch轴需要配重吗?让机械重心在轴上。
不建议刻意配重,配置只是能减小云台输出扭矩,但是转动惯量是绝对被增加了,因此会降低云台响应速度。从减小云台质量和转动惯量的角度更加有效。
40.请问在gyro mode下控制底盘跟随云台的PID应该怎么实现啊?感觉没有思路。感觉yaw轴电机在转,然后底盘也在旋转,这样怎么通过IMU维持云台稳定呢?
首先要保证IMU能够准确的获取云台相对地面的绝对角度,然后PID控制器的目标值和反馈值都是云台的绝对角度,不需要关心底盘的旋转,经过实践证明是可以控稳的,建议自己去试一下。
41.传递函数能不能通过RM的电机参数直接推导出来?
我记得RM电机说明书里面的只有母线电流和扭矩的关系图,而实际发送给电机的控制量是相电流或者转矩电压,因此是有差距的。另外电机自身的特性基本上是线性的,没有太大单独分析的价值,要带上负载才有意义。
42.拨弹电机在拨动拨盘转动时,总会存在偏差,这样存在的问题在待发射口很容易存弹,再就是单发时有时会导致发出去两颗弹丸的问题,大佬有好的建议吗?感觉只靠pid不能很好解决这个问题。
建议调试看一下是否电机转到指定位置了?还是因为机械结构存在松动导致电机转到指定位置但是拨轮没有到位。PID位置环速度环调好了是可以很好的搞定的。
43.对于3508,系统辨识时采用什么的频率分布比较合适?
这个我没跑过,猜测截止频率会比6623电机高,建议先从低频一直跑到1kHz,前提是你的传感器和采集方法能支持到,然后看下截止频率大概在什么范围,再确定辨识的频段。
44.使用adrc控制器的时候参数较多,请问一下如何快速整定这些参数呢?
这个我们也在研究,之后有研究结果再考虑给大家开源。
请问这篇文章对你有用吗?
「2019」「RM圆桌」第九期 PID控制深透析