职场文秘网

首页 > 心得体会 > 学习材料 / 正文

基于uC/OS-Ⅲ的巡线机器人多任务控制算法研究

2023-05-08 12:00:08

王 彬

(池州职业技术学院 机电与汽车系,安徽 池州 247000)

巡线机器人的出现使人们的工作量得到了很大程度的减轻[1]。最初的机器人只是按照人们设计的固定程序做出对应的动作,无法根据外界条件改变已设置好的程序。随着科技的进步,机器人逐渐走向智能化。例如搭载传感器的机器人拥有与人类相似的感官,并且有了一定的判断能力,能在人类设定的原则内修改自己的程序[2]。其中,基于实时操作系统(RTOS)的巡线机器人具有障碍物识别、运动轨迹控制和自主越障等能力,并能依靠内嵌的线路结构参数进行运动行为的规划[3-4]。为了使机器人能够同时完成多项任务,具有一定的自我调节能力,在算法方面需要进行合理的设计。其中,不同的控制算法对电机的控制性能存在较大差异[5]。本研究基于uC/OS-III操作系统,以STM32F107型处理器为核心进行多任务处理,采用光电检测电路采集路径信息,使用直流电机进行驱动设计了巡线机器人小车,以期为工业中的产品运送、巡航和探索其他领域提供理论支撑。

1.1 uC/OS-III

与通用计算机系统相对应,嵌入式系统也被称为嵌入式计算机系统[6]。其中,uC/OS-III拥有良好的移植性和可固化、可扩展的特点,并且还具有优先抢占的实时性和强大的多任务内核。与上一代相比它最大的改进之处在于允许多个任务运行于同一优先级上,在同一个优先级的各个任务会按时间片轮转方式被调度,内核对象的数量不受限制,终端禁用时钟周期也被提升至几乎为0。uC/OS-III支持无限多个任务、无限多个优先级和无限多个信号量,同时支持互斥信号量、消息邮箱等任务间通信方式。uC/OS-III中的任务有两个特点,一是任务必须是无限循环的,二是每个任务对应一个优先级,并且每个优先级都是全局唯一的。从用户角度来看,任务可以有5种状态:睡眠状态、就绪状态、运行状态、等待状态、中断服务状态。

睡眠状态:即初始状态,此时任务还没有被加载;
就绪状态:调用OSTaskCreate,任务被初始化后等待内核选择并运行;
运行状态:OSStat调用后,就绪状态中优先级最高的任务进入运行状态;
等待状态:运行状态的任务调用了延时、任务同步/通信后进入等待状态;
中断服务状态:运行状态的任务被中断服务程序打断,进入该状态。各个状态之间满足特定条件时可以相互转换,任务转换关系如图1所示。

图1 任务转换关系

1.2 巡线算法

主要的巡线算法有PI算法、PID算法、模糊PID算法等,其控制流程见图2。

图2 控制算法设计流程

1.2.1PI算法

1.2.2PID算法

1.2.3模糊PID算法

模糊PID算法是在传统PID算法的基础上,对速度误差和速度误差微量进行模糊控制的方法[9]。根据采集到的数据可以进行更多计算,通过实时性任务调度,可以更快地对机器人进行适当调节,使机器人能够更好地完成预定工作。模糊PID算法的控制流程见图2(c),其中控制参数中的输入为速度误差e和速度误差的微分量ec。模糊控制的PID参数分别为kp(t+1)=kp(t)+Δkp,ki(t+1)=ki(t)+Δki,kd(t+1)=kd(t)+Δkd,其中Δkp、Δki和Δkd分别为各个时间周期内的变化量。

1.3 硬件设计

1.3.1微处理器

