找回密码
 马上注册

QQ登录

只需一步,快速开始

楼主: 糖伯虎

用于乐高机器人的PID控制器

   火... [复制链接]
 楼主| 发表于 2011-8-28 12:53:50 | 显示全部楼层
改变Kp, Ki, Kd的值对机器人运行情况的影响

在优化PID的过程中,上面说明的方法和表格是一个好的开始。有时,了解一下增加(或降低)三个K值中的一个会有怎样的结果,也是非常有帮助的。下表在很多网页上都能找到,这个版本来源于wiki——PID控制器的网页。

增加参数值的影响
Parameter
  
参数
Rise  time
  
响应时间
Overshoot
  
超调
Settling  time
  
稳定时间
Error  at
  equilibrium
  
静态误差
Kp
减少
增加
变化小
减少
Ki
减少
增加
增加
消除
Kd
不确定(小的增加或减小)
减少
减少

“响应时间”是指机器人确定误差的时间,在我们的例子中,是指机器人在离线以后,需要多少时间能回到线的边缘。响应时间主要由Kp控制。Kp值变大,机器人返回线的速度变快,响应时间就减少。Kp过大,会造成机器人超调。

“超调”是指机器人在响应误差时,会越过线的边缘多远。例如,如果超调较小,当机器人想回到线的左边时,就不会摆动到线的右边去。如果超调较大,机器人在纠正误差时,就会摆动过大,超过线的边缘。超调受 Kd影响最大,但 KiKp对它的影响也颇强。通常情况下,纠正很大的超调,你需要增大Kd值。还记得我们第一个非常简单的巡线机器人吗,除了左转和右转,它不会做任何事,这个巡线机器人就会产生非常大的超调现象。

“稳定时间”是指机器人在发生一个大的变化时,需要多长时间才能稳定下来。在我们巡线的例子中,机器人遇到一个转弯就会发生较大的变化。当机器人对曲线做出响应,它会纠正误差,并产生一些超调,然后机器人会以另一个方向的超调来纠正当前的超调,然后再纠正这个超调......你明白了吧。当机器人对误差进行响应时,它会围绕期望位置进行摆动。“稳定时间”就是这个摆动被抑制到0的时间。KiKd都对稳定时间有很强的影响,Ki越大,稳定时间越长;Kd越大,稳定时间越短。

“静态误差”是指系统在不受干扰的情况下运行所保持的误差。对于我们的巡线机器人来说,当机器人走了很长一段直线后,这个误差会被抵消掉。P控制器和PD控制器经常会被这种误差搞垮。增加Kp 值会降低它的影响,但会加大机器人的摆动。P控制器和PD控制器在平衡状态下会有一个恒定的误差,因此经常会在其中增加I控制,和加大Ki的值。(这是假定,当机器人巡线时,你更关注小的系统误差。这就意味着,机器人会稍微向一边或另一边偏移)
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2011-8-28 13:01:34 | 显示全部楼层
运行情况怎样?

这里有一个乐高NXT机器人在巡线测试纸上用PID方法巡线的视频,视频效果不是很好。

光电传感器距离巡线测试纸的高度大约为1/2英寸,Tp (功率目标值)设置为70%。机器人的平均速度为每秒钟8英寸。机器人沿着椭圆型黑线的内侧,采用左手法则巡线,沿着内侧巡线要比沿着外侧巡线稍微难一点。
PID_LF_frame_479.jpg




在整个过程中,巡线机器人似乎表现相当不错。如果你仔细观看视频,就会发现,机器人在离开转弯的地方有一点“摇尾巴”。那是PID有一点振荡。当机器人向镜头方向运行时,你可以看到机器人光电传感器的LED在场地垫上照射出的红点,看上去在追踪线的边缘方面,做的非常好。

基本PID控制器可以适用于不同的控制难题(当然也可以用P控制器或者PI控制器代替PID控制器),你无需提出一个新的“误差”定义,但是针对特定的任务,要重新调整PID。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

 楼主| 发表于 2011-8-28 13:07:41 | 显示全部楼层
那么,程序代码在哪儿?

因为这篇文章是为年龄较大的FLL参赛孩子写的,我真的不想给出我的程序代码。他们都可以自己写出来。

在程序代码中,你所需要的只是PID本身。你可以增加一些设置代码,和一个适宜的停止巡线循环的方法。

作为一个小小的帮助,这里有一个MyBlock模块,控制两个马达,有两个输入—— Tp (目标马达功率) 和Turn转向)值。这个MyBlock可以处理负的马达功率。当一个马达反转时,会发出滴滴声,马达反转会使转向更容易。一个调整合适的PID是不会出现马达反转情况的。



PID_LF_MotorControld.png
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2011-8-28 13:09:26 | 显示全部楼层
关于PID的一些认识

  • 当误差超出比例范围时,导数会变成0.
  • 导数对噪声很敏感。
  • 误差精度高时,导数的作用就好。对于我们的巡线机器人来说,这个误差是在+5到-5之间的整数。这是相当低的精度。也许可以使用马达轴速率的导数来替代?

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

发表于 2011-8-28 18:19:21 | 显示全部楼层
写的很详细,相信对初学者有帮助,楼主可以出书了。如果有出了,一定会捧场。{:soso_e112:}
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-8-28 20:24:33 | 显示全部楼层
非常好的一个教材!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-8-28 22:22:37 | 显示全部楼层
支持出书。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2011-8-29 00:17:40 | 显示全部楼层
出不出书是其次的,只是希望真对这个有兴趣的朋友要仔细看文章,那也不枉费我们翻译这篇文章了。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 3 0

使用道具 举报

发表于 2011-8-29 20:39:29 | 显示全部楼层
终于看到pid算法的详细介绍了
第一次看到走线就在猜怎么写程序了
今天算是真相大白了{:soso_e100:}
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-1 12:34:57 | 显示全部楼层
今天花了不少时间,把pid的概念弄清楚了。争取这个周末,能验证一下。

周末还有好多事情啊。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-20 11:09:15 | 显示全部楼层
好棒的文章!浅显易懂而又十分详细,除了讲解PID的知识外,还有一些非常实用的小技巧!特别是对于不支持小数的控制器的处理方式非常巧妙,虽然可能已经用不到了,但是这种思路却会渗透到各个地方,谢谢楼主的辛苦翻译!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-21 19:07:19 | 显示全部楼层
是啊,对于将来要学PID的人来说,阅读这篇文章可以做一个非常好的铺垫。楼主辛苦。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-23 08:05:15 | 显示全部楼层
巨牛的帖子,我工作中常用PID实现恒压。LEGO中还真没想过。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-23 09:09:45 | 显示全部楼层
糖大是个好人呀,我读英文n遍都读不下去了,谢谢了。先下载下来然后好好研究,有了收获再来交流。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-23 10:01:51 | 显示全部楼层
1.gif 这张图片上的“转左”和“转右”应该标示错误了吧,根据左手法则,应该标反了。请斑竹验证。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-3-28 20:15 , Processed in 0.096078 second(s), 20 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表