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

本文主要是介绍【轮式平衡机器人】——角度/速度/方向控制分析软件控制框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

相关文章

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

Ubuntu 怎么启用 Universe 和 Multiverse 软件源?

《Ubuntu怎么启用Universe和Multiverse软件源?》在Ubuntu中,软件源是用于获取和安装软件的服务器,通过设置和管理软件源,您可以确保系统能够从可靠的来源获取最新的软件... Ubuntu 是一款广受认可且声誉良好的开源操作系统,允许用户通过其庞大的软件包来定制和增强计算体验。这些软件

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

Spring中Bean有关NullPointerException异常的原因分析

《Spring中Bean有关NullPointerException异常的原因分析》在Spring中使用@Autowired注解注入的bean不能在静态上下文中访问,否则会导致NullPointerE... 目录Spring中Bean有关NullPointerException异常的原因问题描述解决方案总结

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

python-nmap实现python利用nmap进行扫描分析

《python-nmap实现python利用nmap进行扫描分析》Nmap是一个非常用的网络/端口扫描工具,如果想将nmap集成进你的工具里,可以使用python-nmap这个python库,它提供了... 目录前言python-nmap的基本使用PortScanner扫描PortScannerAsync异

Python实现局域网远程控制电脑

《Python实现局域网远程控制电脑》这篇文章主要为大家详细介绍了如何利用Python编写一个工具,可以实现远程控制局域网电脑关机,重启,注销等功能,感兴趣的小伙伴可以参考一下... 目录1.简介2. 运行效果3. 1.0版本相关源码服务端server.py客户端client.py4. 2.0版本相关源码1

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核