写在前面:

不知不觉已经调了一个学期的车了,从让大公主(原型为恩智浦智能车竞赛E车模)学会站,到会走,最后能跑起来,简直就像是一个自己一把屎一把尿带大的孩子一样(可能带孩子还不如这个那么累吧),自己也成为了学弟学长眼中的老司机。感觉作车就和旅游爬山一样,山上的风景很美,但你永远也不知道翻过了这座山,后面还有多少座山在等着你,其中的艰辛与芳华,唯你自知。作车调车的过程中学到的知识很多,领悟的经验也挺多,一直想找个时间总结总结,但因为各种事一拖就拖了好久...嗯,我是拖延症患者......本文就是博主在爬其中一座山过程中的感悟,希望之后的各位新手司机能够少走些弯路,看到更好的风景。

好了扯犊子结束,下面进入正题:

当小车开始能直立起来后,接下来的首要问题自然就是怎样能让他跑起来,先不说跑,但也至少能走吧,而如果在加入速度环之后,小车还是傲娇的立着不动,或者一个劲的哈腰点头(可能是快过年了想要红包了),或者就像脱缰的野狗一样,完全不按你设定的速度来,或者走到一半突然停下来(也许是想思考一下人生吧)...那肯定就是三个问题:1.小车机械结构不行,重心不够集中;2.PID参数没调好;3.速度环加入的姿势不对。若是第1种情况,长痛不如短痛啊少年赶紧改结构吧,下面主要就2.3种情况来谈谈如何以正确的姿势插入速度环。

直立车的速度控制本质上就是一句话:用角度换取速度!换句话也可以说成是:速度环本身就是直立环的一部分。

先从直立环开始说起吧,首先在直立环的控制部分,就实际情况而言,由于直立车机械结构的不同,直立车的机械零点也不同(甚至可能没有机械零点,敢设计出这种结构的一般都是大神,后面再讨论),而且机械零点大多都不是某个固定的角度,而是一个范围。比如我家的大公主,由陀螺仪反馈回来的数据显示,最后的结构搭建出来她的机械零点大概在-5°到5°左右,因此也可以看出在直立控制中我们应该求稳求快,但并不求精确,因而最好采用PD控制。

下面附上直立环代码:

其中Angle和Attitude.Gyro_Speed_Y是由陀螺仪返回的大公主当前俯仰角角度和俯仰角角加速度。而且在实际的PID应用中,根据不同情况,往往需要加入滤波、限幅和定时清零等操作,顺便提一句,这里的PD参数不是像书本上理论说的调的越大越好,而且应该适量的偏小,具体原因暂且按下不表,大家实际动手试试便知。而其中的PID控制器中KP所乘的东西,采用了串级PID的思想,也就是速度控制的关键啦,客官请接着往下看。

说完直立环,接下来就讨论如何将速度控制添加进去了,当你的小车可以直立起来,并且直立环的PID参数调的比较“硬”的时候,可以像类似捉弄不倒翁一样去捉弄平衡车,可以很容易的发现,人为的使小车往前或往后倾斜,小车便会往前或往后跑了,也正是因为这一机制,小车才能实现直立。也就是说,当PID控制器检测出角度偏差(人为的)的时候,就会通过控制电机使得小车回到设置的目标角度,体现在实际中就是小车向前或者向后运动了。

因此速度控制实际上就是通过对直立环进行干扰而实现的,也就是文章开头说的以牺牲角度为代价换取速度。而且在实际情况中速度控制应该求准,也就是能尽量达到预期的速度,因而推荐采用PI控制。

下面就来说说如何“干扰直立环”,也就是传说中的串级PID。先来看看下面两个直立环的PD控制器和速度环的PI控制器:

而在之前,是我们用手去人为改变小车的平衡角度,但怎样能让小车在平衡时自己“以为”自己的角度被改变了呢?我们可以将直立环的PD控制器改写成下面这样:

而这串进去的a,其实就是速度环PI控制器的输出SpeedOut,这样,便构成了传说中的串级PID啦,注意其中的加减号需要根据你定义的小车前进方向按实际确定。从上面这个式子我们可以看出,即使小车当前处于平衡状态,也就是说角度偏差θ_Bias为0,但因为串入了速度控制量SpeedOut,会让小车傻傻的以为自己不在平衡状态,从而通过直立环的控制向前或向后运动,直到小车趋近设定速度后,SppedOut才会趋近于0。其实后面不难理解,能够构成串级PID,在于速度控制本身就是对直立控制的干扰,或者说速度环本身就可以看成是直立环的一部分。

而前面提到的那些没有机械零点的车,意味这他们的小车永远无法通过加减速达到平衡状态,也就是说不能稳定的控制在某一速度下,甚至无法正常直立,他们的一生从打开驱动开始就是在不断的加速...从起点一直加速到终点,可想而知这需要多么超级无敌强大的转向环算法与之配合啊,传说中某届的国赛第二就是走的这条路,但个人建议新手还是绕道吧。

下面附上速度环代码:

同样在这里考虑到实际情况,加入了滤波和限幅等操作。

最后再多啰嗦两句,这个方案和清华直立方案(电磁组直立行车设计方案2.0,竞赛秘书处)中的速度控制虽然有些不同,但依然要避免两个环之间的耦合过大,也就是要将速度控制的输出进行平滑处理,将其分配到多个直立控制周期中去,具体方法参考清华直立方案即可。

