Mostrando entradas con la etiqueta fuzzy logic. Mostrar todas las entradas
Mostrando entradas con la etiqueta fuzzy logic. Mostrar todas las entradas

sábado, 6 de diciembre de 2025

Octave Raspberry Pi y Bash [ Actualización]

Ya casi termina el año y no he escrito nada :-) 

La intención de esto es mostrar que se puede implementar un sistema de lógica difusa en una Raspberry Pi 1 B+ (en 2025) que haga uso de Octave, pero que sea invocada desde la consola.

Actualización:

Ya se encuentra disponible el nuevo vídeo donde ahora el valor PWM lo interpreta el microcontrolador PIC16F876A mostrando la salida por RC2 (CCP1) con un ajuste a 5kHz y el ciclo de trabajo definido por el RPi a través del sistema difuso implementado en Octave

 Adjunto algunos de los vídeos donde muestro esto:

 Parte 1


 

 

Parte 2 




 Parte 3

Parte 4


 

Parte 5

 
Parte final

 

 

jueves, 2 de enero de 2014

Xfuzzy en Manjaro un ejemplo

En el video se muestra como se puede implementar un ejemplo muy simple de un sistema difuso de una entrada, una salida y dos reglas mediante la herramienta XFuzzy

jueves, 26 de diciembre de 2013

Compilando en GCC una funcion creada en XFuzzy en Manjaro Linux

XFuzzy es un programa de Open Source desarrollado por el centro Nacional de microelectronica de Sevilla, España. este software permite el desarrollo de sistemas difusos, para su implementación, monitoreo, y simulación con planta, además permite la implementación de código fuente a partir del sistema propuesto

En la imagen se muestra como esta implementado un sistema difuso y su monitorización.

Para generar un fuente a partir del sistema, dar clic en Synthesis -> To C, ahora elige la carpeta donde se van a almacenar los archivos generados que tendrán el mismo nombre del sistema, por ejemplo, para este caso el sistema se denomina example.xfl y los archivos generados se llaman example.c y example.h

Dentro del archivo example.h se encuentra la función que se puede llamar desde lenguaje , esta funcion incluye el nombre del sistema difuso diseñado en XFuzzy seguido de las palabras "Inference Engine", en este caso:

exampleInferenceEngine

Esta función tiene igual número de parámetros que entradas y salidas tiene el sistema
El código fuente se muestra en la imagen anterior, revise que la salida del sistema se almacena en la variable sal, la cual inicialmente se le asigna un valor de 0.0 por ser una variable de tipo double. notese que se usa paso por referencia.

