本课主要讲解如何PID参数,角度环,速度环和旋转环。
内容
控制原理
安装和添加
调试指南
总结
控制原理
维持小车直立、运行的动力都来自于小车的两个车轮。车轮转动由两个直流电机驱动。因此从控制的角度来看,小车作为一个控制对象,它的控制输入量是两个电机的转动速度。
小车运动控制任务可以分解成以下三个基本控制任务:
- 1.控制小车平衡:通过控制两个电机正反向运动保持小车直立平衡状态;
- 2.控制小车速度:通过调节小车的位置偏差来实现小车速度控制,实际上最后还是演变成通过控制电机的转速来实现车轮速度的控制;
- 3.控制小车方向:通过控制两个电机之间的转动差速实现小车转向控制。
安装下载代码和库文件
下载arduino地址-https://www.arduino.cc/en/Main/Software,打开arduino IED,下载balance car code,打开代码文件夹osoyoo_abc。

下载库文件—balance libraries, 添加库文件 。
第一种方法:直接在点击项目—>加载库—>添加一个.ZIP,选择你库文件的路径进行添加。检查你的库文件是否添加成功,点击文件—>示例,就可以查看你的库文件了。

第二方法:直接解压balance libraries文件,直接把目录下的文件直接复制粘贴在arduino安装路径下的libary目录下。

调试指南
小车的平衡、速度和方向的控制分别用到了角度环、速度环和方向环。我们需要先调试角度环、再调速度环、最后调方向环。调试PID参数是一个漫长的过程,各个环相互之间存在一定程度的影响,因此需要耐心调试找出一组最优参数。
1. 角度环参数
平衡小车角度环使用了PD(比例微分)控制器,在调试中,我们需要调整Kp和Kd的值,使小车有良好的调节速度和稳定状态。角度环的计算用到的参数是小车的倾角度数。Kp是小车倾角的系数;Kd是对角度微分得到角速度的系数,用于减弱比例调节所产生的过调。调试顺序按照先P(比例)后D(微分)。
- (1)确定Kp值的大小
- 确定参数的原则是:Kp一直增加,直到出现大幅度的低频抖动。
- 例:设定Kp=10,这个时候我们可以看到,小车虽然有平衡的趋势,但还是会较快向一边倾倒,显然响应太慢了。
- 设定Kp=20,这个时候我们可以看到,小车有平衡的趋势,而且响应有所加快,但是响应还是不足以让小车保持平衡。
- 设定Kp=40,这个时候我们可以看到,小车的响应明显加快,而且来回推动小车的时候,会有大幅度的低频抖动。说明这个时候Kp值已经足够大了,需要增加微分控制削弱Kp控制,抑制低频抖动。
(2)确定Kd值的大小
- 确定参数的原则是:Kp一直增加,直到出现高频抖动。
- 例:设定Kd=0.3,这个时候我们可以看到,大幅度的低频抖动已经基本消除。
- 设定Kd=0.5,这个时候我们可以看到,整体性能在一个比较好的状态。
- 设定Kd=0.8,这个时候我们可以看到,小车开始出现高频剧烈抖动(注意:长时间高频抖动会损坏驱动和电机)。