在开发板的选择上,使用了以STM32F107(VX)型芯片为微处理器的开发板。新型STM32的标准外设包括10个定时器、2个12位模数转换器、2个12位数模转换器、2个I2C接口、5个USART接口和3个SPI端口和3个高质量数字音频接口IIS。STM32F107型芯片具体参数如下:32位ARM Cortex-M3结构优化;
72 MHz运行频率,1.25 DMIPS/MHz;
硬件除法和单周期乘法;
快速可嵌套中断,6~12个时钟周期;
64~256 KB Flash,高达64 KB的SRAM;
RJ45型网络接口,支持10 M/100 M自适应网络。

1.3.2电机驱动

智能车的动力来自后方的电机,使用L298N型电机驱动芯片来控制带有直流H桥的电路以实现电机的正反转,并通过调整输入H桥的脉冲宽度来控制转速,这样操作起来比较方便而且稳定性强。L298N型高电压大电流驱动芯片可以驱动直流步进电机等负载,可以接检测电阻来反馈信息,还具有过压、过流保护的功能,不用担心烧坏电机。

1.3.3灰度传感器

灰度传感器被安装在小车两侧,用来检测当前小车所在的位置和路径信息,并由处理器计算出电机驱动的调整方式以调整电机,使小车能正确识别路线并按照预设路线行驶。灰度传感器可以利用不同颜色的光反射对光敏电阻造成的阻值变化,以此进行颜色深度检测。灰度传感器上有一个发光二极管和一个光敏电阻,安装在同一面上。工作时,在有效距离内,检测面会接收到由发光二极管发出的被反射后的光,光敏电阻会根据接收到的光线强度转换为可识别信号。最终得到实际使用的小车,实物见图3。

图3 小车实物图

1.4 软件设计

本算法是基于uC/OS-III中的多任务管理和任务间通信机制设计的。本系统使用移植了uC/OS-III的STM32开发板,由灰度传感器采集所需要的路面信息后,通过开发板的I/O接口交给处理器,处理器分析收集到的数据和马达转速,对马达进行调节,使小车能巡线运行。小车总体控制结构见图4。

图4 小车控制结构示意图

1.4.1uC/OS-III的移植

首先要获得STM32的库文件和uC/OS-III的源码,把STM32的库文件放进uC/OS-III文件夹中,用IAR创建一个工程,添加源文件,进行IAR的参数设置。然后把主程序(main.c)中的#include "stm32_eval.h"语句删除,找到stm32f10.h后选择芯片。接下来全部重建(rebuild all),正式开始移植uC/OS-III。在之前的uC/OS-III文件夹里建立bsp文件夹,从源代码中复制uc-cpu、uc-lib、ucos-III到该文件夹下,将bsp.c和bsp.h复制到bsp文件夹下,添加源文件到IAR;
删除bsp.c里BSP_Init函数的内容,屏蔽PendSV_Handler和SysTick_Handler函数,修改os_cpu_c.c355行和os_cpu.h133行的函数名;
修改os_cpu_a.asm的38行和133行代码。编译时会出现“无法打开app_cfg.h”的提示,定位这句话并且删除,如果出现“无法打开os_type.h”的提示,则去源代码目录下将这个文件放进工程的App目录下。重新编译时,如出现别的错误,则参考上述方法进行对应的删除或添加文件操作。编译时去掉对应函数前面的static,也可以直接运行。最后进行系统测试。

1.4.2uC/OS-III的内部任务

uC/OS-III的内部任务主要包括空闲任务和时基任务。①空闲任务:OS_IdleTask()是uC/OS-III最先创建的任务,它独占了最低优先级。当有新任务创建时,OSTaskCreate()确保新任务的优先级不为最低,并且当CPU中无其他就绪任务运行时,空闲任务就开始运行。空闲任务运行时,处理器会处于低功耗模式,只要有其他就绪任务运行,ISR就不会切换至空闲任务,直到就绪任务都完成。等待事件发生前,系统切换到OSIdleTaskHook(),CPU进入低功耗模式。②时基任务:OS_TickTask()是个周期性任务,它等待来自tick ISR的信号量,用于记录任务等待期满的时间或者等待内核对象超时,它的优先级一般只略低于最重要任务。

1.4.3内部任务管理

