发布日期: 2024/01/11 02:55
机器人的模糊控制是一种基于模糊逻辑理论的计算机控制方法,它通过模拟人类思维和决策过程来实现对机器人行为的控制。
本文中所介绍使用的竞技机器人先进模糊控制器是在FreeRTOS环境下基于XR806为项目主控,给机器人部署先进模糊控制器,它通过将机器人的输入信号转化为模糊变量,并根据模糊规则对这些变量进行处理,实现对于竞技机器人的结构控制和定位控制等功能。
开发环境使用window10+VMware+ubuntu 18.04,并基于XR806——FreeRTOS为项目主控,部署先进模糊控制器,实现对于竞技机器人的结构控制和定位控制等。
竞技机器人的无线控制器选择上使用可以实现多维状态机功能的XR806作为主控,并通过USART进行CAN转换来向电机发送信息,收到信息后电机驱动对机器人做出控制,此时机器人通过模糊控制器来反馈定位器、雷达等传感器传来的数据实现信息交互。
在封装好电机驱动电流环时,实现对电机的控制,相当于建立了一种继电特性的非线性控制,此时使用继电整定法的Z-N临界比例度法去建立模糊域。
根据以下临界系数表,整定求出模糊域。
模糊推理的核心就是计算出E和EC的隶属度。同时把E和EC分为多种子集情况:负最大NB,负中NM,负小NS,零ZO,正小PS,正中PM,正大PB等七种情况。然后计算E/EC种子集的隶属度。
进行模糊推理后,可以根据计算的隶属度,建立模糊规则表,实现对输出值的清晰化。对应到应用层的输出函数,实现控制输出。
自动整定部分核心代码:
{
if(pid.AutoRegurating_Status != START) return;
/*定义临界Tc*/
float Tc = 0.0;
static int start_cnt; //记录最大值出现的时间
static int end_cnt; //记录周期结束时的时间值
static uint16_t cool_cnt = 0;
static uint16_t heat_cnt = 0;
// pid.Autotune_Cnt ++; //计数
if((pid.Pv_position == UP) && (pid.Pv < pid.Sv))
{
cool_cnt ++;
if(cool_cnt >= 3) //连续三次都越过,则说明真的越过了
{
pid.Pv_position = DOWN; //标记当前在下方了
pid.Zero_Across_Cnt ++; //标记穿越一次
cool_cnt = 0;
}
}
else if((pid.Pv_position == DOWN)&&(pid.Pv > pid.Sv))//刚才在下方,现在在上方
{
heat_cnt++;
if(heat_cnt >= 3) //连续三次都越过,则说明真的越过了
{
pid.Pv_position = UP; //标记当前在下方了
pid.Zero_Across_Cnt ++; //标记穿越一次
heat_cnt = 0;
}
}
实现模糊控制的核心代码:
ecFuzzy[1] = 1.0 - ecFuzzy[0];
/*********查询模糊规则表*********/
num = KpRule[pe][pec];
KpFuzzy[num] += (eFuzzy[0]*ecFuzzy[0]);
num = KpRule[pe][pec+1];
KpFuzzy[num] += (eFuzzy[0]*ecFuzzy[1]);
num =KpRule[pe+1][pec];
KpFuzzy[num] += (eFuzzy[1]*ecFuzzy[0]);
num = KpRule[pe+1][pec+1];
KpFuzzy[num] += (eFuzzy[1]*ecFuzzy[1]);
/*********加权平均法解模糊*********/
Kp_calcu = KpFuzzy[0]*kpRule[0] +KpFuzzy[1]*kpRule[1]+ \
KpFuzzy[2]*kpRule[2] +KpFuzzy[3]*kpRule[3]+ \
KpFuzzy[4]*kpRule[4] +KpFuzzy[5]*kpRule[5]+ \
+KpFuzzy[6]*kpRule[6];
printf(" %f,%f,%d,%d,kp = %f\r\n", err, errchange, pe, pec, Kp_calcu);
return(Kp_calcu);
无刷电机控制:
整体定位控制: