移动小车中的简单PID控制

PID在移动小车中的实现

理论基础

在这里插入图片描述

主要是根据下面的位置式PID离散公式进行控制:通过对当前时刻的比例控制与当前时刻与上一时刻的微分控制进行平滑调整。
在这里插入图片描述

上式中,e(k)、e(k-1)为当前时刻和上一时刻偏差角,u(k)为输出角速度,由于位置式PID在积分项达到饱和时,误差仍然会在积分作用下继续累积,造成积分饱和问题,所以一般使用PD控制

代码实现

以移动小车为例,假设当前帧求出的偏角为delta,上一帧的偏角为delta_last,输出角速度为voltage,那么PD控制可以写为:

float PD(float speed)
{    
     Setdelta=0; 
     delta=Setdelta-Actualdelta;
     voltage=Kp*deltal+Kd*(delta-delta_last); 
     delta_last = delta;
     Actualdelta=voltage*1.0; 
     return Actualdelta; 
}

然后不断调参来优化控制。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言: 开始之前先要说为什么要采用PID的算法来控制小车。玩过小车的DIY爱好者们都会碰到这样一种情况:为什么本该直线行驶的小车走着走着轨迹就会发生偏移,即所谓的“走不直”。 小车走不直的原因有:两个电机本身的驱动特性不可能完全相同,两个电机外形大小不可能是完全一致,组装时精度也会出现差异,另外轮胎在滚动时打滑、遇到细小的障碍物等因素都会造成左右轮的速度出现差异,从而走不直。开环控制是无法消除左右轮的速度误差的,因为上述的扰动是随机的。 要想小车走一条直线,唯有实现闭环控制,当小车受到扰动时能对左右轮及时给予反馈,修正两轮的速度偏差,从而可以走出一条直线。PID算法就是一种闭环控制算法,实现PID算法需得从硬件上实现闭环控制,即存在反馈,所以我采用的是带测速装置的电机。 项目简介: 本项目采用的是PID控制算法来修正小车行走时两轮的速度偏差,实现小车可以走直线。小车是使用一个安卓App来控制小车的行走路径,App通过App Inventor2来进行编写。 完成作品图: 需要用到的材料: 1. Arduino Uno 2. Arduino Uno的扩展板 3. DFRobot L298 双路2A直流电机驱动板 4. HC-05或HC-06的蓝牙模块 5. 坦克小车底盘 6. 两个带霍尔传感器的电机 7. 锂电池 8. 杜邦线若干 软件部分: 1. Arduino IDE 2. App Invent 附件内容截图:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值