ROS小车地盘4 PID算法
来源:互联网 发布:在线查询域名被墙 编辑:程序博客网 时间:2024/06/05 05:00
PID算法:
不需要对PID的源码做改动就可以直接用。需要指出的是,它的左右轮的PID用的是同一套Kp,Kd,Ki,Ko, 如果你的两个电机特性差异比较大,就要对这块做下优化。
代码如下:
typedef struct { double TargetTicksPerFrame; // target speed in ticks per frame:每帧的目标速度 long Encoder; // encoder count:编码器计数 long PrevEnc; // last encoder count:最后一组计数 int PrevInput; // last input:最后的输入 int ITerm; //integrated term:差分项 long output; // last motor setting:最后一个电机设置}//定义一个结构体SetPointInfo;SetPointInfo leftPID, rightPID;int Kp = 20;int Kd = 12;int Ki = 0;int Ko = 50;unsigned char moving = 0; // is the base in motion?电机运动的基准?void resetPID(){ leftPID.TargetTicksPerFrame = 0.0; leftPID.Encoder = readEncoder(LEFT); leftPID.PrevEnc = leftPID.Encoder; leftPID.output = 0; leftPID.PrevInput = 0; leftPID.ITerm = 0; rightPID.TargetTicksPerFrame = 0.0; rightPID.Encoder = readEncoder(RIGHT); rightPID.PrevEnc = rightPID.Encoder; rightPID.output = 0; rightPID.PrevInput = 0; rightPID.ITerm = 0;}void doPID(SetPointInfo * p) { long Perror; long output; int input; input = p->Encoder - p->PrevEnc; Perror = p->TargetTicksPerFrame - input; output = (Kp * Perror - Kd * (input - p->PrevInput) + p->ITerm) / Ko; p->PrevEnc = p->Encoder; output += p->output; if (output >= MAX_PWM) output = MAX_PWM; else if (output <= -MAX_PWM) output = -MAX_PWM; else p->ITerm += Ki * Perror; p->output = output; p->PrevInput = input;}void updatePID() { leftPID.Encoder = readEncoder(LEFT); rightPID.Encoder = readEncoder(RIGHT); if (!moving){ if (leftPID.PrevInput != 0 || rightPID.PrevInput != 0) resetPID(); return; } doPID(&rightPID); doPID(&leftPID); setMotorSpeeds(leftPID.output, rightPID.output);}long readPidIn(int i) { long pidin=0; if (i == LEFT){ pidin = leftPID.PrevInput; }else { pidin = rightPID.PrevInput; } return pidin;}long readPidOut(int i) { long pidout=0; if (i == LEFT){ pidout = leftPID.output; }else { pidout = rightPID.output; } return pidout;}
阅读全文
0 0
- ROS小车地盘4 PID算法
- ROS小车地盘
- ROS小车地盘2
- 小车PID算法跑直线
- ROS机器人小车素材
- ROS RVIZ小车模型
- 基于ROS平台的移动机器人-4-通过ROS利用键盘控制小车移动
- ros小车调试笔记1
- ros小车调试经验2
- PID控制的通俗理解--小车控制
- PID控制的通俗理解--小车控制
- 巡线小车源程序(MSP430,PID)
- 巡线小车源程序(MSP430,PID)
- PID控制小车视觉跟踪移动目标
- ROS导航小车无故倒退问题分析
- ROS仿真小车python键盘控制测试
- ros 两轮小车运动模型
- ROS小车底盘3-电机控制
- EasyUI笔记总结
- 【小白的CFD之旅】09 初识FLUENT
- 图的连通性问题
- Python 练习实例9
- Nginx简介
- ROS小车地盘4 PID算法
- 基于深度学习的雷达目标检测识别——写在毕业前
- 【Faster rcnn】【input-data】【layer.py解析】固定输入尺寸
- 20171115
- Go语言学习笔记之基本数据类型
- HASH碰撞
- leetcode 75. Sort Colors
- Python 练习实例10
- GetNumberFormat详解