面向低成本巡线机器人的PID控制器优化——文末源码

目录

介绍

测试

电子元器件

系统特征

控制器设计

位置误差的计算

比例控制

积分控制

微分控制

改进的PID控制器

测试轨迹

源码链接


本文对经典PID控制器的改进和开环控制机制的发展进行了讨论,以提高差动轮式机器人的稳定性和鲁棒性。为了部署该算法,使用低成本、现成的组件,包括微控制器、反射率传感器和电机驱动器,构建了一个测试平台。本文描述了用于辨识系统特性以及优化控制器的启发式方法。对PID控制器进行了详细的分析。代码在文末。

介绍

导航是机器人应用中必不可少的一部分。要完成特定的任务,机器人遵循特定的路径是至关重要的。在高级应用中,机器人配备了先进的传感器,如深度相机、雷达和激光雷达,以增强感知能力。这些传感器的可用性使开发更复杂和高保真度的定位和地图算法成为可能。然而,这些传感器价格昂贵。某些需要在相对固定的环境中进行重复运动的任务,可以通过具有成本效益的应用来完成。例如,只有一个反射传感器阵列的直线跟踪机器人,可以用来承载工厂中从一点到另一点的特定负载。然而,增加积分增益会引起超调。由此产生的超调会导致系统表现出不稳定的行为。微分控制器的主要作用是减小超调量和加快瞬态响应速度。它可以被认为是一种检测系统中未来错误的机制。由于积分控制以超调量为代价来最小化稳态误差,因此可以使用导数控制来最小化超调量,以增加系统的鲁棒性。然而,微分控制器由于微分放大了高频信号,在噪声存在的情况下可能导致系统不稳定。本研究采用PID控制器,开发了一种高速、高保真的线跟踪控制器。

测试

图1显示了在整个研究中使用的两个巡线机器人作为测试平台。采用了两台低成本的6V直流减速电机。电机转速为250转/分,直流输入电压为6 ~ 7 V。由于他们有一个变速箱,他们产生足够的扭矩以获得更快的响应。这些电机的优点之一是成本低,并且可以应用较高的输入电压,以达到较高的RPM值,从而缩短运行时间。直流电机通过使用两个塑料件和两个螺钉固定在机架上。在循迹机器人中,车轮在机器人对路径的搬运中起着重要的作用。为了防止机器人打滑,特别是在急转弯时,需要较高的路面保持性。选择了车轮,以尽量减少打滑和增加机器人的能力。由于最重的部件是电池,所以要进行操作。随着质心越靠近机器人前部,滑移量越大。另一方面,随着质心向后方靠拢,则前方急转直下。因此,质心相对于机架中心已经居中。此外,地面与底盘之间的距离一直保持较短,这也是影响稳定性的另一个方面,尤其是在急转弯时。这样,QTR - 8反射率传感器也变得更容易放置在离地面更近的地方。

图1 巡线机器人的顶视图、侧视图和后视图。

电子元器件

1 )电机驱动:采用具有L298N双全桥驱动器的电机驱动模块来驱动两台直流电机。该电机驱动模块采用13 V直流电压供电。它还具有5 V直流稳压器,用于给STM32供电。该电机有4个输入引脚,通过输入PWM信号来控制电机的旋转方向和转速。输出引脚为直流电机专用,可为每台电机提供最大2 A的电流。电机驱动模块已经安装在机器人前方。

2 )微控制器:为了读取传感器值并驱动直流电机,需要一个微控制器。本研究采用STM32F103C8单片机。系统时钟设置为72 MHz。APB2定时器时钟工作在72 MHz。预分频器为79,计数器周期为999,产生900 Hz的PWM信号。占空比由PID控制器进行自适应调节。微控制器的4个引脚已用于PWM生成。

3 )电池:6节MH Ni充电电池与4节AA碱性电池串联为机器人供电。这样共得到13 V直流输入电压。电池正极端与电机驱动器的12V输入引脚相连。观察到从电机驱动器内部调节器获得5 V输出电压至少需要7 V的输入电压,这样STM32和QTR - 8反射率传感器都能高效工作。系统绘制的电流总值约为1安培。其中很大一部分电流由直流电机消耗。

图2 巡线机器人的电路原理图。

4 )传感器:QTR - 8传感器用于机器人跟随直线。该模块上有8个反射率传感器。这些传感器由红外光发射器、在红外光照射下开关的MOSFET和电容器组成。MOSFET控制电容器的接地。与传感器相对应的8个引脚与STM32的GPIO引脚相连,如图2所示,用于写入和读出操作。在进行读数操作之前,需要对电容器进行充电。为此,在输出模式下将逻辑1写入GPIO端口。如果MOSFET暴露在红外光下,电容与地相连,因此它们被放电。因此,在几毫秒后,GPIO引脚被切换到输入模式。对于特定的传感器,如果读数为逻辑0,则意味着存在反射

图3 系统辨识中使用的单位反馈系统框图。

电容放电所花费的时间,从而降低了传感器的采样率。

系统特征

采用启发式方法来辨识系统特性,而不是使用微分驱动运动学。在实现PID控制器之前,图3所示的统一反馈系统在机器人上进行了实验。在直线为直线的路径中,从非零误差开始,机器人以等量左右摆动。这意味着对于一条直线轨迹,存在零稳态跟踪误差。因此,可以断定该系统在原点至少有一个极点。然后,机器人以非零的位置误差开始放置在轨迹的弯曲区域。观察到系统更多地向曲率的反面振荡。这意味着遵循c存在稳态误差

控制器设计

控制器算法的总体结构如图4所示。首先,从传感器获得读数。基于此读数,得到一个位置信息,使得控制器知道线在哪里。然后,计算误差并反馈给PID控制器,PID控制器控制用于更新电机转速的误差项。然而,在输入新的PWM值之前,开环控制检查传感器是否错过线路。需要开环控制来处理测试轨迹中的拐角。这也提高了弯曲路径下的系统性能。

图4 线跟踪控制器的流程图。

位置误差的计算

根据传感器数据计算误差。每个传感器的读数对应一个位置信息。该位置信息由( 1 )式计算得到。参考位置值为4500表示传感器的中间位置。误差按( 2 )式计算。

若误差值为负,则表明机器人向右滑动。若误差值为正,则机器人向左偏离直线。PID控制器对电机转速进行控制。若计算误差为负,则减小左侧电机的转速,增大右侧电机的转速,使机器人向左侧运动,消除误差。若误差值为正,则左边电机转速升高,右边电机转速降低。然后机器人向右侧移动,消除误差。

比例控制

式( 3 )为比例控制的数学表达式。可以看出,当仅采用P控制时,机器人对直线跟踪过程中出现的误差响应更快。但当kP增益超过一定值时,振荡被发现相当高。当kP增益减小时,振荡减小,但机器人对误差的响应变慢。为此,在系统中加入了导数控制。

积分控制

当单独使用比例控制时,已经观察到稳态误差的发生。积分控制的数学表达式由( 4 )给出。积分项表示过去误差的总和。因此,结合kI积分增益,积分反馈通过在原点引入一个极点来最小化稳态跟踪误差。

在系统辨识阶段,不采用PID控制器的单位反馈实现表明该系统在原点至少存在一个极点。然而,系统不能够无稳态误差地跟踪弯曲路径。为了最小化弯曲路径下的稳态跟踪误差,在控制器中加入了积分项。然而,由于路径的形状并不总是直的,因此从一开始就对所有过去的错误进行加总是无效的。为了提高积分控制对路径曲率变化的响应,仅考虑过去5次误差。因此,对经典积分控制进行了修正,如式( 5 )所示。

微分控制

式( 6 )为经典微分控制的数学表达式。加入了微分控制来消除比例项和积分项引起的振荡和超调。

D控制防止了系统的超调,改善了系统的瞬态响应。但需要注意的是,D控制对噪声敏感[ 5 ]。D控制对噪声敏感的原因是它像一个高通滤波器放大了误差的瞬时变化。在机器人的研制过程中,噪声的影响还没有见到很多。因此,经典导数被修改为( 7 )式,因此计算是通过找到当前和以前的误差之间的差异来完成的。

改进的PID控制器

式( 8 )表达了经典PID控制。经过上述修改,PID控制器的整体数学表达式如式( 9 )所示。在该控制器中,比例项用于最小化位置误差,积分项用于最小化弯曲路径中的稳态误差,导数项用于最小化振荡行为和超调。

测试轨迹

图7展示了由90 °和45 °转弯的直线、曲率和转角组成的测试轨迹。履带由浅色木板制成。为了使反射率传感器高效工作,使用了黑色的电工胶带来创建路径。在未实施开环控制前,电池电压为10.2 V时,机器人无法处理45 °转弯。在实现了所有传感器都不在直线上,只考虑最左和最右传感器的开环控制后,机器人在9.2秒内完成了轨迹跟踪。以进一步缩短完成时间,电池电压提升至13 V。然而,机器人开始出现急转弯跟线失败。为了处理弯道中的急转弯和提高系统性能,对开环控制进行了改进。最终,在电池电压为13 V,PWM占空比为92 %的条件下,机器人在7.8 s内成功完成了循迹。

