基于单片机STM32的两轮平衡小车,单片机的各种IO、定时器、通讯等等一大堆要理解、编程,但这些都是琐碎的文档知识,需要花时间看各个模块的接口文档进而编程,需要良好的编程逻辑思维,去获取相关的传感模块信息,以及输出数据给相关的模块,核心其实是怎么处理这些数据,怎么去控制相关的对象,这个没有文档可查,平衡小车其控制算法就是系统的核心,结合自控原理的学习,通过matlab来模拟平衡车可用的控制算法,以便方面各种调参。
一、模型
整个系统是源于实验室里的平衡小车,小车带奥比中光的深度摄像头,树莓派,不过这里只关注怎么控制平衡,所以在matlab建模里面把这部分去掉,就参考着大致的尺寸,弄一个简单模型,如下图:
1.建模:平衡小车的分析可以近似倒立摆,为简化分为车身和底盘,轮子质量忽略不计
相关的动力学或力学建模在相关的算法再描述。
注意:matlab建模一定要注意转角和F的正向,否则后面PID可能有负数的比例系数,还有lqr崩掉。
如不会在matlab建模,可参考下面步骤:
1.创建simulink模型(slx文件);
2.添加世界坐标系3个模块,如下图,(打开新建的slx文件,在空白处右键 弹出搜索模块,输入模块名称选择即可)
3.为简化这里没有做方向环,所以增加了一个平移轴,限定平衡车的平动,还有一个转动轴(车身的摆动),然后在通过brick solid 模块(矩形块 三个平板和电池块加一个轮轴)和Cylindcrical solid模块(两个电机,轮子也可以用这个模块,不过我有轮子的3d模型,两个轮子直接用模型导入) ,rigid transform模块去搭建底盘和车身,rigid transform就算坐标变换方便模型搭建的朝向,这个坐标变换只针对搭建模型的,跟计算无关的),这里太多模块了,可以直接下载模型进去自己看,matlab2023a版
注:因为F 和转角有正向和负向,因此平移轴的施加力的方向(一般是Z)应该是跟上图一致朝右,转动轴的Z(转动轴已经指定为Z轴了)应该是里朝外,保证转角逆时针为正向,这点很重要,之前就算matlab建模这两个方向不对,导致浪费很多时间排错!
4.为好看和添加写地面摩擦因素,也可以加一个模拟地面的brick solid 模块 和Spatial
Contact Force模块。
基本的模块图如下:
body(车身):
搭建matlab模型时刻通过ctrl+D健或者点击run按钮到仿真环境查看环境搭建情况,也可以看看所建的轴的坐标系是否正确等。如下图:
这样就在matlab里面搭建好了仿真环境。
放下载链接:平衡小车matlab仿真建模