巡线小车pid算法的实现?真正用的实践中的
我们的小车提速行驶时就会很不稳定,目前想运用pid算法,但是看得pid都只是原理,真正在实践中如何运用?第一次做巡线小车,还有很多的不懂,大侠们给点建议吧,非常感谢! 用不着,把参数调好就没问题 1楼能说清楚点吗,参数是指哪些啊 不懂。。 贴一个我这两天写的离散PID模块吧,已经成功的用于舵机控制。PID是最简单的控制,无法掌握规律的时候用不错。这个是在ucos里用的,如果裸机跑的话,把FP32换成float。
水平有限,望过路的同学指正。
PID的运作原理是每个控制周期,获取反馈模块提供的当前值,与上级模块提供的目标值进行比较,得到误差值,同时移位更新误差历史。然后output = A*e0 - B*e1 + C*e2就能得到控制输出值。这个控制输出值在不同的上下文中有不同的含义,如果是控制电机,这个控制值可以是转速。
简单的例子就是利用三个位置误差历史,通过运算得到电机的转速,以实现准确定位。
具体的解释这里有一篇论文。
点击此处下载 ourdev_613203OBSZGV.pdf(文件大小:1.30M) (原文件名:基于增量式PID控制实现高精度跟踪机构设计研究.pdf)
头文件:
#ifndef DISCRETE_PID_H_
#define DISCRETE_PID_H_
#include "includes.h"
/*Data Structure*/
typedef struct pid_parameterpack
{
FP32 fKp;
FP32 fKi;
FP32 fKd;
}PID_PP;
typedef struct pid_runtimepack
{
FP32 fA;
FP32 fB;
FP32 fC;
FP32 fError;
}PID_RP;
typedef struct pid_module
{
PID_PP cPP;
PID_RP cRP;
}PID_MODULE;
void PID_Reset(PID_MODULE *pPID,FP32 fTargetVal, FP32 fCurrentVal);
FP32 PID_CalculateControlOutput(PID_MODULE *pPID,FP32 fTargetVal, FP32 fCurrentVal);
#endif /* DISCRETE_PID_H_ */
源文件:
void PID_Reset(PID_MODULE *pPID,FP32 fTargetVal, FP32 fCurrentVal)
{
//calculate factors
pPID->cRP.fA = pPID->cPP.fKp + pPID->cPP.fKi +pPID->cPP.fKd;
pPID->cRP.fB = pPID->cPP.fKp + 2*pPID->cPP.fKd;
pPID->cRP.fC = pPID->cPP.fKd;
//set 3 errors to current error
pPID->cRP.fError = fCurrentVal - fTargetVal;
pPID->cRP.fError = pPID->cRP.fError;
pPID->cRP.fError = pPID->cRP.fError;
}
FP32 PID_CalculateControlOutput(PID_MODULE *pPID,FP32 fTargetVal, FP32 fCurrentVal)
{
FP32 fPIDVal;
//update errors 0->1->2
pPID->cRP.fError = pPID->cRP.fError;
pPID->cRP.fError = pPID->cRP.fError;
pPID->cRP.fError = fCurrentVal - fTargetVal;
//calculate pid value
fPIDVal = pPID->cRP.fError * pPID->cRP.fA
- pPID->cRP.fError * pPID->cRP.fB
+ pPID->cRP.fError * pPID->cRP.fC;
return (fPIDVal);
} MARK。。。。。。。。
一定要顶楼上的。。。。
之前做过小车。。。没用PID车子跑得乱七八糟。。。 翻翻别人的论文吧。智能车论坛上有好多。 手机mark 我顶一个 very good !
但是, 没用 PID 真的就不行吗? 我很怀疑. 顶一下了 没用pid的也不会的飘过 syuanwang 发表于 2011-1-24 21:22 static/image/common/back.gif
贴一个我这两天写的离散PID模块吧,已经成功的用于舵机控制。PID是最简单的控制,无法掌握规律的时候用不错 ...
学习下! 好东西 学习下 hclin 发表于 2012-11-16 12:24
very good !
但是, 没用 PID 真的就不行吗? 我很怀疑.
没用PID也可以!算法什么的都是用来解决问题的。只是算法比我们自己的更加精炼,毕竟是好多人好多年搞的,验证的东西 先占个楼,再仔细看看
页:
[1]