找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 15602|回复: 19

双引号PID大讲堂(1)——P(整理自论坛QQ群)

[复制链接]
发表于 2012-7-15 19:28:41 | 显示全部楼层 |阅读模式
双引号PID大讲堂(1)——P

(本文内容为论坛qq群成员 上海-“”  对PID的讲解 ,同时感谢qq群成员  梧州-我是谁?  整理)
我先说p吧。
在说p之前我们先约定一些东西:(如图1)图1中的黑线是黑,黄的大方块是机器,红的椭圆是光感。我们约定在线的右边走。
图1.png     图2.png
                       图1                                                            图2


    为了方便,    我们假设黑色40,白色60。按照传统的算法就是:去中间值也就是50;如果大于50就是白色向左,小于50就是黑色向右。这个大家都知道。
    那50我们就可以认为光感在黑线和白线的交界处,也就是这个状态:(如图2)现在我们可以这样认为:越大于50就是越在黑线内,越小于50就越在白线内 ,和50差的越多就是偏差越大 ,所以要更快的会到黑线。因此转弯就要更加大,所以左右2个电机的差也就要越大。
这个就是p的含义
但是p没有完全结束,还有构建函数。
   首先思考如果机器人正好看到的是50,那么也就是笔直向前。也就是左轮和右轮的差就是0。刚刚说了越是偏离中间数值,那么越是要扭回来,也就是左右两轮的差就要越大。根据这个我们可以构建这样的关系:和中间值的差越大,两个轮子的差越大。让一个轮子加上这个数值,让一个轮子减去这个数值,这正好符合我们这样的关系:差越大,一个轮子加的越大,另一个轮子减得越大,正好两个轮子的差越大,也正好符合我们的要求。