如果对文章有任何的疑问或指教批评,欢迎在下方评论留言,希望各位同学,车友不吝赐教,共同学习。

PID实践笔记-两轮直立车的速度控制相关推荐

  1. PID实践笔记-PID浅解及两轮直立车参数调试经验

    写在前面: 好快啊做车生涯就这么结束了,虽然无缘厦门但也没有遗憾了,大公主在预赛和决赛中都跑的不错,最后写这篇文章就当画上一个完美的句号吧,目的也在于总结一下大半年以来调车的玄学经历和解决方案,同时也 ...

  2. 直立两轮平衡车核心代码

    两轮平衡车相关算法 卡尔曼滤波函数 /************************************************************** 函数名称:float KalmanF ...

  3. 玩转OpenHarmony PID:教你打造两轮平衡车

    目录 简介 硬件配置资源 原理概括 PID算法介绍 两步搭建样例工程 关键算法讲解 直立环控制算法: 速度环控制算法: 转向环控制算法: 总结 相关链接 简介 此次为大家带来的是OpenAtom Op ...

  4. 基于STC单片机的两轮平衡车设计

    给大家传福利了..后续继续共享基于Arduino/安卓Android/树莓派raspberry等平台的两轮车设计 这是我前年暑假做的一个小项目,今年拿出来整理了下当毕设了(当然毕设里添加了许多其他元素 ...

  5. 基于PID调节的两轮自平衡小车的循迹控制

    基于PID调节的两轮自平衡小车的循迹控制   硬件电路篇 小车主控芯片使用飞思卡尔公司产的K60. 电源模块 车体电路使用两种电压,分别为3.3v和5v供电.车体使用7.2V的锂电池供电,为提供电路所 ...

  6. 浅谈两轮平衡车的控制原理

    前言:在IT行业摸爬滚打了好几年,好不容易从学生熬成了社会人士,通过自己的不断努力又从社会人士熬成了学生.这几年的修行,同道博友给了我很多的帮助,很早之前就有写博客的想法,想借自己绵薄之力来回馈一下默 ...

  7. K60平台下的两轮平衡车

    基于飞思卡尔K60的两轮平衡车 一.总体设计 二.电路设计篇 三.软件设计 四.实物测试 五.改进和展望 六.附录 一.总体设计 此系统用到的功能模块都是集成好的,这里只设计了一个底板来连接各个硬件模 ...

  8. 中科深谷开源智能两轮平衡车

    中科深谷开源智能两轮平衡车 中科深谷开源智能平衡车,集多学科交叉融合为一,具备自平衡,行走控制,无线通讯和4G远程控制,视觉识别跟随等功能,接口丰富,扩展性强,可支持多台调度控制. 提示:以下是本篇文 ...

  9. stm32两轮平衡车资料

    [MCU实战经验]+基于stm32两轮平衡车制作:http://www.stmcu.org/module/forum/thread-582883-1-1.html 转载于:https://www.cn ...

  10. stm32两轮平衡车项目资料 两轮平衡车原理图

    stm32两轮平衡车项目资料 两轮平衡车原理图+PCB+程序 现有:693651816272834lin昵称好难设置

最新文章

  1. 静态Web服务器-返回固定页面数据
  2. 列表转字符串,再转回来,完全一致
  3. 树莓派 Raspberry Pi 更换国内源
  4. JavaScript中的ParseInt(08)和“09”返回0的原因分析及解决办法
  5. c语言程序设计指针教学,C语言程序设计中指针教学要点分析
  6. Django+nginx+uwsgi+ubuntu18.04网站部署
  7. 分布式存储 HDFS原理
  8. Redis 事务 实例
  9. 微信小程序入门级教程一
  10. html叫编程语言吗,html是编程语言吗
  11. 说说基于BS架构的三维地图引擎如arcgis以及三维引擎cesium等在数字孪生三维可视化项目中踩过的那些坑
  12. go-cqhttp系列教程-三种消息类型的复述(私聊,群聊,频道)-3
  13. Liunx使用apt安装本地deb软件包
  14. DLP3010EVM-LC and DLP2010EVM-LC常见问题答疑
  15. Go操作MySQL数据库库
  16. DSP6657打印ti.sysbios.heaps.HeapMem,内存问题
  17. zuiqingchun4
  18. PerfDog性能狗实测智能手表性能
  19. 三线表里加小短线_LaTeX 第六课:图表的排版
  20. 华为云访问密钥AK\SK获取

热门文章

  1. 解决Chrome谷歌浏览器访问网页过慢问题~
  2. SQL报错 BIGINT UNSIGNED value is out of range in xxx
  3. 【MATLAB】GUI设计一个小游戏
  4. week5小结(字符串类)
  5. 中签了,奥运门票!细细
  6. 工作总结报告不会做,做不好?资深PMO和PM教你五步学会工作汇报【真正厉害的人,不仅要会做,更要会说】
  7. 宝德服务器主板型号在哪看,配Xeon E5620 宝德PR2760T服务器初解析
  8. 你知道FPS 游戏是什么吗?一文带你了解
  9. mysql5.6.16.tar.gz_phpmyadmin+mysql-5.6.16.tar.gz使用
  10. Appium-Shake(摇晃/抖动)