机器人的模糊控制是一种基于模糊逻辑理论的计算机控制方法,它通过模拟人类思维和决策过程来实现对机器人行为的控制。
本文中所介绍使用的竞技机器人先进模糊控制器是在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种子集的隶属度。
进行模糊推理后,可以根据计算的隶属度,建立模糊规则表,实现对输出值的清晰化。对应到应用层的输出函数,实现控制输出。
FOC控制及仿真效果
FOC控制逻辑
仿真效果
代码实现
自动整定部分核心代码:
void PID_AutoTune_Task(void) { 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 ", err, errchange, pe, pec, Kp_calcu); return(Kp_calcu);
实物展示
无刷电机控制:
整体定位控制:
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !