面向低成本巡线机器人的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,一经查实,立即删除!

相关文章

【DP】动态规划基本解题步骤(求解台阶问题)

dp数组的定义和下标递推公式dp数组如何初始化,初始化也需要注意遍历顺序打印dp数组(出现问题 对于高度为 n 的台阶,从下往上走,每一步的阶数为 1,2,3 中的一个。问要走到顶部一共有多少种走法 分析&#…

python中良好的编码规范

遵循PEP 8的常见规范: 缩进: 使用4个空格来缩进代码块,而不是使用制表符。 命名规范: 变量名应该使用小写字母,单词之间用下划线 _ 分隔(snake_case)。类名应该使用驼峰命名法(Camel…

C++ 模板知识大全

模板 泛型编程 我们如何实现一个交换函数 我们实现了两种类型的交换函数,但是其实除了类型不一样,其他地方都是一样的。 void swap(int& a, int& b) {int tmp a;a b;b tmp; }void swap(char& a, char& b) {int tmp a;a b;b tmp…

关于DCMM评估的办理条件你知道多少?

DCMM(数据管理能力成熟度评价模型)评估划分为五个等级,自低向高依次为初始级、受管理级、稳健级、量化管理级和优化级,不同等级代表企业数据管理和应用的成熟度水平不同,证书自颁发之日起有效期3年 DCMM申报基础条件 …

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

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

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

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

设计模式学习笔记 - 设计模式与范式 -结构型:1.代理模式:代理在RPC、缓存、监控等场景中的应用

概述 前面几个章节,我们学习了设计模式中的创建型模式。创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。 单例模式用来创建全局唯一的对象。工厂模式用来创建不同但是相关类型的对象(继承…

文件操作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:窗…

LEETCODE-DAY29

title: LEETCODE-DAY29 date: 2024-03-20 15:22:38 tags: 今日内容:491.递增子序列、46.全排列、47.全排列 II T1 class Solution:def backtracking(self,nums,index,path,res):if indexlen(nums):res.append(path.copy())returnfor i in range(index,len(nums))…

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

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

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

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

6、jenkins项目构建类型1-项目类型介绍

文章目录 一、自由风格项目二、Maven项目构建三、Pipeline流水线项目构建(☆☆☆) Jenkins中自动构建项目的类型有很多,常用的有以下三种: 自由风格软件项目(FreeStyle Project)Maven项目(Mave…

初始Redis关联和非关联

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

Maya FBX导出导入

问题描述: Maya 导出导入 FBX,设置 FBX 的 导入和导出设置 解决方案: 获取FBX设置 def getFBXSettings():""" get current user settings for FBX export and store them """mel.eval(FBXPushSettings;)de…

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

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

自锁电路设计

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

glsl改变纹理坐标来放大图像

使用glsl中的顶点着色器来改变坐标位置 // 顶点着色器 #version 330 core layout (location 0) in vec2 Position; // 位置坐标 layout (location 1) in vec2 TexCoord; // 原始纹理坐标 out vec2 FragTexCoord; // 输出给片段着色器的纹理坐标 void main() {gl_Position …