前言

截止目前,初代小车已经调试完毕,功能上只能直立,后期还会加上更多功能。

前面关于pid的内容也已经更新完毕,如果你是跟着我的教程走的话,那么现在的你最起码对PID已经有所了解了,那么后面我就主要讲解一下平衡小车的控制原理。结合理论和实践,彻底学会PID。

一、平衡小车为什么会倒?

说到这,那就不得不复习一下高中的物理知识-----受力分析。先看看下面一张图–单摆,来个受力分析:

受力分析说明:
如图所示,单摆摆长为L,摆球质量为m,从平衡位置О运动到某点A(不是最高点)时的速度为V,此时摆线拉力为T,摆角为θ。对摆球所受重力和拉力进行受力分析,此时小球应该只受两个力,一个是重力mg,一个是线的拉力T。把重力进行分解为径向分力F’( = mgcosθ)和切向分力F( = mgsinθ):

径向:T - mgcosθ = mv’/L(径向合力充当物体做圆周运动的向心力)
切向:F= mgsinθ (切向合力充当物体做简谐运动的回复力)

径向力我们不用管,我们来分析一下切向力。
1.假设空气没有阻力
由于小球一直受到一个切向力,那么小球会一直做自有震荡运动
2.假设空气阻力很小
空气阻力会慢慢消耗切向力,小球会停下来,但是时间会很长
3.假设空气阻力很大
空气阻力会慢慢消耗切向力,小球也会停下来,但是时间先对与2会缩短

因为在空气中运动的单摆,由于受到空气的阻尼力,单摆最终会停止在垂直平衡位置。空气的阻尼力与单摆运动速度成正比,方向相反。阻尼力越大,单摆越会尽快在垂直位置稳定下来。

看到这里,我们在联想一下平衡小车,看看有什么区别。下图是平衡小车倾斜时上方某一点的受力分析:

平衡小车有个现象,当你没有上电时,小车如果机械结构比较好的情况下,在垂直的时候是可以单独直立不到的。但是只要稍微有点角度,他就会顺着这个角度加速倒下。因为在垂直的时候,小车受到的回复力=mgsinθ,而θ=0,因此回复力等于0,。此时只有一个mg和地面对小车的支撑力,两者相抵消,受力平衡,从而直立不到。但是稍微有点角度就会打破这一受力平衡。因为在它偏离平衡位置的时候,所受到的回复力与位移方向相同,而单摆却相反!因此,平衡小车便会加速偏离垂直位置,直到倒下。如何通过控制使得平衡小车能够像单摆一样,稳定在垂直位置呢?要达到这一目的,只有两个办法:一个是改变重力的方向;另一个是增加额外的受力,使得回复力与位移方向相反才行。显然能够做到的只有第二种方法。

二、平衡小车直立原理

怎么增加一个额外力使得回复力与位移方向相反呢?看下图:

让电机旋转,使得小车运动方向和倾倒方向一致。这样就能产生一个力F1,使得小车保持平衡。

那么问题来了,新手都会遇到一个问题,为啥让电机旋转,会使得小车保持平衡?知其然,更要知其所以然

解决这一问题只有一个办法----还是受力分析、在这之前呢,先给大家说一个现象,帮助大家理解。

老司机当然还是要开车呀,当你坐在车里,脚踩油门加速的时候,你会发现,你的上半身会向后仰,仿佛有个人坐在你的大腿上想放倒你。不巧的是后面有个座椅支撑着你,座椅对你产生推背感。

这一现象从物理的角度怎么解释呢?
汽车发动的瞬间你的身体因为惯性会保持静止状态,但因为你的下半身腰部以下(坐立时)都直接接触汽车,因为摩擦力的缘故会伴随车子向前移动。于是见证奇迹的时刻到了,你下半身随着车子移动,上半身因为惯性保持不动,结果就变成了下身拉动上身即出现了你所谓的身体后仰状态。类比我们的平衡小车,当电机旋转时,会产生一个力使得小车下半身向倾倒方向加速,这个力会使得上半身产生一个回复力与位移方向相反,这样就能保持平衡了。