Para compilar el programa (http://stackoverflow.com/questions/8999975/strange-behaviour-of-gcc-and-math-h) se usan algunos parámetros como son Wall y lm pque sirven para imprimir todas las advertencias que se generan (-Wall) durante la compilación del programa y -lm para el uso de la libreria math.h

En la imagen se aprecian las líneas para compilar el programa mostrado y la forma en que se ejecuta, es importante el orden de los archivos a compilar.

Para este caso se podrá notar la salida del sistema cuando las variables val1=val2 = 50.0 y val3 = 0.4 da el compilador de C un resultado de salida de 0.15 y en la imagen siguiente se muestra la salida del sistema difuso definido en XFuzzy cuando las entradas son 50.0, 50.0, 0.4

Esta portabilidad hace interesante a la herramienta, ya que es posible en cierta medida, colocar este código generado en un sistema embebido como lo es un microcontrolador.

hasta el momento les puedo comentar que en avr-gcc funciona muy bien pero con Pinguino PIC no se puede compilar a causa de que SDCC no permite el paso de estructuras como argumentos de funciones. Esto tambien lo probé al tratar de compilar en SDCC puro con el IDE PIKLAB


A fin de confirmarles el uso de la libreria generada por Xfuzzy en AVR-GCC se usa como IDE el code-blocks en su versión 12.11


y programando un ATmega32u4 (vea los siguientes links http://iemontiel.blogspot.mx/2013/05/mexican-arduino-usb-en-fedora-18.html y http://iemontiel.blogspot.mx/2013/12/teensyduino-en-manjaro.html) con cristal de 16MHz integrado en la tarjeta, es posible su compilación y el empleo de EASYDFU (como supervaca) para enviar la información al microcontrolador.
Vea que es interesante el hecho de que solamente se ocupó el 17.30% del total de la memoria del microcontrolador en cuestión.

jueves, 7 de noviembre de 2013

Qucs 0.01.17 en Manjaro

Bien pues sigo probando el uso de Manjaro y pues de momento va muy bien, el desktop es ligero en la PC que tengo, ya es un poco viejita (Gateway con procesador Core 2 con 2GB de RAM y disco de 500GB ) Pues como les comento, estoy probando Qucs y de momento va muy bien y lo mejor es que a diferencia de Fedora 19, esta distro si me está generando el VHDL a partir del diagrama lógico sin problemas, de igual forma Scilab despueś del detalle de ayer, he instalado los atoms de Fuzzy Logic, el complemento Coselica y SIMM para simulación física, y pues las simulaciones han corrido, el problema que tengo es con el IDE de Pinguino X.4 que no me abre, pero ya veré como funciona, aun no he probado la grabación de archivos .hex con AVR y PIC, pero ya está en la pc SDCC y AVR-GCC con el codeblocks.

miércoles, 10 de julio de 2013

Problema scilab ./scilab-bin: error while loading shared libraries: libscilab.so.0:

En Fedora 19 de 32bits, viene por defecto en los repositorios SCILAB 5.4.1, sin embargo, si se desea instalar desde el paquete rpm que viene en la pagina web de Scilab. Solo se debe descargar y descomprimir en una carpeta en específico (en mi caso, cree un directorio denominado opt dentro de mi $HOME) El binario ejecutable está en la ruta /home/miguel/opt/scilab-5.4.1/bin sin embargo al tratar de ejecutar el binario, se marca el siguiente error (solo es visible cuando se ejecuta desde consola)
./scilab-bin 
./scilab-bin: error while loading shared libraries: libscilab.so.0: cannot open shared object file: No such file or directory

de acuerdo a la página https://bugs.launchpad.net/ubuntu/+source/scilab/+bug/560283
se debe verificar que /usr/bin/scilab contiene
 
LD_LIBRARY_PATH=/usr/lib/scilab/:/usr/lib64/scilab/:$LD_LIBRARY_PATH

Para modificar el valor de la variable de entorno (Para saber mas: http://landerpfc.wordpress.com/2010/09/28/variables-de-entorno-en-gnulinux/)
Se debe dar la ruta a la librería donde se encuentra el archivo libscilab.so.0, que está en:
$HOME/opt/scilab-5.4.1/lib/scilab/

Entonces ahora se teclea la siguiente instrucción:
[miguel@MalillaReturns bin]$ export LD_LIBRARY_PATH=/home/miguel/opt/scilab-5.4.1/lib/scilab/
[miguel@MalillaReturns bin]$ echo $LD_LIBRARY_PATH
/home/miguel/opt/scilab-5.4.1/lib/scilab/
Sin embargo al tratar de ejecutar el entorno se tiene el siguiente error:
[miguel@MalillaReturns bin]$ ./scilab-bin 
./scilab-bin: error while loading shared libraries: libhdf5.so.6: cannot open shared object file: No such file or directory

Este archivo se puede localizar con el comando find, de la siguiente forma
[miguel@MalillaReturns ~]$ find -iname libhdf5.so.6
./opt/scilab-5.4.1/lib/thirdparty/libhdf5.so.6
Con esta dirección, podemos agregar un dato mas a la variable de entorno
[miguel@MalillaReturns bin]$ export LD_LIBRARY_PATH=$HOME/opt/scilab-5.4.1/lib/thirdparty/:$LD_LIBRARY_PATH
[miguel@MalillaReturns bin]$ echo $LD_LIBRARY_PATH
/home/miguel/opt/scilab-5.4.1/lib/thirdparty/:/home/miguel/opt/scilab-5.4.1/lib/scilab/
Pero de nueva cuenta se tiene un error.
[miguel@MalillaReturns bin]$ ./scilab-bin 
./scilab-bin: error while loading shared libraries: libjava.so: cannot open shared object file: No such file or directory
De igual forma la libreria libjvm.so. Mediante el comando find, se encuentra la ruta de la librería solicitada por el programa
[miguel@MalillaReturns ~]$ find -iname libjava.so
./opt/scilab-5.4.1/thirdparty/java/lib/i386/libjava.so
La libreria libjvm.so se encuentra en:
[miguel@MalillaReturns ~]$ find -iname libjvm.so
./opt/scilab-5.4.1/thirdparty/java/lib/i386/server/libjvm.so
./opt/scilab-5.4.1/thirdparty/java/lib/i386/client/libjvm.so

En consecuencia, se debe agregar esta nueva ruta al LD_LIBRARY_PATH
[miguel@MalillaReturns bin]$ export LD_LIBRARY_PATH=$HOME/opt/scilab-5.4.1/thirdparty/java/lib/i386/:$HOME/opt/scilab-5.4.1/thirdparty/java/lib/i386/client/libjvm.so:$LD_LIBRARY_PATH
En resumen, se puede decir que la definición de la variable de entorno
[miguel@MalillaReturns bin]$ export LD_LIBRARY_PATH=$HOME/opt/scilab-5.4.1/lib/scilab/:$HOME/opt/scilab-5.4.1/lib/thirdparty/:$HOME/opt/scilab-5.4.1/thirdparty/java/lib/i386/client/:$HOME/opt/scilab-5.4.1/thirdparty/java/lib/i386/
Pero esto, nos deja ver el siguiente error
[miguel@MalillaReturns bin]$ ./scilab-bin 
SCI environment variable not defined.
Ahora se debe definir la variable de entorno SCI
[miguel@MalillaReturns bin]$ export SCI=/home/miguel/opt/scilab-5.4.1/share/scilab
de esta forma ya debe funcionar la instalación de SCILAB
Nota. LA Libreria de lógica difusa que se ve se instala mediante ATOMS.

lunes, 18 de febrero de 2013

ACTUALIZADO - Instalando el tookit de Lógica Difusa en Octave en Fedora 18 64 bits

Octave cuenta desde hace poco con un toolbox de lógica difusa, del autor Markowsky L., quien en el International Workshop “Open-Source Software for Scientific Computation (OSSC) 2011” dictó una conferencia titulada The Octave Fuzzy Logic Toolkit llevada a cabo del 12 al 14 de octubre. El paper se encuentra disponible en http://ieeexplore.ieee.org/xpl/articleDetails.jsp?reload=true&arnumber=6184706

El software se encuentra disponible de forma gratuita en: http://sourceforge.net/projects/octave-fuzzy/ y solo pesa unos 80kB, ya que se encuentra conformada por archivos .m Para su instalación, en Linux, desde octave , en la linea de comando teclea lo siguiente:

>>>pkg install -forge fuzzy-logic-toolkit 


de esta forma, automáticamente se instala el toolkit en octave.

Ahora tecleando:

>>>pkg list

Se muestran los paquetes instalados en nuestro sistema:
 
Package Name | Version | Installation directory
---------------------+---------+-----------------------
audio *| 1.1.4 | /usr/share/octave/packages/audio-1.1.4
control *| 2.4.0 | /usr/share/octave/packages/control-2.4.0
fuzzy-logic-toolkit | 0.4.2 | /home/miguel/octave/fuzzy-logic-toolkit-0.4.2
gnuplot *| 1.0.1 | /home/miguel/octave/gnuplot-1.0.1
gsl *| 1.0.8 | /usr/share/octave/packages/gsl-1.0.8
image *| 1.0.15 | /usr/share/octave/packages/image-1.0.15
miscellaneous *| 1.2.0 | /usr/share/octave/packages/miscellaneous-1.2.0
nnet *| 0.1.13 | /usr/share/octave/packages/nnet-0.1.13
odebvp *| 1.0.6 | /home/miguel/octave/odebvp-1.0.6
optim | 1.2.2 | /usr/share/octave/packages/optim-1.2.2
physicalconstants *| 0.1.7 | /home/miguel/octave/physicalconstants-0.1.7
quaternion *| 2.0.0 | /usr/share/octave/packages/quaternion-2.0.0
signal | 1.1.3 | /usr/share/octave/packages/signal-1.1.3
specfun | 1.1.0 | /usr/share/octave/packages/specfun-1.1.0
statistics *| 1.0.10 | /home/miguel/octave/statistics-1.0.10
struct | 1.0.10 | /usr/share/octave/packages/struct-1.0.10
symbolic *| 1.1.0 | /usr/share/octave/packages/symbolic-1.1.0

donde aquellos que tienen un '*' delante del nombre del paquete instalado, son los que se encuentran instalados. (si deseas instalar mas paquetes, puedes consultar la siguiente página)
 http://octave.sourceforge.net/

Ahora como verán, el paquete de lógica borrosa no está cargado automáticamente, para cargarlo debe teclear lo siguiente

 
>>> pkg load fuzzy-logic-toolkit

En consecuencia, es posible usar ya funciones del toolkit
>>> demo('sigmf')
sigmf example 1:
x = 0:100;
params = [0.3 40];
y1 = sigmf(x, params);
params = [0.2 40];
y2 = sigmf(x, params);
params = [0.1 40];
y3 = sigmf(x, params);
figure('NumberTitle', 'off', 'Name', 'sigmf demo');
plot(x, y1, 'r;params = [0.3 40];', 'LineWidth', 2)
hold on;
plot(x, y2, 'b;params = [0.2 40];', 'LineWidth', 2)
hold on;
plot(x, y3, 'g;params = [0.1 40];', 'LineWidth', 2)
ylim([-0.1 1.2]);
xlabel('Crisp Input Value', 'FontWeight', 'bold');
ylabel('Degree of Membership', 'FontWeight', 'bold');
grid;

 solo una advertencia, el comando load debe usarse siempre que se requiera usar el toolkit.


solo descarga el paquete tar.gz en alguna ubicación, y crean dentro de tu home un archivo opt

$makedir opt

y descomprime ahi el archivo descargado ahora abre octave y desde la línea de comandos (http://iimyo.forja.rediris.es/tutorial/gui.html) teclea el siguiente comando

path(path,'/home/miguel/opt/fuzzy-logic-toolkit/')

 y con esto, es posible usar las funciones del fuzzy-logic-toolkit, por ejemplo al usar

help trimf
`trimf' is a function from the file /home/miguel/opt/fuzzy-logic-toolkit/inst/t rimf.m

-- Function File: Y = trimf (X, PARAMS)
-- Function File: Y = trimf ([X1 X2 ... XN], [A B C])

For a given domain X and parameters PARAMS (or [A B C]), return the corresponding Y values for the triangular membership function.

The argument X must be a real number or a non-empty vector of strictly increasing real numbers, and parameters A, B, and C must be real numbers that satisfy A < B < C. None of the parameters A, B, and C are required to be in the domain X. The minimum and maximum values of the triangle are assumed to be 0 and 1.

The parameters [A B C] correspond to the x values of the vertices of the triangle:

 1-|      /\
    |     /  \
    |    /    \
    |   /      \
     0-----------------------
       a b   c

To run the demonstration code, type demo('trimf') at the Octave prompt.

See also: dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf_demo, zmf

Additional help for built-in functions and operators is available in the on-line version of the manual. Use the command `doc ' to search the manual index.

En la siguiente página podrás encontrar las referencias y las funciones con las que cuenta el toolkit

http://octave.sourceforge.net/fuzzy-logic-toolkit/overview.html


 Help and information about Octave is also available on the WWW at http://www.octave.org and via the help@octave.org mailing list.