基于uC/OS-III的任务管理机制和系统的功能要求,把任务划分为3个系统任务,并设置每个任务的优先级(表1)。其中,Start_Task获取灰度传感器采集到的数据,使用PID算法进行分析处理,得出电机驱动参数,并将参数赋值给全局变量,以在电机驱动任务中使用。Start_Task1将灰度传感器采集到的数据赋值给全局变量,以在PID算法分析任务中使用。Start_Task2对PID算法分析之后得出的电机驱动参数进行处理,更新输出,完成机器人所需运动轨迹姿态的调整。

表1 各任务优先级

2.1 机器人小车巡线性能测试与优化结果

以PID算法为例,在测试阶段使用了如图5所示的路径对巡线机器人小车进行性能测试。

图5 测试路径

实际测试时采取顺时针和逆时针的方法,从不同的起点开始运行3圈。同样方向和起点的测试进行3次取平均值,所有测试结果取平均值后精确到秒,结果见表2。

表2 小车巡线测试结果

从表2可以看出,小车顺时针运行时主要进行右转和直行,逆时针运行时则主要进行左转和直行。右转所需的响应时间比左转要长一些,故需要对小车右侧传感器位置进行微调。调整传感器位置后,小车在同一起点的顺时针运行和逆时针运行用时基本一致。起点为B和D的测试用时比起点为A和C的测试用时长一些,可能是因为起点在弯曲轨迹时对小车巡迹的影响稍大。

2.2 不同控制算法的巡线性能测试结果

为了分析不同算法对机器人小车巡线性能控制的差异,以A为起点,分别对PI算法、PID算法和模糊PID算法控制的机器人小车进行顺时针巡线测试。分别设置1圈、3圈、5圈、10圈和20圈共5组,每组平行测试3次,所有测试结果取平均值后精确到秒,结果见表3。

表3 不同控制算法的巡线测试结果

从表3可以看出,在测试圈数不变的情况下,完成测试用时由短至长的排序为模糊PID算法、PID算法、PI算法。同一控制算法中,随着测试圈数的增加,完成每圈测试的平均用时逐渐增加,说明各个算法在长时间运行过程中可靠性逐渐降低,按照平均用时误差由大至小排序为PI算法、PID算法、模糊PID算法。其中,模糊PID算法的误差最小,说明模糊PID算法根据采集到的数据可以进行更多计算,通过实时性任务调度,可以更快地对机器人小车进行适当调节,使机器人小车能够更好地完成预定工作。

本研究基于uC/OS-III实现巡线算法及数据处理,使用灰度传感器进行颜色深浅检测从而判断路径。反馈的数据为数字信号,易于使用,不需要进行A/D转换,可通过量化不同的反馈信息得到路径信息。在控制速度的时候使用PID控制算法,在控制电机的时候为了达到尽快加速或减速的目的,主要使用了P控制,在不同速度期望值下引入了不同PID参数。此外,分别采用PI算法、PID算法和模糊PID算法对机器人小车进行巡线测试发现,模糊PID算法更能满足巡线机器人的工作需求。

猜你喜欢巡线小车灰度采用改进导重法的拓扑结构灰度单元过滤技术北京航空航天大学学报(2022年6期)2022-07-02春光美巡线忙中国电业与能源(2021年4期)2021-05-22大车拉小车快乐语文(2020年36期)2021-01-14自制小车来比赛科学大众(2020年17期)2020-10-27出没风波里,踏浪去巡线广西电业(2020年11期)2020-03-23刘老师想开小车文苑(2018年22期)2018-11-19无人机在电力巡线中的应用模式研究无人机(2018年1期)2018-07-05两轮自平衡小车的设计与实现电子制作(2018年8期)2018-06-26基于最大加权投影求解的彩色图像灰度化对比度保留算法自动化学报(2017年5期)2017-05-14基于灰度线性建模的亚像素图像抖动量计算光学精密工程(2016年1期)2016-11-07

Tags: 人多   算法   线机  

搜索
网站分类
标签列表