面向低成本巡线机器人的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.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

桌面显示器PD芯片:引领桌面显示技术的新篇章

随着科技的飞速发展,桌面显示器作为人们日常工作与生活中不可或缺的重要设备,其性能与品质也在不断提升。其中,PD芯片作为桌面显示器中的核心组件,发挥着至关重要的作用。本文将对桌面显示器PD芯片进行详细介绍,探讨其…

【排序算法】插入排序与选择排序详解

文章目录 📝选择排序是什么?🌠选择排序思路🌉 直接选择排序🌠选择排序优化🌠优化方法🌉排序优化后问题 🌠选择排序效率特性 🌉插入排序🌠插入排序实现 &#…

总结虚函数表机制——c++多态底层原理

前言: 前几天学了多态。 然后过去几天一直在测试多态的底层与机制。今天将多态的机制以及它的本质分享给受多态性质困扰的友友们。 本节内容只涉及多态的原理, 也就是那张虚表的规则,有点偏向底层。 本节不谈语法!不谈语法&#x…

每日一题|djwcb【算法赛】|字符串快速幂

每日一题|djwcb【算法赛】 djwcb 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 djwcb 注意: 快速幂字符串,看…

js获取cookie

js获取cookie 前言实现讲解特别注意: 前言 主要是通过document.cookie来进行实现的 实现讲解 首先通过document.cookie 来获取到所有的cookie 然后通过分号进行分割成list 然后循环list,将list中的字符串通过首个等号进行分割然后和指定的cookie名进行比对然后返…

Android 导航方式切换

1.导航栏样式目前有,三键导航,也有全局手势导航,具体的设置是在setting里 setting里对应的 代码逻辑在packages\apps\Settings\src\com\android\settings\gestures\SystemNavigationPreferenceController.java static boolean isOverlayPacka…

芯片设计工程师必备基本功——《Verilog+HDL应用程序设计实例精讲》

进入芯片行业需要学习哪些基本功呢?其实芯片设计工程师的技能是通过多年的经验学习的。在您开始作为芯片设计工程师工作之前,很难给出一个需要的全面的单一列表,也不可能学习所有内容。话虽如此,但您开始芯片设计师职业生涯时必须…

图论基础|417. 太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙

目录 417. 太平洋大西洋水流问题 827.最大人工岛 127. 单词接龙 417. 太平洋大西洋水流问题 题目链接(opens new window) 有一个 m n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界…

EDR下的线程安全

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

C语言---------strlen的使用和模拟实现

字符串是以‘\0’作为结束标志&#xff0c;strlen函数的返回值是‘\0’前面的字符串的个数&#xff08;不包括‘\0’&#xff09; 注意 1&#xff0c;参数指向的字符串必须以‘\0’结束 2&#xff0c;函数的返回值必须以size_t,是无符号的 使用代码 ​ #include<stdio.…

数据库备份和恢复

前期准备 至少准备两台虚拟机完成Mysql的相关操作&#xff01; 在生产环境中&#xff0c;数据的安全性至关重要&#xff0c;任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因&#xff1a; 程序错误人为操作错误运算错误磁盘故障&#xff1a; 解决措施&#xff1a;rai…

eric7安装报错

如果你遇到这样的问题&#xff1a; Sorry, please install QScintilla2 and its PyQt6 wrapper. Error: DLL load failed while importing Qsci: 找不到指定的程序。 如果你遇到这样的回答pip install QScintilla 如果你执行了这样的命令后&#xff0c;依旧报上面的错&#xf…

Word邮件合并

Word邮件合并功能可以解决在Word中批量填写内容的需求&#xff0c;当需要大量格式相同&#xff0c;只修改少数相关内容时&#xff0c;例如利用Word制作工资条&#xff0c;通知函&#xff0c;奖状等等&#xff0c;同时操作也非常简单灵活。下面通过例子来说明邮件合并的使用方法…

隧道技术和代理技术(四)SSHDNSICMPSMB上线通讯

目录 SSH&DNS&ICMP&SMB&上线通讯 DNS 隧道上线 DNS 隧道通讯 SSH 隧道通讯 SSH 隧道上线 SSH&DNS&ICMP&SMB&上线通讯 -连接方向&#xff1a;正向&反向&#xff08;基础课程有讲过&#xff09; -内网穿透&#xff1a;解决网络控制上…

《数据安全技术 数据分类分级规则》及典型行业标准指南要点提炼

数据分类分级发布新国标 千呼万唤&#xff0c;国家标准GB/T 43697-2024《数据安全技术 数据分类分级规则》于3月21日正式发布。作为全国网络安全标准化技术委员会更名后&#xff0c;发布的第一部以“数据安全技术”命名的国家标准&#xff0c;《数据安全技术 数据分类分级规则…

C++内存分布知识点复习

C内存分布&#xff08;只是用来自己复习&#xff0c;如果侵权了请联系&#xff0c;马上删除&#xff09; 看看自己是否了解 #define _CRT_SECURE_NO_WARNINGS #include<malloc.h> int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVa…

优秀人才必须具备的5个基本素质?

哈喽&#xff0c;大家好啊&#xff0c;我是雷工&#xff01; 张一鸣曾经在其微博上说过这么一句话&#xff1a; 选择越高级影响越大的人才&#xff0c;越要看一些基本素质。 那么优秀人才都具备哪些较好的基本素质呢&#xff1f; 或者说要具备哪些基本素质才有望成为高级人才&a…

[文生音乐]Suno AI:一句话,创作自己的音乐,全民创作人时代!

前言&#xff1a; 今年继AI生成文字&#xff08;Claude3&#xff09;、AI生成图片&#xff08;Midjourney&#xff09;、AI生成视频&#xff08;Sora&#xff09;之后&#xff0c;国外的AI公司又推出了一个劲爆的工具&#xff1a;Suno AI&#xff0c;通过一段简短的描述&#…

4G/5G视频记录仪_联发科MTK6765平台智能记录仪方案

视频记录仪主板采用了联发科MT6765芯片&#xff0c;该芯片采用12nm FinFET制程工艺&#xff0c;8*Cortex-A53架构&#xff0c;搭载安卓11.0/13.0系统&#xff0c;主频最高达2.3GHz&#xff0c;待机功耗可低至5ma&#xff0c;并具有快速数据传输能力。配备了2.4英寸高清触摸显示…

解决 cv2.imread读取带中文路径图片问题

http://t.csdnimg.cn/i8CXn 1.问题&#xff1a; # 中草药数据集样本可视化展示 import cv2 import matplotlib.pyplot as plt %matplotlib inline plt.title("heshouwu") plt.imshow(cv2.imread(r"D:\home\aistudio\data1\archive\train\何首乌\heshouwu_0001.…