极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: wujingyu

低成本、低档自平衡小车历程(超声自平衡小车)

  [复制链接]
发表于 2014-11-30 18:50:42 | 显示全部楼层
或者讓大大看看我的情況吧, 放手後就不斷擺動, 最後因為一次較大的擺動, 一邊碰地, 角度約為 25 > 20, 停了.

直接連結: http://v.youku.com/v_show/id_XODM4NTg0MDQ0.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-30 21:06:15 | 显示全部楼层
本帖最后由 wujingyu 于 2014-11-30 21:07 编辑
Super169 发表于 2014-11-30 18:50
或者讓大大看看我的情況吧, 放手後就不斷擺動, 最後因為一次較大的擺動, 一邊碰地, 角度約為 25 > 20, 停了 ...


你这个状态是只有Kp参数吗?其他参数是否都为0,第二个你的MPU6050模块安装离电机轴比较远,近一点要稳定点(这个可以参考:pz_cloud 的,做了一个小小的自平衡小车(更新完整版,附视频)
http://www.geek-workshop.com/thread-5688-1-1.html
你具体的参数值还有串口监控的角度是否都正常?
你的机械平衡点值是多少?平衡角设定值是多少?
回复 支持 反对

使用道具 举报

发表于 2014-12-1 01:32:13 | 显示全部楼层
本帖最后由 Super169 于 2014-12-1 01:44 编辑
wujingyu 发表于 2014-11-30 21:06
你这个状态是只有Kp参数吗?其他参数是否都为0,第二个你的MPU6050模块安装离电机轴比较远,近一点要稳 ...


我是直接用 WJY_DIY_v1_2, mpu6050 int 接 D2, 而测速只接一边到 D3, 程式作了以下改动:
-  L298N 的接线
-  Kp 值 (即 Ki=0.0, Kd= 0.09, 及其他没变)
- setp0 = 3.4 (这是我的车子的平衡点, 测试了多次, 当角度为 3.4 时, 是最稳定, 几乎可以自平衡)
- 当角度 < 20 时自停
- PWM 的 max 由 255 改成 180 (本身 255 时也是一样的摆动)
- angle 用 ypr[2], 因为我是直放, 所以用 ypr[2]
- dl - 50 及 60 也测试了, 结果一样, 我用两颗 18650 时, PWM=50 已有反应, 但很慢.
其他都没变了.

因晚上有点事, 只测试了 Kp 由 7.2, 每次增加 0.2, 直到 10.2, 在 9.x 时可平衡的时间好像比较长才衡前, 超过 10 就很快因过度摆动而停了, 之後没有再测试.  

6050 的读数是没问题的, 我一直都有用串口显不作对比.  但要接近电机就有点困难, 要再考虑一下整体的布置.
但理论上整部车是一体的, 6050 放到那里也不会影响角度的问题.  而我也尽量放在车轴的正上方, 摆动的幅动也不会被放大.

明天会尝试改变 Kp, Ki, Kd 的值再试试.  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-1 09:58:19 | 显示全部楼层
Super169 发表于 2014-12-1 01:32
我是直接用 WJY_DIY_v1_2, mpu6050 int 接 D2, 而测速只接一边到 D3, 程式作了以下改动:
-  L298N 的接 ...

首先要将角度环和速度环的系数全设置为0,然后Kp从0开始逐渐增加到小车开始摆动,这种摆动不能太大,也不能没有,感觉在原地摆动不倒为好,再将Kd从0开始逐渐加大,摆动就会消失,继续加大,小车抖动就比较厉害了,往回减小点Kd值,自己感觉满意为止;这个调完了再调整速度环的参数。
你这上来就有7.2、0.09,不知你速度环的参数是否为0?每个小车组装后的表型结构是有差异的,控制参数也不可能相同,要根据自己的小车从零开始调整为好。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-1 20:50:56 | 显示全部楼层
本帖最后由 wujingyu 于 2014-12-5 08:06 编辑

给自己的小车编了个简单的安卓手机蓝牙控制程序,先上界面(本人水平有限仅能做这种特简单的界面):

再上源程序和APK安装程序

开发工具软件是:RFO_BASIC!
也是小巧好玩的东西,可以在手机上直接编程并运行!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-12-1 21:26:32 | 显示全部楼层
本帖最后由 Super169 于 2014-12-1 21:29 编辑
wujingyu 发表于 2014-12-1 09:58
首先要将角度环和速度环的系数全设置为0,然后Kp从0开始逐渐增加到小车开始摆动,这种摆动不能太大,也不 ...


感謝大大的幫忙, 但我還是不太行.
今天嘗試先把有關參數全設定為 0: kp, ki, kd, sp, si, sd
然後每次 0.5 去改變 kp 值, 一直加到12, 擺動幅度太大了, 就停止測試.  
基本上, 當 kp 接近 10 時, 已經出現很大的擺幅了.

Kp从0开始逐渐增加到小车开始摆动,这种摆动不能太大,也不能没有,感觉在原地摆动不倒为好


想再確認一定測試 p i d 值的方法, 是否先從 p 開始, 要達至可以平衡再調教其他.
即是說, 應該可以單獨調教 p 的值就應該可以平衡, 只是擺動幅度可能比較大?

有幾次是看似可以平衡 (Kp 大約為6 左右), 但突然一下急轉, 就碰地了.  是否應該以這個 kp 值開始再調教 Kd?

今晚還出了一個慘痛的小插曲....有一次插線時, 不小心把正負插反了...叭的一聲, nano 發出臭味.  
還好我手上有四片 nano, 否則又要暫停了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-1 21:35:43 | 显示全部楼层
本帖最后由 wujingyu 于 2014-12-1 21:41 编辑
Super169 发表于 2014-12-1 21:26
感謝大大的幫忙, 但我還是不太行.
今天嘗試先把有關參數全設定為 0: kp, ki, kd, sp, si, sd
然後每次 ...


把dl改成40或者更小点试试看(我开始调试时,dl就设成0了),Kp调到稍微摆动不倒时就逐渐增加Kd值,看看效果如何?
我就是把测速模块电源插反了,烧了,所以我下决心就不用测速模块了。
回复 支持 反对

使用道具 举报

发表于 2014-12-1 23:00:19 | 显示全部楼层
今天超黑....为了避免再插反, 就加一个 JST 头, 只要一开始没错, 就不会插错了.

谁料....天杀的黑店, 我买了三套插线, 两套都没问题....谁料....


一时心急, 唔看清楚就插了....再一次听到 nano 的惨叫声, 又是一股臭气冲出来了.

想问问大大一个问题, 我刚改了车子的设计, 把车身大大缩短的.
但我发觉, 就是把车身完全收起来, 车子未到达 30 度角, 香蕉电机就已经碰地了, 另一边就没问题.
大大的车子, 朝电机的一边, 是否都有相同的限制?


当然, 只要平衡点接近 水平, 这个幅度已足够作出平衡时修定位置的需要了.
只是奇怪为何大大的自动停止角度, 可以设定为 30度, 是否香蕉电样长短也有不同.

还我尝试改改 dl 看看.  这个应该是 PWM 的最少值吧, 大大是想减少输出的动力?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-12-2 00:03:33 | 显示全部楼层
把 dl 改成 40 後, 车子出现了一秒左右的较明显平衡状态.
之後突然快速向前冲, 然後车头倒下.

冲前一刹那的车速很快, 说话可能不太清楚, 看片会更直接.


(直接連結: http://v.youku.com/v_show/id_XODM5NjI0NDI4.html)

我初时只是用手在车尾托了, 把车头是微向上的.
供电不久, 程式一开始执行, 发觉车子向後倾, 就快速向後转动, 车头一下子跳起, 并即时取得平衡了.
但好像电机要反过来向前平衡, 由於启动的动力不足, 只听到声音, 当动力足够, 就时时前冲了.

现在尝试修改平衡点的角度, 看看是否这里出了问题.

由於视频上载需时, 上载完成时我已作了多个不同的测试, 可惜尚未成功.
我不断修改平衡点, 由原本的 3.4 先改成 0, 发觉车子由向前冲变成向後冲.
换句话说, 可能改成 0 - 3.4 之间的某个点可以平衡了.
用最常用的二进搜索, 得出大约在 1.1 左右, 会出现不固定的向前或向後冲, 相信是一个几乎平衡的位置了.
但再怎样微调角度也不行了.

现在的状况, 是倒下的时间慢了, 但进行平衡的时候是缓慢後退状况下出现而非之前的完全静止.
当後退了一段时间, 就会突然停下来, 出现像之前片中的一刹那完全静止的平衡, 之後又是向前冲了.

看来平衡点的修正已接近了, 下一步再回到原来的 PID 修正去....今天累了, 明晚再来.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-2 07:28:51 来自手机 | 显示全部楼层
本帖最后由 wujingyu 于 2014-12-2 07:48 编辑
Super169 发表于 2014-12-2 00:03
把 dl 改成 40 後, 车子出现了一秒左右的较明显平衡状态.
之後突然快速向前冲, 然後车头倒下.



你用什么串口工具监测调整小车的状态?用什么工具软件分析小车的平衡数据?
我原来的程序保护角度+/-30度不是最终的参数,这个值也是不对称的,因为我平衡很快就调成功了,这个参数就没改了。现在是+30/-8度。
看你的劲头和毅力一定会成功的,今天上班我写一个详细的调整分析步骤和过程给你参考,可能会有帮助,我也碰到过类似的情况,但不完全相同,有时调得很好的参数,程序烧进去后,加电启动后小车就往一边跑去了,赶紧调平衡点,等过一会,小车又跑向另一边,又要调整平衡点,这就是我给出6050输出稳定过程曲线的问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-2 10:58:28 | 显示全部楼层
本帖最后由 wujingyu 于 2014-12-2 15:08 编辑

自平衡小车参数整定方法

1、将Kp、Ki、Kd、Sp、Si、Sd均设为零。
2、用支架将自平衡小车支起,处于水平状态。
3、在程序每次输出小车实际角度的同时,输出Arduino的系统时间[用millis()函数],下载并运行程序用串口调试助手记录系统时间与MPU6050的角度输出,记录足够的数据后“保存窗口”数据,用Excel打开记录的数据文件,观察数据稳定时间。




4、确定完这个稳定时间后,将程序输出恢复到原来状态(去掉时间输出部分),重新下载,去掉小车支架并启动运行;将小车放置于一固角度位置,保持不动,观察角度输出数据是否稳定(这个时间必须大于第3步所测时间),待数据稳定后,用手扶着小车找其自然物理平衡角;通过串口工具输出“G”或“g”将平衡设定角“setp0”设置到与小车的自然物理平衡角相一致。
5、这此之后小车的整定过程中不要断电,始终保持运行状态,逐步增加Kp,观察小车的两轮是否有抵抗角度变化的力量,如果不仅不能抵抗角度的变化,而是顺着角度变化(增大角度的变化),则将顺其变化的控制电机接线反过来接,再继续下一步。
6、继续增大Kp,小车会出现来回摆动,增大或减小Kp,使其摆动的幅度不导致小车倾倒为原则。
7、增大Kd,小车的摆动会逐渐减小,如果继续增大Kd,小车会出现抖动现象,调节Kd,使其相对平稳(因为香蕉电机很难做到特别稳定)即可。
8、逐渐增加Sd(这里也要做个判断,用手平推小车,小车是否有抵抗行为,如果没有抵抗,而是顺其运行,说明速度环控制方向反了),使得小车来回走动(不是摆动),然后增加Sp,使其来回走动逐渐减小,达到比较满意即可。

注意:第四步必须做,否则小车往往就跑向一边了!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-12-2 22:57:15 | 显示全部楼层
wujingyu 发表于 2014-12-2 10:58
自平衡小车参数整定方法

1、将Kp、Ki、Kd、Sp、Si、Sd均设为零。


非常感谢大大的耐心指导.
早上在公司看到大大的详细资料, 真的很高兴, 可惜当时没有车在手, 不能即时测试.
今天晚了一点回家, 现在已做了 1), 2), 3) 的记录, 经过十多次测试, 结果也差不多.
得出的变化图跟大大的差不多, 都是二十秒左右稳定下来.