但是光感的差变化很小:即使到完全白色(60)也只有10的差,那么一个轮子加10,另一个减10,两轮差20。这样的话机器还是几乎跑直线的。 如果差1那么几乎就没有效果了。因为我们要放大这样的变化——要让差1也有教明显的变化,所以我们可以用让这个差乘以一个比较大的数,这样差就大了
   在这个过程中,一般读取的时间越短越好。至于读取间隔这个还与其他的有关(id
   通过刚刚的分析
我们可以设定一个速度比如v,现在我们计算差:读取光值,然后计算差,接着用这个差去乘以数(放大这个扭动)。一个轮子=初速度+刚刚计算的结果;另一个轮子=初速度-刚刚计算的结果,以此循环就可以
   如果在白色往右走,黑色往左走(或者走着走着走到左边了),就是方向反了。把一个轮子=初速度+刚刚计算的结果;另一个轮子=初速度-刚刚计算的结果(+/-号互换就可以了)
   系数这个要调整的。建议大家从小开始调。在做pid的时候,不用一步到位把pid都写好一起调。先把p写好调整好再慢慢加id。因为这样能理解每一部分是什么作用的
   最后给大家一段伪码,这样大家可以根据这个写代码,感觉这个写就能写出p程序了。因为我不用nxt-g的,所以nxt-g的很多细节要靠你们自己处理了
设定v=某个数值
设定比较值=某个数(黑白中间值)
循环开始:
读取光感
=光感-比较值
左轮=v+*某个系数
右轮=v-*某个系数
可能最后2个算式的+/-号要交换
这里要提前测量
也可以在运行pid之前直接机器测试:转一圈测最大值、最小值。然后算中间值,就可以了让光感经过黑线和白线。这个就是比较最小值、最大值的算法
   首先把光感记录在2个变量里比如min    max。如果有数小于min替换,同样大于max替换

理解算法就可以了

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2012-7-25 23:44:23 | 显示全部楼层

D 讲解

本帖最后由 “” 于 2012-8-2 23:32 编辑

双引号PID大讲堂——D
今天我们讲的是d
微分
为什么我不说i
而说d
因为微分使用起来更加直接
i——积分也会因为要分析很多问题不容易说
所以先以d做讲解。
我们就用走线中遇到的问题来分析
我们回忆一下上节课约定的数值
白:60
黑:40
中间值:50
1.JPG
现在光感几乎在黑白之间
但是有点偏向白色。
现在我们假设是52

对于52的是数值我们一定会想到往左转 没有错
但是对52的数值最佳的处理方式是不一样的
如果机器在从黑色到白的的情况下
也就是说机器在向白色运动的时候需要更大的力向黑色靠拢
相反,在从白色到黑色的情况下
机器应该稍微有点刹车
以至于不能让机器最终的位置太小于50
否则又会有很大的摆动向白色
也就是说虽然光感都是52但是处理的方式是不一样

那么什么是微分呢? 简单的说在数学概念中就是本次结果和上次结果的差。

我们分析一下现在的情况
那么如果上次的光值是53
现在52
那么就是从5352
对比一下
5352
所以知道前面更加亮
也就是说从白到黑这样的过程

相反如果上一次 的光值是51
是从5152
是不是就是从黑到白了呢
因此我们就要记录上一次的光值

像这样在极短的时间内计算本次和上次的光值的差这个就是微分。

通过光值的对比能得到这个微分的数值
除了这个方法外
我们还有其他的方法得到
那就是p 中所说的误差。


我们回忆一下上节课说的误差
中间值是50 现在的数值是52
那么误差就是252-50
现在数值是48
那么误差就是-248-50


除了我们对比光的数值以外还可以通过对比这个差值来判断  
看分析
上次是53
那么误差就是3
本次52
本次误差就是2
那么现在就是光值的改变就是52-53=-1减少了1
从误差来看:就是2-3=-1减少了1

如果上次是51
那么误差是1
本次52
误差就是2
那么现在光值的改变就是从52-51=1
就是增加1
从误差来看就是2-1=1
也可以这样直接通过误差来计算出微分


现在看看效果
把微分的结果乘以一个系数看看结果会发生怎么样的变化呢?
上次是53
那么误差就是3
本次52
本次误差就是2
那么现在就是光值的改变就是52-53=-1减少了1
从误差来看:就是2-3=-1减少了1
比如这个系数是5那么结果就是-5
如果加到两轮之间的速度差里面正好使2轮的速度差减少了
这样的结果就是机器在摆动回来的过程中2轮速度差减少了
也就是更接近一条直线
摆动少了那么机器就不容易又进入黑线

我们再来看看从5152的过程
如果上次是51
那么误差是1
本次52
误差就是2
那么现在光值的改变就是从52-51=1
就是增加1
从误差来看就是2-1=1
乘以系数5,就变成了5
现在加到2轮的速度差之后,速度差更大了
这样摆动更大了
也就更加容易回到中间值的位置了


通过分析上面的情况
可见微分能起到
当机器运动方向靠近中间值时2轮的力量差就是变小
当机器运动方向远离中间值时2轮的力量差就是变大


好了我们现在看程序应该如何写
设定v(速度)=某个数值
设定比较值=某个数(黑白中间值)
循环开始:  
读取光感
保存上一次的差
=光感-比较值
微分=本次的误差-上次的误差
左轮=v+(*某个系数+微分*某个系数)
右轮=v-(差*某个系数+微分*某个系数)
循环结束


  (*某个系数 +微分*某个系数) 这个就是使得2轮产生速度差的关键
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

发表于 2012-7-15 19:32:19 | 显示全部楼层
请问论坛群号是多少???
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-7-15 19:36:43 | 显示全部楼层
汽车之友 发表于 2012-7-15 19:32
请问论坛群号是多少???

看我个性签名,加群请先阅读《群成员需知》
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-7-16 06:26:25 | 显示全部楼层
对PID越来越清晰了,谢谢各位大神~!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

头像被屏蔽
发表于 2012-7-16 10:34:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-7-21 16:47:03 | 显示全部楼层
我还是不太懂啊,请问两个电机的速度差怎么控制呢?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-7-25 23:43:33 | 显示全部楼层
pokemonjs 发表于 2012-7-21 16:47
我还是不太懂啊,请问两个电机的速度差怎么控制呢?

速度差是这样处理的:
首先先确定直线的速度:比如60
根据光感的差(就是p)乘以系数后
这个数值就是让机器左右电机不一样转动的数值。
一个电机减去它
一个电机加上它
就形成速度差了
使机器扭向正确的方向了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-7-25 23:44:57 | 显示全部楼层
讲解i占位~~~
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-7-26 11:26:16 | 显示全部楼层
\\\"\\\" 发表于 2012-7-25 23:43
速度差是这样处理的:
首先先确定直线的速度:比如60
根据光感的差(就是p)乘以系数后

哦,O(∩_∩)O谢谢了!!!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-8-2 23:36:39 | 显示全部楼层
{:soso_e179:}
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-8-2 23:51:25 来自手机 | 显示全部楼层
又学习了,受益匪浅啊。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-8-3 09:41:28 | 显示全部楼层
f非常感谢,有心人。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-8-3 16:21:35 | 显示全部楼层
“” 发表于 2012-7-25 23:44
讲解i占位~~~

双引号大讲堂求扩散!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-8-5 15:26:44 | 显示全部楼层
“如果有数小于min替换,同样大于max替换”是什么意思?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 21:27 , Processed in 0.103563 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

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