找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 57787|回复: 62

基于NXT-G的PID巡线程序分享(修改于2013年4月19日)

   火.. [复制链接]
发表于 2011-10-23 19:54:39 | 显示全部楼层 |阅读模式
PID控制器是一种常用的控制技术,常用于多种机械装置(如车辆、机器人、火箭)中。用数学方式来描述PID控制器是非常复杂的。本文描述了如何在使用NXT-G编程的LEGO机器人上创建PID控制器。

文中将以实例来说明如何创建PID来完成机器人巡线任务。PID创建完成后,经过简单的修改就可以应用到其他地方,如,让机器人跑直线,做两轮平衡机器人。

之前论坛给大家翻译了一篇国外PID程序设计的教程《用于乐高机器人的PID控制器》,得到了大家的肯定,我们的劳动对大家有所帮助,我们也很是开心。

今天我给大家分享一下基于nxtg下的pid程序,也给简略说明下修改方法,希望对大家继续有用。

初始化变量.jpg
程序用到了几个变量,这里简单做下初始化,Kp、Ki和Kd的公式见下:
Kp = 0.6Kc
Ki = 2Kp * dT / Pc
Kd = Kp * Pc / (8 * dT)
上公式中,Kc为临界Kp,详细解释请看《用于乐高机器人的PID控制器》,我自己的模型取值为5。

dT为循环时间,取值为粗略值,取值方式是做给PID算法做一个10000次的循环,计算循环所需时间T,dT = T / 10000。如下图,
初始化定时器.jpg
初始化定时器,给定时器清零
读取定时器值.jpg
循环10000次后,显示定时器所需时间到屏幕,定时器计数单位为毫秒,我所计算得的dT为0.004秒

Pc为摆动时间,既没有加入I和D的普通巡线算法,左右摇摆的周期时间。估算为0.8秒

设置自适应黑线阈值.jpg
最后这部分需要解释一下的是本程序的自适应场地适应黑线阈值的算法,简单的说,就是读取当前场地的黑线和背景白色的值,然后做平均值作为阈值,这个算法是简单又好用的,希望大家掌握。

其他的算法,我就不切图了,主要是积分和差分是算法,能看懂的,我不需要解释,看不懂的,我解释也没用,直接套用吧。
下面发程序,此程序已经在今年WRO上验证过,效果不俗,如果大家不会调整,并且要求不是极高的话,可以直接套用了。个人感觉,就巡线来说,对PID的参数要求不是高,还是比较容易调整的。
由于我没有拍摄视频,无法展示效果,引用一下baby_snake所拍的视频,效果差不多。

此视频引用于:8547的PID巡线小车,和大家分享

PS:
  • 如果想学习PID的话,请先阅读《用于乐高机器人的PID控制器》。
  • 该demo程序,为了演示调试过程,有部分模块没有删除,需要的请自行修改。
  • 该demo程序,为了演示调试过程,循环部分为计数模式,为10000次,如不修改的话,可能巡线进行到一小段就会停止,请自行修改。







PID.zip

829.58 KB, 下载次数: 6801

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2012-2-29 22:40:18 | 显示全部楼层
先收藏,再研究!!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

发表于 2011-10-23 20:10:12 | 显示全部楼层
嗯,收藏了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-10-24 10:14:41 | 显示全部楼层
收藏。等稍微空闲时在琢磨研究。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-10-24 10:35:39 | 显示全部楼层
多谢糖,巡线学习过程中,有很多乐趣!!!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-10-24 19:31:04 | 显示全部楼层
太感谢了,请问pid单光感巡线快还是普通的三光感巡线快?
稳定性呢?
新手求教
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2011-10-25 10:37:41 | 显示全部楼层
hooray 发表于 2011-10-24 19:31
太感谢了,请问pid单光感巡线快还是普通的三光感巡线快?
稳定性呢?
新手求教

自己做下对比,比我告诉你强。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-10-25 16:39:37 | 显示全部楼层
我正在写nxt-g中的p算法,没想到有人抢先了。{:soso_e100:}
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-10-25 17:22:29 | 显示全部楼层
PID是什么东东
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-10-26 10:50:29 | 显示全部楼层
我也不明白,什么东西啊?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-11-2 14:20:21 | 显示全部楼层
看了一下,翻译的稿子,基本还是能明白一些基本原理,但是对于其中的一些细节需要详细学习一下,空了好好学学,
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-11-9 21:20:11 | 显示全部楼层
程序能看懂,但是Kp = 0.6Kc
Ki = 2Kp * dT / Pc
Kd = Kp * Pc / (8 * dT)
dT为0.004秒

Pc为摆动时间,既没有加入I和D的普通巡线算法,左右摇摆的周期时间。估算为0.8秒
都不明白
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-11-11 10:23:16 | 显示全部楼层
谢谢
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-12-22 15:44:37 | 显示全部楼层
先留脚印,回家慢慢研究
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-12-31 09:37:57 | 显示全部楼层
似懂非懂!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-1-18 18:49:16 | 显示全部楼层
直接套用已经成功,现在是想弄懂公式
Kp = 0.6Kc
Ki = 2Kp * dT / Pc
Kd = Kp * Pc / (8 * dT)
从何而来?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 00:20 , Processed in 0.120024 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

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