【轮式平衡机器人】——角度/速度/方向控制分析软件控制框架

news2025/1/16 2:46:55

轮式平衡机器人具有自不稳定性,可类比一级倒立摆系统的控制方法,常见有反馈线性化方法、非线性PID控制、自适应控制、自抗扰控制,还有改进的传统缺乏对外界干扰和参数改变鲁棒性的滑模变结构控制。我们采用较为简单的双闭环PID控制实现平衡模型。

一、角度平衡控制(PD内环)

由上面的系统传递函数可知,该系统一共2个极点\pm\sqrt{g/L},但根据奈奎斯特判据,其中一个极点位于s平面的右半面会引起系统的不稳定性,可加入反馈环节消除这种不稳定,能有效避免闭环过程中参数波动产生的扰乱系统的效果,且减小系统时间常数和非线性的影响。

反馈控制器可以是PI,可以是PD,也可以是PID,考虑到角度控制环节的角度信息由陀螺仪MPU6050采集,采集时有信号噪声和零点漂移,为了防止这些误差被积分环节放大,所以采用PD控制

比例P:k1
微分D:k2*s

再次分析得到2个极点(不赘述),当k1>g,k2>0时,满足两个极点位于s平面左半面的稳定条件。

在整个角度环路中,k1和k2的阶分别代表了角度(θ)与角速度(θ的微分),所以控制平衡的控制量x由角度和角速度计算而来。——这样来理解,首先因为产生倾角θ所以产生控制量,前倾的时候车轮也要向前运动,后倾则车轮要向后,所以认为电动机的控制量x与θ之间存在x=k1*θ比例关系,但是当角度θ为0时,x也为0,实际会存在惯性小车不平衡,所以引入一个与角速度(即θ的微分)相关的阻尼力来平衡,则x=k1*θ+k2*dθ/dt。

角度与角速度的反馈主要由MPU6050传感器获得!

二、速度控制器(PI外环)

在完成上面平衡的前提下做速度控制实际上十分复杂——改变速度的同时不能影响基本的平衡控制,所以不能将速度的控制效果直接加到电动机速度的改变中。

为了简化控制量与控制结果之间的关系,可将速度控制看作平衡控制(与角度相关)的外环控制,即将直立平衡控制的目标看作速度控制的结果。因为倾角决定了速度(向前倾的程度与机器人在该方向上运动速度正相关),且由于倾角的存在导致平衡控制的偏差存在,因此需要加速去消除倾角的存在,从而维持平衡:

速度反馈主要利用编码器信号eQEP功能模块读取实现,原来直立平衡控制的输入量变为速度控制的输出量,形成串级控制系统。内环使用PD控制,这里为了消除静态误差,外环速度控制采用PI控制。

三、方向控制器(P辅助)

轮式平衡机器人具有两轮同轴的机械特性,方向控制主要来自两轮的差速,转向控制建立在前两个控制的基础上,不能影响正常的直立平衡。平衡小车对转向控制的精度和响应速度要求不高,只采用比例控制P。

可以使用z轴陀螺仪的角速度数据与设定目标转向角速度做偏差来计算控制量进行P控制,避免了通过车轮编码器信号来判断转向时无法考虑打滑等因素的缺点、陀螺仪数据用于计算转向角时可能产生的误差累积,优点是算法简单,但也存在对高频信号采样失真的缺点。

四、控制框架

下面从整体概貌上谈谈轮式平衡小车的目标效果,考虑了CD摄像头循迹、APP控制、超声波避障等拓展功能。

①系统初始化

②串口中断程序

设计串口中断程序可以实现下列拓展功能:

③主中断程序

主程序的运行需要精确的时钟周期来保证平衡控制的稳定运行,如使用单片机的定时器Timer0实现5ms为周期陀螺仪信号读取、编码器信号读取、PWM控制量计算、启停信号的检测以及CCD相机信号的读取、中值线计算的过程。

app蓝牙串口发送来的控制信号通过串口中断接收,在速度控制量计算时介入;定速自主循迹通过图像采集模块得到的电压值进行中线识别,根据转向控制量计算出两轮的电机差速PWM控制量。

往期精彩