但在 4) 中有点问题,
通过串口工具输出“G”或“g”
, 请问 "G" 或 "g" 是什麽意思?
是否当成的角度, 即之前记录的数字?

当连上电脑时, 找寻平衡点有点问题, 就是电脑的 USB 线提供了一点支撑, 会影响平衡点.

現在先再一次找出平衡角度, 把 setp0 設定好.

但看到了以上的图线, 我又有另一个问题了, 如果一开始要待 20秒才稳定, 那启动初期的平衡岂非不能作准.
那一下子的突变, 会否做成了车子突然冲前...不过, 我的车子应该没有支撑十多秒的能力, 那一下突变应该还未有发生就停了.


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-12-2 23:10:01 | 显示全部楼层
经测试後, 现在的平衡点, 大约是 0.52 左右.

之後 5) 有点看不明白...."这此之后小车的整定过程中不要断电,始终保持运行状态,逐步增加Kp"
是不断电, 不断更新程式去测试吗?  为什麽要不断电呢?  是否因为不断电 6050 就不用再重新用 20 秒稳定?
但我发觉, 只要再上载程式之後, 6050 好像又会出现不稳定的问题.
所以, 不太明白这步的意思.
回复 支持 反对

使用道具 举报

发表于 2014-12-3 02:10:03 | 显示全部楼层
再挑战了一个晚上, 还未成功, 只可以在一个经不起考验的状态下站起来.

