Implementation of the fuzzy control algorithm for obstacle avoidance. This algorithm is for a two-wheel differential drive robot. It uses distance information from 3 analogue IR range sensors and controls DC motors using ESCON servo controllers. This C++ library is written for mbed LPC1768. For any questions and/or reporting bugs contact author: vans.edw@gmail.com

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers fuzzylogic.h Source File

fuzzylogic.h

00001 #ifndef FUZZYLOGIC_H
00002 #define FUZZYLOGIC_H
00003 
00004 
00005 class fuzzylogic
00006 {
00007     public:
00008         fuzzylogic(int nI1, int nI2, int nI3, int nO);
00009         ~fuzzylogic();
00010         void setInParam(double *inParam1, double *inParam2, double *inParam3);
00011         void setOutParam(double *outParam);
00012         void setScalingFactor(double SFI1, double SFI2, double SFI3, double SFO);
00013         double getMembershipIn1(int m1);
00014         double getMembershipIn2(int m2);
00015         double getMembershipIn3(int m3);
00016         void setRuleBase();
00017         double evalfis(double in1, double in2, double in3);
00018 
00019 
00020     protected:
00021     private:
00022 
00023         double SF_in1;                  //Scaling Factor input 1
00024         double SF_in2;                  //Scaling Factor input 2
00025         double SF_in3;                  //Scaling Factor input 3
00026         double SF_out;
00027         double *mem_in1;                //Fuzzified values for input 1 for each MF
00028         double *mem_in2;                //Fuzzified values for input 2 for each MF
00029         double *mem_in3;                //Fuzzified values for input 3 for each MF
00030         double *m_inParam1;             //Input Parameter 1 Triangle Mem Functions
00031         double *m_inParam2;             //Input Parameter 2
00032         double *m_inParam3;             //Input Parameter 3
00033         double *m_outParam;             //Output Parameter for singletons
00034         double ***actv;
00035         double ***FRB;
00036         int m_nI1, m_nI2, m_nI3, m_nO;
00037         
00038         //i - left sensor
00039         //j - middle sensor
00040         //k - right sensor
00041         // 0 = close, 1 = near, 2 = far
00042         int R2, R3, I;        
00043         
00044         double s_in1, s_in2, s_in3, out;
00045         
00046         double getRuleBase(int i, int j, int k);
00047         void fuzzification(double *mem_in, double *inParam, double in, int m_nI);
00048         void fi();
00049         double defuzzification();
00050 };
00051 
00052 #endif // FUZZYLOGIC_H