下图为受力分析图,图中省略一部分受力,比如摩檫力、轮子对上半身的支持力等等,主要是F和-F1COSθ。

受力分析之后就能列出回复力Y的关系式了:

又因为在实际运用当中,平衡小车摆动角度很小,因此进行线性化简化。并假设负反馈控制是车轮加速度 a 与偏角 θ 成正比,比例为 k。代入公式得出:

如果比例k>g ,( g是重力加速度)那么回复力的方向便于位移方向相反了,这样就能使小车直立了。

为了使得倒立摆能够尽快地在垂直位置稳定下来,还需要增加阻尼力。虽然存在着空气和摩擦力等阻尼力,相对阻尼力比较小。因此需要另外增加控制阻尼力。增加的阻尼力与偏角的速度成正比,方向相反。最终得出下图公式:

综上所述可得控制车轮加速度的控制算法:

式中 θ 为小车倾角,θ’ 为角速度,k 、k1 均为比例系数。

这就是小车直立环的推导过程,乍一看这个公式其实就是PD控制器。

三、速度环的引入

平衡小车的最高境界是什么?一个字:稳
怎么稳?立在那不动。怎么不动?保持直立并且速度为0(保持直立也有可能是匀速运动)。怎么速度为0?加入速度环。
加入速度环的原因还有以下两点:
1.配合直立环,让小车更加稳定
2.为后面远程遥控做基础

四、串级PID

由于速度环和直立环都是控制小车电机的转速,因此两者需串在一起。又因为平衡小车最主要的是直立,因为速度环的输出作为直立环的输入,直立环的输出最终作用到小车电机上。最终形成下图框图的形式:

总结

重点理解直立原理,受力分析图。知识点都不难,回忆回忆高中物理就能分析出来了。
至此,理论部分已经差不多了,把理论部分理解透彻,代码部分也就好理解了。代码实现见下一节。

