Autor Tema: Pasar lógica difusa a lenguaje C  (Leído 21391 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jmkonty

  • PIC10
  • *
  • Mensajes: 5
Pasar lógica difusa a lenguaje C
« en: 24 de Mayo de 2009, 21:16:25 »
Buenas

Perdonad por mis meteduras de pata pero soy novato en esto y necesito ayuda.

Estoy haciendo como proyecto fin de carrera un balancing robot, con un PIC18f252. El controlador que debo utilizar usa lógica difusa y aquí viene mi problema. En las simulaciones con Matlab utilizo el Fuzzy toolbox y el controlador funciona perfectamente pero para meterlo en el PIC debo traducirlo al lenguaje C. Sé que debo hacerlo mediante una tabla que me implemente mis entradas y salidas y que lo tengo que hacer mediante if y switch pero no me queda claro del todo cómo hacerlo pues no sé tampoco cómo generar todos los posibles valores de entrada y salida que tiene mi controlador. He pensado meterle más memoria al PIC mediante una EEPROM externa por si la tabla se extendiera más allá de la memoria que tiene.

Si alguno que haya hecho algo por estilo me puede echar una mano sería de gran ayuda.

Un saludo.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Pasar lógica difusa a lenguaje C
« Respuesta #1 en: 24 de Mayo de 2009, 21:28:14 »
Hola.

El ToolBox de Matlab tambien trae una herramienta para generar el C correspondiente para el Fuzzy. Otro programa es el FuzzyTech ...
El papel lo aguanta todo

Desconectado jmkonty

  • PIC10
  • *
  • Mensajes: 5
Re: Pasar lógica difusa a lenguaje C
« Respuesta #2 en: 25 de Mayo de 2009, 16:30:20 »
Gracias por la respuesta.

He estado mirando el help del toolbox logic fuzzy de matlab pero no me queda muy claro como crear el codigo en C. Si me pudieses echar una mano te lo agradecería mucho.

Un saludo

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Pasar lógica difusa a lenguaje C
« Respuesta #3 en: 25 de Mayo de 2009, 22:11:33 »
Voy a buscar la info ... eso lo hice hace años ya ... en la U, y esa info esta refundida por algun lado ....
El papel lo aguanta todo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Pasar lógica difusa a lenguaje C
« Respuesta #4 en: 26 de Mayo de 2009, 13:56:07 »
El comando que yo he visto para compilar programas en EXE o generar el código en C o C++ es mcc. Busca en la ayuda de matlab cómo llamarlo escribiendo >>help mcc.

Desconectado jmkonty

  • PIC10
  • *
  • Mensajes: 5
Re: Pasar lógica difusa a lenguaje C
« Respuesta #5 en: 26 de Mayo de 2009, 16:45:20 »
El comando mcc sirve para pasar archivos *.m de Matlab a archivos *.c propios del lenguaje C, pero en el caso de logica fuzzy que el archivo es *.fis no me sirve. Gracias por la respuesta de todos modos.

MLO_ si encuentras la información de como hacerlo me serás de gran ayuda.

Muchas gracias a todos.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Pasar lógica difusa a lenguaje C
« Respuesta #6 en: 26 de Mayo de 2009, 17:16:42 »
OK. ¿No podrías incluir el llamado de la librería fuzzy (fis) en un m y después compilar el m?

Desconectado jmkonty

  • PIC10
  • *
  • Mensajes: 5
Re: Pasar lógica difusa a lenguaje C
« Respuesta #7 en: 26 de Mayo de 2009, 19:03:16 »
De esa forma que dices creo que lo que haría sería traducir el archivo *.fis pero en su formato de texto a lenguaje C y creo que eso no me serviría luego para implementarlo en un PIC. Lo mismo me equivoco pero creo que con eso no conseguiría lo necesario para meterlo luego como controlador en un PIC.

Muchas gracias

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Pasar lógica difusa a lenguaje C
« Respuesta #8 en: 26 de Mayo de 2009, 22:57:26 »
Hola.

Que recuerde, el fuzzy se lo trabaja en otro entorno diferente. Hay un proceso especial para pasar al .c, dejame y lo busco si? seria bueno recordar viejos conceptos
El papel lo aguanta todo

Desconectado jmkonty

  • PIC10
  • *
  • Mensajes: 5
Re: Pasar lógica difusa a lenguaje C
« Respuesta #9 en: 01 de Junio de 2009, 16:30:20 »
Muchas gracias por tu interés. Has encontrado algo de lo que me puede interesar o que me puede venir bien?

Gracias de nuevo

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Pasar lógica difusa a lenguaje C
« Respuesta #10 en: 01 de Junio de 2009, 23:32:18 »
Hola.

Solo encontre este pdf de una expo que hice ......

Presentacion Real Time Work Shop

Espero te sirva.

Saludos
El papel lo aguanta todo

Desconectado D@niel`s

  • PIC10
  • *
  • Mensajes: 1
Re: Pasar lógica difusa a lenguaje C
« Respuesta #11 en: 17 de Junio de 2009, 13:11:44 »
Saludos a todos.

Soy nuevo en el foro... y me interesó bastante el tema ya que estoy en una situación similar a la de jmkonty.

Bien, si se hace la lógica difusa en matlab se necesita crear una tabla de datos que relacione las entradas y la salida o look up table, que es la que se inserta en el micro.
Para hacer esto, se necesita crear un pequeño programa en el mismo matlab que vaya evaluando cada entrada para ver el resultado de salida. El comando que se utiliza para evaluar el archivo *.fis es el evalfis() y debe ser guardado en una matriz donde se muestren los valores evaluados de entradas con su correspondiente salida.

yo pude lograr todo eso, pero la tabla no la puedo declarar en el micro y no se cual es la razón!!! estoy trabajando con un pic 16f877 y estoy programando en C. si alguien me puede ayudar a resolver este inconveniente se lo agradecería muchísimo.

si necesitan ayuda para la lógica difusa escríbanme al correo: dajeroab83@hotmail.com

Desconectado sebastianfpr

  • PIC10
  • *
  • Mensajes: 30
Re: Pasar lógica difusa a lenguaje C
« Respuesta #12 en: 29 de Julio de 2009, 21:51:20 »
Hola a todos, pues les comento primero que todo que soy nuevo en el foro y es la primera vez que hago un comentario por aquí.

a que no adivinan?

Yo con mi propias manos e ingenio realice lo siguiente:

 - Convierto Un Sistema Lógico Difuso tipo Mamdani creado mediante el Toolbox de Fuzzy Logic de Matlab a Lenguaje C para ser llevado al microcontrolador PIC18F452. (Uso el MC18).

 - Es un programa que hice en Matlab con Interfaz Grafica que toma el sistema logico difuso tipo mamdani .fis y lo pasa a C para el PIC18F452.

Espero seguirles hablando del tema si les interesa.

Una pregunta. Cómo pongo una imgamen para que aparezca visualizada? Gracias.

Cordial Saludo desde Colombia.
Sebastián
« Última modificación: 30 de Julio de 2009, 16:52:56 por sebastianfpr »
Todos los días la gente se arregla el cabello, ¿Por qué no el Corazón? - Che Guevara -

Sebastián Puente R.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Pasar lógica difusa a lenguaje C
« Respuesta #13 en: 29 de Julio de 2009, 22:02:03 »
Hola.

Cuelga la imagen en imageshak y luego pegas el link que te dan ahi entre [ img ] e [ /img ]

Esta muy interesante lo que comentas y puedes hablar y postear tooodo lo que gustes, aca es muy bien recibida tu informacion, ademas, le servira a alguien mas.

Saludos
El papel lo aguanta todo

Desconectado sebastianfpr

  • PIC10
  • *
  • Mensajes: 30
Re: Pasar lógica difusa a lenguaje C
« Respuesta #14 en: 30 de Julio de 2009, 16:48:15 »
Bueno por aquí de nuevo.

Bueno ese proyecto que les comento fue mi Proyecto de Pregrado que realice para ser Ingeniero Electrónico.

El proyecto es de la siguiente Manera:

A este Sistema lo llame FuzzyPic 1.0
(Bueno espero sepan respetar los derechos de autor ya que estamos entre caballeros)
Involucra dos subsistemas o partes, las cuales, poseen las siguientes especificaciones generales.

Especificaciones Del Sistema Lógico Difuso Tipo Mamdani General

Como parte fundamental del Módulo se desarrollo el código en C para un Sistema Lógico Difuso tipo Mamdani en forma general. Algunas partes del código son modificadas por medio del software del Módulo de acuerdo a las características fijadas por el usuario. Las partes que se modifican son las siguientes:

   Definición de los conjuntos difusos. Esta parte se modifica de acuerdo al número de conjuntos difusos, al tipo de cada uno de los conjuntos y a sus respectivos parámetros.

   Obtención de las entradas. De acuerdo al tipo de entradas; análogas o digitales, el código será modificado para la debida lectura de cada una de las entradas del Sistema.

   Base de Reglas. De acuerdo a las reglas difusas establecidas durante el diseño del Sistema Lógico Difuso por el usuario, se creará la base de reglas específica siguiendo la forma general establecida en la creación del código general o estándar para el Sistema Lógico Difuso (SLD).

   Ajustes específicos. Las partes del código que dependen del número de entradas, los respectivos conjuntos y el número de reglas, el código será ajustado de acuerdo a estas características.

El código general del SLD puede manejar las siguientes características: (Bueno Aclaro que esto lo fije de acuerdo al PIC18F452 viendo sus prestaciones y limitaciones)

   Tipos de conjuntos difusos: triangular, trapezoidal y gaussiano.
   Número de entradas: Se pueden tener como máximo 3 entradas.
   Tipo de SLD: Tipo Mamdani.
   Tipo de Sistemas: Sistemas tipo MISO (Múltiples entradas y única salida).
   Conector Antecedentes de las reglas: conector AND.
   Evaluación Antecedentes: Operador MÍNIMO.
   Método Implicación: Operador MÍNIMO.
   Método Agregación: Operador MÁXIMO.
   Método Desdifusión: CENTROIDE.

Especificaciones Del Software Del Modulo

El software para el Módulo denominado FuzzyPic 1.0 es el encargado de recibir todas las características específicas; definición de las variables de entrada y la variable de salida, definición de los conjuntos difusos que conforman cada variable, reglas difusas o base de conocimiento, tipos de conjuntos difusos a usar entre otras, requeridas por el usuario para el diseño del Sistema Lógico Difuso (SLD) deseado.

El diseño del SLD se realiza mediante la integración de las diferentes funciones que ofrece el Fuzzy Logic Toolbox de Matlab. Después de especificar el SLD deseado, el software procede a verificar todas las características vistas en la sección anterior para proceder a crear el código en C del SLD. En la figura 3.1 pude verse el diagrama en bloques del software desarrollado en Matlab para el Módulo.

Diagrama en Bloques general del software para el Módulo.

Requerimientos de Sistema

Debido a que el software se desarrollo en Matlab, los requerimientos de sistema necesarios, son los mismos que los de este lenguaje. Necesita por supuesto, que Matlab esté instalado en la PC.
« Última modificación: 31 de Julio de 2009, 01:56:28 por sebastianfpr »
Todos los días la gente se arregla el cabello, ¿Por qué no el Corazón? - Che Guevara -

Sebastián Puente R.