图7 测试轨迹

源码链接

https://download.csdn.net/download/m0_61712829/89004452?spm=1001.2014.3001.5501


参考文献:

[1] V. Balaji, M. Balaji, M. Chandrasekaran, M. K. Khan, and I. Elamvazuthi, “Optimization of PID Control for High Speed Line Tracking Robots,” in Procedia Computer Science, 2015.

[2] A. Latif, H. A. Widodo, R. Rahim, and K. Kunal, “Implementation of Line Follower Robot based Microcontroller ATMega32A,” Journal of Robotics and Control (JRC), 2020.

[3] K. M. Hasan, Abdullah-Al-Nahid, and A. Al Mamun, “Implementation of autonomous line follower robot,” in 2012 International Conference on Informatics, Electronics and Vision, ICIEV 2012, 2012.

[4] M. Pakdaman, M. M. Sanaatiyan, and M. R. Ghahroudi, “A line follower robot from design to implementation: Technical issues and problems,” in 2010 The 2nd International Conference on Computer and Automation Engineering, ICCAE 2010, 2010.

[5] G. Franklin, J. D. Powell, and A. Emami-Naeini, “Feedback control of dynamic systems, 3e,” in American Society of Mechanical Engineers, Dynamic Systems and Control Division (Publication) DSC, 1994.

[6] Samet Oguten,Bilal Kabas.PID Controller Optimization for Low-cost Line Follower Robots[Z].arxiv,2021.

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

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

相关文章

香港科技大学(广州)先进材料学域可持续能源与环境学域智能制造学域博士招生宣讲会——北京专场(暨全额奖学金政策)

三个学域代表教授亲临现场,面对面答疑解惑助攻申请!可带简历现场咨询和面试! 💰一经录取,享全额奖学金1.5万/月! 报名链接: https://www.wjx.top/vm/wF2Mant.aspx# 地点:中关村皇冠…

Redis中RDB的dirty机制和AOF中的后台重写机制