零基础制作平衡小车【连载】12---平衡小车控制原理相关推荐

  1. creator 跳跃弧线_(转)CocosCreator零基础制作游戏《极限跳跃》四、添加游戏主场景控制脚本...

    CocosCreator零基础制作游戏<极限跳跃>四.添加游戏主场景控制脚本 前面简单的实现了主界面的UI设置,现在我们开始制作游戏的控制脚本. 在资源管理器的Script文件夹中,点击右 ...

  2. 【微信小游戏实战】零基础制作《欢乐停车场》二、关卡设计

    1.游戏立项 微信小游戏中有一款<欢乐停车场Plus>的小游戏,大家可以搜索玩下.这是一款益智类的小游戏,游戏中有红.黄.绿.蓝.紫5辆豪车6个停车位,玩家通过可行走路线移动小车,最终让各 ...

  3. creator 跳跃弧线_(转)CocosCreator零基础制作游戏《极限跳跃》八、添加游戏积分系统...

    CocosCreator零基础制作游戏<极限跳跃>八.添加游戏积分系统 前面我们实现了整个游戏的流程,下面我们来完善游戏的积分系统..先来分析下游戏的积分,第一次展示积分的地方就是我们的游 ...

  4. creator 跳跃弧线_(转)CocosCreator零基础制作游戏《极限跳跃》七、制作游戏结束场景并实现场景切换...

    CocosCreator零基础制作游戏<极限跳跃>七.制作游戏结束场景并实现场景切换 前面我们实现了游戏的碰撞检测,碰到障碍物我们的角色就会死掉并开始掉落,角色掉落到屏幕底部时候游戏结束, ...

  5. python和cc哪个适合做游戏的背景音乐_(转)CocosCreator零基础制作游戏《极限跳跃》九、为游戏添加声音音效功能...

    CocosCreator零基础制作游戏<极限跳跃>九.为游戏添加声音音效功能 游戏的声音很重要,我们在这个游戏中需要加2个音效,一个背景音乐...第一个音效在玩家与障碍物碰撞的地方加碰撞音 ...

  6. (转)CocosCreator零基础制作游戏《极限跳跃》六、制作游戏障碍物实现碰撞检测...

    CocosCreator零基础制作游戏<极限跳跃>六.制作游戏障碍物实现碰撞检测 前面我们实现了背景和主角的操作,下面我们开始添加游戏的障碍物以及碰撞检测的功能. 一.制作障碍物Prefa ...

  7. 【微信小游戏实战】零基础制作《欢乐停车场》三、游戏场景制作

    1.游戏立项 微信小游戏中有一款<欢乐停车场Plus>的小游戏,大家可以搜索玩下.这是一款益智类的小游戏,游戏中有红.黄.绿.蓝.紫5辆豪车6个停车位,玩家通过可行走路线移动小车,最终让各 ...

  8. 【微信小游戏实战】零基础制作《欢乐停车场》一、游戏设计

    1.游戏立项 微信小游戏中有一款<欢乐停车场>的小游戏,大家可以搜索玩下.这是一款益智类的小游戏,游戏中有红.黄.绿.蓝.紫5辆豪车6个停车位,玩家通过可行走路线移动小车,最终让各颜色的小 ...

  9. (转)CocosCreator零基础制作游戏《极限跳跃》二、制作游戏开始场景

    CocosCreator零基础制作游戏<极限跳跃>二.制作游戏开始场景 我们刚刚分析了<极限跳跃>这款游戏,下面我们开始制作第一个游戏场景,也就是游戏的开始场景. 首先,打开C ...

  10. 黑马h5学习代码_如何零基础制作酷炫实用的H5页面

    H5页面已经成为了当下移动端主要的宣传方式,一个好的H5页面有极高的营销价值,无论是企业还是个人都非常需要.制作一个炫酷的H5页面一定要会写代码吗,下面千锋网络营销小编就给大家分享如何零基础制作炫酷实 ...

最新文章

  1. 论学好Linux系统的超级重要性
  2. 挑战极限--有本事拿.Net+SQL SERVER试试4秒极限!
  3. mysql lepus_MySQL 监控软件lepus天兔
  4. 工作81:图片间隙问题
  5. LwIP之网络技术基础
  6. rpm | 升级软件包
  7. Flutter基础布局组件及实现
  8. jquery 操作 input显示或者隐藏
  9. CAD2004软件从下载安装到学习CAD教程(后台菜单自助更多)
  10. C语言编程:如何计算二叉树叶子结点数目?
  11. 电子电路基础 (12)——功率放大电路原理分析
  12. R语言将 手写数据集 图片数据转为表格数据并主成分分析
  13. 网吧上网小心绝地求生账号被盗
  14. 某电商网站销售python图书_手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取...
  15. java中innerhtml_js中innerHTML与innerText的用法与区别 | 学步园
  16. 项目管理过程-5个管理过程组、10大管理知识域以及对应输入、工具技术和输出
  17. 如何使用Visual Studio 2005画一张正规的国旗图片
  18. 智能优化算法之遗传算法(GA)的实现(基于二进制编码,Python附源码)
  19. 终于搞定Mac下无线网卡安装不了的问题
  20. Java编程题之四个数字组成不同且无重复的三位数

热门文章

  1. offsetParent和parentElement的区别
  2. Ubuntu 下的nis认证
  3. IT职场: 选择外企利与弊
  4. android中dalvik虚拟机参数
  5. ArcMap客户端——将shp属性表导出为excel
  6. PDF压缩软件怎么操作
  7. 在ICT圈子找非研发工作
  8. JS中判断NaN的方法
  9. Android传感器(三):方向传感器
  10. 3389常用命令操作