merci pour vos réponses.
pour le langage, j'utilise JAVA.
voici le code de la méthode
/** * cette méthode représente le contrôleur flou d'angle d'orientation * @param a : représente la distance entre le robot et sa cible * @param b : représente l'angle entre le robot et sa cible * @return : elle retourne vitesse de rotation et vitesse de translation du robot qu'il faut l'appliquer pour * s'approcher de sa cible * @throws RulesParsingException * @throws NoRulesFiredException * @throws EvaluationException */ public double[] GSB(double a ,double b) throws RulesParsingException, NoRulesFiredException, EvaluationException{ // la partie floue fuzzification /*** la définition des variables linguistiques***/ LinguisticVariable distance = new LinguisticVariable("distance"); LinguisticVariable TO = new LinguisticVariable("TO"); LinguisticVariable angle = new LinguisticVariable("angle"); LinguisticVariable vitesse = new LinguisticVariable("vitesse"); /*** l'univers de discours des variables linguistiques avec les fonctions d'appartenance * pour la variable d'entrée distance***/ distance.add("Z", 0.0,0.0, 0.1, 3.5); distance.add("P", 0.1, 3.5, 3.5, 8.0); distance.add("M", 3.5, 8.0, 8.0, 13.0); distance.add("G", 8.0, 13.0, 13.0, 18.0); distance.add("TG",13.0, 18.0, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY); /*** l'univers de discours des variables linguistiques avec les fonctions d'appartenance * pour la variable d'entrée angle entre le robot et la cible***/ TO.add("NG", -3.141592653589793, -3.141592653589793, -1.5, -0.75); TO.add("NM", -1.5, -0.75, -0.75, -0.25); TO.add("NP", -0.75, -0.25, -0.25, 0.0); TO.add("Z", -0.25, 0.0, 0.0, 0.25); TO.add("PP", 0.0, 0.25, 0.25, 0.75); TO.add("PM", 0.25, 0.75, 0.75, 1.5); TO.add("PG", 0.75, 1.5, 3.141592653589793, 3.141592653589793); /*** l'univers de discours des variables linguistiques avec les fonctions d'appartenance * pour la variable de sortie angle à appliquée par le robot pour s'approcher (s'orienter) * de cible***/ angle.add("NG", -Math.PI/5, -Math.PI/5, -Math.PI/5, -Math.PI/5); angle.add("NM", -Math.PI/10, -Math.PI/10, -Math.PI/10, -Math.PI/10); angle.add("NP", -Math.PI/20, -Math.PI/20, -Math.PI/20, -Math.PI/20); angle.add("Z", 0, 0, 0, 0); angle.add("PP", Math.PI/20, Math.PI/20, Math.PI/20, Math.PI/20); angle.add("PM", Math.PI/10, Math.PI/10, Math.PI/10, Math.PI/10); angle.add("PG", Math.PI/5, Math.PI/5, Math.PI/5, Math.PI/5); /*** l'univers de discours des variables linguistiques avec les fonctions d'appartenance * pour la variable de sortie vitesse de translation du robot***/ vitesse.add("Z", 0.0, 0.0, 0.0, 0.0); vitesse.add("F", 1.0, 1.0, 1.0, 1.0); vitesse.add("M", 1.8, 1.8, 1.8, 1.8); vitesse.add("G", 3.0, 3.0, 3.0, 3.0); vitesse.add("TG", 4.0, 4.0, 4.0, 4.0); /*** création de moteur d'inférence flou***/ FuzzyEngine fuzzyEng = new FuzzyEngine(); /*** enregistrement de tous les variables linguistiques ***/ fuzzyEng.register(distance); fuzzyEng.register(TO); fuzzyEng.register(angle); fuzzyEng.register(vitesse); /*** la définition des valeurs non-floues aux variables linguistiques ***/ distance.setInputValue(a);// définir la valeur d'entrée pour la variable distance entre robot et cible TO.setInputValue(b);// définir la valeur d'entrée pour la variable angle d'orientation entre le robot et le cible /*** la fuzzification des variables linguistique selon leur valeur d'entrée***/ /*** create a block of rules */ /*creation de block de règles chaque règle est séparé par \n, plus rapide si on va évaluer un block de règles à chaque fois*/ FuzzyBlockOfRules fuzzyBlockOfRules = new FuzzyBlockOfRules( "if distance is Z and TO is NG then angle is PM and vitesse is Z\n"+ "if distance is Z and TO is NM then angle is PP and vitesse is Z\n"+ "if distance is Z and TO is NP then angle is Z and vitesse is Z\n"+ "if distance is Z and TO is Z then angle is Z and vitesse is Z\n"+ "if distance is Z and TO is PP then angle is Z and vitesse is Z\n"+ "if distance is Z and TO is PM then angle is NP and vitesse is Z\n"+ "if distance is Z and TO is PG then angle is NM and vitesse is Z\n"+ "if distance is P and TO is NG then angle is PG and vitesse is F\n"+ "if distance is P and TO is NM then angle is PG and vitesse is F\n"+ "if distance is P and TO is NP then angle is PM and vitesse is F\n"+ "if distance is P and TO is Z then angle is Z and vitesse is F\n"+ "if distance is P and TO is PP then angle is NM and vitesse is F\n"+ "if distance is P and TO is PM then angle is NG and vitesse is F\n"+ "if distance is P and TO is PG then angle is NG and vitesse is F\n"+ "if distance is M and TO is NG then angle is PM and vitesse is F\n"+ "if distance is M and TO is NM then angle is PM and vitesse is F\n"+ "if distance is M and TO is NP then angle is PP and vitesse is M\n"+ "if distance is M and TO is Z then angle is Z and vitesse is M\n"+ "if distance is M and TO is PP then angle is NM and vitesse is M\n"+ "if distance is M and TO is PM then angle is NG and vitesse is F\n"+ "if distance is M and TO is PG then angle is NG and vitesse is F\n"+ "if distance is G and TO is NG then angle is PM and vitesse is F\n"+ "if distance is G and TO is NM then angle is PP and vitesse is M\n"+ "if distance is G and TO is NP then angle is PP and vitesse is G\n"+ "if distance is G and TO is Z then angle is Z and vitesse is G\n"+ "if distance is G and TO is PP then angle is NP and vitesse is G\n"+ "if distance is G and TO is PM then angle is NP and vitesse is M\n"+ "if distance is G and TO is PG then angle is NM and vitesse is F\n"+ "if distance is TG and TO is NG then angle is PM and vitesse is F\n"+ "if distance is TG and TO is NM then angle is PM and vitesse is M\n"+ "if distance is TG and TO is NP then angle is PP and vitesse is G\n"+ "if distance is TG and TO is Z then angle is Z and vitesse is TG\n"+ "if distance is TG and TO is PP then angle is NP and vitesse is G\n"+ "if distance is TG and TO is PM then angle is NM and vitesse is M\n"+ "if distance is TG and TO is PG then angle is NM and vitesse is F\n" ); //evaluateBlock () /***Register the block ***/ fuzzyEng.register(fuzzyBlockOfRules);// enregistre block of rules dans le fuzzy Engine /***Parse the rules***/ fuzzyBlockOfRules.parseBlock();// throws RulesParsingException : //Exception is thrown if any rule within block //generates a parsing error annalyse block of rules /***Perform the evaluation***/ fuzzyBlockOfRules.evaluateBlock();/*throws EvaluationException : This exception is thrown if an error occurs during evaluation of a rule (most likely a MF name is wrong)*/ rule=fuzzyBlockOfRules.isRuleFired(); /*** obtenir le résultat***/ double braccage = angle.defuzzify();// throws NoRulesFiredException: This exception //is thrown if no rules have //fired for this Linguistic Variable. double translation = vitesse.defuzzify(); /*** return l'angle d'orientation et de translation ***/ resultat[0]=braccage; resultat[1]=translation; return resultat; }
pour l'erreur
Exception in thread "Timer-0" javax.media.j3d.BadTransformException: TransformGroup: non-affine transform
at javax.media.j3d.TransformGroup.setTransform(TransformGroup.java:118)at simbad.sim.SimpleAgent.updatePosition(SimpleAgent.java:287)at simbad.sim.Simulator.simulateOneStep(Simulator.java:250)at simbad.sim.Simulator$1.run(Simulator.java:280)at java.util.TimerThread.mainLoop(Timer.java:512)at java.util.TimerThread.run(Timer.java:462)
vitesse de translation 1.0vitesse de rotation NaN
et merci infiniment pour aide