装好小车后,最重要的部分就是PID算法了。
推荐一个讲PID算法的博文:点击打开链接
以及PID参数的调试步骤:点击打开链接
还有Arduino PID Library的官网:点击打开链接
目前我只实现了站立的功能,蓝牙遥控还没加上去,等春节后了吧。
代码中使用了两套PID参数进行控制,Kp,Ki,Kd是控制平衡速度的。也就是小车往前倾,加速;后倾,减速这个过程。
但是仅靠一个PID控制会出现一个问题:
因为小车的平衡角度Setpoint是手动设定的,所以会有一个微小的误差。当小车以Setpoint为基准进行调整时,可能有一个细微的倾斜,从而导致小车一直向一边跑。
于是引入另一套速度的PID参数:Sp,Si,Sd。 Inputs 为一个变量speedcount,每次中断检查车轮的转向,正向+1,反向-1。这样,当小车持续向一个方向移动时,speedcount会越来越大,从而产生的Outputs也更大。于是对车轮加一个反向的电压,使小车尽量停在原地。
实现的时候,把Outputs的作用加到第一套PID的目标平衡角度Setpoint上,就可以实现效果。
现在小车基本可以站立在一个小范围内了。
代码
<