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

轮式平衡机器人具有自不稳定性,可类比一级倒立摆系统的控制方法,常见有反馈线性化方法、非线性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.mzph.cn/news/638181.shtml

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

相关文章

解锁黑匣子:Chain-of-Note如何为(RAG)带来透明度

英文原文地址:https://ai.plainenglish.io/unlocking-the-black-box-how-chain-of-note-brings-transparency-to-retrieval-augmented-models-rag-ae1ebb007876 论文地址:https://arxiv.org/pdf/2311.09210.pdf 2023 年 11 月 16 日 介绍 检索增强语…

HTML CSS 发光字头特效

效果展示&#xff1a; 代码&#xff1a; <html><head> </head><style>*{margin: 0;padding: 0;}body {text-align: center;}h1{/* border: 3px solid rgb(201, 201, 201); */margin-bottom: 20px;}.hcqFont {position: relative;letter-spacing: 0.07…

构建高可用消息队列系统 01

构建高可用消息队列系统 01 引言1. RabbitMQ简介介绍1.1 什么是RabbitMQ1.2 RabbitMQ的核心特性1.3 RabbitMQ与AMQP 2.安装RabbitMQ3.消息队列实践总结 引言 在当今互联网时代&#xff0c;消息队列系统扮演着至关重要的角色&#xff0c;它们被广泛应用于分布式系统、微服务架构…

REVIT二次开发根据类别选择元素

步骤1 选择高亮选择的元素 步骤2 高亮显示 using System; using System.Collections.Generic; using System.Linq; using System.Text;

JVM(上)

目录 一、JVM概述 一、JVM作用 二、JVM整体组成部分 二、JVM结构-类加载 一、类加载子系统概述 二、类加载过程 1.加载 2.链接 3.初始化&#xff08;类加载过程中的初始化&#xff09; 三、类加载器分类 大致分两类&#xff1a; 细致分类&#xff1a; 四、双亲委派机制 五、打…

Oracle篇—参数文件在11gRAC或12cRAC的启动位置介绍

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

LeetCode.2788. 按分隔符拆分字符串

题目 题目链接 分析 题目的意思是给我们一个字符串数组和一个分隔符&#xff0c;让我们按照分隔符把字符串数组分割成新的字符串数组。 看到这个描述&#xff0c;这不就是直接就是利用 按照分隔符分割字符串的系统库函数split()&#xff0c;这个函数的意思就是 把一个字符串…

ISA Server2006部署RuoYi无法登录的问题

ISA Server2006部署RuoYi无法正常登录。每次登录都会报错如下&#xff1a; 无效的会话&#xff0c;或者会话已过期&#xff0c;请重新登录。 原因分析 在nginx中部署没有问题&#xff0c;在ISA Server就会报这个错。根据登录的原理&#xff0c;我猜测可能是headr中的Author…

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

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

浅析智能家居企业面临的组网问题及解决方案

在这个快速发展的时代&#xff0c;组网对于企业的发展来说是一个至关重要的环节。 案例背景&#xff1a; 案例企业是一家智能家居制造企业&#xff0c;在不同城市分布有分公司、店铺、工厂&#xff0c;这些点原本都是各自采购网络&#xff0c;与总部进行日常沟通、访问。 现在…

采集B站up主视频信息

一、网页信息&#xff08;示例网址&#xff1a;https://space.bilibili.com/3493110839511225/video&#xff09; 二、查看响应数据 三、查看数据包内容 四、相关代码&#xff08;代码内容未进行翻页爬取&#xff09; # Time: 2024/1/19 16:42 # Author: 马龙强 # File: 采集B…

【征服redis14】认真理解一致性Hash与Redis的三种集群

前面我们介绍了主从复制的方式和sentinel方式&#xff0c;这里我们看第三种模式-Cluster方式。 目录 1.前两种集群模式的特征与不足 2.Cluster模式 2.1 Cluster模式原理 2.2 数据分片与槽位 2.3 Cluster模式配置和实现 3.一致性Hash 3.1 哈希后取模 3.2 一致性Hash算法…

幻兽帕鲁开服教程——游戏

幻兽帕鲁开服教程——游戏 1. 安装服务器2. 服务器配置调整3. 运行环境Microsoft Visual C Runtime4. 加入服务器 这是研究开服时顺手写的笔记&#xff0c;也方便后来者。 如果你熟悉你所使用的操作系统的话&#xff0c;windows和linux应该区别不大。 1. 安装服务器 1.安装ste…

HarmonyOS应用开发的工程目录结构

在介绍鸿蒙应用开发的细节&#xff0c;我们来了解工程目录结构&#xff0c;这样我们才知道我们能做什么。 我们现在来一一介绍这些目录都是用来做什么的。 AppScope > app.json5 应用级的配置信息 AppScope > resources 这个目录下的base>element用于存放全局使用的…

跑分方面,这款 JavaScript 库在全球框架榜单中的表现比 React 要好得多

最初的动机 2021 年 11 月 左右&#xff0c;Strve 第一个版本发布&#xff0c;社区的反馈大部分是支持&#xff0c;也有少部分小伙伴提出了质疑&#xff0c;这都正常。你只要在社区发布一些作品&#xff0c;就必须接受其他人对你的作品的评价。 当初&#xff0c;开发 Strve 的…

循序渐进学 JavaScript <二>

续 <一> 九、JavaScript常见内置类 9.1 原始类型的包装类 基本数据类型也可以调用属性 在理论上来说它们是没有办法获取属性或者调用方法的 原始类型是简单的值&#xff0c;默认并不能调用属性和方法js 为了可以使其获取属性和调用方法&#xff0c;对其封装了对应的包装…

CTFhub-bak文件

CTFhub-Web-信息泄露-备份文件下载-bak文件 题目信息 解题过程 看到提示说和index.php有关&#xff0c;在url后面加index.php.bak&#xff0c;跳转到http://challenge-7a4da2076cfabae6.sandbox.ctfhub.com:10800/index.php.bak网址&#xff0c;即&#xff1a; 跳转到下载页…

清理docker 无用数据

df -h 查看 overlay 使用88% docker ps 我只要跑一个 把没有用的删除了去 让chatgpt 帮搞一搞 删除未使用的 Docker 镜像、容器、卷和网络&#xff0c;您可以按照以下步骤操作。请注意&#xff0c;在进行这些操作之前&#xff0c;确保您不再需要这些资源&#xff0c;因为删…

Elasticsearch的映射操作

本文来记录下Elasticsearch的映射操作 文章目录 映射的概述 映射的概述 Elasticsearch与mysql数据库对比 映射的概述 有了索引库&#xff0c;等于有了数据库中的 database。索引库(index)中的映射&#xff0c;类似于数据库(database)中的表结构(table)。创建数据库表需要设置字…

一文理解Python选择语句

在编程领域中&#xff0c;条件判断和选择是非常基础而且重要的一个部分。Python 作为一种被广泛应用的编程语言&#xff0c;提供了多种选择语句来满足不同的条件判断需求。本文将深入探讨 Python 中的选择语句&#xff0c;包括 if 语句、elif 语句、else 语句、简写的条件表达式…