自动控制原理学习--平衡小车的控制算法(一)

embedded/2024/9/23 10:16:59/

基于单片机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仿真建模


http://www.ppmy.cn/embedded/32524.html

相关文章

全量知识系统 程序详细设计 之 “Component总线结构” (QA百度文库)

Q1. 今天想聊聊 全量知识系统(以下简称全知系统)中的 “Component总线结构” 全量知识系统,即全知系统,是一个综合性的平台,旨在整合、处理和应用各类知识。在这个系统中,“Component总线结构”是一个核心…

【业务场景】京东实际场景,频繁GC引起的CPU飙高问题的解决

目录 1.业务介绍 2.判断任务类型 3.CPU飙高的原因 1.业务介绍 本文的业务场景是京东零售线公开的一篇文章,文章内容详细介绍了京东零售线如何将广告相关的定时任务从半小时优化到秒级的,原文链接: 半小时到秒级,京东零售定时…

线程安全问题

目录 1.什么是线程安全 2.线程不安全的原因 3.解决线程不安全的方法 关于死锁问题的探讨: 1.什么是线程安全 如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该的结果,则说这个程序是线程安全的。 2.线程不安全的原…

代码随想录算法训练营第25天 | 216.组合总和III、17.电话号码的字母组合

代码随想录算法训练营第25天 | 216.组合总和III、17.电话号码的字母组合 自己看到题目的第一想法看完代码随想录之后的想法 链接: 216.组合总和III 链接: 17.电话号码的字母组合 自己看到题目的第一想法 216.组合总和III:递归函数终止条件为搜索得到的数相加为n&…

字节跳动(社招)四面算法原题

TikTok 进展 又是一期定时汇报 TikTok 进展的推文。 上周,美国总统拜登签署了价值 950 亿美元的一揽子对外援助法案。 该法案涉及强制字节跳动剥离旗下应用 TikTok 美国业务,即 针对 TikTok 非卖即禁的"强抢行为"开始进入九个月(27…

git ,查看某个版本的某个文件内容

如题,右键 open git bash here, 打开git命令行: 首先: git log 可以查看历史提交的记录,拷贝某个版本的版本号, 类似如: commit 1ba842efcf8076a24d7fb5d6c6323e801ccbf3ff Author: x&…

C#面:C# 是否可以对内存直接进行操作

在C#中,可以通过使用指针来对内存进行直接操作。 使用 unsafe 关键字来支持指针操作,并且需要在项目属性中启用选项:允许不安全代码。使用指针可以绕过 C# 的类型安全检查,因此需要谨慎使用,并且只有在必要的情况下才…

Uniapp软件库全新带勋章功能(包含前后端源码)

源码介绍: Uniapp开发的软件库全新带勋章功能,搭建好后台 在前端找到 util 这个文件 把两个js文件上面的填上自己的域名,电脑需要下载:HBuilderX 登录账号 没有账号就注册账号, 然后上传文件,打包选择 “…