我们可以确定Kp=40,Kd=0.6是P、D参数的最大值。我们在后面的调试过程尽量不超过这两个数值。适当减小数值,可以看到小车调整更加平滑,但是依然无法保持长时间的直立。直立很短一段时间后会往一个方向加速倒下。这个等我们加上速度环才能得到更好的性能。只有角度环是很难让小车达到很好的直立效果的。至此,直立调试部分就告一段落了。
2、 速度环参数
速度环用于控制小车的速度,一方面使小车静止时更稳定,不会偏向一边倒下;另一方面则是使小车能够直立行驶。速度环使用PI(比例积分)控制器。速度环的计算用到的参数是小车的速度。调节速度环之前需要先设定好直立环参数,这里我们设置Kp=40,Ki=0.6。先调I(积分)再调P(比例)。
- 确定Ki_speed值的大小
- 确定参数的原则是:调整Ki_speed大小,直到小车可以快速地稳定在固定位置。
- 设定Ki_speed=0.1,这个时候我们可以看到,小车的位置固定,即使推动小车,小车依然可以返回到初始位置。
- 设定Ki_speed=0.4,这个时候我们可以看到,小车有更快的调整速度,但是小车容易过调从而产生不必要的震荡。
- 这时再加入Kp_speed就可以使小车的位置稳定下来。
2.确定Kp_speed值的大小
- 确定参数的原则是:Kp_speed一直增大,直到小车可以保持直立并且不易推倒。
- 例:设定Kp_speed=1.0,这个时候我们可以看到,小车会在一段距离内来回调整。虽然还是不能完全静止,但是已经能够保持较长时间的直立,可以看到速度环已经起作用了。
- 设定Kp_speed=2.5,这个时候我们可以看到,小车的速度基本可以稳定。但是用手推还是会向一边倒,抗干扰能力差。
- 设定Kp_speed=4.0,这个时候我们可以看到,小车的响应速度加快,抗干扰能力加强,用手推的时候小车速度可以很快减小。

因此,我们设定Ki_speed=0.25,Kp_speed=5.20,。这里只是对参数调试过程做一个大概的演示,并不是最优参数,可以根据实际现象再进一步微调参数的大小。
3、 方向环参数
- 经过直立环和速度环的调整,小车已经能够保持稳定直立了。由于左右电机实际存在一定偏差,需要引入方向环控制小车直走的方向从而防止小车行驶偏航。除此之外方向环还用于小车转弯的速度调节。
- Kp_turn仅仅用于改变小车转弯的速度比例,该值越大,小车转弯的速度越快,一般情况下不需要改变它的大小。
- Kd_turn是Z轴角速度的系数。当小车直走不为直线时,可以通过调整Kp_turn的大小校正小车的偏离情况。其值过大时会导致小车左右剧烈震荡,调整时请勿将数值设置过大。调试时可借助直线参考物体,控制小车直行,调整Kd_turn大小直至小车直走时不易偏离直线即可。
总结
以上是小车的静态参数整定方法,可以得出小车直立所需要的参数。若小车直立行驶的状态不佳,则需再微调参数使小车在行驶时也有较好的效果。总的来说,比例参数影响的是小车调整的速度;微分参数影响的是小车的稳定;积分参数跟调整的准确性有关。下图是所有参数调整的较优参数。

下面介绍平衡车的载重调试,平衡车的载重的上限为2KG,超过上限之后,电机会负荷行驶,会对电机造成损害。加速度不能太快,否则重心不稳,小车容易倾倒,下面给出平衡车的平稳较优参数。

こんにちわ
Mecanum Wheel と Balancing Car を購入しました。
今は、Balancing Car の勉強をさせて頂いています。
説明のとおりソフトをインストールしましたが、立ち上がりません。
いろいろ調べた結果、Arduino IDE で書き込み中に以下のファイルで コンパイルエラーが発生していました。
#include “MPU6050_6Axis_MotionApps20.h” 2017.12.18
バグ修正されたファイルがありますか。
あるいは修正方法についての案内がありますか
よろしく。
追伸;英語が出来なくてごめんね
池内 様
お世話になっております。出品者のosoyooでございます。
ご連絡ありがとうございます。
Arduinoライブラリのフォルダは以下の場所にあります。
Windows 64bitの場合 (一例)
C:\Users\???\Documents\Arduino\libraries (???の部分にはユーザ名が入ります)
下記のリンクでのZIPファイルをダウンロードして、解凍して、解凍したのlibrariesと言うフォルダに幾つのフォルダがありますので、それらのフォルダをパソコンの「C:\Users\???\Documents\Arduino\libraries (???の部分にはユーザ名が入ります)」にコピーして、Arduino IDEを再起動してくださいませ。
https://osoyoo.com/wp-content/uploads/2018/03/libraries.zip
再度コードを基板に書き込みしてくださいませ。
https://osoyoo.com/wp-content/uploads/2018/03/osoyoo_abc.zip
どうぞよろしくお願いいたします。