现在的设定是:
kp=9.0; ki=0.0; kd=0.2;setp0=-1.0;dl=70

平衡角度跟原先测试的有很大分别, 如果用原先测试的角度, 车子会向前冲而倒下.
可能是开动电机後, 平衡角度的位置有变.  我是用向前/後倒下的机会为准则, 不断测试.
直到前後倒下的机会相约, 就以这个为平衡点.  大约在 -1.0 左右.

在这个设定下, 先拿在手上20秒, 待 6050 稳定後, 再用接近平衡角度的位置放下.
可以出现很长时间的平衡, 但只要轻轻一推, 就会朝一个方向冲去了.



(直接連結: http://v.youku.com/v_show/id_XODQwMzgzNDIw.html)

片中最後数秒, 我只用手指轻轻一挑, 车子就向前冲而倒下了.
有时放下不管, 最後也会突然失平衡而向一个方向冲. 没有固定方向, 有时向前, 有时向後.

感觉上是当出现大幅摆动时, 车子作出反应, 但加速度不够, 不能抵消下跌的冲力, 所以一直向该方向走了.
请问这个假设对吗?  应该修改那个设定可增加车子加速的步伐?
我尝试把 dl 调高, 希望起动时快一点, 但结果都是一样, 但平衡时的摆动明显大了.

真羡慕大家可以把车子站起来, 不但推也不跌, 还可以控制它走动.
不知大家花了多少时间, 才找到最理想的设定.

最後, 我对现在的做法, 有一点疑问.  现在是要找出平衡点, 让车子尽量保持该位置而平衡下来.
但我觉得, 这样的设定, 如果车子上有重量的变化, 例如加入一些装饰, 而影响了本身的平衡角度, 就要再测试了.
我心目中的平衡车, 应该是用办法令车子保持在一个特定的角度, 通常是水平角度.
如果车子在水平时, 重心并不在中轴上, 就会出现向一个方向倒下.
而车子侦测到角度上的转变, 作出反方向的抵抗, 当两股力度均衡时, 就可以得到平衡.
当然, 如果车子本身的平衡位置接近水平, 车子就不需要太大的动力进行平衡工作.
否则, 车子就要靠电机转动, 产生反方向的动力, 去把车子平衡下来.
不知我的想法是否正确?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-3 07:29:24 来自手机 | 显示全部楼层
Super169 发表于 2014-12-2 22:57
非常感谢大大的耐心指导.
早上在公司看到大大的详细资料, 真的很高兴, 可惜当时没有车在手, 不能即时测 ...

我的小车是通过蓝牙始终与上位机保持联系,G和g分别是增大或减小平衡设定角的值
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-19 12:03 , Processed in 0.050138 second(s), 16 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表