STM32专栏(付费9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/E2F88

OpenCV-Python专栏(付费9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/zK1jV

AI底层逻辑专栏(付费9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/zic0f

机器学习专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/FaXzAFreeRTOS专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/SjIqU电机控制专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/FNWM7

AI拓展驿站 

人工智能(AI)>机器学习>深度学习!机器学习可做传统预测、图像识别、自然语言处理等。

机器学习(统计方法)是实现人工智能的一种途径,深度学习(深度神经网络)是机器学习中的一种方法!

机器学习三个关键词:数据、模型、预测!

数据集结构:特征值(特征)+目标值(标签)!

机器学习分类:①监督学习:输入数据有特征有标签,若标签为类别则为分类问题,若标签为连续型数据则为回归问题。②无监督学习:输入数据有特征但无标签(即无特定目标值),典型的聚类问题。

自学路线:B站视频入门——实战类书籍——理论型书籍(数学基础、李航的统计学习方法、机器学习“西瓜书”、深度学习““花书”)

学习库和框架:B站视频先scikit-learn再tensorflow!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1401023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++入门学习(九)浮点数

浮点型主要有两种: floatdouble 占用空间有效数字范围float4字节7位有有效数字double8字节15~16位有效数字 为什么float 有效数位 7 or 8 位,double 15 or 16 位? https://zhidao.baidu.com/question/1182732476020869219.htmlhttps://zhid…

Arduino开发实例-SDS011粉尘检测传感器驱动

SDS011粉尘检测传感器驱动 文章目录 SDS011粉尘检测传感器驱动1、SDS011介绍2、硬件准备及接线3、代码实现在本文中,将介绍如何使用 Arduino 动粉尘传感器 SDS011 制作空气质量监测系统。 1、SDS011介绍 粉尘本身根据它们的大小分为两类。 直径在2.5至10微米之间的称为粗颗粒…

【算法详解】力扣162.寻找峰值

​ 目录 一、题目描述二、思路分析 一、题目描述 力扣链接:力扣162.寻找峰值 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个…

【音视频】基于ffmpeg对视频的切割/合成/推流

背景 基于FFmpeg对视频进行切割、合成和推流的价值和意义在于它提供了一种高效、灵活且免费的方式来实现视频内容的定制、管理和分发。通过FFmpeg,用户可以轻松地剪辑视频片段,根据需要去除不必要的部分或提取特定时间段的内容,从而优化观看…

网络安全行业热门认证证书合集

网络安全认证证书,就和学历一样是敲门砖,拿到了可以用不到,但不能没有;技术大牛可以没有证书,但普通人不能没有。 1.初级入门: 就像学历在职场上展示一个人的基本素养一样,网络安全认证证书可以…

机器视觉技术与应用实战(BLOB分析)

我发现写blob分析(Binary Large Object)相应的处理函数的文章非常少。那就写一写关于blob分析相关的文章。 blob工具也叫做斑点工具,先对图像进行二值化,对图像中连通区域进行计算,计算几何特征。 BLOB分析功能: 1、…

磁盘分区机制

lsblk查看分区 Linux分区 挂载的经典案例 1. 虚拟机增加磁盘 点击这里,看我的这篇文章操作 添加之后,需要重启系统,不重启在系统里看不到新硬盘哦 出来了,但还没有分区 2. 分区 还没有格式化 3. 格式化磁盘 4. 挂载 5. 卸载…

【Linux系统编程】环境变量详解

文章目录 1. 环境变量的基本概念2. 如何理解呢?(测试PATH)2.1 切入点1查看具体的环境变量原因剖析常见环境变量 2.2 切入点2给PATH环境变量添加新路径将我们自己的命令拷贝到PATH已有路径里面 2.3 切入点3 3. 显示所有环境变量4. 测试HOME5. …

Elasticsearch8 集群搭建(二)配置篇:(1)节点和集群配置

安装完Elasticsearch后,需要对其进行配置,包括以下几部分:节点和集群配置、系统配置、安全配置。 此篇记录节点和集群配置的内容,后续将更新系统配置和安全配置。 节点和集群配置: 通过编辑/usr/local/elasticsearc…

2024最新版Python3.12.1的新特性

2024最新版Python3.12.1的新特性 New Features followed by the latest version - Python 3.12.1 in 2024 By JacksonML Python 3.12.1最新版已经于2023年12月3日在python.org正式发布! 详细信息可见官网链接:https://www.python.org 作为2024年的最新…

新发现个上头的神仙写简历工具,分分钟惊掉你下巴!

你们在制作简历时,是不是基本只关注两件事:简历模板,还有基本信息的填写。 当你再次坐下来更新你的简历时,可能会发现自己不自觉地选择了那个“看起来最好看的模板”,填写基本信息,却没有深入思考如何使简历…

SpringMVC第一天

简介 SpringMVC技术与Servlet技术功能等同&#xff0c;均属于web层开发技术 SpringMVC是一种基于java实现的MVC模型的轻量级Web框架 优点 使用简单,开发便捷(相比于Servlet) 灵活性强 入门案例 第一步、导入SpringMVC与Servlet坐标 <?xml version"1.0" encod…

flink内存管理(二):MemorySegment的设计与实现:(1)架构、(2)管理堆内/外内存、(3)写入/读取内存、(4)垃圾清理器

文章目录 一. MemorySegment架构概览二. MemorySegment详解1.基于MemorySegment管理堆内存2.基于MemorySegment管理堆外内存3.基于Unsafe管理MemorySegment4.写入和读取内存数据5.创建MemoryCleaner垃圾清理器 在flink内存管理&#xff08;一&#xff09;中我们已经知道&#x…

四.Winform使用Webview2加载本地HTML页面并互相通信

Winform使用Webview2加载本地HTML页面并互相通信 往期目录本节目标核心代码实现HTML代码实现的窗体Demo2代码效果图 往期目录 往期相关文章目录 专栏目录 本节目标 实现刷新按钮点击 C# winform按钮可以调用C# winform代码显示到html上点击HTML按钮可以调用C# winform代码更…

Python schedule任务调度及其用法

如果需要执行更复杂的任务调度&#xff0c;则可使用 Python 提供的 sched 模块。该模块提供了 sched.scheduler 类&#xff0c;该类代表一个任务调度器。 sched.scheduler(timefunctime.monotonic, delayfunctime.sleep) 构造器支持两个参数&#xff1a; timefunc&#xff1a…

思迅商旗-loaddata-信息泄露-未公开Day漏洞复现

0x01阅读须知 本文章仅供参考&#xff0c;此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考。本文章仅用于信息安全防御技术分享&#xff0c;因用于其他用途而产生不良后果,作者不承担任何法律责任&#…

比特币狂人引爆达沃斯论坛

点击查看TechubNews原文链接&#xff1a;比特币狂人引爆达沃斯论坛 比特币狂人、自称无政府资本主义者的阿根廷总统米莱在达沃斯的最新演讲引爆社交网络大讨论。 1 月 15 日&#xff0c;第 54 届世界经济论坛在瑞士阿尔卑斯山的达沃斯开幕。来自约 60 个国家首脑和跨国公司的领…

UE5 - Polycam扫描文件导入插件

Polycam是利用Gaussian Splatting进行3D重建的3D扫描相关软件&#xff0c;其对应有UE引擎的插件&#xff08;Plugin_XV3dGS&#xff09;可以把相关格式的文件导入到引擎&#xff1b; 首先Polycam的官网为&#xff1a;My Captures | Polycam 可以下载各种用户扫描文件&#xff…

Linux中的共享内存

定义&#xff1a; 共享内存允许两个或者多个进程共享物理内存的同一块区域&#xff08;通常被称为段&#xff09;。由于一个共享内存段会称为一个进程用户空间的一部分&#xff0c;因此这种 IPC 机制无需内核介入。所有需要做的就是让一个进程将数 据复制进共享内存中&#xff…

Mysql运维篇(三) MySQL数据库分库分表方案

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人&#xff0c;如有侵权请留言&#xff0c;我及时删除。 一、前言 关系型数据库本身比较容易成为系统瓶颈&#xff0c;单机存储容量、连接数、处理能力都有限。当单表的数…