RDB的dirty计数器和lastsave属性 服务器除了维护saveparams数组之外,还维持着一个dirty计数器,以及一个lastsave属性: 1.dirty计数器记录距离上一次成功执行SAVE命令或者BGSAVE命令之后,服务器对数据库状态(服务器中的所有数据库)进行了多少次修改(包括…

文件操作3

随机读写数据文件 一、随机读写原理 在我们写数据时,有一个光标不断的在随着新写入的数据往后移动; 而读数据时,也有一个看不见光标,随着已经读完的数据,往后移动 这里的文件读写位置标记——可以想象成图形界面里的…

QB PHP 多语言配置

1: 下载QBfast .exe 的文件 2: 安装的时候 ,一定点击 仅为我 安装 而不是 所有人 3: 如果提示 更新就 更新 , 安装如2 4: 如果遇到 新增 或者编辑已经 配置的项目时 不起作用 : 右…

05:HAL-----看门狗WDT

目录 一:看门狗 1:WDT 2:独立看门狗 (IWDG) A:IWDG框图 B:IWDG_KR键寄存器 C:IWDG超时时间 D:HAl库的配置 3:窗口看门狗 (WWDG) A:WWDG框图 B:WWDG工作特性 C:WWDG超时时间 D:HAL库配置 4:独立看门狗和窗口看门狗的区别 5:数据手册 二:案例 A:独立看门狗 B:窗…

springboot项目学习-瑞吉外卖(4)

1.任务 这一节主要的任务是解决文件的上传和下载功能 2.文件上传 概念:将本地的图片上传到浏览器上面 点击文件上传,前端就会发送如上的请求,服务端应该根据URL和请求方法来处理请求 CommonController类: RestController Slf4j …

【第二部分--Python之基础】

一、初识 开发语言: 高级语言:Python Java PHP C# Go Ruby C ... > 字节码 低级语言:C 汇编 > 机器码 …

初始Redis关联和非关联

基础篇Redis 3.初始Redis 3.1.2.关联和非关联 传统数据库的表与表之间往往存在关联,例如外键: 而非关系型数据库不存在关联关系,要维护关系要么靠代码中的业务逻辑,要么靠数据之间的耦合: {id: 1,name: "张三…

指针知识大礼包,让你的编程之路更顺畅(一)

1. 内存和地址 2. 指针变量和地址 3. 指针变量类型的意义 4. const修饰指针 5. 指针运算 6. 野指针 7. assert断⾔ 8. 指针的使⽤和传址调⽤ 正文开始 1. 内存和地址 1.1 内存 在讲内存和地址之前,我们想有个⽣活中的案例: 假设有⼀栋宿舍楼&a…

自锁电路设计

自锁电路设计 Hi,uu们,是不是经常要用到自锁电路,通常不是使用555芯片就是用比较器来做自锁,今天我们来简单看下自锁电路的设计.图1采用了比较器构建了一个自锁电路,采用低电平复位,当需要复位的时候志需要将反向端的二极管拉低一下即可,免去 三极管控制…

springboot 大文件分片上传

springboot 大文件分片上传 constantentityvocontrollerutils大文件分片上传是一种将大文件分割成多个小文件片段,然后分别上传这些小文件片段的方法。这种方法的好处包括: 减少重新上传开销:如果网络传输中断,只需重传未上传的部分,而不是整个文件。 提高灵活性:分片大小…

【Selenium】隐藏元素的定位和操作|隐藏与isDisplay方法

一、selenium 中隐藏元素如何定位? 如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方法就行了 但是吧~~~能定位到并不意味着能操作元素(如click,clear,send_keys) 二、隐藏元素 如下图有个输入框…

Alibaba spring cloud Dubbo使用(基于Zookeeper或者基于Nacos+泛化调用完整代码一键启动)

Quick Start Dubbo&#xff01;用更优雅的方式来实现RPC调用吧 - 掘金 dubbozookeeper demo 项目结构&#xff1a; RpcService 仅仅是提供服务的接口&#xff1a; public interface HelloService {String sayHello(String name); }DubboServer pom&#xff1a; <?xm…

EDR下的线程安全

文章目录 前记进程断链回调执行纤程内存属性修改early birdMapping后记reference 前记 触发EDR远程线程扫描关键api&#xff1a;createprocess、createremotethread、void&#xff08;指针&#xff09;、createthread 为了更加的opsec&#xff0c;尽量采取别的方式执行恶意代…

【Flutter学习笔记】10.3 组合实例:TurnBox

参考资料&#xff1a;《Flutter实战第二版》 10.3 组合实例&#xff1a;TurnBox 这里尝试实现一个更为复杂的例子&#xff0c;其能够旋转子组件。Flutter中的RotatedBox可以旋转子组件&#xff0c;但是它有两个缺点&#xff1a; 一是只能将其子节点以90度的倍数旋转二是当旋转…

2002-2023年各地级市环境规制强度数据(环保词频统计)

2002-2023年各地级市环境规制强度数据&#xff08;环保词频统计&#xff09; 1、时间&#xff1a;2002-2023年 2、来源&#xff1a;政府工作报告 3、指标&#xff1a; 行政区划代码、年份、城市、所属省份、文本总长度、仅中英文-文本总长度、文本总词频-全模式、文本总词频…

瑞_23种设计模式_职责链模式

文章目录 1 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;★★★1.1 介绍1.2 概述1.3 职责链模式的结构1.4 职责链模式的优缺点1.5 职责链模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK源码解析&#xff08;FilterCh…

软件测试 - postman高级使用

断言 概念&#xff1a;让程序代替人判断测试用例执行的结果是否符合预期的一个过程 特点&#xff1a; postman断言使用js编写&#xff0c;断言写在postman的tests中 tests脚本在发送请求之后执行&#xff0c;会把断言的结果最终在testresult中进行展示 常用的postman提供的…

C++剑指offer与高频面试题源码解答与分析

这是博主在当初秋招刷题时候记录的剑指offer第二版以及一些高频题的C源码和解法分析&#xff0c;可以说把这上面的题练好了面试不虚&#xff0c;最后也顺利帮助我拿下baidu ali meituan等多家大厂offer。整篇文章写了大概5W个字&#xff0c;也是积累了很长一段时间的作品&#…

SpringMVC | Spring MVC中的“拦截器”

目录: 一、拦截器 &#xff1a;1. 拦截器的 “概述”2. 拦截器的 “定义” (创建“拦截器”对象)3. 拦截器的 “配置” (让“拦截器”对象生效)4. 拦截器的 “执行流程”“单个拦截器”的执行流程“多个拦截器”的执行流程 二、应用案例一实现用户登录权限验证 作者简介 &#…