<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Palmera blog</title>
	<atom:link href="http://www.pablogindel.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pablogindel.com</link>
	<description>robots, música, cosas raras con electricidad</description>
	<lastBuildDate>Mon, 08 Mar 2010 20:34:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>XY Motion Control</title>
		<link>http://www.pablogindel.com/2010/03/xy-motion-control/</link>
		<comments>http://www.pablogindel.com/2010/03/xy-motion-control/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 22:50:56 +0000</pubDate>
		<dc:creator>pabloxid</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[arai moleri]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[AX-12]]></category>
		<category><![CDATA[dynamixel ax-12]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[pablo gindel]]></category>
		<category><![CDATA[pan & tilt]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[robotic]]></category>
		<category><![CDATA[robotic cam]]></category>
		<category><![CDATA[stop motion]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[tatitos]]></category>
		<category><![CDATA[uruguay]]></category>
		<category><![CDATA[walter tournier]]></category>

		<guid isPermaLink="false">http://www.pablogindel.com/?p=621</guid>
		<description><![CDATA[&#8220;XY Motion Control&#8221; fue el proyecto de grado de la Lic. en diseño industrial Araí Moleri, en el cual yo intervine desarrollando el sistema de control de los servos AX-12 con Arduino y la aplicación Java con la que se maneja desde el PC.
El proyecto consiste en un soporte robótico para cámaras, que realiza los movimientos de PAN y TILT y es capaz de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">&#8220;XY Motion Control&#8221; fue el proyecto de grado de la Lic. en diseño industrial Araí Moleri, en el cual yo intervine desarrollando el sistema de control de los servos AX-12 con Arduino y la aplicación Java con la que se maneja desde el PC.<span id="more-621"></span></p>
<p style="text-align: justify;">El proyecto consiste en un soporte robótico para cámaras, que realiza los movimientos de PAN y TILT y es capaz de moverse en incrementos de 0,3º, para usar en películas de stop-motion. También cuenta con un sistema de movimientos continuos automatizados, y están previstas varias mejoras como ser: captura de movimientos, modo autónomo y sincronización con el programa &#8220;Dragon Stop Motion&#8221;.</p>
<p style="text-align: justify;">A continuación les dejo los videos oficiales del producto y una documentación de la parte informática del mismo. Las animaciones 3D y los videos fueron hechos por Juan Pablo Colasso. En el segundo video puede verse el aparato funcionando, y al maestro Walter Tournier (el creador de Los Tatitos) haciendo una animación con el mismo.</p>
<p style="text-align: justify;"> </p>
<a href="http://www.pablogindel.com/2010/03/xy-motion-control/"><p><em>Click here to view the embedded video.</em></p></a> <a href="http://www.pablogindel.com/2010/03/xy-motion-control/"><p><em>Click here to view the embedded video.</em></p></a>
<p> </p>
<p style="TEXT-ALIGN: center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=xymotioncontrol-100306095606-phpapp01&amp;stripped_title=xy-motion-control" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=xymotioncontrol-100306095606-phpapp01&amp;stripped_title=xy-motion-control" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p style="TEXT-ALIGN: center"> </p>
<p style="TEXT-ALIGN: center"> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablogindel.com/2010/03/xy-motion-control/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Reconocimiento de voz en SAMSA</title>
		<link>http://www.pablogindel.com/2010/03/reconocimiento-de-voz-novedades-de-samsa-2/</link>
		<comments>http://www.pablogindel.com/2010/03/reconocimiento-de-voz-novedades-de-samsa-2/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 02:38:08 +0000</pubDate>
		<dc:creator>pabloxid</dc:creator>
				<category><![CDATA[Artículos técnicos, etc.]]></category>
		<category><![CDATA[Audio e Informática]]></category>
		<category><![CDATA[ANN]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[artificial neural network]]></category>
		<category><![CDATA[atmega128]]></category>
		<category><![CDATA[atmel]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[backpropagation]]></category>
		<category><![CDATA[gradient descent]]></category>
		<category><![CDATA[hexapod]]></category>
		<category><![CDATA[hexápodo]]></category>
		<category><![CDATA[microcontroller]]></category>
		<category><![CDATA[montevideo]]></category>
		<category><![CDATA[neural network]]></category>
		<category><![CDATA[pablo gindel]]></category>
		<category><![CDATA[physical computing]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[reconocimiento de voz]]></category>
		<category><![CDATA[red neuronal]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[robótica]]></category>
		<category><![CDATA[robotics]]></category>
		<category><![CDATA[robots]]></category>
		<category><![CDATA[SAMSA]]></category>
		<category><![CDATA[sigmoid]]></category>
		<category><![CDATA[speech recognition]]></category>
		<category><![CDATA[steepest descent]]></category>
		<category><![CDATA[TCFM]]></category>
		<category><![CDATA[training]]></category>
		<category><![CDATA[uruguay]]></category>
		<category><![CDATA[wiring]]></category>

		<guid isPermaLink="false">http://www.pablogindel.com/?p=548</guid>
		<description><![CDATA[
 
En setiembre del año pasado, luego de su presentación en el marco de los workshops del 6º Campeonato de Sumo Robótico, todavía no tenía muy claro qué hacer con SAMSA, hacia dónde orientar su programación.
Finalmente decidí que SAMSA tenía que ser un robot capaz de un nivel más sofisticado de sensibilidad auditiva, ya que en [...]]]></description>
			<content:encoded><![CDATA[<h4><a href="http://www.pablogindel.com/2010/03/reconocimiento-de-voz-novedades-de-samsa-2/"><p><em>Click here to view the embedded video.</em></p></a></h4>
<p> </p>
<p style="TEXT-ALIGN: justify">En setiembre del año pasado, luego de su presentación en el marco de los workshops del <a href="http://www.pablogindel.com/2009/09/sexto-campeonato-uruguayo-de-sumo-robotico/" target="_blank">6º Campeonato de Sumo Robótico</a>, todavía no tenía muy claro qué hacer con SAMSA, hacia dónde orientar su programación.</p>
<p style="TEXT-ALIGN: justify">Finalmente decidí que SAMSA tenía que ser un robot capaz de un nivel más sofisticado de sensibilidad auditiva, ya que en mis robots anteriores había experimentado más que nada con diversos tipos de dispositivos ópticos (con mayor o menor suerte), y de emisores de sonido. Esto podría darme la excusa, por ejemplo, para desarrollar un sistema de reconocimiento del ritmo, que le permitiera al robot bailar al compás de la música (y de paso me serviría para el momentáneamente abandonado proyecto <a href="http://www.pablogindel.com/2009/08/el-zappator/" target="_blank">Zappator</a>). Por otro lado, me interesaba también experimentar con redes neuronales, ya que suponía que éstas podrían constituir una alternativa a tener que programar línea por línea todo el comportamiento de un robot.</p>
<p style="TEXT-ALIGN: justify">Tal como había publicado en la <a href="http://www.pablogindel.com/2009/09/documentacion-de-samsa-1ª-entrega/" target="_blank">1ª etrega de la documentación de SAMSA</a>, la distribución total de tareas del robot a cargo de un sólo y modesto ATmega128 (microcontrolador de 8bit/128KB/16MHz) dejaba, en lo que respecta al audio, tan sólo la posibilidad de medir la intensidad del sonido cada cierto lapso, y ni soñar siquiera con algún tipo de análisis de frecuencias.</p>
<p style="TEXT-ALIGN: justify">La única alternativa parecía ser la de incluir un segundo procesador hardware, exclusivamente dedicado al procesamiento de sonido; pero eso implicaba agregar más componentes, en definitiva, exigirle más al ya sobrecargado sistema electro-mecánico del robot. Era mucho trabajo, y no me convencía.</p>
<p style="TEXT-ALIGN: justify">Se me ocurrió entonces otra solución: al mejor estilo “<a href="http://es.wikipedia.org/wiki/Sinclair_ZX81" target="_blank">ZX-81</a>”, el robot entraría temporalmente en un modo “escucha”, durante el cual no podría moverse, mostrar gráficos ni hacer ninguna otra cosa; utilizaría todos sus recursos para “analizar” el audio y actuar en consecuencia. La idea sería aumentar la frecuencia de las interrupciones (a 8KHz, de hecho), y sustituir la actual ISR (interrupt service routine), por otra que sólo procesara audio.</p>
<p style="TEXT-ALIGN: justify">Bien, y cuando decimos “procesar audio”, lo primero que nos viene a la mente es analizar frecuencias. ¿Por qué? Por muchísimas razones, talvez la más importante es que nuestro cerebro mismo percibe el sonido de esa manera. Como no soy para nada experto en <a href="http://es.wikipedia.org/wiki/Transformada_r%C3%A1pida_de_Fourier" target="_blank">FFT</a>, ni estaba seguro de que fuera realmente posible su implementación con estos escasos recursos de cómputo, busqué algún tipo de proceso más liviano, hasta que llegué a un algoritmo que yo mismo bauticé “<strong>filtros por correlation recursivos</strong>”, que ya debe estar inventado, con otro o con el mismo nombre, y que veremos en breve.</p>
<p style="TEXT-ALIGN: justify">Una vez implementados los 4 filtros de frecuencias fijas (o bandas, no me pregunten.. por cierto, es probable que toda la implementación esté plagada de errores de <a href="http://es.wikipedia.org/wiki/Aliasing" target="_blank">aliasing</a> y distorsiones de todo tipo; no obstante, contra todo pronóstico, funciona) mirando en la pantalla las gráficas que estos filtros producían, tuve la intuición de que era posible intentar un reconocimiento de palabras, y eso me iba a dar la excusa para “entrarle” a las redes neuronales.</p>
<p style="TEXT-ALIGN: justify">Pasaron un poco más de 6 meses, durante los cuales primero desarrollé la herramienta de diseño y entrenamiento de redes neuronales (<a href="http://www.pablogindel.com/2009/12/palmer-neural-networks/" target="_blank">Palmer Neural Networks</a>), pero después, al momento de usarla, me daba cuenta de que faltaba algo y no podía avanzar, estaba bloqueado. Por un lado no disponía de mucho tiempo para pensar en esta idea, y por otro lado había empezado a dudar de que fuera posible cumplir con el objetivo. Finalmente a fines de febrero de este año, comencé a dedicarle horas al proyecto, hasta que llegué a este resultado, que dista de ser ideal, pero que nos ilustra claramente qué podemos esperar y qué no, de un sistema con estas características.</p>
<p style="TEXT-ALIGN: justify">Los invito a compartir un viaje por la arquitectura interna de un sistema de reconocimiento de palabras implementado íntegramente en un microcontrolador ATmega128.</p>
<p style="TEXT-ALIGN: justify"> </p>
<p style="TEXT-ALIGN: justify"><span style="color: #000000;"><strong>Siguiente sección &#8211;&gt; </strong><a href="http://www.pablogindel.com/informacion/Reconocimiento-de-voz/" target="_self"><strong>Reconocimiento de voz en un ATmega128</strong></a></span></p>
<p style="TEXT-ALIGN: justify"><span style="color: #000000;"> </span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablogindel.com/2010/03/reconocimiento-de-voz-novedades-de-samsa-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Síntesis Modular con Processing</title>
		<link>http://www.pablogindel.com/2010/01/sintesis-modular-con-processing/</link>
		<comments>http://www.pablogindel.com/2010/01/sintesis-modular-con-processing/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 00:08:28 +0000</pubDate>
		<dc:creator>pabloxid</dc:creator>
				<category><![CDATA[Audio e Informática]]></category>
		<category><![CDATA[Música]]></category>
		<category><![CDATA[AM]]></category>
		<category><![CDATA[chebyshev]]></category>
		<category><![CDATA[convolution]]></category>
		<category><![CDATA[DSP]]></category>
		<category><![CDATA[envelope]]></category>
		<category><![CDATA[envolvente]]></category>
		<category><![CDATA[FFT]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[filtro]]></category>
		<category><![CDATA[FM]]></category>
		<category><![CDATA[fourier]]></category>
		<category><![CDATA[IIR]]></category>
		<category><![CDATA[javasound]]></category>
		<category><![CDATA[MIDI]]></category>
		<category><![CDATA[minim]]></category>
		<category><![CDATA[modular]]></category>
		<category><![CDATA[oscilador]]></category>
		<category><![CDATA[oscillator]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[síntesis]]></category>
		<category><![CDATA[synth]]></category>
		<category><![CDATA[synthesis]]></category>

		<guid isPermaLink="false">http://www.pablogindel.com/?p=276</guid>
		<description><![CDATA[Introducción.
Buscando una herramienta para programar y experimentar con audio, efectos y síntesis, decidí probar la biblioteca Minim de Processing. Existen muchos entornos informáticos interesantes para diseñar sonido, algunos son gráficos, otros son de escribir código, algunos son libres, otros son pagos; cito algunos ejemplos: Reaktor, Max-MSP, PureData, SynthEdit, SynthMaker, JSyn, Csound, SuperCollider, ChucK.
Dentro de Processing, [...]]]></description>
			<content:encoded><![CDATA[<h4><span style="color: #000000;">Introducción.</span></h4>
<p style="TEXT-ALIGN: justify">Buscando una herramienta para programar y experimentar con audio, efectos y síntesis, decidí probar la biblioteca <a href="http://code.compartmental.net/tools/minim/" target="_blank">Minim</a> de Processing. Existen muchos entornos informáticos interesantes para diseñar sonido, algunos son gráficos, otros son de escribir código, algunos son libres, otros son pagos; cito algunos ejemplos: Reaktor, Max-MSP, PureData, SynthEdit, SynthMaker, JSyn, Csound, SuperCollider, ChucK.<span id="more-276"></span></p>
<p style="TEXT-ALIGN: justify">Dentro de <a href="http://processing.org/" target="_blank">Processing</a>, existen varias bibliotecas para manejar sonido, entre ellas: Ess, Sonia y Minim, siendo esta última la que viene con la distribución oficial del producto. Rápidamente, repasemos las principales ventajas e inconvenientes -a mi modesto entender- de Minim:</p>
<ul style="TEXT-ALIGN: justify">
<li>Ventajas: es simple, transparente, bastante bien documentada y Open Source.</li>
<li>Inconvenientes: utiliza <a href="http://java.sun.com/products/java-media/sound/" target="_self">Java Sound</a> para comunicarse con el hardware de audio.</li>
</ul>
<p style="TEXT-ALIGN: justify">Muchas de las bibliotecas de Processing son justamente &#8220;wrappers&#8221; de las funcionalidades de Java. Minim utiliza Java Sound para el audio I/O, partes de otras bibliotecas para otras tareas -como reproducir mp3, por ejemplo- pero también agrega cosas propias e interesantes, en materia de análisis, procesamiento y generación de sonido. A su vez, uno de los principales inconvenientes del sistema de audio de Java es que no soporta <a href="http://www.steinberg.net/en/company/steinberg_technology.html" target="_blank">ASIO</a>, que como todos sabemos, es la única manera de obtener baja<em> latencia</em>, al menos bajo Windows XP.</p>
<p style="TEXT-ALIGN: justify"><span style="color: #000000;"><strong>¿Cómo funciona la generación de sonido a nivel de software?</strong></span></p>
<p style="TEXT-ALIGN: justify">El audio digital, a nivel del software, se maneja en <em>buffers</em>. Un buffer es un conjunto de muestras -por ejemplo, 1024 muestras- que se envían o se reciben en bloque hacia o desde el hardware. Mientras la tarjeta de audio reproduce esas 1024 muestras (lo que le llevará 23ms, si el muestreo es de 44,1KHz), el programa tiene tiempo de calcular el bloque siguiente. Cuanto más grande sea el buffer, o sea cuantas más muestras contenga, mayor será la latencia de la que hablábamos en el párrafo anterior (más información sobre buffers y latencia <a href="http://www.pablogindel.com/2009/07/manual-de-audio-2008/">aqui</a>).</p>
<p style="TEXT-ALIGN: justify">En Minim, la clase <a href="http://code.compartmental.net/tools/minim/manual-oscillator/" target="_blank">Oscillator</a> es la base de los generadores de sonido. Cuando se llama al método &#8220;<em>generate&#8221;</em>, este &#8220;llena&#8221; un buffer con una forma de onda calculada de alguna manera, por ejemplo con la función trigonométrica seno.</p>
<p style="TEXT-ALIGN: justify">Una consecuencia interesante de esta naturaleza de Minim, es que si nosotros intentamos modificar un parámetro de la onda que se está generando -por ejemplo su amplitud o su frecuencia- desde el módulo principal (la Draw() de Processing) ya sea a partir de un control externo o de una función prefijada, los cambios se van a manifestar de a &#8220;saltos&#8221; equivalentes a la duración del buffer (23ms, en el ejemplo que veíamos). Esto nos impide hacer un cambio gradual y continuo de cierto parámetro, por ejemplo una <a href="http://es.wikipedia.org/wiki/Envolvente_ac%C3%BAstico" target="_blank">envolvente de amplitud</a>. Para lograr este tipo de control, necesitamos implementar otro &#8220;Oscillator&#8221; que genere la señal de control, y que el primer &#8220;Oscillator&#8221; consulte a esa señal al calcular cada muestra que pone en el buffer.</p>
<p style="TEXT-ALIGN: justify">Aplicando esta idea a diversos módulos de la biblioteca, e implementando algunos módulos nuevos, surgió la <strong>Minim 2.02 PE</strong> (palmer edition), con la cual podemos hacer una modesta síntesis modular, que paso a describir y ejemplificar en la página a continuación.</p>
<h4 style="TEXT-ALIGN: justify"><span style="color: #000000;"> </span></h4>
<p style="TEXT-ALIGN: justify"><span style="color: #000000;"><strong>Siguiente sección &#8211;&gt; </strong><a href="http://www.pablogindel.com/informacion/minim-2-02-palmer-edition/" target="_self"><strong>Minim 2.02 Palmer Edition</strong></a></span></p>
<p style="TEXT-ALIGN: justify"><span style="color: #000000;"> </span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablogindel.com/2010/01/sintesis-modular-con-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Biblioteca de Arduino para AX-12</title>
		<link>http://www.pablogindel.com/2010/01/biblioteca-de-arduino-para-ax-12/</link>
		<comments>http://www.pablogindel.com/2010/01/biblioteca-de-arduino-para-ax-12/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 10:39:12 +0000</pubDate>
		<dc:creator>pabloxid</dc:creator>
				<category><![CDATA[Artículos técnicos, etc.]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[1mbps]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[atmega]]></category>
		<category><![CDATA[atmel]]></category>
		<category><![CDATA[AX-12]]></category>
		<category><![CDATA[digital]]></category>
		<category><![CDATA[Dynamixel]]></category>
		<category><![CDATA[half duplex]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[robótica]]></category>
		<category><![CDATA[robotics]]></category>
		<category><![CDATA[robotis]]></category>
		<category><![CDATA[servo]]></category>
		<category><![CDATA[USART]]></category>

		<guid isPermaLink="false">http://www.pablogindel.com/?p=270</guid>
		<description><![CDATA[El Dinamyxel AX-12+ es un un servo digital &#8220;inteligente&#8221;, fabricado por la empresa Robotis e implementado en sus kits robóticos Bioloid (que cuando pueda me voy a comprar uno); es lo que podríamos llamar un &#8220;superservo&#8221;.
Algunas de sus características, que me vienen a la mente ahora:

soporta rotación continua y modo servo standard, este último con un radio [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">El <a href="http://www.robotis.com/zbxe/dynamixel_en" target="_blank">Dinamyxel</a> AX-12+ es un un servo digital &#8220;inteligente&#8221;, fabricado por la empresa <a href="http://www.robotis.com/zbxe/main" target="_blank">Robotis</a> e implementado en sus kits robóticos Bioloid (que cuando pueda me voy a comprar uno); es lo que podríamos llamar un &#8220;superservo&#8221;.<span id="more-270"></span></p>
<p style="TEXT-ALIGN: justify">Algunas de sus características, que me vienen a la mente ahora:</p>
<ul style="TEXT-ALIGN: justify">
<li>soporta rotación continua y modo servo standard, este último con un radio de giro de 300 grados</li>
<li>velocidad y torque ajustables</li>
<li>velocidad máxima: 300 grados/seg. Torque máximo: 16Kg/cm</li>
<li>comunicación serial a 1Mb/s, half duplex. Se pueden conectar varios motores en cadena a un mismo bus.</li>
<li>usa un microcontrolador ATmega8 (vale decir que adentro de cada motor hay una Arduino de las viejas)</li>
<li>10 bits de resolución en todos los parámetros (0-1023)</li>
<li>alimentación de 7-10V (los servos standard funcionan entre 4,5-6V)</li>
<li>feedback de todo tipo de información: posición angular, temperatura, voltaje, fuerza, velocidad, sobrecarga, errores, etc.  a través del bus serial, y posee además un led de notificación.</li>
<li style="TEXT-ALIGN: justify">y lo que más me gusta: viene con los famosos &#8220;brackets&#8221; en forma de &#8220;U&#8221;, de un plástico muy resistente, tornillos, y otras piezas mecánicas de gran interés, por sólo 45 dólares.</li>
</ul>
<p style="TEXT-ALIGN: justify">Cuando me enteré de la existencia de tan maravilloso actuador, comencé a buscar información sobre su control mediante <a href="http://www.arduino.cc/" target="_blank">Arduino</a>. Dado que el propio motor implementa un ATmega8 y que el microcontrolador central de los Bioloid es un ATmega128, pensé que tenía que ser más que posible dicha combinación.</p>
<p style="TEXT-ALIGN: justify">Afortunadamente encontré este proyecto, el <a href="http://code.google.com/p/arbotix/" target="_blank">ArbotiX RoboController</a>, que es justamente una placa controladora de robots capaz de manejar los AX-12, basada en ATmega644 y de código abierto. La ArbotiX está basada en <a href="http://sanguino.cc/start" target="_blank">Sanguino</a>, y no en la Arduino propiamente dicha. La principal diferencia es que estas placas, al igual que la CM-5 del Bioloid, tienen dos puertos USART, mientras que la Arduino &#8220;clásica&#8221; tiene solamente uno.</p>
<p style="TEXT-ALIGN: justify">Si usamos los AX-12 en un proyecto, siempre nos va a convenir tener un segundo puerto serial, para comunicar con la PC u otro hardware &#8220;superior&#8221;. En el caso de la Arduino clásica, esto se resuelve usando la biblioteca <a href="http://arduino.cc/en/Reference/SoftwareSerial" target="_blank">SoftwareSerial</a>, que fue lo que yo hice en el video de más abajo. Hay que tener en cuenta que la SoftwareSerial está limitada a 9600 baudios, y que consume memoria y tiempo del procesador, pero en muchos casos esto no representa mayor problema.</p>
<p style="TEXT-ALIGN: justify">En resumen, la adaptación de la biblioteca de ArbotiX a una Arduino clásica consistió simplemente en cambiar el nombre de algunos registros. Una vez que probé que esto funcionaba, aproveché para ampliar y mejorar la funcionalidad de la librería, y actualmente estoy trabajando con mi propia versión, que pueden descargar <strong><a href="http://www.pablogindel.com/images/ax12.rar" target="_blank">aquí</a></strong>.</p>
<p style="TEXT-ALIGN: justify">En el video de prueba, el setup es el siguiente:</p>
<ul style="TEXT-ALIGN: justify">
<li>los pines 0 y 1 (RX y TX) van unidos entre sí y conectados al pin de datos del AX-12</li>
<li>la alimentación del AX-12 se extrae de los mismos 9V que alimentan a la tarjeta</li>
<li style="TEXT-ALIGN: justify">los pines 2 y 3 se utilizan con la &#8220;software serial&#8221;, y van conectados a un convertidor serial-USB (FTDI) el cual a su vez se conecta al PC y es monitoreado con el Putty. No es posible usar para esto el propio convertidor serial-USB incluido en la Arduino, ya que el mismo se encuentra físicamente soldado a los pines 0 y 1.</li>
</ul>
<p style="TEXT-ALIGN: justify">Bueno, aquí les dejo el video. Saludos!</p>
<p style="TEXT-ALIGN: justify"><a href="http://www.pablogindel.com/2010/01/biblioteca-de-arduino-para-ax-12/"><p><em>Click here to view the embedded video.</em></p></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablogindel.com/2010/01/biblioteca-de-arduino-para-ax-12/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Palmer Neural Networks</title>
		<link>http://www.pablogindel.com/2009/12/palmer-neural-networks/</link>
		<comments>http://www.pablogindel.com/2009/12/palmer-neural-networks/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 02:17:44 +0000</pubDate>
		<dc:creator>pabloxid</dc:creator>
				<category><![CDATA[Artículos técnicos, etc.]]></category>
		<category><![CDATA[Audio e Informática]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[algoritmo de entrenamiento]]></category>
		<category><![CDATA[ANN]]></category>
		<category><![CDATA[artificial neural network]]></category>
		<category><![CDATA[backpropagation]]></category>
		<category><![CDATA[bias]]></category>
		<category><![CDATA[feedforward]]></category>
		<category><![CDATA[gradiente descendente]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[mínimo local]]></category>
		<category><![CDATA[montevideo]]></category>
		<category><![CDATA[neural network]]></category>
		<category><![CDATA[pablo gindel]]></category>
		<category><![CDATA[perceptron]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[red neuronal]]></category>
		<category><![CDATA[redes neuronales]]></category>
		<category><![CDATA[sigmoide]]></category>
		<category><![CDATA[uruguay]]></category>

		<guid isPermaLink="false">http://www.pablogindel.com/?p=234</guid>
		<description><![CDATA[Como decíamos en artículos anteriores, existen -en principio- dos caminos para lograr que un programa se comporte de determinada manera en función de ciertas variables de entrada: elaborando una tabla con todas las posibles combinaciones de esas variables y sus respectivas acciones asociadas, o econtrando algún tipo de modelo matemático, una fórmula o un algoritmo [...]]]></description>
			<content:encoded><![CDATA[<p style="TEXT-ALIGN: justify">Como decíamos en artículos anteriores, existen -en principio- dos caminos para lograr que un programa se comporte de determinada manera en función de ciertas variables de entrada: elaborando una <strong>tabla</strong> con todas las posibles combinaciones de esas variables y sus respectivas acciones asociadas, o econtrando algún tipo de modelo matemático, una fórmula o un <strong>algoritmo</strong> que aplicado a dichas variables nos dé el resultado deseado en cada caso.</p>
<p style="TEXT-ALIGN: justify"><span id="more-234"></span>Cuando la cantidad de combinaciones de variables de entrada es demasiado grande como para elaborar una tabla, y la función es demasiado compleja como para &#8220;deducir&#8221; un algoritmo, las <strong>Redes Neuronales Artificiales </strong>constituyen una manera distinta de abordar el problema, sumamente efectiva aunque no perfecta, como ya veremos.</p>
<p style="TEXT-ALIGN: justify">Podríamos considerar a la RNA como una especie de &#8220;algoritmo universal&#8221;, capaz de responder de muchísimas maneras distintas, y al que podemos &#8220;enseñar&#8221; el comportamiento deseado &#8220;mostrándole&#8221; ejemplos del mismo (una tabla parcial), para luego esperar que se comporte de la manera buscada frente a todos los casos posibles. Precisamente en esto radican sus principales virtud y defecto: el porcentaje de <em>aciertos</em> puede ser increíblemente grande (teniendo en cuenta lo vago que es el método) pero no tenemos ninguna garantía de la <em>exactitud</em> del resultado. La analogía con un &#8220;cerebro&#8221; animal surge inmediatamente.</p>
<p style="TEXT-ALIGN: justify">Existen en internet numerosos artículos introductorios y avanzados, que explican claramente el funcionamiento de una RNA, mucho mejor que cualquier cosa que yo pudiera escribir aquí al respecto (empezando por <a href="http://es.wikipedia.org/wiki/Red_neuronal_artificial" target="_blank">este</a>). Mi aporte, en cambio, consistirá en presentar un programa mediante el cual podemos tener una aproximación práctica a la materia, experimentar con redes neuronales, introducir ejemplos reales, lidiar con el entrenamiento y visualizar el proceso de aprendizaje. <strong>PNN</strong> nos permite &#8220;sentir&#8221; las redes neuronales artificiales en nuestra propia experiencia, y también resolver algún caso práctico, que fue lo que originalmente me motivó a desarrollarlo.</p>
<p style="TEXT-ALIGN: justify"><strong>Características técnicas del programa.</strong></p>
<p style="TEXT-ALIGN: justify">Este programa  se basa en el artículo de Steven W. Smith sobre redes neuronales artificiales, en el capítulo 26 de su excelente <a href="http://www.dspguide.com/ch26.htm" target="_blank">The Scientist and Engineer&#8217;s Guide to DSP</a>. La red presentada vendría a ser un <em>perceptrón multicapa</em>, con una <em>capa de entrada</em>, una <em>capa oculta</em> y una <em>capa de salida</em>, cada una de ellas interconectada totalmente con la siguiente, con neuronas de &#8220;<em>bias</em>&#8221; en las dos primeras capas  y con función de transferencia <em>sigmoide</em> en cada neurona.  El algoritmo de entrenamiento es el que propone dicho autor, al que llama <em>steepest descent</em>, pero que también podemos encontrar bajo el nombre de <em>gradient descent</em> o simplemente <strong>backpropagation</strong>.</p>
<p style="TEXT-ALIGN: justify"><strong>Instrucciones</strong></p>
<p style="TEXT-ALIGN: justify">Para invocar el applet, hagan click <a title="Palmer Neural Networks" href="http://www.pablogindel.com/applets/PNN.html" target="_blank"><strong>aquí</strong></a>.</p>
<p style="TEXT-ALIGN: justify">Al hacerlo, aparecerán 2 ventanas: la ventana de <em>visualización</em>, hecha en <a href="http://processing.org/" target="_blank">Processing</a>, y el <em>panel de control</em> flotante, hecho en <a href="http://www.java.com/" target="_blank">Java</a> (que a veces queda oculto tras aquella).</p>
<p style="TEXT-ALIGN: justify">Lo primero que debemos hacer es <em>dimensionar</em> nuestra red. Escribimos el número de neuronas o <em>nodos</em> de cada capa, y apretamos el botón &#8220;Dimensionar&#8221;. Al hacerlo aparecerá en la ventana de visualización un modelo 3D en el que las neuronas de cada capa están representadas por esferas de distinto color (y las de &#8220;bias&#8221;, de un tamaño ligeramente mayor y blancas [ya nos ocuparemos de las opciones de esa visualización, antes de eso, sigamos con la parte "científica"]).</p>
<p style="TEXT-ALIGN: justify">Al apretar el botón &#8220;Aleatorizar pesos&#8221; aparecen las conexiones entre las neuronas; las verdes son positivas y las azules negativas, y su diámetro es proporcional al <em>peso</em> de la conexión correspondiente.</p>
<p style="TEXT-ALIGN: justify">A continuación deberíamos ir a &#8220;Archivo&#8221; y seleccionar &#8220;Cargar set de ejemplos&#8221;, pero lamentablemente esta opción no está habilitada en las applets de internet, por razones de seguridad. En su lugar podemos ir a &#8220;Ayuda&#8221; y seleccionar &#8220;Demo&#8221;. Esto tendrá el efecto de dimensionar una red con 7 entradas y 3 salidas, y cargar 3 sets de ejemplos.</p>
<p style="TEXT-ALIGN: justify">Para simplificar las cosas, todos los ejemplos están &#8220;asociados&#8221; a una salida; esto quiere decir que se asume que producen &#8220;<strong>1</strong>&#8221; en dicha salida y &#8220;<strong>0</strong>&#8221; en todas las demás. En la lista podemos ver a qué salida está asignado cada ejemplo. Los ejemplos se pueden sacar, seleccionándolos y apretando la tecla &#8220;suprimir&#8221;. Si apretamos &#8220;Enter&#8221; sobre un ejemplo, éste se carga arriba, y podemos testear el comportamiento de la red apretando &#8220;Procesar salida&#8221;. También es posible ingresar valores manualmente en ese campo y probarlos, y una vez ingresados se pueden agregar a la lista con el botón &#8220;Agregar ejemplo&#8221;. Los valores en las entradas pueden ser <em>enteros</em> de cualquier tamaño; los pesos son números de <em>coma flotante</em>, y los valores de salida son de coma flotante entre <strong>0</strong> y <strong>1</strong>.</p>
<p style="TEXT-ALIGN: justify">Si ahora probamos cualquier grupo de valores de entrada, el resultado en las tres salidas va a ser siempre aproximadamente 0,5. Eso se debe a que la red no está &#8220;<em>entrenada</em>&#8221; aun. Para entrenarla debemos apretar el botón &#8220;Iniciar aprendizaje&#8221;. Al hacerlo, los pesos se irán modificando, y un número grande a la derecha nos irá indicando la <em>suma del error</em> que producen todos los ejemplos al ser procesados en la red actual. El objetivo del &#8220;juego&#8221; (si usted decide aceptarlo) consiste en dejar ese valor lo más bajo posible. El proceso de optimización se repite 1000 veces cada vez que apretamos &#8220;Iniciar aprendizaje&#8221;, pero habitualmente esto no es suficiente; la cantidad de repeticiones se puede subir a 10000 con el deslizador de abajo a la izquierda. En todo momento podemos ir probando el comportamiento de la red, entre aprendizaje y aprendizaje.</p>
<p style="TEXT-ALIGN: justify">Hasta aquí la operación general del programa. Veamos ahora los detalles.</p>
<p style="TEXT-ALIGN: justify"><strong>Redimensionar la red</strong></p>
<p style="TEXT-ALIGN: justify">Al cambiar el número de neuronas en las capas de entrada o de salida, se pierden todos los ejemplos y el aprendizaje realizado. No así al redimensionar la <strong>capa oculta</strong>. De hecho, es un buen recurso, si notamos que nuestra red tiene &#8220;dificultades para aprender&#8221;, dotarla de más &#8220;capacidad&#8221; aumentando las neuronas de la capa oculta.</p>
<p style="TEXT-ALIGN: justify"><strong>Factor de aprendizaje</strong></p>
<p style="TEXT-ALIGN: justify">Al aumentar este número, hacemos que el aprendizaje sea más rápido, pero también inestable; en ocasiones el error puede quedar oscilando o incluso aumentar. Al disminuir el valor, el aprendizaje se vuelve lento pero seguro.</p>
<p style="TEXT-ALIGN: justify"><strong>Aprendizaje extra</strong></p>
<p style="TEXT-ALIGN: justify">La idea de este parámetro está sacada del antes citado libro de S. W. Smith, y consiste darle más importancia, en el aprendizaje, a los ejemplos &#8220;positivos&#8221; o a los &#8220;negativos&#8221; (un ejemplo destinado a la salida <strong>2</strong> es un ejemplo &#8220;negativo&#8221; para la salida <strong>1</strong>). Sinceramente yo no encontré ningún resultado con esto, lo voy a revisar para la próxima versión.</p>
<p style="TEXT-ALIGN: justify"><strong>Menú Archivo</strong></p>
<p style="TEXT-ALIGN: justify">Todas las opciones del menú Archivo están desactivadas, algunas por razones de seguridad del Java, otras porque no están implementadas aun. La más importante sería la de salvar los pesos una vez concluido el entrenamiento. También podríamos volverlos a cargar para usarlos como punto de partida de una siguiente sesión de aprendizaje.</p>
<p style="TEXT-ALIGN: justify"><strong>Menú Configuración</strong></p>
<p style="TEXT-ALIGN: justify">El &#8220;Modo Automático&#8221; va a estar implementado en la próxima versión. Consistiría en que el propio programa tome nota de cómo va decreciendo o aumentando el <strong>error</strong>, ajuste automáticamente los parámetros de entrenamiento, y siga actuando solo hasta llegar a un mínimo de error prefijado.</p>
<p style="TEXT-ALIGN: justify">Los distintos &#8220;modos de aleatorización&#8221; afectan al comportamiento del botón &#8220;Aleatorizar pesos&#8221;. El algoritmo de aprendizaje parte de un estado aleatorio de los pesos y va modificando sus valores en el sentido en que el error decrece. Puede pasar que en determinado momento el error no descienda más, pero aun continúe alto: estaríamos frente a lo que llaman un <em>mínimo local</em>. Aquí viene al caso la aleatorización <em>relativa</em>, que lo que hace es modificar levemente los pesos pero en relación a su valor actual (introduce una pequeña &#8220;mutación&#8221;). Con esto conseguimos, a veces, que el error aumente un poco pero luego siga disminuyendo, es algo así como  &#8221;un paso atrás, dos adelante&#8221;.</p>
<p style="TEXT-ALIGN: justify"><strong>Respecto al error</strong></p>
<p style="TEXT-ALIGN: justify">El dato mostrado a la derecha como &#8220;error&#8221; se calcula de la siguiente manera:</p>
<p style="TEXT-ALIGN: justify">cada uno de los ejemplos que están en la lista se pasa por la red, y se mide la diferencia entre el valor que debe producir en cada salida y el que realmente produce. Todos estos valores elevados al cuadrado, sumados entre sí y sumados con los provenientes del resto de los ejemplos, nos dan el &#8220;error&#8221; total para un estado en particular de la red (media cuadrática). Esto quiere decir que cuanto mayores sean el número de salidas y el número de ejemplos cargados, mucho más difícil va a ser llevar ese valor a <strong>0 </strong>(y por supuesto, esto también depende del <em>contenido </em>de los ejemplos mismos). En el caso del problema que viene como <em>demo</em> (que, dicho sea de paso, consiste en diversas versiones de las palabras &#8220;uno&#8221;, &#8220;dos&#8221; y &#8220;tres&#8221; capturadas y codificadas por un nuevo programa de procesamiento de audio que estoy desarrollando para <a href="http://www.pablogindel.com/2009/07/samsa-el-hexapodo/" target="_blank">SAMSA</a>) la red se desempeña aceptablemente bien con el error en <strong>20</strong>, más o menos.</p>
<p style="TEXT-ALIGN: justify"><strong>Opciones de visualización</strong></p>
<p style="TEXT-ALIGN: justify">Por último, la parte &#8220;coqueta&#8221; del programa.</p>
<p style="TEXT-ALIGN: justify">Al hacer foco en la ventana de visualización, quedan disponibles las siguientes opciones:</p>
<ul style="TEXT-ALIGN: justify">
<li>haciendo click con el botón derecho del mouse, detenemos o reanudamos la rotación automática del modelo. Cuando la rotación automática está detenida, podemos rotarlo libremente con el botón izquierdo del mouse.</li>
<li>con las teclas de dirección seleccionamos un parámetro, que va a aparecer detallado en el ángulo inferior izquierdo de la pantalla, y con las teclas &#8220;<strong>+</strong>&#8221; y &#8220;<strong>&#8211;</strong>&#8221; modificamos ese parámetro.</li>
<li>los parámetros que se pueden modificar son: la disposición espacial de las neuronas en cada capa, el espaciado de las mismas, la rotación de todo el plano de la capa y la cantidad de caras de la sección de los &#8220;caños&#8221; que interconectan a las neuronas, que por defecto es 20, pero puede ir de 2 a 50, generando la sensación cilíndrica.</li>
</ul>
<p style="TEXT-ALIGN: justify"><strong>Mejoras para el futuro</strong></p>
<p style="TEXT-ALIGN: justify">Esta es una lista de las mejoras que podrían implementarse en futuras versiones del <strong>PNN</strong>, algunas de las cuales fueron sugeridas por mis amigos Alvaro y Tomás  (y otras pueden ser un divague, también).</p>
<ul style="TEXT-ALIGN: justify">
<li>que las neuronas se muevan, respondiendo a leyes físicas, y que las fuerzas de atracción y repulsión dependan de los pesos.</li>
<li>ponerle sonido (con la biblioteca <em>minim</em> de Processing)</li>
<li>esferas texturadas que giren sobre sí mismas</li>
<li>que las conexiones cambien de color cuando son modificadas</li>
<li>que las neuronas vibren según su &#8220;energía&#8221;</li>
<li>que unas bolas circulen por adentro de los caños</li>
<li>rotación de las conexiones</li>
<li>hay que inventar algo para que no haya que apretar 200 veces &#8220;Iniciar aprendizaje&#8221;</li>
<li>salvar y cargar pesos</li>
<li style="TEXT-ALIGN: justify">modo automático: que combine algoritmos genéticos con el backpropagation.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.pablogindel.com/2009/12/palmer-neural-networks/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Documentación de SAMSA, 1ª entrega.</title>
		<link>http://www.pablogindel.com/2009/09/documentacion-de-samsa-1%c2%aa-entrega/</link>
		<comments>http://www.pablogindel.com/2009/09/documentacion-de-samsa-1%c2%aa-entrega/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 21:52:18 +0000</pubDate>
		<dc:creator>pabloxid</dc:creator>
				<category><![CDATA[Artículos técnicos, etc.]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[pablo gindel]]></category>
		<category><![CDATA[physical computing]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[robots]]></category>
		<category><![CDATA[SAMSA]]></category>
		<category><![CDATA[servo]]></category>
		<category><![CDATA[wiring]]></category>

		<guid isPermaLink="false">http://www.pablogindel.com/?p=225</guid>
		<description><![CDATA[Aquí va el slide que preparé para la presentación en el Sumo Robótico, que al final no pude mostrar. Es una primera aproximación a los aspectos técnicos de la construcción y programación de SAMSA, con algunas partes de código analizadas. Espero que lo disfruten.

 

 
]]></description>
			<content:encoded><![CDATA[<p style="TEXT-ALIGN: justify">Aquí va el slide que preparé para la presentación en el Sumo Robótico, que al final no pude mostrar. Es una primera aproximación a los aspectos técnicos de la construcción y programación de SAMSA, con algunas partes de código analizadas. Espero que lo disfruten.</p>
<p style="TEXT-ALIGN: justify"><span id="more-225"></span></p>
<p style="TEXT-ALIGN: center"> </p>
<div id="__ss_2075691" style="text-align: center; width: 425px;"><object style="MARGIN: 0px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=samsa-documentacin-090927111927-phpapp01&amp;stripped_title=samsa-documentacin" /><param name="allowfullscreen" value="true" /><embed style="MARGIN: 0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=samsa-documentacin-090927111927-phpapp01&amp;stripped_title=samsa-documentacin" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<p style="TEXT-ALIGN: center"> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablogindel.com/2009/09/documentacion-de-samsa-1%c2%aa-entrega/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>6º campeonato uruguayo de sumo robótico</title>
		<link>http://www.pablogindel.com/2009/09/sexto-campeonato-uruguayo-de-sumo-robotico/</link>
		<comments>http://www.pablogindel.com/2009/09/sexto-campeonato-uruguayo-de-sumo-robotico/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 02:14:14 +0000</pubDate>
		<dc:creator>pabloxid</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[hexápodo]]></category>
		<category><![CDATA[INCO]]></category>
		<category><![CDATA[pablo gindel]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[sumo robótico]]></category>
		<category><![CDATA[sumo.uy]]></category>

		<guid isPermaLink="false">http://www.pablogindel.com/?p=216</guid>
		<description><![CDATA[Se viene el 6º Campeonato Uruguayo de Sumo Robótico, organizado por el grupo MINA del Instituto de Computación / Facultad de Ingeniería, Universidad de la República, los días 24 al 26 de setiembre de 2009, o sea jueves a sábado de esta semana, en el Edificio Polifuncional Faro, Senda Nelson Landoni (al costado de Facultad de [...]]]></description>
			<content:encoded><![CDATA[<p style="TEXT-ALIGN: justify">Se viene el 6º Campeonato Uruguayo de Sumo Robótico, organizado por el grupo MINA del Instituto de Computación / Facultad de Ingeniería, Universidad de la República, los días 24 al 26 de setiembre de 2009, o sea <strong>jueves a sábado de esta semana</strong>, en el Edificio Polifuncional Faro, Senda Nelson Landoni (al costado de Facultad de Ingeniería: Julio Herrera y Reissig 565, entre la cancha de Maeso y el Estadio Luis Franzini. Teléfono: 711 4244)<span id="more-216"></span></p>
<p style="TEXT-ALIGN: justify">Toda la información aquí: <a href="http://www.fing.edu.uy/inco/eventos/sumo.uy/">http://www.fing.edu.uy/inco/eventos/sumo.uy/</a></p>
<p style="TEXT-ALIGN: justify">El evento incluye las tradicionales competencias de sumo en varias categorías, el Concurso Uruguayo de Robótica 2009 y los Workshops. En estos últimos estaremos exponiendo el trabajo &#8220;Robótica Recreativa&#8221;, con la participación de nuestros amigos &#8220;el robotito&#8221; y &#8220;SAMSA&#8221;. Todavía no sé el dia ni la hora exactas, pero presumo que será el jueves a eso de las 19:00 hs. </p>
<p style="TEXT-ALIGN: justify">Tuve el honor de participar también en los Workshops el año pasado, y todo el evento estuvo buenísimo, no se lo pierdan.</p>
<p style="TEXT-ALIGN: justify">A propósito, vieron la última muestra de talento de SAMSA? Se nos va pa&#8217; Hollywood, se nos va&#8230;</p>
<p style="TEXT-ALIGN: justify"> </p>
<a href="http://www.pablogindel.com/2009/09/sexto-campeonato-uruguayo-de-sumo-robotico/"><p><em>Click here to view the embedded video.</em></p></a>
]]></content:encoded>
			<wfw:commentRss>http://www.pablogindel.com/2009/09/sexto-campeonato-uruguayo-de-sumo-robotico/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Novedades de SAMSA</title>
		<link>http://www.pablogindel.com/2009/08/novedades-de-samsa/</link>
		<comments>http://www.pablogindel.com/2009/08/novedades-de-samsa/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 05:30:35 +0000</pubDate>
		<dc:creator>pabloxid</dc:creator>
				<category><![CDATA[Artículos técnicos, etc.]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[hexapod]]></category>
		<category><![CDATA[hexápodo]]></category>
		<category><![CDATA[pablo gindel]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[uruguay]]></category>
		<category><![CDATA[wiring]]></category>

		<guid isPermaLink="false">http://www.pablogindel.com/?p=159</guid>
		<description><![CDATA[Pasaron casi 2 meses desde los últimos videos de SAMSA, aquellos de la caminata, y tal vez pueda parecer que son pocos los avances para 2 meses. Voy a comentar los puntos en los que estuve trabajando.]]></description>
			<content:encoded><![CDATA[<p>Por fin algo para subir al blog!</p>
<a href="http://www.pablogindel.com/2009/08/novedades-de-samsa/"><p><em>Click here to view the embedded video.</em></p></a> <a href="http://www.pablogindel.com/2009/08/novedades-de-samsa/"><p><em>Click here to view the embedded video.</em></p></a>
<p style="TEXT-ALIGN: justify">Pasaron casi 2 meses desde los últimos videos de SAMSA, aquellos de la caminata, y tal vez pueda parecer que son pocos los avances para 2 meses. Voy a comentar los puntos en los que estuve trabajando:</p>
<p style="TEXT-ALIGN: justify"><strong>1) Idea central</strong>: todavía no tengo una idea central fuerte, que dé coherencia a todo el conjunto. SAMSA todavía no tiene una personalidad definida, pero ya presenta algunos rasgos. No es para inquietarse, a veces la &#8220;idea&#8221; me viene bastante tiempo después de tener armado todo el hardware, y a veces directamente no me viene. Siempre está la posibilidad de invitar a algún amigo y anotar en un papelito todas las ideas que se le escapan.</p>
<p style="TEXT-ALIGN: justify"><span id="more-159"></span></p>
<div class="mceTemp" style="TEXT-ALIGN: justify">
<dl class="wp-caption alignright" style="width: 292px;">
<dt class="wp-caption-dt"><a href="http://www.pablogindel.com/imagenes/bateria.jpg"><img class="     " title="batería" src="http://www.pablogindel.com/imagenes/bateriap.jpg" alt="Fuente de energía de SAMSA: batería LiPo de 7.4V/730mAh. Otra batería más grande y el cargador." width="282" height="183" /></a></dt>
<dd class="wp-caption-dd">Fuente de energía de SAMSA: batería LiPo de 7.4V/730mAh. Otra batería más grande y el cargador.</dd>
</dl>
</div>
<p style="TEXT-ALIGN: justify"><strong>2) Autonomía</strong>: no fue fácil dar con la batería adecuada para SAMSA. El robot necesita como mínimo una tensión de 6V, y, no tengo amperímetro, pero mis cálculos daban que debía consumir unos 3.6A, ya que la especificación del servo HiTec HS-55 -del cual los que yo usé son una copia berreta- dice que el motor andando pero <em>en el vacío</em> (no load) consume unos 150mA. Los 18 servos andando a la vez y con el robot apoyado, generarían un consumo considerable, al que habría que sumar el del resto de la electrónica. Evidentemente me quedé corto, ya que el primer intento con baterías de 2000mAh/2C (el &#8220;2C&#8221; indica que admiten una descarga de 2 veces su carga, en este caso 4A) fue un fracaso. Necesitaba baterías de más &#8220;polenta&#8221;, pero ojo con aumentar el tamaño y el peso, dado que SAMSA es un robot más bien debilucho. El factor que hubo que sacrificar es la carga misma, es decir el tiempo de autonomía. Finalmente terminé usando la batería que se ve en la foto, de 730mAh/20C, que admite descargas puntuales (&#8221;burst&#8221;) de hasta 40C, o sea: un disparate, y pesa nada más que 35g. Estimo que la autonomía no será de más de 15 minutos, pero hasta ahora no lo he probado. </p>
<div class="mceTemp">
<div class="wp-caption alignright" style="width: 252px"><a href="http://www.pablogindel.com/imagenes/encoder2.jpg"><img class=" " title="encoder 2" src="http://www.pablogindel.com/imagenes/encoder2p.jpg" alt="Antenas." width="242" height="322" /></a><p class="wp-caption-text">Antenas y medidor de distancia Sharp GP2D12</p></div>
<dl class="wp-caption alignnone" style="width: 267px;">
<dt class="wp-caption-dt"><a href="http://www.pablogindel.com/imagenes/encoder1.jpg"><img class=" " title="encoder 1" src="http://www.pablogindel.com/imagenes/encoder1p.jpg" alt="Motor DC y encoder óptico de las antenas" width="257" height="199" /></a></dt>
<dd class="wp-caption-dd">Motor DC y encoder óptico de las antenas.</dd>
</dl>
</div>
<p style="TEXT-ALIGN: justify"><strong>3) Sensores y periféricos</strong>: para el tiempo en que filmé la caminata, los sensores ni estaban conectados. Los dos cables del motor DC que mueve las antenas estaban colgando sueltos, el medidor de distancia estaba puesto &#8220;de adorno&#8221; y el resto de las cosas no existían. Conectar todas estas cosas dio un gran trabajo, en especial la parte de audio. Todos los periféricos -excepto el display, que para aquel entonces ya estaba perfectamente funcional aunque no tenía software que lo explotara- van conectados a un mini-circuito que está en la parte de abajo del tronco, el que muestra la foto. Ese circuito maneja las siguientes cosas:</p>
<ul style="TEXT-ALIGN: justify">
<li><strong>motor DC de las antenas</strong>, controlado por un puente en &#8220;H&#8221; a transistores, que ocupa menos espacio que un L293D.</li>
<li><strong>rotary encoder óptico</strong> de las antenas (sacado de un mouse viejo). Esto permite usar las antenas también como dispositivo de entrada, y ya tengo rutinas que explotan el recurso.</li>
<li><strong>micrófono</strong>, amplificado por un operacional diminuto que no se ve, porque está tapado por los componentes pasivos.</li>
<li style="TEXT-ALIGN: justify"><strong>acelerómetro y medidor de distancia</strong> Sharp GP2D12; éstos van directo a la Wiring, el circuito sólo se encarga de conectarlos. (El acelerómetro es para hacer trucos como que detecte cuando lo levantás, etc., por el momento no se está usando.)</li>
</ul>
<p style="TEXT-ALIGN: justify"><a href="http://www.pablogindel.com/imagenes/circuito2.jpg"></a></p>
<div class="mceTemp" style="TEXT-ALIGN: justify">
<dl class="wp-caption alignright" style="width: 272px;">
<dt class="wp-caption-dt"><a href="http://www.pablogindel.com/imagenes/circuito1.jpg"><img title="circuito 1" src="http://www.pablogindel.com/imagenes/circuito1p.jpg" alt="A escala." width="262" height="190" /></a></dt>
<dd class="wp-caption-dd">A escala.</dd>
</dl>
</div>
<div class="mceTemp" style="TEXT-ALIGN: justify">
<dl class="wp-caption alignnone" style="width: 258px;">
<dt class="wp-caption-dt"><a href="http://www.pablogindel.com/imagenes/circuito3.jpg"><img title="circuito 3" src="http://www.pablogindel.com/imagenes/circuito3p.jpg" alt="Mini-circuito." width="248" height="164" /></a></dt>
<dd class="wp-caption-dd">Mini-circuito.</dd>
</dl>
</div>
<p style="TEXT-ALIGN: justify"> </p>
<div class="mceTemp" style="TEXT-ALIGN: justify">
<div class="wp-caption alignright" style="width: 276px"><a href="http://www.pablogindel.com/imagenes/circuito4.jpg"><img title="circuito 4" src="http://www.pablogindel.com/imagenes/circuito4p.jpg" alt="Inserción en el robot." width="266" height="184" /></a><p class="wp-caption-text">Inserción en el robot.</p></div>
<dl class="wp-caption alignnone" style="width: 251px;">
<dt class="wp-caption-dt"><a href="http://www.pablogindel.com/imagenes/circuito2.jpg"><img class="   " title="circuito 2" src="http://www.pablogindel.com/imagenes/circuito2p.jpg" alt="Vista trasera." width="241" height="184" /></a></dt>
<dd class="wp-caption-dd">Vista trasera.</dd>
</dl>
</div>
<p style="TEXT-ALIGN: justify">Lo que realmente me dio trabajo acá fue el audio, tanto en el hardware como en el software. En el hardware, porque la electrónica analógica nunca fue mi fuerte, y ajustar ese circuito, a ojímetro como hago todo, fue casi imposible. Sabiendo además que el LM324 no era la mejor elección, lo hice así porque quería aprender de una vez a usar operacionales. Otro problema que tuve fue el ruido infernal que mete el Sharp GP2D12 en la línea de alimentación, el cual fue atenuado a base de sacar la alimentación de un punto lo más lejano posible al circuito de audio, y meter condensadores por todos lados a lo bestia.</p>
<p style="TEXT-ALIGN: justify">El software también aportó lo suyo, pero de eso hablaremos más en detalle cuando encare la documentación &#8220;posta&#8221; del robot. Resumiendo, el tema con los sensores es que hay que actualizar la lectura con cierta frecuencia, y el tiempo que tenemos para tareas periódicas no es demasiado, una gran parte del mismo es consumida en manejar los 18 servos. En el caso del audio, además, hay que hacer otras cosas que recayeron finalmente en el software, como filtrar el componente de corriente continua (DC), rectificar, &#8220;logaritmizar&#8221; e integrar, lo que finalmente también consume abundante tiempo, y estamos hablando sólo de trabajar con la intensidad del sonido, no sueñen con una FFT ni con reconocimiento de palabras ni nada. De más está decir que toda la gracia del proyecto es hacerlo con un sólo procesador.</p>
<div class="wp-caption alignright" style="width: 332px"><a href="http://www.pablogindel.com/imagenes/pata.jpg"><img title="pata" src="http://www.pablogindel.com/imagenes/patap.jpg" alt="Pata del robot." width="322" height="242" /></a><p class="wp-caption-text">Pata del robot.</p></div>
<p style="TEXT-ALIGN: justify">4) <strong>La &#8220;cinemática inversa&#8221;</strong> es lo que permitió hacer movimientos del tronco, dejando las patas fijas en un punto, como se ve en el segundo video. Los servos trabajan con ángulos, su posición angular es proporcional al ancho del pulso que reciben, y dentro del programa, yo puedo controlar linealmente el ancho de ese puso, y por ende manejar con exactitud -e independencia- los 18 ángulos (excepto por las limitaciones mecánicas, que hacen que para adoptar ciertas posiciones, lo tenga que &#8220;ayudar&#8221; con todas las patas haciendo fuerza a la vez). Las rutinas de caminata fueron hechas como secuencias de ángulos, experimentalmente (y me sigue resultando asombroso que pueda caminar tan rápido) pero para hacer movimientos con el tronco la cosa ya no es tan fácil. Por ejemplo, si quiero poner la punta de una pata 4cm por debajo de la altura del tronco, y mantenerla a esa altura mientras la alejo o la acerco perpendicularmente al mismo, necesariamente tengo que variar en forma continua 2 ángulos, y hacerlo de acuerdo a una fórmula matemática no evidente.</p>
<p style="TEXT-ALIGN: justify">Utilizando el teorema de Pitágoras y el teorema del Coseno, encontré la manera de calcular los ángulos necesarios para poner cada pata en unas coordenadas dadas, en cm. También me valí de unas fórmulas que encontré en internet para calcular las funciones trigonométricas inversas utilizando sólo arcotangente, que es lo que la &#8216;math&#8217; de Wiring tiene. Hice el siguiente <a title="Programa de simulación" href="http://www.pablogindel.com/applets/cinematica_inversa.html" target="_blank">programa de simulación</a> en Processing, y la parte de &#8220;offsets&#8221; para que los resultados quedaran en el cuadrante y con el signo correcto también fue experimental, metiéndole &#8220;a mano&#8221; valores como PI/2, -PI/4, etc., a ver qué pasaba.</p>
<p style="TEXT-ALIGN: justify">Una vez pronta esta rutina (que en mi programa se llama &#8220;alfabetagama&#8221;), calcular las 3 traslaciones y las 3 rotaciones del tronco fue tarea relativamente sencilla, casi todo con sumas y restas, excepto una de las rotaciones en la que usé la fórmula de la rotación en el plano, que involucra senos y cosenos. Todo esto lo voy a explicar detenidamente en la prometida documentación.</p>
<div class="mceTemp" style="TEXT-ALIGN: justify">
<div class="wp-caption alignright" style="width: 267px"><a href="http://www.pablogindel.com/imagenes/display2.jpg"><img title="display 2" src="http://www.pablogindel.com/imagenes/display2p.jpg" alt="Vista trasera del circuito controlador del display." width="257" height="189" /></a><p class="wp-caption-text">Vista trasera del circuito controlador del display.</p></div>
<dl class="wp-caption alignnone" style="width: 269px;">
<dt class="wp-caption-dt"><a href="http://www.pablogindel.com/imagenes/display1.jpg"><img title="display 1" src="http://www.pablogindel.com/imagenes/display1p.jpg" alt="Display LED matricial de 8x8 monocromático." width="259" height="177" /></a></dt>
<dd class="wp-caption-dd">Display LED matricial de 8&#215;8 monocromático.</dd>
</dl>
</div>
<p style="TEXT-ALIGN: justify"><strong>5) Display</strong>: varias personas me sugirieron que no perdiera tiempo con el display, que nadie lo iba a mirar, llegando incluso a cuestionar la presencia del mismo en el proyecto, pero a mí me gusta. Hice todo tipo de adornitos, rutinas que miden un parámetro y lo expresan como líneas o barras verticales y horizontales, como círculos, como escaleritas, como cuadrados, como puntos &#8220;aleatorio-probabilísticos&#8221;, rutinas que muestran y desplazan texto, rutinas que giran, que borran, que invierten, que mezclan, etc., y hasta le programé una versión del clásico juego de la vida de Conway.</p>
<p style="TEXT-ALIGN: justify">Por último debo aclarar que lo que se ve en los videos no forma parte de la idea central sino que son cosas programadas &#8220;ad-hoc&#8221; al momento de la filmación, con la ayuda de mi amigo Daniel Lopes, el KBZA, como una forma de mostrar más o menos las posibilidades con que cuenta SAMSA hoy en día, aunque alguna idea ya estoy sacando de todo eso.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablogindel.com/2009/08/novedades-de-samsa/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>El Círculo Supremo de los Modos</title>
		<link>http://www.pablogindel.com/2009/08/el-circulo-supremo-de-los-modos/</link>
		<comments>http://www.pablogindel.com/2009/08/el-circulo-supremo-de-los-modos/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 18:40:24 +0000</pubDate>
		<dc:creator>pabloxid</dc:creator>
				<category><![CDATA[Música]]></category>
		<category><![CDATA[escalas]]></category>
		<category><![CDATA[modes]]></category>
		<category><![CDATA[modos]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[scales]]></category>

		<guid isPermaLink="false">http://www.pablogindel.com/?p=139</guid>
		<description><![CDATA[Siguiendo con esta tendencia de desenterrar trabajos antiguos, les traigo este programa hecho originalmente en BASIC, que me tomé el trabajo de pasar a Processing para poder publicarlo en forma de applet. Como su nombre lo indica, se trata de un círculo armónico, o círculo de cuartas, de quintas, cromático, o como prefieran llamarlo, en el cual se [...]]]></description>
			<content:encoded><![CDATA[<p style="TEXT-ALIGN: justify">Siguiendo con esta tendencia de desenterrar trabajos antiguos, les traigo este programa hecho originalmente en BASIC, que me tomé el trabajo de pasar a Processing para poder publicarlo en forma de applet. Como su nombre lo indica, se trata de un círculo armónico, o círculo de cuartas, de quintas, cromático, o como prefieran llamarlo, en el cual se han inscripto en forma de &#8220;quesos&#8221; los modos de las distintas escalas.<span id="more-139"></span></p>
<p style="TEXT-ALIGN: justify">Para invocar el applet, hagan click <a title="Círculo Supremo de los Modos" href="http://www.pablogindel.com/applets/circulo.html" target="_blank"><strong>acá</strong></a>.</p>
<p style="TEXT-ALIGN: justify">A primera vista puede resultar incomprensible, pero este círculo nos presenta en un solo esquema muchas propiedades interesantes de las escalas. Aquí va la explicación.</p>
<p style="TEXT-ALIGN: justify">1) La primer característica importante que van a observar es que en este círculo, en lugar de los nombres de las notas (DO, SOL, RE, etc.) tenemos intervalos: &#8220;Fundamental&#8221;, &#8220;5a. justa&#8221;, &#8220;2a Mayor&#8221;, etc.; es un círculo &#8220;relativo&#8221;.</p>
<p style="TEXT-ALIGN: justify">2) Con las teclas de dirección izquierda y derecha podemos mover los &#8220;quesos&#8221; a lo largo del círculo. Con las teclas &#8220;arriba&#8221; y &#8220;abajo&#8221; cambiamos la escala generadora. La escala con la que arranca es la Mayor, y sugiero dejarlo en esa hasta familiarizarnos un poco con la onda del programa.</p>
<p style="TEXT-ALIGN: justify">3) Al ubicar un modo en la posición &#8220;Fund.&#8221;, el resto de los quesos nos indicarán los intervalos presentes en ese modo, y los nombres de los modos que se forman en cada uno de ellos. Por ejemplo, si pongo el modo Jónico en la fundamental, el programa me dice que el mismo está formado por Fund., 2a.M, 3a.M, 4a.J, 5a. J, 6a.M y 7a.M y que en la 5a. tiene el modo Mixolidio, en la 4a. el Lidio, etc.</p>
<p style="TEXT-ALIGN: justify">4) Asimismo, nada me impide colocar un modo en un intervalo cualquiera del círculo, por ejemplo, vamos a suponer que tenemos el modo Jónico en la 5a.J de &#8220;algo&#8221;. En ese caso, el programa nos dice que vamos a tener el Mixolidio en la 2a.M de ese mismo &#8220;algo&#8221;, el Dórico en la 6a.M, etc. Es un poco pirado, pero ya le van a encontrar utilidad.</p>
<p style="TEXT-ALIGN: justify">5) Por último, el color de los quesos intenta indicar aproximadamente el &#8220;color armónico&#8221; de cada modo. Esta es la parte más  interesante del programa, la había esbozado en la versión original en Qbasic (última revisión, 2002) pero la concreté por primera vez en esta versión. Es interesante porque se plantea, al igual que en <a title="El Zappator" href="http://www.pablogindel.com/2009/08/el-zappator/" target="_self">Zappator</a>, el tema &#8221;algoritmo vs. tabla&#8221;. Veamos cómo funciona.</p>
<p style="TEXT-ALIGN: justify">El tema de asociar un &#8220;color&#8221; a determinado conjunto de notas, es, por supuesto, algo totalmente subjetivo. El criterio que yo adopté es el siguiente: el color tiende al azul cuando el acorde fundamental es un Maj7, al rojo cuando es un &#8220;dominante&#8221;, al verde cuando es un menor y se vuelve oscuro en presencia de un disminuido o de notas &#8220;raras&#8221;. La forma de implementarlo fue mediante una especie de red neuronal de 1 capa sola, con 4 nodos (los 3 colores básicos + la &#8220;oscuridad&#8221;) cada uno de ellos con 11 entradas (cada una de las posibles notas presentes o no en el modo, además de la fundamental). Los &#8221;pesos&#8221; de esta red fueron asignados &#8220;a mano&#8221;, dando valores mayores a las notas más representativas del &#8220;color armónico&#8221;, valores negativos a las notas &#8220;antagónicas&#8221;, etc. De esta forma el programa &#8220;calcula&#8221; el color de cada modo, en lugar de leerlo de una tabla, como sí hace en cambio con los nombres, por ejemplo. Sigue pendiente una explicación de por qué me gustan tanto estos mecanismos &#8220;generativos&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablogindel.com/2009/08/el-circulo-supremo-de-los-modos/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Músicas olvidadas</title>
		<link>http://www.pablogindel.com/2009/08/musicas-olvidadas/</link>
		<comments>http://www.pablogindel.com/2009/08/musicas-olvidadas/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 04:02:17 +0000</pubDate>
		<dc:creator>pabloxid</dc:creator>
				<category><![CDATA[Música]]></category>
		<category><![CDATA[pablo gindel]]></category>

		<guid isPermaLink="false">http://www.pablogindel.com/?p=117</guid>
		<description><![CDATA[De los montones de grupos en los que toqué y quedaron en la nada, o de los que me fui tempranamente, logré rescatar 3 canciones, que acá les traigo.
1) Malena Morgan &#8211; Azucena (1995)

La tendencia en Malena Morgan derivó hacia la canción, y los temas eran habitualmente de Herman. Este sin embargo es un tema mío e instrumental, que se editó [...]]]></description>
			<content:encoded><![CDATA[<p style="TEXT-ALIGN: justify">De los montones de grupos en los que toqué y quedaron en la nada, o de los que me fui tempranamente, logré rescatar 3 canciones, que acá les traigo.<span id="more-117"></span></p>
<p style="TEXT-ALIGN: justify"><strong>1) Malena Morgan &#8211; Azucena (1995)</strong></p>
<p style="TEXT-ALIGN: justify"></p>
<p style="TEXT-ALIGN: justify">La tendencia en Malena Morgan derivó hacia la canción, y los temas eran habitualmente de Herman. Este sin embargo es un tema mío e instrumental, que se editó en un disco colectivo del año &#8216;95, como resultado de un concurso de la IMM de música instrumental. Los integrantes acá son: Herman Klang en teclados, Sebastián Laurito en guitarra, Diego Bartaburu en batería y quien les habla en el bajo. Fue grabado en mi casa y mezclado en &#8220;El Estudio&#8221; por César Lamschtein. </p>
<p style="TEXT-ALIGN: justify"><strong>2) Ardito &amp; Duré &#8211; El séptimo (2000)</strong></p>
<p style="TEXT-ALIGN: justify"></p>
<p style="TEXT-ALIGN: justify">Tema de Marcelo Rocha (el pelado) con él mismo en vocales, Gabriel Fletcher en guitarra, Sergio Fernández en percusión, Federico Moreira en batería, y yo en el bajo. Banda que duró muy poco, habremos tocado 4 o 5 veces y no editamos ningún disco. Este demo se grabó en el 2000, la batería en &#8220;La zapada&#8221; y el resto en mi casa, y lo mezclé yo mismo.</p>
<p style="TEXT-ALIGN: justify"><strong>3) Hay que Armar &#8211; Desolación (2005)</strong></p>
<p style="TEXT-ALIGN: justify"> </p>
<p style="TEXT-ALIGN: justify">Hay que Armar, banda que estaba integrada por Sebastián Laurito en guitarra y voz, Diego Bartaburu en batería, Elena en vocales y este humilde servidor en el bajo. Este tema lo compuso Sebastián Laurito, la grabación es un demo hecho en el estudio de Max Capote en el 2005.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablogindel.com/2009/08/musicas-olvidadas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="http://www.pablogindel.com/audio/ardito%20y%20dure%20-%20el%20septimo.mp3" length="4889563" type="audio/mpeg" />
		</item>
	</channel>
</rss>
