<?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/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>electricBricks&#187; RobotC</title>
	<atom:link href="http://blog.electricbricks.com/category/robotc/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.electricbricks.com</link>
	<description></description>
	<lastBuildDate>Thu, 22 Jul 2010 09:23:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Control de prioridades de tareas en RobotC</title>
		<link>http://blog.electricbricks.com/2010/06/robotc-task-priority/</link>
		<comments>http://blog.electricbricks.com/2010/06/robotc-task-priority/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 11:19:31 +0000</pubDate>
		<dc:creator>Alvaro</dc:creator>
				<category><![CDATA[NXT]]></category>
		<category><![CDATA[RobotC]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[robótica]]></category>

		<guid isPermaLink="false">http://blog.electricbricks.com/?p=7939</guid>
		<description><![CDATA[
English

En el artículo anterior de RobotC vimos cómo manejar varias tareas, gestionando el uso de recursos compartidos como los motores. En este artículo ampliaré la información sobre el manejo de tareas, viendo cómo poner mayor o menor prioridad a una tarea, y el efecto que tiene sobre la ejecución del programa. También veremos en qué [...]]]></description>
			<content:encoded><![CDATA[<ul class="lang_switch">
<li class="lang_switch"><a href="http://blog.electricbricks.com/en/2010/06/robotc-task-priority/"><img src="http://blog.electricbricks.com/wp-content/plugins/zdmultilang/flags/en_US.png" alt="English" title="English" border="0">English</a></li>
</ul>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Round-Robin-150x130.gif" alt="Round Robin" title="Round Robin" width="150" height="130" class="alignleft size-thumbnail wp-image-7970"/>En el <a href="http://blog.electricbricks.com/en/2010/06/multicontrol-tareas-robotc/">artículo anterior de RobotC</a> vimos cómo manejar varias tareas, gestionando el uso de recursos compartidos como los motores. En este artículo ampliaré la información sobre el manejo de tareas, viendo cómo poner mayor o menor prioridad a una tarea, y el efecto que tiene sobre la ejecución del programa. También veremos en qué consiste la planificación de tareas Round Robin y al final pondré un par de programas de prueba con vídeos incluidos.<span id="more-7939"></span></p>
<p><strong>¿Que significa prioridad?:</strong></p>
<p>A la hora de iniciar una tarea en RobotC podemos asignarle una prioridad. Esta prioridad tiene un valor numérico que va del 0 al 255. Cuando una tarea se está ejecutando en la CPU el resto de tareas están esperando a que la deje libre. La tarea que tendrá el control de la CPU después de que la tarea que la estaba utilizando la deje libre será la que mayor prioridad tenga. Esto significa que las tareas que tengan mayor prioridad se ejecutarán antes que las demás que estén esperando.</p>
<p>RobotC usa planificación <em>Round Robin</em> para asignar tiempo de CPU a cada tarea.</p>
<p><strong>Planificación Round-robin:</strong></p>
<p>Round robin es un método para seleccionar todos los elementos en un grupo de manera equitativa y en un orden racional, normalmente comenzando por el primer elemento de la lista hasta llegar al último y empezando de nuevo desde el primer elemento. El planeamiento Round Robin es tan simple como fácil de implementar, y está libre de <em>inanición</em> (significa que ningún proceso esperará durante demasiado tiempo a que le den tiempo de CPU).</p>
<p>Round Robin asigna a cada proceso una porción de tiempo equitativa y ordenada, por lo que ningún proceso tendrá mayor tiempo de ejecución que los demás. Normalmente Round Robin trata a todos los procesos con la misma prioridad, aunque en caso de RobotC podemos aplicar prioridades, que solo afectarán en el orden en que entren a CPU las tareas que estén esperando, pero nunca en el tiempo de CPU que se les asigne.</p>
<p><strong>Tareas con prioridad en Robotc:</strong> </p>
<p>En RobotC se le puede asignar una prioridad a una tarea al iniciarla. Esta prioridad debe estar entre el 0 y el 255. A mayor prioridad antes se ejecutará dicha tarea. Para asignar prioridad a una tarea al iniciarla se usa la función:</p>
<p><strong>StartTaskWithPriority(nombre_tarea, prioridad)</strong>: Inicia una tarea con la prioridad que hayamos escogido.</p>
<p>Hay que tener en cuenta que la prioridad no será algo perceptible, ya que la asignación de CPUs a tareas se hace muy rápido, pero sin embargo tiene utilidad a la hora de programar, ya que nos aseguramos que ciertas tareas se ejecuten antes que otras mientras ambas estén esperando.</p>
<p><strong>Programa de prueba:</strong></p>
<p>Un programa bastante sencillo para probar que en efecto todas las tareas reciben el mismo tiempo de CPU es el siguiente: se crean cuatro tareas, cada una de ellas se encarga de aumentar un contador y mostrar su número por pantalla. Si todas las tareas tuvieran el mismo tiempo de CPU los números deberían avanzar a la vez.</p>
<p>El código es el siguiente:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333;">int</span> cont1 <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> cont2 <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> cont3 <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> cont4 <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #993333;">task</span> tarea1<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; cont1<span style="color: #339933;">++;</span><br />
&nbsp; &nbsp; &nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Tarea 1: %d&quot;</span><span style="color: #339933;">,</span> cont1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #993333;">task</span> tarea2<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; cont2<span style="color: #339933;">++;</span><br />
&nbsp; &nbsp; &nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Tarea 2: %d&quot;</span><span style="color: #339933;">,</span> cont2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #993333;">task</span> tarea3<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; cont3<span style="color: #339933;">++;</span><br />
&nbsp; &nbsp; &nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">4</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Tarea 3: %d&quot;</span><span style="color: #339933;">,</span> cont3<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #993333;">task</span> tarea4<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; cont4<span style="color: #339933;">++;</span><br />
&nbsp; &nbsp; &nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">6</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Tarea 4: %d&quot;</span><span style="color: #339933;">,</span> cont4<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #993333;">task</span> <span style="color: #993333;">main</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; StartTaskWithPriority<span style="color: #009900;">&#40;</span>tarea1<span style="color: #339933;">,</span> <span style="color: #0000dd;">250</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; StartTaskWithPriority<span style="color: #009900;">&#40;</span>tarea2<span style="color: #339933;">,</span> <span style="color: #0000dd;">150</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; StartTaskWithPriority<span style="color: #009900;">&#40;</span>tarea3<span style="color: #339933;">,</span> <span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; StartTaskWithPriority<span style="color: #009900;">&#40;</span>tarea4<span style="color: #339933;">,</span> <span style="color: #0000dd;">25</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Y aquí os pongo un video de su funcionamiento:</p>
<p><center><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/AS_f4doumkY&#038;hl=es_ES&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/AS_f4doumkY&#038;hl=es_ES&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="400"></embed></object></center></p>
<p>También se puede hacer una pequeñas variación, cambiando los retardos  dentro de cada tarea para que sean proporcionales. Si por ejemplo ponemos a una tarea el doble de retardo que otra, está cambiará el contador a la mitad de velocidad. Aquí está un código de ejemplo:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333;">int</span> cont1 <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> cont2 <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> cont3 <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> cont4 <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #993333;">task</span> tarea1<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; cont1<span style="color: #339933;">++;</span><br />
&nbsp; &nbsp; &nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Tarea 1: %d&quot;</span><span style="color: #339933;">,</span> cont1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #993333;">task</span> tarea2<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; cont2<span style="color: #339933;">++;</span><br />
&nbsp; &nbsp; &nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Tarea 2: %d&quot;</span><span style="color: #339933;">,</span> cont2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #993333;">task</span> tarea3<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">250</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; cont3<span style="color: #339933;">++;</span><br />
&nbsp; &nbsp; &nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">4</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Tarea 3: %d&quot;</span><span style="color: #339933;">,</span> cont3<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #993333;">task</span> tarea4<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">125</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; cont4<span style="color: #339933;">++;</span><br />
&nbsp; &nbsp; &nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">6</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Tarea 4: %d&quot;</span><span style="color: #339933;">,</span> cont4<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #993333;">task</span> <span style="color: #993333;">main</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; StartTaskWithPriority<span style="color: #009900;">&#40;</span>tarea1<span style="color: #339933;">,</span> <span style="color: #0000dd;">250</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; StartTaskWithPriority<span style="color: #009900;">&#40;</span>tarea2<span style="color: #339933;">,</span> <span style="color: #0000dd;">150</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; StartTaskWithPriority<span style="color: #009900;">&#40;</span>tarea3<span style="color: #339933;">,</span> <span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; StartTaskWithPriority<span style="color: #009900;">&#40;</span>tarea4<span style="color: #339933;">,</span> <span style="color: #0000dd;">25</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Y el vídeo:</p>
<p><center><object width="500" height="404"><param name="movie" value="http://www.youtube.com/v/oqxagM61Qdk&#038;hl=es_ES&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/oqxagM61Qdk&#038;hl=es_ES&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="404"></embed></object></center></p>
<p>En este caso la diferente espera interna de cada tarea produce que los contadores crezcan de forma inversamente proporcional, de ahí que exista una diferencia de velocidades de 1 a 8 entre la tarea 1 y la 4, la misma relación inversa que sus retardos. En este caso la prioridad de cada una de las tareas no afecta para nada al resultado: sabemos que cada vez que se han ejecutado las 4 tareas siempre ha sido la tarea 1 la primera de ellas, a continuación la 2, la 3 y finalmente la 4, debido a la siguiente parte del código:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">StartTaskWithPriority<span style="color: #009900;">&#40;</span>tarea1<span style="color: #339933;">,</span> <span style="color: #0000dd;">250</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
StartTaskWithPriority<span style="color: #009900;">&#40;</span>tarea2<span style="color: #339933;">,</span> <span style="color: #0000dd;">150</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
StartTaskWithPriority<span style="color: #009900;">&#40;</span>tarea3<span style="color: #339933;">,</span> <span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
StartTaskWithPriority<span style="color: #009900;">&#40;</span>tarea4<span style="color: #339933;">,</span> <span style="color: #0000dd;">25</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>En esta pequeña aplicación no ha afectado para nada la prioridad de ejecución, pero puede que en otra aplicación sí sea necesario el uso de prioridades.</p>
<p>Espero que os haya resultado interesante. Ya sabéis, ante cualquier duda estamos en el <a href="http://www.electricbricks.com/forum/index.php">foro</a>.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-scriptstyle">
			<a href="http://scriptandstyle.com/submit?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Submit this to Script &amp; Style">Submit this to Script &amp; Style</a>
		</li>
		<li class="sexy-blinklist">
			<a href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;Title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Share this on Blinklist">Share this on Blinklist</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC&amp;desc=EnglishEn%20el%20art%C3%ADculo%20anterior%20de%20RobotC%20vimos%20c%C3%B3mo%20manejar%20varias%20tareas%2C%20gestionando%20el%20uso%20de%20recursos%20compartidos%20como%20los%20motores.%20En%20este%20art%C3%ADculo%20ampliar%C3%A9%20la%20informaci%C3%B3n%20sobre%20el%20manejo%20de%20tareas%2C%20viendo%20c%C3%B3mo%20poner%20mayor%20o%20menor%20prioridad%20a%20una%20tarea%2C%20y%20el%20efecto%20que%20tiene%20sobre%20la%20ejec" rel="nofollow" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;submitHeadline=Control+de+prioridades+de+tareas+en+RobotC&amp;submitSummary=EnglishEn%20el%20art%C3%ADculo%20anterior%20de%20RobotC%20vimos%20c%C3%B3mo%20manejar%20varias%20tareas%2C%20gestionando%20el%20uso%20de%20recursos%20compartidos%20como%20los%20motores.%20En%20este%20art%C3%ADculo%20ampliar%C3%A9%20la%20informaci%C3%B3n%20sobre%20el%20manejo%20de%20tareas%2C%20viendo%20c%C3%B3mo%20poner%20mayor%20o%20menor%20prioridad%20a%20una%20tarea%2C%20y%20el%20efecto%20que%20tiene%20sobre%20la%20ejec&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.electricbricks.com/2010/06/robotc-task-priority/" rel="nofollow" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;t=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-designfloat">
			<a href="http://www.designfloat.com/submit.php?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Submit this to DesignFloat">Submit this to DesignFloat</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?u=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;t=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Control+de+prioridades+de+tareas+en+RobotC+-+http://b2l.me/4f82k+" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Control%20de%20prioridades%20de%20tareas%20en%20RobotC%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22EnglishEn%20el%20art%C3%ADculo%20anterior%20de%20RobotC%20vimos%20c%C3%B3mo%20manejar%20varias%20tareas%2C%20gestionando%20el%20uso%20de%20recursos%20compartidos%20como%20los%20motores.%20En%20este%20art%C3%ADculo%20ampliar%C3%A9%20la%20informaci%C3%B3n%20sobre%20el%20manejo%20de%20tareas%2C%20viendo%20c%C3%B3mo%20poner%20mayor%20o%20menor%20prioridad%20a%20una%20tarea%2C%20y%20el%20efecto%20que%20tiene%20sobre%20la%20ejec%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/06/robotc-task-priority/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-tomuse">
			<a href="mailto:tips@tomuse.com?subject=New%20tip%20submitted%20via%20the%20SexyBookmarks%20Plugin!&amp;body=I%20would%20like%20to%20submit%20this%20article%3A%20%22Control%20de%20prioridades%20de%20tareas%20en%20RobotC%22%20for%20possible%20inclusion%20on%20ToMuse.%0A%0A%22EnglishEn%20el%20art%C3%ADculo%20anterior%20de%20RobotC%20vimos%20c%C3%B3mo%20manejar%20varias%20tareas%2C%20gestionando%20el%20uso%20de%20recursos%20compartidos%20como%20los%20motores.%20En%20este%20art%C3%ADculo%20ampliar%C3%A9%20la%20informaci%C3%B3n%20sobre%20el%20manejo%20de%20tareas%2C%20viendo%20c%C3%B3mo%20poner%20mayor%20o%20menor%20prioridad%20a%20una%20tarea%2C%20y%20el%20efecto%20que%20tiene%20sobre%20la%20ejec%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/06/robotc-task-priority/" rel="nofollow" title="Suggest this article to ToMuse">Suggest this article to ToMuse</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.electricbricks.com/2010/06/robotc-task-priority/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC&amp;summary=EnglishEn%20el%20art%C3%ADculo%20anterior%20de%20RobotC%20vimos%20c%C3%B3mo%20manejar%20varias%20tareas%2C%20gestionando%20el%20uso%20de%20recursos%20compartidos%20como%20los%20motores.%20En%20este%20art%C3%ADculo%20ampliar%C3%A9%20la%20informaci%C3%B3n%20sobre%20el%20manejo%20de%20tareas%2C%20viendo%20c%C3%B3mo%20poner%20mayor%20o%20menor%20prioridad%20a%20una%20tarea%2C%20y%20el%20efecto%20que%20tiene%20sobre%20la%20ejec&amp;source=electricBricks" rel="nofollow" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-newsvine">
			<a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;h=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Seed this on Newsvine">Seed this on Newsvine</a>
		</li>
		<li class="sexy-devmarks">
			<a href="http://devmarks.com/index.php?posttext=EnglishEn%20el%20art%C3%ADculo%20anterior%20de%20RobotC%20vimos%20c%C3%B3mo%20manejar%20varias%20tareas%2C%20gestionando%20el%20uso%20de%20recursos%20compartidos%20como%20los%20motores.%20En%20este%20art%C3%ADculo%20ampliar%C3%A9%20la%20informaci%C3%B3n%20sobre%20el%20manejo%20de%20tareas%2C%20viendo%20c%C3%B3mo%20poner%20mayor%20o%20menor%20prioridad%20a%20una%20tarea%2C%20y%20el%20efecto%20que%20tiene%20sobre%20la%20ejec&amp;posturl=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;posttitle=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Share this on Devmarks">Share this on Devmarks</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;bm_description=Control+de+prioridades+de+tareas+en+RobotC&amp;plugin=sexybookmarks" rel="nofollow" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="sexy-izeby">
			<a href="http://izeby.com/submit.php?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/" rel="nofollow" title="Add this to Izeby">Add this to Izeby</a>
		</li>
		<li class="sexy-tipd">
			<a href="http://tipd.com/submit.php?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/" rel="nofollow" title="Share this on Tipd">Share this on Tipd</a>
		</li>
		<li class="sexy-pfbuzz">
			<a href="http://pfbuzz.com/submit?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Share this on PFBuzz">Share this on PFBuzz</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Control+de+prioridades+de+tareas+en+RobotC&amp;link=http://blog.electricbricks.com/2010/06/robotc-task-priority/" rel="nofollow" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-blogmarks">
			<a href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Mark this on BlogMarks">Mark this on BlogMarks</a>
		</li>
		<li class="sexy-twittley">
			<a href="http://twittley.com/submit/?title=Control+de+prioridades+de+tareas+en+RobotC&amp;url=http%3A%2F%2Fblog.electricbricks.com%2F2010%2F06%2Frobotc-task-priority%2F&amp;desc=EnglishEn%20el%20art%C3%ADculo%20anterior%20de%20RobotC%20vimos%20c%C3%B3mo%20manejar%20varias%20tareas%2C%20gestionando%20el%20uso%20de%20recursos%20compartidos%20como%20los%20motores.%20En%20este%20art%C3%ADculo%20ampliar%C3%A9%20la%20informaci%C3%B3n%20sobre%20el%20manejo%20de%20tareas%2C%20viendo%20c%C3%B3mo%20poner%20mayor%20o%20menor%20prioridad%20a%20una%20tarea%2C%20y%20el%20efecto%20que%20tiene%20sobre%20la%20ejec&amp;pcat=Technology&amp;tags=" rel="nofollow" title="Submit this to Twittley">Submit this to Twittley</a>
		</li>
		<li class="sexy-fwisp">
			<a href="http://fwisp.com/submit?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/" rel="nofollow" title="Share this on Fwisp">Share this on Fwisp</a>
		</li>
		<li class="sexy-designmoo">
			<a href="http://designmoo.com/submit?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC&amp;body=EnglishEn%20el%20art%C3%ADculo%20anterior%20de%20RobotC%20vimos%20c%C3%B3mo%20manejar%20varias%20tareas%2C%20gestionando%20el%20uso%20de%20recursos%20compartidos%20como%20los%20motores.%20En%20este%20art%C3%ADculo%20ampliar%C3%A9%20la%20informaci%C3%B3n%20sobre%20el%20manejo%20de%20tareas%2C%20viendo%20c%C3%B3mo%20poner%20mayor%20o%20menor%20prioridad%20a%20una%20tarea%2C%20y%20el%20efecto%20que%20tiene%20sobre%20la%20ejec" rel="nofollow" title="Moo this on DesignMoo!">Moo this on DesignMoo!</a>
		</li>
		<li class="sexy-bobrdobr">
			<a href="http://bobrdobr.ru/addext.html?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Share this on BobrDobr">Share this on BobrDobr</a>
		</li>
		<li class="sexy-yandex">
			<a href="http://zakladki.yandex.ru/userarea/links/addfromfav.asp?bAddLink_x=1&amp;lurl=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;lname=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Add this to Yandex.Bookmarks">Add this to Yandex.Bookmarks</a>
		</li>
		<li class="sexy-memoryru">
			<a href="http://memori.ru/link/?sm=1&amp;u_data[url]=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;u_data[name]=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Add this to Memory.ru">Add this to Memory.ru</a>
		</li>
		<li class="sexy-100zakladok">
			<a href="http://www.100zakladok.ru/save/?bmurl=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;bmtitle=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Add this to 100 bookmarks">Add this to 100 bookmarks</a>
		</li>
		<li class="sexy-moemesto">
			<a href="http://moemesto.ru/post.php?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Add this to MyPlace">Add this to MyPlace</a>
		</li>
		<li class="sexy-hackernews">
			<a href="http://news.ycombinator.com/submitlink?u=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;t=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Submit this to Hacker News">Submit this to Hacker News</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/" rel="nofollow" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
		<li class="sexy-designbump">
			<a href="http://designbump.com/submit?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC&amp;body=EnglishEn%20el%20art%C3%ADculo%20anterior%20de%20RobotC%20vimos%20c%C3%B3mo%20manejar%20varias%20tareas%2C%20gestionando%20el%20uso%20de%20recursos%20compartidos%20como%20los%20motores.%20En%20este%20art%C3%ADculo%20ampliar%C3%A9%20la%20informaci%C3%B3n%20sobre%20el%20manejo%20de%20tareas%2C%20viendo%20c%C3%B3mo%20poner%20mayor%20o%20menor%20prioridad%20a%20una%20tarea%2C%20y%20el%20efecto%20que%20tiene%20sobre%20la%20ejec" rel="nofollow" title="Bump this on DesignBump">Bump this on DesignBump</a>
		</li>
		<li class="sexy-ning">
			<a href="http://bookmarks.ning.com/addItem.php?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;T=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Add this to Ning">Add this to Ning</a>
		</li>
		<li class="sexy-identica">
			<a href="http://identi.ca//index.php?action=newnotice&amp;status_textarea=Reading:+&quot;Control+de+prioridades+de+tareas+en+RobotC&quot;+-+from+http://b2l.me/4f82k" rel="nofollow" title="Post this to Identica">Post this to Identica</a>
		</li>
		<li class="sexy-xerpi">
			<a href="http://www.xerpi.com/block/add_link_from_extension?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Save this to Xerpi">Save this to Xerpi</a>
		</li>
		<li class="sexy-wikio">
			<a href="http://www.wikio.com/sharethis?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Share this on Wikio">Share this on Wikio</a>
		</li>
		<li class="sexy-techmeme">
			<a href="http://twitter.com/home/?status=Tip+@Techmeme+http://blog.electricbricks.com/2010/06/robotc-task-priority/+&quot;Control+de+prioridades+de+tareas+en+RobotC&quot;" rel="nofollow" title="Tip this to TechMeme">Tip this to TechMeme</a>
		</li>
		<li class="sexy-sphinn">
			<a href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http://blog.electricbricks.com/2010/06/robotc-task-priority/" rel="nofollow" title="Sphinn this on Sphinn">Sphinn this on Sphinn</a>
		</li>
		<li class="sexy-posterous">
			<a href="http://posterous.com/share?linkto=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC&amp;selection=EnglishEn%20el%20art%C3%ADculo%20anterior%20de%20RobotC%20vimos%20c%C3%B3mo%20manejar%20varias%20tareas%2C%20gestionando%20el%20uso%20de%20recursos%20compartidos%20como%20los%20motores.%20En%20este%20art%C3%ADculo%20ampliar%C3%A9%20la%20informaci%C3%B3n%20sobre%20el%20manejo%20de%20tareas%2C%20viendo%20c%C3%B3mo%20poner%20mayor%20o%20menor%20prioridad%20a%20una%20tarea%2C%20y%20el%20efecto%20que%20tiene%20sobre%20la%20ejec" rel="nofollow" title="Post this to Posterous">Post this to Posterous</a>
		</li>
		<li class="sexy-globalgrind">
			<a href="http://globalgrind.com/submission/submit.aspx?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;type=Article&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Grind this! on Global Grind">Grind this! on Global Grind</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC&amp;body=EnglishEn%20el%20art%C3%ADculo%20anterior%20de%20RobotC%20vimos%20c%C3%B3mo%20manejar%20varias%20tareas%2C%20gestionando%20el%20uso%20de%20recursos%20compartidos%20como%20los%20motores.%20En%20este%20art%C3%ADculo%20ampliar%C3%A9%20la%20informaci%C3%B3n%20sobre%20el%20manejo%20de%20tareas%2C%20viendo%20c%C3%B3mo%20poner%20mayor%20o%20menor%20prioridad%20a%20una%20tarea%2C%20y%20el%20efecto%20que%20tiene%20sobre%20la%20ejec" rel="nofollow" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-nujij">
			<a href="http://nujij.nl/jij.lynkx?t=Control+de+prioridades+de+tareas+en+RobotC&amp;u=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;b=EnglishEn%20el%20art%C3%ADculo%20anterior%20de%20RobotC%20vimos%20c%C3%B3mo%20manejar%20varias%20tareas%2C%20gestionando%20el%20uso%20de%20recursos%20compartidos%20como%20los%20motores.%20En%20este%20art%C3%ADculo%20ampliar%C3%A9%20la%20informaci%C3%B3n%20sobre%20el%20manejo%20de%20tareas%2C%20viendo%20c%C3%B3mo%20poner%20mayor%20o%20menor%20prioridad%20a%20una%20tarea%2C%20y%20el%20efecto%20que%20tiene%20sobre%20la%20ejec" rel="nofollow" title="Submit this to NUjij">Submit this to NUjij</a>
		</li>
		<li class="sexy-ekudos">
			<a href="http://www.ekudos.nl/artikel/nieuw?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC&amp;desc=EnglishEn%20el%20art%C3%ADculo%20anterior%20de%20RobotC%20vimos%20c%C3%B3mo%20manejar%20varias%20tareas%2C%20gestionando%20el%20uso%20de%20recursos%20compartidos%20como%20los%20motores.%20En%20este%20art%C3%ADculo%20ampliar%C3%A9%20la%20informaci%C3%B3n%20sobre%20el%20manejo%20de%20tareas%2C%20viendo%20c%C3%B3mo%20poner%20mayor%20o%20menor%20prioridad%20a%20una%20tarea%2C%20y%20el%20efecto%20que%20tiene%20sobre%20la%20ejec" rel="nofollow" title="Submit this to eKudos">Submit this to eKudos</a>
		</li>
		<li class="sexy-netvouz">
			<a href="http://www.netvouz.com/action/submitBookmark?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC&amp;popup=no" rel="nofollow" title="Submit this to Netvouz">Submit this to Netvouz</a>
		</li>
		<li class="sexy-netvibes">
			<a href="http://www.netvibes.com/share?title=Control+de+prioridades+de+tareas+en+RobotC&amp;url=http://blog.electricbricks.com/2010/06/robotc-task-priority/" rel="nofollow" title="Submit this to Netvibes">Submit this to Netvibes</a>
		</li>
		<li class="sexy-fleck">
			<a href="http://beta3.fleck.com/bookmarklet.php?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Share this on Fleck">Share this on Fleck</a>
		</li>
		<li class="sexy-blogospherenews">
			<a href="http://www.blogospherenews.com/submit.php?url=http://blog.electricbricks.com/2010/06/robotc-task-priority/&amp;title=Control+de+prioridades+de+tareas+en+RobotC" rel="nofollow" title="Share this on Blogosphere News">Share this on Blogosphere News</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://blog.electricbricks.com/2010/06/robotc-task-priority/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Control de tareas en RobotC</title>
		<link>http://blog.electricbricks.com/2010/06/robotc-task-control/</link>
		<comments>http://blog.electricbricks.com/2010/06/robotc-task-control/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 11:36:40 +0000</pubDate>
		<dc:creator>Alvaro</dc:creator>
				<category><![CDATA[NXT]]></category>
		<category><![CDATA[RobotC]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[robótica]]></category>

		<guid isPermaLink="false">http://blog.electricbricks.com/?p=7926</guid>
		<description><![CDATA[
English

El objetivo principal del procesador es ejecutar la secuencia de instrucciones de los programas de entre un posible conjunto de programas. Cuando es uno sólo el programa a ejecutar, podemos intuir fácilmente cuál es la secuencia de operaciones que se está ejecutando sin más que seguir la traza del proceso en curso. La ayuda de [...]]]></description>
			<content:encoded><![CDATA[<ul class="lang_switch">
<li class="lang_switch"><a href="http://blog.electricbricks.com/en/2010/06/robotc-task-control/"><img src="http://blog.electricbricks.com/wp-content/plugins/zdmultilang/flags/en_US.png" alt="English" title="English" border="0">English</a></li>
</ul>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/cpu_performance-150x111.gif" alt="" title="" width="150" height="111" class="alignleft size-thumbnail wp-image-7920"/>El objetivo principal del procesador es ejecutar la secuencia de instrucciones de los programas de entre un posible conjunto de programas. Cuando es uno sólo el programa a ejecutar, podemos intuir fácilmente cuál es la secuencia de operaciones que se está ejecutando sin más que seguir la traza del proceso en curso. La ayuda de los entornos de programación puede ser de valor incalculable cuando nuestra aplicación se complica y son varios los procesos que deben ser procesados.<span id="more-7926"></span></p>
<p>En un caso monoprocesador la programación concurrente está relacionada con la forma en la que se decide cuál es el orden de ejecución y de interacción de las tareas a ejecutar, cuánto tiempo de procesador se asigna a cada uno de dichos procesos, o cuál debe ser la forma de acceso a los recursos compartidos.</p>
<p>La forma de conseguir que un sistema con un único procesador que sólo puede ejecutar una instrucción simultáneamente <em>parezca</em> que está ejecutando varios programas a la vez es intercalando en el tiempo su ejecución. </p>
<p>Sabemos que podemos seguir el comportamiento que tiene el procesador  a través de la información que tenemos de la traza: cuando hay varias tareas en ejecución las instrucciones de cada una de ellas se irán intercalando dependiendo de la política que exista de la asignación de recursos. ¿Tenemos algún tipo de control sobre la forma en que se ejecutan dichos procesos? ¿Cómo debemos escribir nuestro código para ejecutar varias tareas en paralelo, para que una de ellas tenga una mayor prioridad de uso de tiempo de procesador, o simplemente capture al completo al procesador en determinados momentos?</p>
<p><strong>Control de tareas en RobotC:</strong></p>
<p>En RobotC es posible crear tareas para que se ejecuten simultáneamente. Ya he usado tareas en algún otro artículo como el de <a href="http://blog.electricbricks.com/2010/04/tutorial-robotc-mindstorms-nxt-5/">Manejo de Bluetooth en RobotC</a>, donde una tarea se encargaba de recibir mensajes y otra de mandarlos. En este artículo ahondaremos sobre el tema, explicando diversas funciones.</p>
<p>Para definir una tarea en RobotC se usa la palabra reservada <em>task</em>, seguida del nombre que queramos darle a la tarea, y entre corchetes el código que queremos que ejecute dicha tarea. Por ejemplo:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333;">task</span> HolaMundo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">3</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Hola Mundo&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Siempre tiene que haber una tarea principal denominada <em>task main()</em>, desde la que lanzaremos y controlaremos a las demás. Esta tarea principal se iniciará automáticamente cuando empiece el programa, y en ella es donde debemos iniciar el resto de tareas. Para iniciar las tareas necesitamos utilizar la función <em>StartTask</em>:</p>
<p><strong>StartTask(nombre_tarea)</strong>: Inicia la tarea especificada.</p>
<p>Podemos detener una tarea en cualquier momento con la función:</p>
<p><strong>StopTask(nombre_tarea)</strong>: Detiene la tarea especificada, matándola. </p>
<p>También se pueden detener todas las tareas de golpe con las funcion:</p>
<p><strong>StopAllTasks()</strong>: Detiene todas las tareas.</p>
<p>Existe una función que permite que la tarea que se está ejecutando en este momento hago uso de todo el tiempo de CPU. Esta función es:</p>
<p><strong>hogCPU()</strong>: Suspende todas las tareas excepto la actual, dandole por tanto todo el tiempo de CPU a esta tarea.      </p>
<p>Esta función tiene la utilidad de poderle dar a una tarea toda la potencia de la CPU cuando queramos. Por desgracia no funciona del todo bien, y no permite por ejemplo un correcto control de motores si tenemos otra tarea que ya los está manejando. Es importante que luego, una vez terminado lo que deseamos hacer, volvamos a reiniciar los procesos que hemos suspendido. Para ello utilizaremos la función:</p>
<p><strong>releaseCPU()</strong>: Reinicia las tareas suspendidas (el scheduler) con la función hogCPU.</p>
<p>De momento no veremos más funciones para no complicar las cosa.</p>
<p><strong>Bump&#038;Go con control de tareas:</strong></p>
<p>El <em>Bump&#038;Go</em> es un programa en el que el robot se mueve aleatoriamente por una habitación esquivando los obstáculos que detecta a su paso. Ya vimos cómo programarlo en RobotC en el artículo <a href="http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/">Bump&#038;Go en RobotC</a>. En este caso lo vamos a implementar con multitasking (multitareas). Puesto que es un programa sencillo no necesitaremos muchas tareas. Necesitamos lo siguiente:</p>
<ul>
<li>Una tarea principal que se encargue de controlar a las otras,</li>
<li>una tarea que se encargue de mover al robot en línea recta y, por último,</li>
<li>una tarea que se encargue de esquivar los obstáculos cuando el robot los detecte.</li>
</ul>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/BumpGo1-500x352.jpg" alt="Bump&amp;Go1" title="Bump&amp;Go1" width="500" height="352" class="aligncenter size-large wp-image-6681"/></p>
<p>Puesto que tanto la tarea de mover el robot como la de esquivar obstáculos hacen uso de un recurso compartido (los motores) no podemos dejar que se ejecuten a la vez, o interferirían entre sí. Por tanto una vez detectemos el obstáculo pararemos un momento la tarea de moverse en línea recta, y una vez hayamos esquivado el obstáculo la volveremos a poner en marcha.</p>
<p>El código del programa es el siguiente:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#pragma config(Sensor,S4,contacto,sensorTouch)</span><br />
<span style="color: #339933;">#pragma config(Motor,motorA,motor_der,tmotorNormal,PIDControl,encoder)</span><br />
<span style="color: #339933;">#pragma config(Motor,motorC,motor_izq,tmotorNormal, PIDControl, encoder)</span><br />
<span style="color: #666666; font-style: italic;">//*!Code automatically generated by 'ROBOTC' configuration wizard!*/</span><br />
<br />
<span style="color: #993333;">void</span> esquivarObstaculo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #993333;">int</span> tiempoMA<span style="color: #339933;">,</span> tiempoGiro<span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; nxtDisplayClearTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <br />
&nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">6</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;ESQUIVANDO&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; tiempoMA <span style="color: #339933;">=</span> <span style="color: #0000dd;">200</span> <span style="color: #339933;">+</span> random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motor_der<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">50</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motor_izq<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">50</span><span style="color: #339933;">;</span><br />
&nbsp; wait1Msec<span style="color: #009900;">&#40;</span>tiempoMA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; tiempoGiro <span style="color: #339933;">=</span> <span style="color: #0000dd;">200</span> <span style="color: #339933;">+</span> random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">400</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motor_izq<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; wait1Msec<span style="color: #009900;">&#40;</span>tiempoGiro<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<br />
<span style="color: #993333;">task</span> moverRobot<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; nxtDisplayClearTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">6</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <br />
&nbsp; &nbsp; &nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">3</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;MOVIENDOSE&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> &nbsp;<br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motor_der<span style="color: #009900;">&#93;</span> &nbsp;<span style="color: #339933;">=</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motor_izq<span style="color: #009900;">&#93;</span> &nbsp;<span style="color: #339933;">=</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #993333;">task</span> controlChoques<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>SensorValue<span style="color: #009900;">&#91;</span>contacto<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; StopTask<span style="color: #009900;">&#40;</span>moverRobot<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; esquivarObstaculo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; StartTask<span style="color: #009900;">&#40;</span>moverRobot<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<br />
<span style="color: #993333;">task</span> <span style="color: #993333;">main</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; StartTask<span style="color: #009900;">&#40;</span>moverRobot<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; StartTask<span style="color: #009900;">&#40;</span>controlChoques<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;PRINCIPAL&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> &nbsp;<br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Y aquí una breve explicación de algunas líneas:</p>
<p><strong>1 a 3 &#8211; </strong>Definimos los sensores y motores</p>
<p><strong>6 a 19 &#8211; </strong>Esta función se encarga de esquivar obstáculos</p>
<p><strong>22 -</strong> Aquí empieza la tarea mover robot. Las tareas han de ser declaradas antes de ser utilizadas por otras tareas como la main, por eso task main será la ultima que escribamos.</p>
<p><strong>24 -</strong> Bucle infinito</p>
<p><strong>25 &#8211; </strong>Un pequeño retardo que nos asegura que la tarea anterior haya terminado. Importante ponerlo antes de hacer nada.</p>
<p><strong>26 a 29 -</strong> Decimos que se está moviendo, borrando otros mensajes, y ponemos los motores en marcha a la misma potencia.</p>
<p><strong>37 -</strong> Dentro de la tarea control de choques solo actuaremos si el sensor de contacto esta presionado.</p>
<p><strong>38 -</strong> Antes de manejar detendremos la otra tarea que controla los motores.</p>
<p><strong>39 &#8211; </strong>Esquivamos el obstáculo.</p>
<p><strong>40 &#8211; </strong>Y volvemos a poner en marcha al robot.</p>
<p><strong>49 y 50 &#8211; </strong>En la tarea principal (task main) iniciamos las otras dos tareas.</p>
<p><strong>54 -</strong> Dentro de un bucle infinito mostramos por pantalla que la tarea principal esta activa. Si se terminara esta tarea se acabaría el programa, por lo que siempre la necesitamos tener activa (en ejecución o en espera).</p>
<p>Espero que os haya quedado claro. En cualquier caso si tenéis alguna duda podéis consultarnos en nuestro <a href="http://www.electricbricks.com/forum/index.php">foro</a>.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-scriptstyle">
			<a href="http://scriptandstyle.com/submit?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Submit this to Script &amp; Style">Submit this to Script &amp; Style</a>
		</li>
		<li class="sexy-blinklist">
			<a href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;Title=Control+de+tareas+en+RobotC" rel="nofollow" title="Share this on Blinklist">Share this on Blinklist</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC&amp;desc=EnglishEl%20objetivo%20principal%20del%20procesador%20es%20ejecutar%20la%20secuencia%20de%20instrucciones%20de%20los%20programas%20de%20entre%20un%20posible%20conjunto%20de%20programas.%20Cuando%20es%20uno%20s%C3%B3lo%20el%20programa%20a%20ejecutar%2C%20podemos%20intuir%20f%C3%A1cilmente%20cu%C3%A1l%20es%20la%20secuencia%20de%20operaciones%20que%20se%20est%C3%A1%20ejecutando%20sin%20m%C3%A1s%20que%20seguir%20la" rel="nofollow" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;submitHeadline=Control+de+tareas+en+RobotC&amp;submitSummary=EnglishEl%20objetivo%20principal%20del%20procesador%20es%20ejecutar%20la%20secuencia%20de%20instrucciones%20de%20los%20programas%20de%20entre%20un%20posible%20conjunto%20de%20programas.%20Cuando%20es%20uno%20s%C3%B3lo%20el%20programa%20a%20ejecutar%2C%20podemos%20intuir%20f%C3%A1cilmente%20cu%C3%A1l%20es%20la%20secuencia%20de%20operaciones%20que%20se%20est%C3%A1%20ejecutando%20sin%20m%C3%A1s%20que%20seguir%20la&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.electricbricks.com/2010/06/robotc-task-control/" rel="nofollow" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;t=Control+de+tareas+en+RobotC" rel="nofollow" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-designfloat">
			<a href="http://www.designfloat.com/submit.php?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Submit this to DesignFloat">Submit this to DesignFloat</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?u=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;t=Control+de+tareas+en+RobotC" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Control+de+tareas+en+RobotC+-+http://b2l.me/35vex+" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Control%20de%20tareas%20en%20RobotC%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22EnglishEl%20objetivo%20principal%20del%20procesador%20es%20ejecutar%20la%20secuencia%20de%20instrucciones%20de%20los%20programas%20de%20entre%20un%20posible%20conjunto%20de%20programas.%20Cuando%20es%20uno%20s%C3%B3lo%20el%20programa%20a%20ejecutar%2C%20podemos%20intuir%20f%C3%A1cilmente%20cu%C3%A1l%20es%20la%20secuencia%20de%20operaciones%20que%20se%20est%C3%A1%20ejecutando%20sin%20m%C3%A1s%20que%20seguir%20la%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/06/robotc-task-control/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-tomuse">
			<a href="mailto:tips@tomuse.com?subject=New%20tip%20submitted%20via%20the%20SexyBookmarks%20Plugin!&amp;body=I%20would%20like%20to%20submit%20this%20article%3A%20%22Control%20de%20tareas%20en%20RobotC%22%20for%20possible%20inclusion%20on%20ToMuse.%0A%0A%22EnglishEl%20objetivo%20principal%20del%20procesador%20es%20ejecutar%20la%20secuencia%20de%20instrucciones%20de%20los%20programas%20de%20entre%20un%20posible%20conjunto%20de%20programas.%20Cuando%20es%20uno%20s%C3%B3lo%20el%20programa%20a%20ejecutar%2C%20podemos%20intuir%20f%C3%A1cilmente%20cu%C3%A1l%20es%20la%20secuencia%20de%20operaciones%20que%20se%20est%C3%A1%20ejecutando%20sin%20m%C3%A1s%20que%20seguir%20la%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/06/robotc-task-control/" rel="nofollow" title="Suggest this article to ToMuse">Suggest this article to ToMuse</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.electricbricks.com/2010/06/robotc-task-control/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC&amp;summary=EnglishEl%20objetivo%20principal%20del%20procesador%20es%20ejecutar%20la%20secuencia%20de%20instrucciones%20de%20los%20programas%20de%20entre%20un%20posible%20conjunto%20de%20programas.%20Cuando%20es%20uno%20s%C3%B3lo%20el%20programa%20a%20ejecutar%2C%20podemos%20intuir%20f%C3%A1cilmente%20cu%C3%A1l%20es%20la%20secuencia%20de%20operaciones%20que%20se%20est%C3%A1%20ejecutando%20sin%20m%C3%A1s%20que%20seguir%20la&amp;source=electricBricks" rel="nofollow" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-newsvine">
			<a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;h=Control+de+tareas+en+RobotC" rel="nofollow" title="Seed this on Newsvine">Seed this on Newsvine</a>
		</li>
		<li class="sexy-devmarks">
			<a href="http://devmarks.com/index.php?posttext=EnglishEl%20objetivo%20principal%20del%20procesador%20es%20ejecutar%20la%20secuencia%20de%20instrucciones%20de%20los%20programas%20de%20entre%20un%20posible%20conjunto%20de%20programas.%20Cuando%20es%20uno%20s%C3%B3lo%20el%20programa%20a%20ejecutar%2C%20podemos%20intuir%20f%C3%A1cilmente%20cu%C3%A1l%20es%20la%20secuencia%20de%20operaciones%20que%20se%20est%C3%A1%20ejecutando%20sin%20m%C3%A1s%20que%20seguir%20la&amp;posturl=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;posttitle=Control+de+tareas+en+RobotC" rel="nofollow" title="Share this on Devmarks">Share this on Devmarks</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;bm_description=Control+de+tareas+en+RobotC&amp;plugin=sexybookmarks" rel="nofollow" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="sexy-izeby">
			<a href="http://izeby.com/submit.php?url=http://blog.electricbricks.com/2010/06/robotc-task-control/" rel="nofollow" title="Add this to Izeby">Add this to Izeby</a>
		</li>
		<li class="sexy-tipd">
			<a href="http://tipd.com/submit.php?url=http://blog.electricbricks.com/2010/06/robotc-task-control/" rel="nofollow" title="Share this on Tipd">Share this on Tipd</a>
		</li>
		<li class="sexy-pfbuzz">
			<a href="http://pfbuzz.com/submit?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Share this on PFBuzz">Share this on PFBuzz</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Control+de+tareas+en+RobotC&amp;link=http://blog.electricbricks.com/2010/06/robotc-task-control/" rel="nofollow" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-blogmarks">
			<a href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Mark this on BlogMarks">Mark this on BlogMarks</a>
		</li>
		<li class="sexy-twittley">
			<a href="http://twittley.com/submit/?title=Control+de+tareas+en+RobotC&amp;url=http%3A%2F%2Fblog.electricbricks.com%2F2010%2F06%2Frobotc-task-control%2F&amp;desc=EnglishEl%20objetivo%20principal%20del%20procesador%20es%20ejecutar%20la%20secuencia%20de%20instrucciones%20de%20los%20programas%20de%20entre%20un%20posible%20conjunto%20de%20programas.%20Cuando%20es%20uno%20s%C3%B3lo%20el%20programa%20a%20ejecutar%2C%20podemos%20intuir%20f%C3%A1cilmente%20cu%C3%A1l%20es%20la%20secuencia%20de%20operaciones%20que%20se%20est%C3%A1%20ejecutando%20sin%20m%C3%A1s%20que%20seguir%20la&amp;pcat=Technology&amp;tags=" rel="nofollow" title="Submit this to Twittley">Submit this to Twittley</a>
		</li>
		<li class="sexy-fwisp">
			<a href="http://fwisp.com/submit?url=http://blog.electricbricks.com/2010/06/robotc-task-control/" rel="nofollow" title="Share this on Fwisp">Share this on Fwisp</a>
		</li>
		<li class="sexy-designmoo">
			<a href="http://designmoo.com/submit?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC&amp;body=EnglishEl%20objetivo%20principal%20del%20procesador%20es%20ejecutar%20la%20secuencia%20de%20instrucciones%20de%20los%20programas%20de%20entre%20un%20posible%20conjunto%20de%20programas.%20Cuando%20es%20uno%20s%C3%B3lo%20el%20programa%20a%20ejecutar%2C%20podemos%20intuir%20f%C3%A1cilmente%20cu%C3%A1l%20es%20la%20secuencia%20de%20operaciones%20que%20se%20est%C3%A1%20ejecutando%20sin%20m%C3%A1s%20que%20seguir%20la" rel="nofollow" title="Moo this on DesignMoo!">Moo this on DesignMoo!</a>
		</li>
		<li class="sexy-bobrdobr">
			<a href="http://bobrdobr.ru/addext.html?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Share this on BobrDobr">Share this on BobrDobr</a>
		</li>
		<li class="sexy-yandex">
			<a href="http://zakladki.yandex.ru/userarea/links/addfromfav.asp?bAddLink_x=1&amp;lurl=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;lname=Control+de+tareas+en+RobotC" rel="nofollow" title="Add this to Yandex.Bookmarks">Add this to Yandex.Bookmarks</a>
		</li>
		<li class="sexy-memoryru">
			<a href="http://memori.ru/link/?sm=1&amp;u_data[url]=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;u_data[name]=Control+de+tareas+en+RobotC" rel="nofollow" title="Add this to Memory.ru">Add this to Memory.ru</a>
		</li>
		<li class="sexy-100zakladok">
			<a href="http://www.100zakladok.ru/save/?bmurl=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;bmtitle=Control+de+tareas+en+RobotC" rel="nofollow" title="Add this to 100 bookmarks">Add this to 100 bookmarks</a>
		</li>
		<li class="sexy-moemesto">
			<a href="http://moemesto.ru/post.php?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Add this to MyPlace">Add this to MyPlace</a>
		</li>
		<li class="sexy-hackernews">
			<a href="http://news.ycombinator.com/submitlink?u=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;t=Control+de+tareas+en+RobotC" rel="nofollow" title="Submit this to Hacker News">Submit this to Hacker News</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.electricbricks.com/2010/06/robotc-task-control/" rel="nofollow" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
		<li class="sexy-designbump">
			<a href="http://designbump.com/submit?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC&amp;body=EnglishEl%20objetivo%20principal%20del%20procesador%20es%20ejecutar%20la%20secuencia%20de%20instrucciones%20de%20los%20programas%20de%20entre%20un%20posible%20conjunto%20de%20programas.%20Cuando%20es%20uno%20s%C3%B3lo%20el%20programa%20a%20ejecutar%2C%20podemos%20intuir%20f%C3%A1cilmente%20cu%C3%A1l%20es%20la%20secuencia%20de%20operaciones%20que%20se%20est%C3%A1%20ejecutando%20sin%20m%C3%A1s%20que%20seguir%20la" rel="nofollow" title="Bump this on DesignBump">Bump this on DesignBump</a>
		</li>
		<li class="sexy-ning">
			<a href="http://bookmarks.ning.com/addItem.php?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;T=Control+de+tareas+en+RobotC" rel="nofollow" title="Add this to Ning">Add this to Ning</a>
		</li>
		<li class="sexy-identica">
			<a href="http://identi.ca//index.php?action=newnotice&amp;status_textarea=Reading:+&quot;Control+de+tareas+en+RobotC&quot;+-+from+http://b2l.me/35vex" rel="nofollow" title="Post this to Identica">Post this to Identica</a>
		</li>
		<li class="sexy-xerpi">
			<a href="http://www.xerpi.com/block/add_link_from_extension?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Save this to Xerpi">Save this to Xerpi</a>
		</li>
		<li class="sexy-wikio">
			<a href="http://www.wikio.com/sharethis?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Share this on Wikio">Share this on Wikio</a>
		</li>
		<li class="sexy-techmeme">
			<a href="http://twitter.com/home/?status=Tip+@Techmeme+http://blog.electricbricks.com/2010/06/robotc-task-control/+&quot;Control+de+tareas+en+RobotC&quot;" rel="nofollow" title="Tip this to TechMeme">Tip this to TechMeme</a>
		</li>
		<li class="sexy-sphinn">
			<a href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http://blog.electricbricks.com/2010/06/robotc-task-control/" rel="nofollow" title="Sphinn this on Sphinn">Sphinn this on Sphinn</a>
		</li>
		<li class="sexy-posterous">
			<a href="http://posterous.com/share?linkto=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC&amp;selection=EnglishEl%20objetivo%20principal%20del%20procesador%20es%20ejecutar%20la%20secuencia%20de%20instrucciones%20de%20los%20programas%20de%20entre%20un%20posible%20conjunto%20de%20programas.%20Cuando%20es%20uno%20s%C3%B3lo%20el%20programa%20a%20ejecutar%2C%20podemos%20intuir%20f%C3%A1cilmente%20cu%C3%A1l%20es%20la%20secuencia%20de%20operaciones%20que%20se%20est%C3%A1%20ejecutando%20sin%20m%C3%A1s%20que%20seguir%20la" rel="nofollow" title="Post this to Posterous">Post this to Posterous</a>
		</li>
		<li class="sexy-globalgrind">
			<a href="http://globalgrind.com/submission/submit.aspx?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;type=Article&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Grind this! on Global Grind">Grind this! on Global Grind</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC&amp;body=EnglishEl%20objetivo%20principal%20del%20procesador%20es%20ejecutar%20la%20secuencia%20de%20instrucciones%20de%20los%20programas%20de%20entre%20un%20posible%20conjunto%20de%20programas.%20Cuando%20es%20uno%20s%C3%B3lo%20el%20programa%20a%20ejecutar%2C%20podemos%20intuir%20f%C3%A1cilmente%20cu%C3%A1l%20es%20la%20secuencia%20de%20operaciones%20que%20se%20est%C3%A1%20ejecutando%20sin%20m%C3%A1s%20que%20seguir%20la" rel="nofollow" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-nujij">
			<a href="http://nujij.nl/jij.lynkx?t=Control+de+tareas+en+RobotC&amp;u=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;b=EnglishEl%20objetivo%20principal%20del%20procesador%20es%20ejecutar%20la%20secuencia%20de%20instrucciones%20de%20los%20programas%20de%20entre%20un%20posible%20conjunto%20de%20programas.%20Cuando%20es%20uno%20s%C3%B3lo%20el%20programa%20a%20ejecutar%2C%20podemos%20intuir%20f%C3%A1cilmente%20cu%C3%A1l%20es%20la%20secuencia%20de%20operaciones%20que%20se%20est%C3%A1%20ejecutando%20sin%20m%C3%A1s%20que%20seguir%20la" rel="nofollow" title="Submit this to NUjij">Submit this to NUjij</a>
		</li>
		<li class="sexy-ekudos">
			<a href="http://www.ekudos.nl/artikel/nieuw?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC&amp;desc=EnglishEl%20objetivo%20principal%20del%20procesador%20es%20ejecutar%20la%20secuencia%20de%20instrucciones%20de%20los%20programas%20de%20entre%20un%20posible%20conjunto%20de%20programas.%20Cuando%20es%20uno%20s%C3%B3lo%20el%20programa%20a%20ejecutar%2C%20podemos%20intuir%20f%C3%A1cilmente%20cu%C3%A1l%20es%20la%20secuencia%20de%20operaciones%20que%20se%20est%C3%A1%20ejecutando%20sin%20m%C3%A1s%20que%20seguir%20la" rel="nofollow" title="Submit this to eKudos">Submit this to eKudos</a>
		</li>
		<li class="sexy-netvouz">
			<a href="http://www.netvouz.com/action/submitBookmark?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC&amp;popup=no" rel="nofollow" title="Submit this to Netvouz">Submit this to Netvouz</a>
		</li>
		<li class="sexy-netvibes">
			<a href="http://www.netvibes.com/share?title=Control+de+tareas+en+RobotC&amp;url=http://blog.electricbricks.com/2010/06/robotc-task-control/" rel="nofollow" title="Submit this to Netvibes">Submit this to Netvibes</a>
		</li>
		<li class="sexy-fleck">
			<a href="http://beta3.fleck.com/bookmarklet.php?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Share this on Fleck">Share this on Fleck</a>
		</li>
		<li class="sexy-blogospherenews">
			<a href="http://www.blogospherenews.com/submit.php?url=http://blog.electricbricks.com/2010/06/robotc-task-control/&amp;title=Control+de+tareas+en+RobotC" rel="nofollow" title="Share this on Blogosphere News">Share this on Blogosphere News</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://blog.electricbricks.com/2010/06/robotc-task-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[RobotC]]></series:name>
	</item>
		<item>
		<title>Las posibilidades del DataLog, by Erling</title>
		<link>http://blog.electricbricks.com/2010/05/datalog-by-erling/</link>
		<comments>http://blog.electricbricks.com/2010/05/datalog-by-erling/#comments</comments>
		<pubDate>Fri, 28 May 2010 09:39:52 +0000</pubDate>
		<dc:creator>Dani</dc:creator>
				<category><![CDATA[NXT]]></category>
		<category><![CDATA[RobotC]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[LEGO]]></category>

		<guid isPermaLink="false">http://blog.electricbricks.com/?p=7560</guid>
		<description><![CDATA[
English

Al hablar de robótica inmediatamente nos imaginamos máquinas capaces de andar, de moverse o de actuar de forma inteligente. Muchas de ellas solo están, aún, en nuestra imaginación, otras las vamos realizando a pequeña escala con nuestro NXT.
El campo en el que más se usa la robótica en la actualidad es el de la automatización [...]]]></description>
			<content:encoded><![CDATA[<ul class="lang_switch">
<li class="lang_switch"><a href="http://blog.electricbricks.com/en/2010/05/datalog-by-erling/"><img src="http://blog.electricbricks.com/wp-content/plugins/zdmultilang/flags/en_US.png" alt="English" title="English" border="0">English</a></li>
</ul>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Excel-150x76.PNG" alt="Excel" title="Excel" width="150" height="76" class="alignleft size-thumbnail wp-image-7564"/>Al hablar de robótica inmediatamente nos imaginamos máquinas capaces de andar, de moverse o de actuar de forma inteligente. Muchas de ellas solo están, aún, en nuestra imaginación, otras las vamos realizando a pequeña escala con nuestro NXT.<span id="more-7560"></span></p>
<p>El campo en el que más se usa la robótica en la actualidad es el de la automatización industrial. En él, máquinas automáticas y robots, como por ejemplo los observados en la cadena de montaje de los automóviles, realizan las actividades que antes realizaban los humanos.</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/cadena-montaje.jpg" alt="cadena-montaje" title="cadena-montaje" width="500" height="493" class="aligncenter size-full wp-image-7563" /></p>
<p>Es en dicho sector donde cobra especial importancia la toma de datos. Obtener y almacenar datos de nuestros robots, como valores de variables, valores de los sensores etc, y después saber representarlas e interpretarlas pueden ayudarnos a conocer los fallos del diseño o las posibles mejoras de este. Una forma de almacenar estos datos en el NXT es mediante el uso de datalogs.</p>
<p>Para realizar nuestro ejemplo usaremos un proyecto realizado originalmente por <a href="http://blog.electricbricks.com/2009/12/nxtprograms-65-proyectos-nxt-cd/">NxtPrograms</a>. El proyecto consiste en un carril inclinado por el que circularan bolas de colores. Al llegar a la parte más baja, un sensor de color detectará la bola y la pala se elevará para colocar dicha bola, de nuevo, al principio del circuito, en un bucle casi infinito.</p>
<p>Como todo lo que construimos, el paso del diseño al papel implica una serie de problemas que deberemos resolver. Es ocasional que por un mal montaje o una mala programación, las bolas se salgan del circuito, o bien se junten en el carril dando problemas a la pala. Para solucionar esto hemos colocado una barrera en la última sección del carril que haga esperar a una bola mientras la otra está en la pala. </p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/marble-run-500x338.jpg" alt="marble run" title="marble run" width="500" height="338" class="aligncenter size-large wp-image-7571"/></p>
<p>Una vez tenemos nuestro proyecto queremos analizar los tiempos que tarda cada bola en completar una vez el circuito, así como su tiempo cuando hay más de una bola en el carril.</p>
<p>Para ello realizamos un programa que, además de realizar el comportamiento de la máquina, introduzca los datos que deseamos en un datalog. La elección de qué datos introducir y en qué momento del programa influirá mucho en la buena realización del experimento. </p>
<p>En este caso, como queremos contar el tiempo que tarda cada bola en volver a la pala, añadiremos un dato más al datalog cada vez que la bola pase por esta, reiniciando el temporizador tras ello. Como vamos a disponer de dos bolas distintas, una roja y otra azul, usaremos dos temporizadores distintos, pero esto no debe preocuparnos, pues el datalog almacenara, junto al dato del tiempo, una referencia que nos permitirá identificar cada temporizador.</p>
<p>Este es el código, implementado por Erling.</p>
<div class="codecolorer-container cpp dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339900;">#pragma config(Sensor, S1, color, sensorI2CHiTechnicColor)</span><br />
<span style="color: #666666;">//*!!Code automatically generated by 'ROBOTC' configuration wizard &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; !!*//</span><br />
<br />
task control<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//Control de barrera//</span><br />
task cuenta<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//Cuenta de bolas//</span><br />
task lcd<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//Muestra de cuenta de bolas en pantalla//</span><br />
task data<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//Almacenamiento de datos en datalog//</span><br />
<br />
<span style="color: #0000ff;">bool</span> pala<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><span style="color: #666666;">//Pala con o sin bola//</span><br />
<span style="color: #0000ff;">int</span> rojo<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> azul<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<br />
task main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; StartTask<span style="color: #008000;">&#40;</span>control<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; StartTask<span style="color: #008000;">&#40;</span>cuenta<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; StartTask<span style="color: #008000;">&#40;</span>lcd<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; StartTask<span style="color: #008000;">&#40;</span>data<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
&nbsp;<span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><br />
&nbsp;<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>SensorValue<span style="color: #008000;">&#40;</span>color<span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #666666;">//Si detecta color//</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; pala<span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">200</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; nMotorEncoderTarget<span style="color: #008000;">&#91;</span>motorA<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">60</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; motor<span style="color: #008000;">&#91;</span>motorA<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">100</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">750</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; nMotorEncoderTarget<span style="color: #008000;">&#91;</span>motorA<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">60</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; motor<span style="color: #008000;">&#91;</span>motorA<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">100</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">10</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; pala<span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp;<span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
task control<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp;<span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><br />
&nbsp;<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>pala<span style="color: #000080;">==</span><span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #666666;">//Si la pala esta operando//</span><br />
&nbsp; &nbsp;<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; nMotorEncoderTarget<span style="color: #008000;">&#91;</span>motorB<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">90</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; motor<span style="color: #008000;">&#91;</span>motorB<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">100</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span>pala<span style="color: #000080;">==</span><span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #666666;">//Espera hasta que la bola sale//</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">100</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; nMotorEncoderTarget<span style="color: #008000;">&#91;</span>motorB<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">90</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; motor<span style="color: #008000;">&#91;</span>motorB<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">100</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">10</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp;<span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
task cuenta<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp;<span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><br />
&nbsp;<span style="color: #008000;">&#123;</span><br />
&nbsp;<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>SensorValue<span style="color: #008000;">&#40;</span>color<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">9</span><span style="color: #008000;">&#41;</span><br />
&nbsp;<span style="color: #008000;">&#123;</span><br />
&nbsp; wait1Msec<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; rojo<span style="color: #000040;">++</span><span style="color: #008080;">;</span><br />
&nbsp;<span style="color: #008000;">&#125;</span><br />
&nbsp;<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>SensorValue<span style="color: #008000;">&#40;</span>color<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><br />
&nbsp;<span style="color: #008000;">&#123;</span><br />
&nbsp; wait1Msec<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; azul<span style="color: #000040;">++</span><span style="color: #008080;">;</span><br />
&nbsp;<span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
task lcd<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp;<span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><br />
&nbsp;<span style="color: #008000;">&#123;</span><br />
&nbsp; nxtDisplayCenteredBigTextLine<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">2</span>, <span style="color: #FF0000;">&quot;ROJO=%d&quot;</span>, rojo<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp;nxtDisplayCenteredBigTextLine<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">4</span>, <span style="color: #FF0000;">&quot;AZUL=%d&quot;</span>, azul<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp;wait1Msec<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">100</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//Tiempo de refresco//</span><br />
&nbsp;<span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
task data<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; nDatalogSize<span style="color: #000080;">=</span><span style="color: #0000dd;">500</span><span style="color: #008080;">;</span><br />
&nbsp;<span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><br />
&nbsp;<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>SensorValue<span style="color: #008000;">&#40;</span>color<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">9</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp;<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; AddToDatalog<span style="color: #008000;">&#40;</span>time1<span style="color: #008000;">&#91;</span>T1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; time1<span style="color: #008000;">&#91;</span>T1<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1500</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; SaveNxtDatalog<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp;<span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>SensorValue<span style="color: #008000;">&#40;</span>color<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp;<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; AddToDatalog<span style="color: #008000;">&#40;</span>time1<span style="color: #008000;">&#91;</span>T2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; time1<span style="color: #008000;">&#91;</span>T2<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1500</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp;SaveNxtDatalog<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp;<span style="color: #008000;">&#125;</span><br />
&nbsp;<span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p>Realizaremos dos experimentos, el primero con una sola bola de color rojo. Y el segundo con una bola roja y otra azul. Es importante que realicemos el mismo número de tomas de datos, es decir, las veces que la bola repite el circuito, para poder compararlos de forma correcta.</p>
<p>Una vez que tenemos los datos de nuestros dos experimentos almacenados en nuestro datalog, hemos de ordenarlos con una tabla de excel para poder representarlos. Lo primero es pasar el formato ”.cvs” del datalog a uno más manejable. Para ello seguiremos este <a href="http://www.milbits.com/895/csv-xls-excel.html">tutorial</a>. </p>
<p>Tras obtener un nuevo formato para nuestros datos, podemos clasificar estos por color de la bola (el primer número corresponde a la referencia del temporizador, la segunda al tiempo en milisegundos ) y, tras ello, representarlos. Obteniendo las siguientes gráficas:</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Dos-bolas-500x291.PNG" alt="Dos bolas" title="Dos bolas" width="500" height="291" class="aligncenter size-large wp-image-7561" /></p>
<p>En nuestro eje “x” tenemos el número de toma del dato, y en nuestro eje “y” el tiempo que ha tardado la bola en realizar el circuito en milisegundos.<br />
Como comprobamos en esta gráfica, los tiempos para la bola roja y la bola azul son prácticamente iguales. Algo totalmente lógico si tenemos en cuenta que poseen el mismo peso y diámetro, siendo su única diferencia el color,  que no afectará a su comportamiento en su movimiento por el carril.<br />
Pero: ¿Qué pasaría si tuviéramos bolas de distintos tamaños y pesos? Podríamos diferenciar cuales son las más rápidas y determinar que el radio influye mucho en su velocidad. O bien podríamos detectar bolas que, aunque en un principio deberían ser iguales, presentan alguna anomalía.</p>
<p>Si comparamos el comportamiento de la bola roja sola y de esta junto a la bola azul:</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Comparativa-bolas-rojas-500x300.PNG" alt="Comparativa bolas rojas" title="Comparativa bolas rojas" width="500" height="300" class="aligncenter size-large wp-image-7562" /></p>
<p>Como se ve los tiempos se reducen considerablemente de un caso a otro, además de haber menor dispersión de datos. Es decir, con una sola bola, los recorridos en tiempo son muchísimo más similares. Algo lógico al no tener que esperar en la barrera debido a que haya otra bola. También es lógico comprobar que el tiempo medio de diferencia entre ambos casos (427 ms, aproximadamente medio segundo) se corresponde al tiempo adicional que tarda la bola por esperar en la barrera reguladora. </p>
<p>Ahora bien: ¿Qué pasaría si añadiéramos otra bola más al circuito? La pala estaría más tiempo ocupada, por lo que las bolas tendrían que esperar más veces en la barrera, aumentando los tiempos para cada recorrido.</p>
<p>Esto, traducido a un caso real de una fábrica, puede darnos conocimientos sobre con cuantas unidades un proceso se satura, formándose cuellos de botella y tardando  con ello mucho más tiempo en realizar cada tarea. </p>
<p>En definitiva, la toma de datos y el análisis de estos son una parte fundamental en el diseño de maquinaría en fábricas, y puede resultarnos muy útil para entender de una forma precisa como se relaciona nuestro robot con su medio.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-scriptstyle">
			<a href="http://scriptandstyle.com/submit?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Submit this to Script &amp; Style">Submit this to Script &amp; Style</a>
		</li>
		<li class="sexy-blinklist">
			<a href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;Title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Share this on Blinklist">Share this on Blinklist</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling&amp;desc=EnglishAl%20hablar%20de%20rob%C3%B3tica%20inmediatamente%20nos%20imaginamos%20m%C3%A1quinas%20capaces%20de%20andar%2C%20de%20moverse%20o%20de%20actuar%20de%20forma%20inteligente.%20Muchas%20de%20ellas%20solo%20est%C3%A1n%2C%20a%C3%BAn%2C%20en%20nuestra%20imaginaci%C3%B3n%2C%20otras%20las%20vamos%20realizando%20a%20peque%C3%B1a%20escala%20con%20nuestro%20NXT.%0D%0A%0D%0AEl%20campo%20en%20el%20que%20m%C3%A1s%20se%20usa%20la%20rob%C3%B3tic" rel="nofollow" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;submitHeadline=Las+posibilidades+del+DataLog%2C+by+Erling&amp;submitSummary=EnglishAl%20hablar%20de%20rob%C3%B3tica%20inmediatamente%20nos%20imaginamos%20m%C3%A1quinas%20capaces%20de%20andar%2C%20de%20moverse%20o%20de%20actuar%20de%20forma%20inteligente.%20Muchas%20de%20ellas%20solo%20est%C3%A1n%2C%20a%C3%BAn%2C%20en%20nuestra%20imaginaci%C3%B3n%2C%20otras%20las%20vamos%20realizando%20a%20peque%C3%B1a%20escala%20con%20nuestro%20NXT.%0D%0A%0D%0AEl%20campo%20en%20el%20que%20m%C3%A1s%20se%20usa%20la%20rob%C3%B3tic&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.electricbricks.com/2010/05/datalog-by-erling/" rel="nofollow" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;t=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-designfloat">
			<a href="http://www.designfloat.com/submit.php?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Submit this to DesignFloat">Submit this to DesignFloat</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?u=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;t=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Las+posibilidades+del+DataLog%2C+by+Erling+-+http://b2l.me/xp4r7+" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Las%20posibilidades%20del%20DataLog%2C%20by%20Erling%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22EnglishAl%20hablar%20de%20rob%C3%B3tica%20inmediatamente%20nos%20imaginamos%20m%C3%A1quinas%20capaces%20de%20andar%2C%20de%20moverse%20o%20de%20actuar%20de%20forma%20inteligente.%20Muchas%20de%20ellas%20solo%20est%C3%A1n%2C%20a%C3%BAn%2C%20en%20nuestra%20imaginaci%C3%B3n%2C%20otras%20las%20vamos%20realizando%20a%20peque%C3%B1a%20escala%20con%20nuestro%20NXT.%0D%0A%0D%0AEl%20campo%20en%20el%20que%20m%C3%A1s%20se%20usa%20la%20rob%C3%B3tic%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/05/datalog-by-erling/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-tomuse">
			<a href="mailto:tips@tomuse.com?subject=New%20tip%20submitted%20via%20the%20SexyBookmarks%20Plugin!&amp;body=I%20would%20like%20to%20submit%20this%20article%3A%20%22Las%20posibilidades%20del%20DataLog%2C%20by%20Erling%22%20for%20possible%20inclusion%20on%20ToMuse.%0A%0A%22EnglishAl%20hablar%20de%20rob%C3%B3tica%20inmediatamente%20nos%20imaginamos%20m%C3%A1quinas%20capaces%20de%20andar%2C%20de%20moverse%20o%20de%20actuar%20de%20forma%20inteligente.%20Muchas%20de%20ellas%20solo%20est%C3%A1n%2C%20a%C3%BAn%2C%20en%20nuestra%20imaginaci%C3%B3n%2C%20otras%20las%20vamos%20realizando%20a%20peque%C3%B1a%20escala%20con%20nuestro%20NXT.%0D%0A%0D%0AEl%20campo%20en%20el%20que%20m%C3%A1s%20se%20usa%20la%20rob%C3%B3tic%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/05/datalog-by-erling/" rel="nofollow" title="Suggest this article to ToMuse">Suggest this article to ToMuse</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.electricbricks.com/2010/05/datalog-by-erling/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling&amp;summary=EnglishAl%20hablar%20de%20rob%C3%B3tica%20inmediatamente%20nos%20imaginamos%20m%C3%A1quinas%20capaces%20de%20andar%2C%20de%20moverse%20o%20de%20actuar%20de%20forma%20inteligente.%20Muchas%20de%20ellas%20solo%20est%C3%A1n%2C%20a%C3%BAn%2C%20en%20nuestra%20imaginaci%C3%B3n%2C%20otras%20las%20vamos%20realizando%20a%20peque%C3%B1a%20escala%20con%20nuestro%20NXT.%0D%0A%0D%0AEl%20campo%20en%20el%20que%20m%C3%A1s%20se%20usa%20la%20rob%C3%B3tic&amp;source=electricBricks" rel="nofollow" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-newsvine">
			<a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;h=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Seed this on Newsvine">Seed this on Newsvine</a>
		</li>
		<li class="sexy-devmarks">
			<a href="http://devmarks.com/index.php?posttext=EnglishAl%20hablar%20de%20rob%C3%B3tica%20inmediatamente%20nos%20imaginamos%20m%C3%A1quinas%20capaces%20de%20andar%2C%20de%20moverse%20o%20de%20actuar%20de%20forma%20inteligente.%20Muchas%20de%20ellas%20solo%20est%C3%A1n%2C%20a%C3%BAn%2C%20en%20nuestra%20imaginaci%C3%B3n%2C%20otras%20las%20vamos%20realizando%20a%20peque%C3%B1a%20escala%20con%20nuestro%20NXT.%0D%0A%0D%0AEl%20campo%20en%20el%20que%20m%C3%A1s%20se%20usa%20la%20rob%C3%B3tic&amp;posturl=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;posttitle=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Share this on Devmarks">Share this on Devmarks</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;bm_description=Las+posibilidades+del+DataLog%2C+by+Erling&amp;plugin=sexybookmarks" rel="nofollow" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="sexy-izeby">
			<a href="http://izeby.com/submit.php?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/" rel="nofollow" title="Add this to Izeby">Add this to Izeby</a>
		</li>
		<li class="sexy-tipd">
			<a href="http://tipd.com/submit.php?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/" rel="nofollow" title="Share this on Tipd">Share this on Tipd</a>
		</li>
		<li class="sexy-pfbuzz">
			<a href="http://pfbuzz.com/submit?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Share this on PFBuzz">Share this on PFBuzz</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Las+posibilidades+del+DataLog%2C+by+Erling&amp;link=http://blog.electricbricks.com/2010/05/datalog-by-erling/" rel="nofollow" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-blogmarks">
			<a href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Mark this on BlogMarks">Mark this on BlogMarks</a>
		</li>
		<li class="sexy-twittley">
			<a href="http://twittley.com/submit/?title=Las+posibilidades+del+DataLog%2C+by+Erling&amp;url=http%3A%2F%2Fblog.electricbricks.com%2F2010%2F05%2Fdatalog-by-erling%2F&amp;desc=EnglishAl%20hablar%20de%20rob%C3%B3tica%20inmediatamente%20nos%20imaginamos%20m%C3%A1quinas%20capaces%20de%20andar%2C%20de%20moverse%20o%20de%20actuar%20de%20forma%20inteligente.%20Muchas%20de%20ellas%20solo%20est%C3%A1n%2C%20a%C3%BAn%2C%20en%20nuestra%20imaginaci%C3%B3n%2C%20otras%20las%20vamos%20realizando%20a%20peque%C3%B1a%20escala%20con%20nuestro%20NXT.%0D%0A%0D%0AEl%20campo%20en%20el%20que%20m%C3%A1s%20se%20usa%20la%20rob%C3%B3tic&amp;pcat=Technology&amp;tags=" rel="nofollow" title="Submit this to Twittley">Submit this to Twittley</a>
		</li>
		<li class="sexy-fwisp">
			<a href="http://fwisp.com/submit?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/" rel="nofollow" title="Share this on Fwisp">Share this on Fwisp</a>
		</li>
		<li class="sexy-designmoo">
			<a href="http://designmoo.com/submit?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling&amp;body=EnglishAl%20hablar%20de%20rob%C3%B3tica%20inmediatamente%20nos%20imaginamos%20m%C3%A1quinas%20capaces%20de%20andar%2C%20de%20moverse%20o%20de%20actuar%20de%20forma%20inteligente.%20Muchas%20de%20ellas%20solo%20est%C3%A1n%2C%20a%C3%BAn%2C%20en%20nuestra%20imaginaci%C3%B3n%2C%20otras%20las%20vamos%20realizando%20a%20peque%C3%B1a%20escala%20con%20nuestro%20NXT.%0D%0A%0D%0AEl%20campo%20en%20el%20que%20m%C3%A1s%20se%20usa%20la%20rob%C3%B3tic" rel="nofollow" title="Moo this on DesignMoo!">Moo this on DesignMoo!</a>
		</li>
		<li class="sexy-bobrdobr">
			<a href="http://bobrdobr.ru/addext.html?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Share this on BobrDobr">Share this on BobrDobr</a>
		</li>
		<li class="sexy-yandex">
			<a href="http://zakladki.yandex.ru/userarea/links/addfromfav.asp?bAddLink_x=1&amp;lurl=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;lname=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Add this to Yandex.Bookmarks">Add this to Yandex.Bookmarks</a>
		</li>
		<li class="sexy-memoryru">
			<a href="http://memori.ru/link/?sm=1&amp;u_data[url]=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;u_data[name]=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Add this to Memory.ru">Add this to Memory.ru</a>
		</li>
		<li class="sexy-100zakladok">
			<a href="http://www.100zakladok.ru/save/?bmurl=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;bmtitle=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Add this to 100 bookmarks">Add this to 100 bookmarks</a>
		</li>
		<li class="sexy-moemesto">
			<a href="http://moemesto.ru/post.php?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Add this to MyPlace">Add this to MyPlace</a>
		</li>
		<li class="sexy-hackernews">
			<a href="http://news.ycombinator.com/submitlink?u=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;t=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Submit this to Hacker News">Submit this to Hacker News</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/" rel="nofollow" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
		<li class="sexy-designbump">
			<a href="http://designbump.com/submit?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling&amp;body=EnglishAl%20hablar%20de%20rob%C3%B3tica%20inmediatamente%20nos%20imaginamos%20m%C3%A1quinas%20capaces%20de%20andar%2C%20de%20moverse%20o%20de%20actuar%20de%20forma%20inteligente.%20Muchas%20de%20ellas%20solo%20est%C3%A1n%2C%20a%C3%BAn%2C%20en%20nuestra%20imaginaci%C3%B3n%2C%20otras%20las%20vamos%20realizando%20a%20peque%C3%B1a%20escala%20con%20nuestro%20NXT.%0D%0A%0D%0AEl%20campo%20en%20el%20que%20m%C3%A1s%20se%20usa%20la%20rob%C3%B3tic" rel="nofollow" title="Bump this on DesignBump">Bump this on DesignBump</a>
		</li>
		<li class="sexy-ning">
			<a href="http://bookmarks.ning.com/addItem.php?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;T=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Add this to Ning">Add this to Ning</a>
		</li>
		<li class="sexy-identica">
			<a href="http://identi.ca//index.php?action=newnotice&amp;status_textarea=Reading:+&quot;Las+posibilidades+del+DataLog%2C+by+Erling&quot;+-+from+http://b2l.me/xp4r7" rel="nofollow" title="Post this to Identica">Post this to Identica</a>
		</li>
		<li class="sexy-xerpi">
			<a href="http://www.xerpi.com/block/add_link_from_extension?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Save this to Xerpi">Save this to Xerpi</a>
		</li>
		<li class="sexy-wikio">
			<a href="http://www.wikio.com/sharethis?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Share this on Wikio">Share this on Wikio</a>
		</li>
		<li class="sexy-techmeme">
			<a href="http://twitter.com/home/?status=Tip+@Techmeme+http://blog.electricbricks.com/2010/05/datalog-by-erling/+&quot;Las+posibilidades+del+DataLog%2C+by+Erling&quot;" rel="nofollow" title="Tip this to TechMeme">Tip this to TechMeme</a>
		</li>
		<li class="sexy-sphinn">
			<a href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http://blog.electricbricks.com/2010/05/datalog-by-erling/" rel="nofollow" title="Sphinn this on Sphinn">Sphinn this on Sphinn</a>
		</li>
		<li class="sexy-posterous">
			<a href="http://posterous.com/share?linkto=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling&amp;selection=EnglishAl%20hablar%20de%20rob%C3%B3tica%20inmediatamente%20nos%20imaginamos%20m%C3%A1quinas%20capaces%20de%20andar%2C%20de%20moverse%20o%20de%20actuar%20de%20forma%20inteligente.%20Muchas%20de%20ellas%20solo%20est%C3%A1n%2C%20a%C3%BAn%2C%20en%20nuestra%20imaginaci%C3%B3n%2C%20otras%20las%20vamos%20realizando%20a%20peque%C3%B1a%20escala%20con%20nuestro%20NXT.%0D%0A%0D%0AEl%20campo%20en%20el%20que%20m%C3%A1s%20se%20usa%20la%20rob%C3%B3tic" rel="nofollow" title="Post this to Posterous">Post this to Posterous</a>
		</li>
		<li class="sexy-globalgrind">
			<a href="http://globalgrind.com/submission/submit.aspx?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;type=Article&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Grind this! on Global Grind">Grind this! on Global Grind</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling&amp;body=EnglishAl%20hablar%20de%20rob%C3%B3tica%20inmediatamente%20nos%20imaginamos%20m%C3%A1quinas%20capaces%20de%20andar%2C%20de%20moverse%20o%20de%20actuar%20de%20forma%20inteligente.%20Muchas%20de%20ellas%20solo%20est%C3%A1n%2C%20a%C3%BAn%2C%20en%20nuestra%20imaginaci%C3%B3n%2C%20otras%20las%20vamos%20realizando%20a%20peque%C3%B1a%20escala%20con%20nuestro%20NXT.%0D%0A%0D%0AEl%20campo%20en%20el%20que%20m%C3%A1s%20se%20usa%20la%20rob%C3%B3tic" rel="nofollow" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-nujij">
			<a href="http://nujij.nl/jij.lynkx?t=Las+posibilidades+del+DataLog%2C+by+Erling&amp;u=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;b=EnglishAl%20hablar%20de%20rob%C3%B3tica%20inmediatamente%20nos%20imaginamos%20m%C3%A1quinas%20capaces%20de%20andar%2C%20de%20moverse%20o%20de%20actuar%20de%20forma%20inteligente.%20Muchas%20de%20ellas%20solo%20est%C3%A1n%2C%20a%C3%BAn%2C%20en%20nuestra%20imaginaci%C3%B3n%2C%20otras%20las%20vamos%20realizando%20a%20peque%C3%B1a%20escala%20con%20nuestro%20NXT.%0D%0A%0D%0AEl%20campo%20en%20el%20que%20m%C3%A1s%20se%20usa%20la%20rob%C3%B3tic" rel="nofollow" title="Submit this to NUjij">Submit this to NUjij</a>
		</li>
		<li class="sexy-ekudos">
			<a href="http://www.ekudos.nl/artikel/nieuw?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling&amp;desc=EnglishAl%20hablar%20de%20rob%C3%B3tica%20inmediatamente%20nos%20imaginamos%20m%C3%A1quinas%20capaces%20de%20andar%2C%20de%20moverse%20o%20de%20actuar%20de%20forma%20inteligente.%20Muchas%20de%20ellas%20solo%20est%C3%A1n%2C%20a%C3%BAn%2C%20en%20nuestra%20imaginaci%C3%B3n%2C%20otras%20las%20vamos%20realizando%20a%20peque%C3%B1a%20escala%20con%20nuestro%20NXT.%0D%0A%0D%0AEl%20campo%20en%20el%20que%20m%C3%A1s%20se%20usa%20la%20rob%C3%B3tic" rel="nofollow" title="Submit this to eKudos">Submit this to eKudos</a>
		</li>
		<li class="sexy-netvouz">
			<a href="http://www.netvouz.com/action/submitBookmark?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling&amp;popup=no" rel="nofollow" title="Submit this to Netvouz">Submit this to Netvouz</a>
		</li>
		<li class="sexy-netvibes">
			<a href="http://www.netvibes.com/share?title=Las+posibilidades+del+DataLog%2C+by+Erling&amp;url=http://blog.electricbricks.com/2010/05/datalog-by-erling/" rel="nofollow" title="Submit this to Netvibes">Submit this to Netvibes</a>
		</li>
		<li class="sexy-fleck">
			<a href="http://beta3.fleck.com/bookmarklet.php?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Share this on Fleck">Share this on Fleck</a>
		</li>
		<li class="sexy-blogospherenews">
			<a href="http://www.blogospherenews.com/submit.php?url=http://blog.electricbricks.com/2010/05/datalog-by-erling/&amp;title=Las+posibilidades+del+DataLog%2C+by+Erling" rel="nofollow" title="Share this on Blogosphere News">Share this on Blogosphere News</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://blog.electricbricks.com/2010/05/datalog-by-erling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RobotC para MINDSTORMS 2.16 Beta</title>
		<link>http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/</link>
		<comments>http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/#comments</comments>
		<pubDate>Tue, 25 May 2010 09:28:31 +0000</pubDate>
		<dc:creator>electricbricks</dc:creator>
				<category><![CDATA[NXT]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[RobotC]]></category>

		<guid isPermaLink="false">http://blog.electricbricks.com/?p=7450</guid>
		<description><![CDATA[
English

Acaba de lanzarse la versión Beta2.16 de RobotC para MINDSTORMS. La principal característica es el soporte para el Sensor de Color y el sensor de Temperatura por I2C, ambos de LEGO Education.
La siguiente es la lista de correcciones que han incluido en esta revisión:

Mantiene el tipo de plataforma cuando se elimina la información del Registro.
Mejora [...]]]></description>
			<content:encoded><![CDATA[<ul class="lang_switch">
<li class="lang_switch"><a href="http://blog.electricbricks.com/en/2010/05/robotc-para-mindstorms/"><img src="http://blog.electricbricks.com/wp-content/plugins/zdmultilang/flags/en_US.png" alt="English" title="English" border="0">English</a></li>
</ul>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/robotc_nxt.jpg" alt="robotc_nxt" title="robotc_nxt" width="150" height="150" class="alignleft size-full wp-image-7451"/>Acaba de lanzarse la versión Beta2.16 de RobotC para MINDSTORMS. La principal característica es el soporte para el Sensor de Color y el sensor de Temperatura por I2C, ambos de LEGO Education.<span id="more-7450"></span></p>
<p>La siguiente es la lista de correcciones que han incluido en esta revisión:</p>
<ul>
<li>Mantiene el tipo de plataforma cuando se elimina la información del Registro.</li>
<li>Mejora la asignación de código de las variables temporales.</li>
<li>Se incorpora &#8220;<em>unsigned</em>&#8221; para eliminar la advertencia del compilador.</li>
<li>Se añade la clausula &#8220;<em>default</em>&#8221; para las sentencias <em>switch</em>.</li>
<li>parámetro &#8220;SGN&#8221; código de operación para &#8216;flotar&#8217; fue incorrectamente el control de la &#8216;corto&#8217; resultado para ver si se trataba de un &#8216;float&#8217; NAN (Not A Number). Esta comprobación sólo debe realizarse cuando el retorno de la función es una variable de tipo float. Este problema se ha solucionado.</li>
<li>Se genera mensaje de error si la declaración pragma &#8220;<em>motor and sensors setup</em>&#8221; no se encuentra en las primeras líneas del programa. Algunos usuarios tenían estas declaraciones en otros lugares lo que producía ciertos errores.</li>
<li>La herramienta de la barra de estado muestra ahora el número de &#8220;puerto&#8221; o &#8220;nombre de NXT&#8221; del robot conectado, que anteriormente era mostrado como &#8220;===========&#8221;.</li>
<li>Se ha corregido el mal funcionamiento de la barra de desplazamiento vertical cuando la pantalla se ampliaba hasta hacer cabera un fichero completo.</li>
</ul>
<p>Fuente: RobotC</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-scriptstyle">
			<a href="http://scriptandstyle.com/submit?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Submit this to Script &amp; Style">Submit this to Script &amp; Style</a>
		</li>
		<li class="sexy-blinklist">
			<a href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;Title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Share this on Blinklist">Share this on Blinklist</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta&amp;desc=EnglishAcaba%20de%20lanzarse%20la%20versi%C3%B3n%20Beta2.16%20de%20RobotC%20para%20MINDSTORMS.%20La%20principal%20caracter%C3%ADstica%20es%20el%20soporte%20para%20el%20Sensor%20de%20Color%20y%20el%20sensor%20de%20Temperatura%20por%20I2C%2C%20ambos%20de%20LEGO%20Education.%0D%0A%0D%0ALa%20siguiente%20es%20la%20lista%20de%20correcciones%20que%20han%20incluido%20en%20esta%20revisi%C3%B3n%3A%0D%0A%0D%0AMantiene%20el%20tipo" rel="nofollow" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;submitHeadline=RobotC+para+MINDSTORMS+2.16+Beta&amp;submitSummary=EnglishAcaba%20de%20lanzarse%20la%20versi%C3%B3n%20Beta2.16%20de%20RobotC%20para%20MINDSTORMS.%20La%20principal%20caracter%C3%ADstica%20es%20el%20soporte%20para%20el%20Sensor%20de%20Color%20y%20el%20sensor%20de%20Temperatura%20por%20I2C%2C%20ambos%20de%20LEGO%20Education.%0D%0A%0D%0ALa%20siguiente%20es%20la%20lista%20de%20correcciones%20que%20han%20incluido%20en%20esta%20revisi%C3%B3n%3A%0D%0A%0D%0AMantiene%20el%20tipo&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/" rel="nofollow" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;t=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-designfloat">
			<a href="http://www.designfloat.com/submit.php?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Submit this to DesignFloat">Submit this to DesignFloat</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?u=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;t=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=RobotC+para+MINDSTORMS+2.16+Beta+-+http://b2l.me/xfmzg+" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22RobotC%20para%20MINDSTORMS%202.16%20Beta%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22EnglishAcaba%20de%20lanzarse%20la%20versi%C3%B3n%20Beta2.16%20de%20RobotC%20para%20MINDSTORMS.%20La%20principal%20caracter%C3%ADstica%20es%20el%20soporte%20para%20el%20Sensor%20de%20Color%20y%20el%20sensor%20de%20Temperatura%20por%20I2C%2C%20ambos%20de%20LEGO%20Education.%0D%0A%0D%0ALa%20siguiente%20es%20la%20lista%20de%20correcciones%20que%20han%20incluido%20en%20esta%20revisi%C3%B3n%3A%0D%0A%0D%0AMantiene%20el%20tipo%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-tomuse">
			<a href="mailto:tips@tomuse.com?subject=New%20tip%20submitted%20via%20the%20SexyBookmarks%20Plugin!&amp;body=I%20would%20like%20to%20submit%20this%20article%3A%20%22RobotC%20para%20MINDSTORMS%202.16%20Beta%22%20for%20possible%20inclusion%20on%20ToMuse.%0A%0A%22EnglishAcaba%20de%20lanzarse%20la%20versi%C3%B3n%20Beta2.16%20de%20RobotC%20para%20MINDSTORMS.%20La%20principal%20caracter%C3%ADstica%20es%20el%20soporte%20para%20el%20Sensor%20de%20Color%20y%20el%20sensor%20de%20Temperatura%20por%20I2C%2C%20ambos%20de%20LEGO%20Education.%0D%0A%0D%0ALa%20siguiente%20es%20la%20lista%20de%20correcciones%20que%20han%20incluido%20en%20esta%20revisi%C3%B3n%3A%0D%0A%0D%0AMantiene%20el%20tipo%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/" rel="nofollow" title="Suggest this article to ToMuse">Suggest this article to ToMuse</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta&amp;summary=EnglishAcaba%20de%20lanzarse%20la%20versi%C3%B3n%20Beta2.16%20de%20RobotC%20para%20MINDSTORMS.%20La%20principal%20caracter%C3%ADstica%20es%20el%20soporte%20para%20el%20Sensor%20de%20Color%20y%20el%20sensor%20de%20Temperatura%20por%20I2C%2C%20ambos%20de%20LEGO%20Education.%0D%0A%0D%0ALa%20siguiente%20es%20la%20lista%20de%20correcciones%20que%20han%20incluido%20en%20esta%20revisi%C3%B3n%3A%0D%0A%0D%0AMantiene%20el%20tipo&amp;source=electricBricks" rel="nofollow" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-newsvine">
			<a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;h=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Seed this on Newsvine">Seed this on Newsvine</a>
		</li>
		<li class="sexy-devmarks">
			<a href="http://devmarks.com/index.php?posttext=EnglishAcaba%20de%20lanzarse%20la%20versi%C3%B3n%20Beta2.16%20de%20RobotC%20para%20MINDSTORMS.%20La%20principal%20caracter%C3%ADstica%20es%20el%20soporte%20para%20el%20Sensor%20de%20Color%20y%20el%20sensor%20de%20Temperatura%20por%20I2C%2C%20ambos%20de%20LEGO%20Education.%0D%0A%0D%0ALa%20siguiente%20es%20la%20lista%20de%20correcciones%20que%20han%20incluido%20en%20esta%20revisi%C3%B3n%3A%0D%0A%0D%0AMantiene%20el%20tipo&amp;posturl=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;posttitle=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Share this on Devmarks">Share this on Devmarks</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;bm_description=RobotC+para+MINDSTORMS+2.16+Beta&amp;plugin=sexybookmarks" rel="nofollow" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="sexy-izeby">
			<a href="http://izeby.com/submit.php?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/" rel="nofollow" title="Add this to Izeby">Add this to Izeby</a>
		</li>
		<li class="sexy-tipd">
			<a href="http://tipd.com/submit.php?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/" rel="nofollow" title="Share this on Tipd">Share this on Tipd</a>
		</li>
		<li class="sexy-pfbuzz">
			<a href="http://pfbuzz.com/submit?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Share this on PFBuzz">Share this on PFBuzz</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=RobotC+para+MINDSTORMS+2.16+Beta&amp;link=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/" rel="nofollow" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-blogmarks">
			<a href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Mark this on BlogMarks">Mark this on BlogMarks</a>
		</li>
		<li class="sexy-twittley">
			<a href="http://twittley.com/submit/?title=RobotC+para+MINDSTORMS+2.16+Beta&amp;url=http%3A%2F%2Fblog.electricbricks.com%2F2010%2F05%2Frobotc-para-mindstorms%2F&amp;desc=EnglishAcaba%20de%20lanzarse%20la%20versi%C3%B3n%20Beta2.16%20de%20RobotC%20para%20MINDSTORMS.%20La%20principal%20caracter%C3%ADstica%20es%20el%20soporte%20para%20el%20Sensor%20de%20Color%20y%20el%20sensor%20de%20Temperatura%20por%20I2C%2C%20ambos%20de%20LEGO%20Education.%0D%0A%0D%0ALa%20siguiente%20es%20la%20lista%20de%20correcciones%20que%20han%20incluido%20en%20esta%20revisi%C3%B3n%3A%0D%0A%0D%0AMantiene%20el%20tipo&amp;pcat=Technology&amp;tags=" rel="nofollow" title="Submit this to Twittley">Submit this to Twittley</a>
		</li>
		<li class="sexy-fwisp">
			<a href="http://fwisp.com/submit?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/" rel="nofollow" title="Share this on Fwisp">Share this on Fwisp</a>
		</li>
		<li class="sexy-designmoo">
			<a href="http://designmoo.com/submit?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta&amp;body=EnglishAcaba%20de%20lanzarse%20la%20versi%C3%B3n%20Beta2.16%20de%20RobotC%20para%20MINDSTORMS.%20La%20principal%20caracter%C3%ADstica%20es%20el%20soporte%20para%20el%20Sensor%20de%20Color%20y%20el%20sensor%20de%20Temperatura%20por%20I2C%2C%20ambos%20de%20LEGO%20Education.%0D%0A%0D%0ALa%20siguiente%20es%20la%20lista%20de%20correcciones%20que%20han%20incluido%20en%20esta%20revisi%C3%B3n%3A%0D%0A%0D%0AMantiene%20el%20tipo" rel="nofollow" title="Moo this on DesignMoo!">Moo this on DesignMoo!</a>
		</li>
		<li class="sexy-bobrdobr">
			<a href="http://bobrdobr.ru/addext.html?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Share this on BobrDobr">Share this on BobrDobr</a>
		</li>
		<li class="sexy-yandex">
			<a href="http://zakladki.yandex.ru/userarea/links/addfromfav.asp?bAddLink_x=1&amp;lurl=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;lname=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Add this to Yandex.Bookmarks">Add this to Yandex.Bookmarks</a>
		</li>
		<li class="sexy-memoryru">
			<a href="http://memori.ru/link/?sm=1&amp;u_data[url]=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;u_data[name]=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Add this to Memory.ru">Add this to Memory.ru</a>
		</li>
		<li class="sexy-100zakladok">
			<a href="http://www.100zakladok.ru/save/?bmurl=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;bmtitle=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Add this to 100 bookmarks">Add this to 100 bookmarks</a>
		</li>
		<li class="sexy-moemesto">
			<a href="http://moemesto.ru/post.php?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Add this to MyPlace">Add this to MyPlace</a>
		</li>
		<li class="sexy-hackernews">
			<a href="http://news.ycombinator.com/submitlink?u=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;t=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Submit this to Hacker News">Submit this to Hacker News</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/" rel="nofollow" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
		<li class="sexy-designbump">
			<a href="http://designbump.com/submit?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta&amp;body=EnglishAcaba%20de%20lanzarse%20la%20versi%C3%B3n%20Beta2.16%20de%20RobotC%20para%20MINDSTORMS.%20La%20principal%20caracter%C3%ADstica%20es%20el%20soporte%20para%20el%20Sensor%20de%20Color%20y%20el%20sensor%20de%20Temperatura%20por%20I2C%2C%20ambos%20de%20LEGO%20Education.%0D%0A%0D%0ALa%20siguiente%20es%20la%20lista%20de%20correcciones%20que%20han%20incluido%20en%20esta%20revisi%C3%B3n%3A%0D%0A%0D%0AMantiene%20el%20tipo" rel="nofollow" title="Bump this on DesignBump">Bump this on DesignBump</a>
		</li>
		<li class="sexy-ning">
			<a href="http://bookmarks.ning.com/addItem.php?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;T=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Add this to Ning">Add this to Ning</a>
		</li>
		<li class="sexy-identica">
			<a href="http://identi.ca//index.php?action=newnotice&amp;status_textarea=Reading:+&quot;RobotC+para+MINDSTORMS+2.16+Beta&quot;+-+from+http://b2l.me/xfmzg" rel="nofollow" title="Post this to Identica">Post this to Identica</a>
		</li>
		<li class="sexy-xerpi">
			<a href="http://www.xerpi.com/block/add_link_from_extension?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Save this to Xerpi">Save this to Xerpi</a>
		</li>
		<li class="sexy-wikio">
			<a href="http://www.wikio.com/sharethis?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Share this on Wikio">Share this on Wikio</a>
		</li>
		<li class="sexy-techmeme">
			<a href="http://twitter.com/home/?status=Tip+@Techmeme+http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/+&quot;RobotC+para+MINDSTORMS+2.16+Beta&quot;" rel="nofollow" title="Tip this to TechMeme">Tip this to TechMeme</a>
		</li>
		<li class="sexy-sphinn">
			<a href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/" rel="nofollow" title="Sphinn this on Sphinn">Sphinn this on Sphinn</a>
		</li>
		<li class="sexy-posterous">
			<a href="http://posterous.com/share?linkto=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta&amp;selection=EnglishAcaba%20de%20lanzarse%20la%20versi%C3%B3n%20Beta2.16%20de%20RobotC%20para%20MINDSTORMS.%20La%20principal%20caracter%C3%ADstica%20es%20el%20soporte%20para%20el%20Sensor%20de%20Color%20y%20el%20sensor%20de%20Temperatura%20por%20I2C%2C%20ambos%20de%20LEGO%20Education.%0D%0A%0D%0ALa%20siguiente%20es%20la%20lista%20de%20correcciones%20que%20han%20incluido%20en%20esta%20revisi%C3%B3n%3A%0D%0A%0D%0AMantiene%20el%20tipo" rel="nofollow" title="Post this to Posterous">Post this to Posterous</a>
		</li>
		<li class="sexy-globalgrind">
			<a href="http://globalgrind.com/submission/submit.aspx?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;type=Article&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Grind this! on Global Grind">Grind this! on Global Grind</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta&amp;body=EnglishAcaba%20de%20lanzarse%20la%20versi%C3%B3n%20Beta2.16%20de%20RobotC%20para%20MINDSTORMS.%20La%20principal%20caracter%C3%ADstica%20es%20el%20soporte%20para%20el%20Sensor%20de%20Color%20y%20el%20sensor%20de%20Temperatura%20por%20I2C%2C%20ambos%20de%20LEGO%20Education.%0D%0A%0D%0ALa%20siguiente%20es%20la%20lista%20de%20correcciones%20que%20han%20incluido%20en%20esta%20revisi%C3%B3n%3A%0D%0A%0D%0AMantiene%20el%20tipo" rel="nofollow" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-nujij">
			<a href="http://nujij.nl/jij.lynkx?t=RobotC+para+MINDSTORMS+2.16+Beta&amp;u=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;b=EnglishAcaba%20de%20lanzarse%20la%20versi%C3%B3n%20Beta2.16%20de%20RobotC%20para%20MINDSTORMS.%20La%20principal%20caracter%C3%ADstica%20es%20el%20soporte%20para%20el%20Sensor%20de%20Color%20y%20el%20sensor%20de%20Temperatura%20por%20I2C%2C%20ambos%20de%20LEGO%20Education.%0D%0A%0D%0ALa%20siguiente%20es%20la%20lista%20de%20correcciones%20que%20han%20incluido%20en%20esta%20revisi%C3%B3n%3A%0D%0A%0D%0AMantiene%20el%20tipo" rel="nofollow" title="Submit this to NUjij">Submit this to NUjij</a>
		</li>
		<li class="sexy-ekudos">
			<a href="http://www.ekudos.nl/artikel/nieuw?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta&amp;desc=EnglishAcaba%20de%20lanzarse%20la%20versi%C3%B3n%20Beta2.16%20de%20RobotC%20para%20MINDSTORMS.%20La%20principal%20caracter%C3%ADstica%20es%20el%20soporte%20para%20el%20Sensor%20de%20Color%20y%20el%20sensor%20de%20Temperatura%20por%20I2C%2C%20ambos%20de%20LEGO%20Education.%0D%0A%0D%0ALa%20siguiente%20es%20la%20lista%20de%20correcciones%20que%20han%20incluido%20en%20esta%20revisi%C3%B3n%3A%0D%0A%0D%0AMantiene%20el%20tipo" rel="nofollow" title="Submit this to eKudos">Submit this to eKudos</a>
		</li>
		<li class="sexy-netvouz">
			<a href="http://www.netvouz.com/action/submitBookmark?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta&amp;popup=no" rel="nofollow" title="Submit this to Netvouz">Submit this to Netvouz</a>
		</li>
		<li class="sexy-netvibes">
			<a href="http://www.netvibes.com/share?title=RobotC+para+MINDSTORMS+2.16+Beta&amp;url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/" rel="nofollow" title="Submit this to Netvibes">Submit this to Netvibes</a>
		</li>
		<li class="sexy-fleck">
			<a href="http://beta3.fleck.com/bookmarklet.php?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Share this on Fleck">Share this on Fleck</a>
		</li>
		<li class="sexy-blogospherenews">
			<a href="http://www.blogospherenews.com/submit.php?url=http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/&amp;title=RobotC+para+MINDSTORMS+2.16+Beta" rel="nofollow" title="Share this on Blogosphere News">Share this on Blogosphere News</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://blog.electricbricks.com/2010/05/robotc-para-mindstorms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Navegación esquivando obstáculos: RobotC</title>
		<link>http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/</link>
		<comments>http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/#comments</comments>
		<pubDate>Fri, 14 May 2010 12:05:36 +0000</pubDate>
		<dc:creator>Alvaro</dc:creator>
				<category><![CDATA[NXT]]></category>
		<category><![CDATA[RobotC]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[vision]]></category>

		<guid isPermaLink="false">http://blog.electricbricks.com/?p=7201</guid>
		<description><![CDATA[
En artículos anteriores como el artículo sobre reconocimiento básico de objetos con OpenCV y el artículo sobre segmentación básica en OpenCV hemos visto como detectar distintos objetos de color determinado en una imagen, e incluso calcular sus puntos medios y distancias entre ellos. En el artículo de hoy vamos a aplicar todos estos conocimientos para [...]]]></description>
			<content:encoded><![CDATA[<ul class="lang_switch"></ul>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/IMG_2402-150x112.jpg" alt="Distancia" title="Distancia" width="150" height="112" class="alignleft size-thumbnail wp-image-7216" />En artículos anteriores como el artículo sobre <a href="http://blog.electricbricks.com/2010/05/reconocimiento-objetos-opencv/">reconocimiento básico de objetos con OpenCV</a> y el artículo sobre <a href="http://blog.electricbricks.com/2010/05/segmentacion-basica-opencv/">segmentación básica en OpenCV</a> hemos visto como detectar distintos objetos de color determinado en una imagen, e incluso calcular sus puntos medios y distancias entre ellos. En el artículo de hoy vamos a aplicar todos estos conocimientos para realizar un ejemplo práctico en el que gracias a dos imágenes tomadas por la cámara sabremos dónde se encuentran dos bolas rojas respecto al Robot, y lograremos esquivarlas con el robot mientras se mueve en línea recta.<span id="more-7201"></span></p>
<p><strong>Un poco de trigonometría:</strong></p>
<p>Puesto que vamos a tomar dos fotos, y sabemos:</p>
<p>1) a qué altura está la cámara respecto del suelo, y<br />
2) la inclinación de la cámara en grados,</p>
<p>podemos saber muchos datos, como por ejemplo la distancia hasta la que es capaz de ver la cámara. Teniendo en cuenta la siguiente imagen:</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Trigonómetria-500x333.png" alt="Trigonómetria" title="Trigonometría" width="500" height="333" class="aligncenter size-large wp-image-7202" /></p>
<p>Si la cámara está a una altura <strong>b</strong> del suelo, mirando hacia abajo con un ángulo <strong>α</strong>, sabemos que la hipotenusa es:</p>
<p>c = b/cos(α)</p>
<p>y que la distancia <strong>a</strong> abarcada por la cámara es igual a:</p>
<p>a = c*sen(α) </p>
<p>por tanto la relación entre b y a será:</p>
<p>a = b*sen(α)/cos(α)</p>
<p>Así que con tan solo esos dos datos ya podemos saber muchas cosas. Pero, ¿cómo traducir las distancias que hemos hallado en píxeles a centímetros? Es fácil, ya que si sabemos la altura de la imagen (100 píxeles por ejemplo) y la distancia nos ha dado 50 píxeles, solo tenemos que dividir 50 entre 100, que serán 0.5, y multiplicarlo por a, de forma que nos dará más o menos la distancia equivalente en el mundo real (estamos suponiendo que la imagen abarca todo el plano horizontal cuando no es cierto). En cualquier caso es un método bastante preciso.</p>
<p><strong>Programa de OpenCV:</strong></p>
<p>Para procesar las imágenes usaremos OpenCV, y cuando terminemos guradaremos los datos necesarios en un archivo que moveremos al NXT, y que utilizará nuestro programa en RobotC para esquivar las pelotas. Hemos tomado mediante una cámara situada en el NXT las dos imágenes siguientes:</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/IMG_2401-500x443.jpg" alt="25º" title="25º" width="500" height="443" class="aligncenter size-large wp-image-7214" /><br />
<center><img src="http://blog.electricbricks.com/wp-content/uploads/Imagen030.jpg" alt="Imagen030" title="Imagen030" width="352" height="288" class="aligncenter size-full wp-image-7204" /></center></p>
<p>con la cámara situada a 27 cm del suelo y con una inclinación de 25º, y:</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/IMG_2399-500x491.jpg" alt="50º" title="50º" width="500" height="491" class="aligncenter size-large wp-image-7213" /><br />
<center><img src="http://blog.electricbricks.com/wp-content/uploads/Imagen0311.jpg" alt="Imagen031" title="Imagen031" width="352" height="288" class="aligncenter size-full wp-image-7205" /></center></p>
<p>con la cámara situada a 30 cm del suelo (sube un poco al rotarla), y con una inclinación de 50º. De la primera imagen podemos sacar la distancia aproximada del robot a la primera pelota (supondremos que el robot está situado en el píxel central de la última linea de la imagen). De la segunda imagen podemos sacar la distancia entre las dos pelotas. Ya sabemos como calcular distancias y puntos medios de objetos de determinado color en OpenCV, así como distinguir dos objetos del mismo color. Incluso como escribir los datos en un fichero para que RobotC los entienda (revisad el artículo sobre <a href="http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/">manejo de ficheros en RobotC</a>). El programa completo sería:</p>
<div class="codecolorer-container cpp dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br />198<br />199<br />200<br />201<br />202<br />203<br />204<br />205<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339900;">#include &lt;stdlib.h&gt;</span><br />
<span style="color: #339900;">#include &lt;stdio.h&gt;</span><br />
<span style="color: #339900;">#include &lt;math.h&gt;</span><br />
<span style="color: #339900;">#include &lt;cv.h&gt;</span><br />
<span style="color: #339900;">#include &lt;highgui.h&gt;</span><br />
<span style="color: #339900;">#include &lt;iostream&gt;</span><br />
<span style="color: #339900;">#include &lt;fstream&gt;</span><br />
<br />
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>argv<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
IplImage<span style="color: #000040;">*</span> img <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> altura,anchura,anchura_fila,canales<span style="color: #008080;">;</span><br />
uchar <span style="color: #000040;">*</span>data<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>argc<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Uso: main &lt;nombre_imagen&gt;<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #006699; font-weight: bold;">\7</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000dd;">exit</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #666666;">// cargamos la imagen</span><br />
img<span style="color: #000080;">=</span>cvLoadImage<span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>img<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;No se ha podido cargar la imagen: %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,argv<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000dd;">exit</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #666666;">// cogemos la información de la imagen</span><br />
altura &nbsp; &nbsp;<span style="color: #000080;">=</span> img<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>height<span style="color: #008080;">;</span><br />
anchura &nbsp; &nbsp; <span style="color: #000080;">=</span> img<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>width<span style="color: #008080;">;</span><br />
anchura_fila &nbsp;<span style="color: #000080;">=</span> img<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>widthStep<span style="color: #008080;">;</span><br />
canales &nbsp;<span style="color: #000080;">=</span> img<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>nChannels<span style="color: #008080;">;</span><br />
data &nbsp; &nbsp; &nbsp;<span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>uchar <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>img<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>imageData<span style="color: #008080;">;</span><br />
<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Procesando una imagen de %dx%d píxeles con %d canales<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,<br />
&nbsp; &nbsp; altura, anchura, canales<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// creamos una ventana</span><br />
cvNamedWindow<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;mainWin&quot;</span>, CV_WINDOW_AUTOSIZE<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
cvMoveWindow<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;mainWin&quot;</span>, <span style="color: #0000dd;">100</span>, <span style="color: #0000dd;">100</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// maximos y minimos</span><br />
<br />
<span style="color: #0000ff;">int</span> y_anterior <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">int</span> x1_cont <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> y1_cont <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">int</span> x1_total <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> y1_total <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">int</span> x2_cont <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> y2_cont <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">int</span> x2_total <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> y2_total <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">bool</span> bola1 <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">bool</span> bola2 <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// recorremos la imagen</span><br />
<br />
<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>altura<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;</span>anchura<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
<br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">80</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span><br />
&nbsp; &nbsp; <span style="color: #000040;">!</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#40;</span>data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>bola1 <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>bola2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; bola1 <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; y_anterior <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Punto rojo en %d, %d, valor: %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,j,i,<br />
&nbsp; &nbsp; &nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>y_anterior <span style="color: #000040;">+</span> <span style="color: #0000dd;">20</span> <span style="color: #000080;">&lt;</span> i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; bola1 <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; bola2 <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>bola1<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Bola1<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; y1_total <span style="color: #000080;">=</span> y1_total <span style="color: #000040;">+</span> i<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; x1_total <span style="color: #000080;">=</span> x1_total <span style="color: #000040;">+</span> j<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; y1_cont<span style="color: #000040;">++</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; x1_cont<span style="color: #000040;">++</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">255</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>bola2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Bola2<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; y2_total <span style="color: #000080;">=</span> y1_total <span style="color: #000040;">+</span> i<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; x2_total <span style="color: #000080;">=</span> x1_total <span style="color: #000040;">+</span> j<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; y2_cont<span style="color: #000040;">++</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; x2_cont<span style="color: #000040;">++</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">255</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; y_anterior <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">int</span> x1_medio <span style="color: #000080;">=</span> x1_total <span style="color: #000040;">/</span> x1_cont<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> y1_medio <span style="color: #000080;">=</span> y1_total <span style="color: #000040;">/</span> y1_cont<span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Punto medio bola1 en %d, %d, valor: %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,x1_medio, y1_medio,<br />
&nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">int</span> x2_medio <span style="color: #000080;">=</span> x2_total <span style="color: #000040;">/</span> x2_cont<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> y2_medio <span style="color: #000080;">=</span> y2_total <span style="color: #000040;">/</span> y2_cont<span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Punto medio bola2 en %d, %d, valor: %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,x2_medio, y2_medio,<br />
&nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">float</span> distancia <span style="color: #000080;">=</span> <span style="color: #0000dd;">sqrt</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">pow</span><span style="color: #008000;">&#40;</span>x1_medio <span style="color: #000040;">-</span> x2_medio,<span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">pow</span><span style="color: #008000;">&#40;</span>y1_medio <span style="color: #000040;">-</span> y2_medio,<span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<br />
<span style="color: #666666;">// mostramos la imagen</span><br />
cvShowImage<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;mainWin&quot;</span>, img <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #666666;">// esperamos apretar una tecla</span><br />
cvWaitKey<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// liberar la imagen</span><br />
cvReleaseImage<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>img <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
img<span style="color: #000080;">=</span>cvLoadImage<span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>img<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;No se ha podido cargar la imagen: %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,argv<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000dd;">exit</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #666666;">// cogemos la información de la imagen</span><br />
altura &nbsp; &nbsp;<span style="color: #000080;">=</span> img<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>height<span style="color: #008080;">;</span><br />
anchura &nbsp; &nbsp; <span style="color: #000080;">=</span> img<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>width<span style="color: #008080;">;</span><br />
anchura_fila &nbsp;<span style="color: #000080;">=</span> img<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>widthStep<span style="color: #008080;">;</span><br />
canales &nbsp;<span style="color: #000080;">=</span> img<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>nChannels<span style="color: #008080;">;</span><br />
data &nbsp; &nbsp; &nbsp;<span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>uchar <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>img<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>imageData<span style="color: #008080;">;</span><br />
<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Procesando una imagen de %dx%d píxeles con %d canales<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,<br />
&nbsp; &nbsp; altura, anchura, canales<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// creamos una ventana</span><br />
cvNamedWindow<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;mainWin&quot;</span>, CV_WINDOW_AUTOSIZE<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
cvMoveWindow<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;mainWin&quot;</span>, <span style="color: #0000dd;">100</span>, <span style="color: #0000dd;">100</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// maximos y minimos</span><br />
<br />
<br />
<span style="color: #0000ff;">int</span> x_cont <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> y_cont <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">int</span> x_total <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> y_total <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">//recorremos la imagen</span><br />
<br />
<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>altura<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;</span>anchura<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
<br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">80</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span><br />
&nbsp; &nbsp; <span style="color: #000040;">!</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#40;</span>data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Punto rojo en %d, %d, valor: %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,j,i,<br />
&nbsp; &nbsp; &nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; y_total <span style="color: #000080;">=</span> y_total <span style="color: #000040;">+</span> i<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; x_total <span style="color: #000080;">=</span> x_total <span style="color: #000040;">+</span> j<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; y_cont<span style="color: #000040;">++</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; x_cont<span style="color: #000040;">++</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">255</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales <span style="color: #000040;">+</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">int</span> x_medio <span style="color: #000080;">=</span> x_total <span style="color: #000040;">/</span> x_cont<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> y_medio <span style="color: #000080;">=</span> y_total <span style="color: #000040;">/</span> y_cont<span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Punto medio rojo en %d, %d, valor: %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,x1_medio, y1_medio,<br />
&nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">int</span> xr_medio <span style="color: #000080;">=</span> anchura <span style="color: #000040;">/</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> yr_medio <span style="color: #000080;">=</span> altura <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Punto medio robot en %d, %d, valor: %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,xr_medio, yr_medio,<br />
&nbsp; &nbsp; data<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">*</span>anchura_fila<span style="color: #000040;">+</span>j<span style="color: #000040;">*</span>canales<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">float</span> distancia2 <span style="color: #000080;">=</span> <span style="color: #0000dd;">sqrt</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">pow</span><span style="color: #008000;">&#40;</span>x_medio <span style="color: #000040;">-</span> xr_medio,<span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">pow</span><span style="color: #008000;">&#40;</span>y_medio <span style="color: #000040;">-</span> yr_medio,<span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Distancia entre ambas pelotas: %6.2f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, distancia<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Distancia del robot a la pelota: %6.2f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, distancia2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
ofstream fsalida<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;distancias.dat&quot;</span>, ofstream<span style="color: #008080;">::</span><span style="color: #007788;">out</span> <span style="color: #000040;">|</span> ios<span style="color: #008080;">::</span><span style="color: #007788;">binary</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
fsalida.<span style="color: #007788;">write</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>distancia<span style="color: #008000;">&#41;</span>, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>distancia<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
fsalida.<span style="color: #007788;">write</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>distancia2<span style="color: #008000;">&#41;</span>, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>distancia2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
fsalida.<span style="color: #007788;">close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// mostramos la imagen</span><br />
cvShowImage<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;mainWin&quot;</span>, img <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #666666;">// esperamos apretar una tecla</span><br />
cvWaitKey<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// liberar la imagen</span><br />
cvReleaseImage<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>img <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p>Ya tenemos toda la información que necesitamos dentro de <em>fichero.dat</em>. Ahora necesitaremos mover ese fichero al NXT, para ello podemos utilizar el <em>File Managment</em> de RobotC.</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/IMG_2398-500x259.jpg" alt="IMG_2398" title="IMG_2398" width="500" height="259" class="aligncenter size-large wp-image-7217" /></p>
<p><strong>Programa de RobotC:</strong></p>
<p>El programa de RobotC se encargará de, con los datos recibidos en el fichero de OpenCV, hacer los cálculos necesarios y moverse a lo largo de la línea esquivando las bolas. Para eso necesitamos los siguientes datos: altura y ángulo de la cámara en la primera foto, altura y ángulo de la cámara en la segunda foto, diámetro de la rueda (lo usaremos para saber cuántos cm se mueve el robot), altura de la imagen en píxeles, tamaño del robot en cm., y distancia de seguridad con la bola que necesitamos para realizar el giro para esquivarla. El programa quedaría de la siguiente manera:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333;">const</span> <span style="color: #993333;">string</span> sFileName <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;distancias.dat&quot;</span><span style="color: #339933;">;</span><br />
<br />
TFileIOResult nIoResult<span style="color: #339933;">;</span><br />
TFileHandle hFileHandle<span style="color: #339933;">;</span><br />
<br />
<span style="color: #993333;">int</span> nFileSize<span style="color: #339933;">;</span><br />
<span style="color: #993333;">float</span> altura1 <span style="color: #339933;">=</span> <span style="color: #0000dd;">27</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">float</span> altura2 <span style="color: #339933;">=</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">float</span> grados1 <span style="color: #339933;">=</span> <span style="color: #0000dd;">25</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">float</span> grados2 <span style="color: #339933;">=</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">float</span> diametro_rueda <span style="color: #339933;">=</span> <span style="color: #0000dd;">17</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">float</span> altura_imagen <span style="color: #339933;">=</span> <span style="color: #0000dd;">280</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">float</span> tamano_robot <span style="color: #339933;">=</span> <span style="color: #0000dd;">18</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">float</span> distancia_seg <span style="color: #339933;">=</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #993333;">float</span> FloatData<span style="color: #339933;">;</span><br />
<br />
&nbsp; OpenRead<span style="color: #009900;">&#40;</span>hFileHandle<span style="color: #339933;">,</span> nIoResult<span style="color: #339933;">,</span> sFileName<span style="color: #339933;">,</span> nFileSize<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; ReadFloat<span style="color: #009900;">&#40;</span>hFileHandle<span style="color: #339933;">,</span> nIoResult<span style="color: #339933;">,</span> FloatData<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">3</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Distancia:&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">5</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;%6.2f Pixeles&quot;</span> <span style="color: #339933;">,</span> FloatData<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #993333;">float</span> distancia <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>FloatData<span style="color: #339933;">/</span>altura_imagen<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#40;</span>altura2<span style="color: #339933;">*</span>sinDegrees<span style="color: #009900;">&#40;</span>grados2<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>cosDegrees<span style="color: #009900;">&#40;</span>grados2<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #993333;">float</span> rotacion2 <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>distancia <span style="color: #339933;">-</span> distancia_seg <span style="color: #339933;">-</span> tamano_robot<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">360</span><span style="color: #339933;">/</span>diametro_rueda<span style="color: #339933;">;</span><br />
<br />
&nbsp; ReadFloat<span style="color: #009900;">&#40;</span>hFileHandle<span style="color: #339933;">,</span> nIoResult<span style="color: #339933;">,</span> FloatData<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">3</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Distancia:&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">5</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;%6.2f Pixeles&quot;</span> <span style="color: #339933;">,</span> FloatData<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; distancia <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>FloatData<span style="color: #339933;">/</span>altura_imagen<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#40;</span>altura1<span style="color: #339933;">*</span>sinDegrees<span style="color: #009900;">&#40;</span>grados1<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>cosDegrees<span style="color: #009900;">&#40;</span>grados1<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #993333;">float</span> rotacion1 <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>distancia <span style="color: #339933;">-</span> distancia_seg<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">360</span><span style="color: #339933;">/</span>diametro_rueda<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; Close<span style="color: #009900;">&#40;</span>hFileHandle<span style="color: #339933;">,</span> nIoResult<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>nMotorEncoder<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> rotacion1<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#40;</span>nMotorEncoder<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> rotacion1<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">10</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">40</span><span style="color: #339933;">;</span><br />
&nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">40</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">15</span><span style="color: #339933;">;</span><br />
&nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">40</span><span style="color: #339933;">;</span><br />
&nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">800</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; nMotorEncoder<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; nMotorEncoder<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>nMotorEncoder<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> rotacion2<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#40;</span>nMotorEncoder<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> rotacion2<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">10</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">40</span><span style="color: #339933;">;</span><br />
&nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">40</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">15</span><span style="color: #339933;">;</span><br />
&nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">40</span><span style="color: #339933;">;</span><br />
&nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">800</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Ahora una breve explicación del programa:</p>
<p><strong>1 a 14 -</strong> Declaración e inicialización de variables.</p>
<p><strong>20 a 22 -</strong> Leemos del fichero y mostramos su contenido.</p>
<p><strong>24 -</strong> Hacemos el cálculo de la distancia en cm, tal y como os he puesto en el apartado de trigonometría de este artículo. </p>
<p><strong>26 &#8211; </strong>Para saber cuantos grados necesitamos rotar los motores para que el robot recorra determinada distancia, se multiplica la distancia por 360, y se divide entre el diámetro de las ruedas. Como en este caso es la distancia entre las dos bolas, a la distancia calculada anteriormente necesitamos restarle tanto la longitud del robot como la distancia de seguridad con la bola para poder realizar el giro necesario para esquivarla.</p>
<p><strong>35 -</strong> En este caso es la distancia a la primera bola, por lo que solo le restaremos la distancia de seguridad para esquivarla.</p>
<p><strong>40 a 44 -</strong> Aquí nos movemos hasta la primera bola, rotando los motores el número de grados calculados en la línea 35 del programa.</p>
<p><strong>46 a 60 -</strong> Esta es la maniobra evasiva. Esta programada a mano, sin ningún cálculo, mediante ensayo y error para que el robot quedara justo pegado a la primera bola, entre la primera y la segunda bola. Esta maniobra de evasión variará mucho en función del objeto a esquivar, así como la distancia de seguridad en cm para realizarla.</p>
<p><strong>62 a 66 -</strong> Aquí nos movemos hasta la segunda bola, rotando los motores el número de grados calculados en la línea 26 del programa.</p>
<p><strong>71 a 79 -</strong> Otra maniobra para esquivar la segunda bola.</p>
<p><strong>81 a 82 -</strong> Paramos el robot, y fin del programa</p>
<p>Y ahora os dejo un vídeo demostrativo del programa:</p>
<p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/EAv8VIHYf9E&#038;hl=es_ES&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/EAv8VIHYf9E&#038;hl=es_ES&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="400"></embed></object></p>
<p>Espero que os haya gustado. Se que todo esto es un poco complicado, pero es solo una muestra de las cosas que se pueden hacer con una cámara. En un futuro los LEGO Mindstorms NXT tendrán cámaras, y su manejo será más sencillo que todo esto. Ante cualquier pregunta no dudéis en postear en el foro.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-scriptstyle">
			<a href="http://scriptandstyle.com/submit?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Submit this to Script &amp; Style">Submit this to Script &amp; Style</a>
		</li>
		<li class="sexy-blinklist">
			<a href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;Title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Share this on Blinklist">Share this on Blinklist</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&amp;desc=En%20art%C3%ADculos%20anteriores%20como%20el%20art%C3%ADculo%20sobre%20reconocimiento%20b%C3%A1sico%20de%20objetos%20con%20OpenCV%20y%20el%20art%C3%ADculo%20sobre%20segmentaci%C3%B3n%20b%C3%A1sica%20en%20OpenCV%20hemos%20visto%20como%20detectar%20distintos%20objetos%20de%20color%20determinado%20en%20una%20imagen%2C%20e%20incluso%20calcular%20sus%20puntos%20medios%20y%20distancias%20entre%20ellos.%20En%20el%20art%C3" rel="nofollow" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;submitHeadline=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&amp;submitSummary=En%20art%C3%ADculos%20anteriores%20como%20el%20art%C3%ADculo%20sobre%20reconocimiento%20b%C3%A1sico%20de%20objetos%20con%20OpenCV%20y%20el%20art%C3%ADculo%20sobre%20segmentaci%C3%B3n%20b%C3%A1sica%20en%20OpenCV%20hemos%20visto%20como%20detectar%20distintos%20objetos%20de%20color%20determinado%20en%20una%20imagen%2C%20e%20incluso%20calcular%20sus%20puntos%20medios%20y%20distancias%20entre%20ellos.%20En%20el%20art%C3&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/" rel="nofollow" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;t=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-designfloat">
			<a href="http://www.designfloat.com/submit.php?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Submit this to DesignFloat">Submit this to DesignFloat</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?u=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;t=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC+-+http://b2l.me/uftqt+" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Navegaci%C3%B3n%20esquivando%20obst%C3%A1culos%3A%20RobotC%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22En%20art%C3%ADculos%20anteriores%20como%20el%20art%C3%ADculo%20sobre%20reconocimiento%20b%C3%A1sico%20de%20objetos%20con%20OpenCV%20y%20el%20art%C3%ADculo%20sobre%20segmentaci%C3%B3n%20b%C3%A1sica%20en%20OpenCV%20hemos%20visto%20como%20detectar%20distintos%20objetos%20de%20color%20determinado%20en%20una%20imagen%2C%20e%20incluso%20calcular%20sus%20puntos%20medios%20y%20distancias%20entre%20ellos.%20En%20el%20art%C3%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-tomuse">
			<a href="mailto:tips@tomuse.com?subject=New%20tip%20submitted%20via%20the%20SexyBookmarks%20Plugin!&amp;body=I%20would%20like%20to%20submit%20this%20article%3A%20%22Navegaci%C3%B3n%20esquivando%20obst%C3%A1culos%3A%20RobotC%22%20for%20possible%20inclusion%20on%20ToMuse.%0A%0A%22En%20art%C3%ADculos%20anteriores%20como%20el%20art%C3%ADculo%20sobre%20reconocimiento%20b%C3%A1sico%20de%20objetos%20con%20OpenCV%20y%20el%20art%C3%ADculo%20sobre%20segmentaci%C3%B3n%20b%C3%A1sica%20en%20OpenCV%20hemos%20visto%20como%20detectar%20distintos%20objetos%20de%20color%20determinado%20en%20una%20imagen%2C%20e%20incluso%20calcular%20sus%20puntos%20medios%20y%20distancias%20entre%20ellos.%20En%20el%20art%C3%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/" rel="nofollow" title="Suggest this article to ToMuse">Suggest this article to ToMuse</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&amp;summary=En%20art%C3%ADculos%20anteriores%20como%20el%20art%C3%ADculo%20sobre%20reconocimiento%20b%C3%A1sico%20de%20objetos%20con%20OpenCV%20y%20el%20art%C3%ADculo%20sobre%20segmentaci%C3%B3n%20b%C3%A1sica%20en%20OpenCV%20hemos%20visto%20como%20detectar%20distintos%20objetos%20de%20color%20determinado%20en%20una%20imagen%2C%20e%20incluso%20calcular%20sus%20puntos%20medios%20y%20distancias%20entre%20ellos.%20En%20el%20art%C3&amp;source=electricBricks" rel="nofollow" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-newsvine">
			<a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;h=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Seed this on Newsvine">Seed this on Newsvine</a>
		</li>
		<li class="sexy-devmarks">
			<a href="http://devmarks.com/index.php?posttext=En%20art%C3%ADculos%20anteriores%20como%20el%20art%C3%ADculo%20sobre%20reconocimiento%20b%C3%A1sico%20de%20objetos%20con%20OpenCV%20y%20el%20art%C3%ADculo%20sobre%20segmentaci%C3%B3n%20b%C3%A1sica%20en%20OpenCV%20hemos%20visto%20como%20detectar%20distintos%20objetos%20de%20color%20determinado%20en%20una%20imagen%2C%20e%20incluso%20calcular%20sus%20puntos%20medios%20y%20distancias%20entre%20ellos.%20En%20el%20art%C3&amp;posturl=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;posttitle=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Share this on Devmarks">Share this on Devmarks</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;bm_description=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&amp;plugin=sexybookmarks" rel="nofollow" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="sexy-izeby">
			<a href="http://izeby.com/submit.php?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/" rel="nofollow" title="Add this to Izeby">Add this to Izeby</a>
		</li>
		<li class="sexy-tipd">
			<a href="http://tipd.com/submit.php?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/" rel="nofollow" title="Share this on Tipd">Share this on Tipd</a>
		</li>
		<li class="sexy-pfbuzz">
			<a href="http://pfbuzz.com/submit?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Share this on PFBuzz">Share this on PFBuzz</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&amp;link=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/" rel="nofollow" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-blogmarks">
			<a href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Mark this on BlogMarks">Mark this on BlogMarks</a>
		</li>
		<li class="sexy-twittley">
			<a href="http://twittley.com/submit/?title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&amp;url=http%3A%2F%2Fblog.electricbricks.com%2F2010%2F05%2Fdeteccion-objetos-opencv-robotc%2F&amp;desc=En%20art%C3%ADculos%20anteriores%20como%20el%20art%C3%ADculo%20sobre%20reconocimiento%20b%C3%A1sico%20de%20objetos%20con%20OpenCV%20y%20el%20art%C3%ADculo%20sobre%20segmentaci%C3%B3n%20b%C3%A1sica%20en%20OpenCV%20hemos%20visto%20como%20detectar%20distintos%20objetos%20de%20color%20determinado%20en%20una%20imagen%2C%20e%20incluso%20calcular%20sus%20puntos%20medios%20y%20distancias%20entre%20ellos.%20En%20el%20art%C3&amp;pcat=Technology&amp;tags=" rel="nofollow" title="Submit this to Twittley">Submit this to Twittley</a>
		</li>
		<li class="sexy-fwisp">
			<a href="http://fwisp.com/submit?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/" rel="nofollow" title="Share this on Fwisp">Share this on Fwisp</a>
		</li>
		<li class="sexy-designmoo">
			<a href="http://designmoo.com/submit?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&amp;body=En%20art%C3%ADculos%20anteriores%20como%20el%20art%C3%ADculo%20sobre%20reconocimiento%20b%C3%A1sico%20de%20objetos%20con%20OpenCV%20y%20el%20art%C3%ADculo%20sobre%20segmentaci%C3%B3n%20b%C3%A1sica%20en%20OpenCV%20hemos%20visto%20como%20detectar%20distintos%20objetos%20de%20color%20determinado%20en%20una%20imagen%2C%20e%20incluso%20calcular%20sus%20puntos%20medios%20y%20distancias%20entre%20ellos.%20En%20el%20art%C3" rel="nofollow" title="Moo this on DesignMoo!">Moo this on DesignMoo!</a>
		</li>
		<li class="sexy-bobrdobr">
			<a href="http://bobrdobr.ru/addext.html?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Share this on BobrDobr">Share this on BobrDobr</a>
		</li>
		<li class="sexy-yandex">
			<a href="http://zakladki.yandex.ru/userarea/links/addfromfav.asp?bAddLink_x=1&amp;lurl=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;lname=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Add this to Yandex.Bookmarks">Add this to Yandex.Bookmarks</a>
		</li>
		<li class="sexy-memoryru">
			<a href="http://memori.ru/link/?sm=1&amp;u_data[url]=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;u_data[name]=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Add this to Memory.ru">Add this to Memory.ru</a>
		</li>
		<li class="sexy-100zakladok">
			<a href="http://www.100zakladok.ru/save/?bmurl=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;bmtitle=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Add this to 100 bookmarks">Add this to 100 bookmarks</a>
		</li>
		<li class="sexy-moemesto">
			<a href="http://moemesto.ru/post.php?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Add this to MyPlace">Add this to MyPlace</a>
		</li>
		<li class="sexy-hackernews">
			<a href="http://news.ycombinator.com/submitlink?u=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;t=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Submit this to Hacker News">Submit this to Hacker News</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/" rel="nofollow" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
		<li class="sexy-designbump">
			<a href="http://designbump.com/submit?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&amp;body=En%20art%C3%ADculos%20anteriores%20como%20el%20art%C3%ADculo%20sobre%20reconocimiento%20b%C3%A1sico%20de%20objetos%20con%20OpenCV%20y%20el%20art%C3%ADculo%20sobre%20segmentaci%C3%B3n%20b%C3%A1sica%20en%20OpenCV%20hemos%20visto%20como%20detectar%20distintos%20objetos%20de%20color%20determinado%20en%20una%20imagen%2C%20e%20incluso%20calcular%20sus%20puntos%20medios%20y%20distancias%20entre%20ellos.%20En%20el%20art%C3" rel="nofollow" title="Bump this on DesignBump">Bump this on DesignBump</a>
		</li>
		<li class="sexy-ning">
			<a href="http://bookmarks.ning.com/addItem.php?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;T=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Add this to Ning">Add this to Ning</a>
		</li>
		<li class="sexy-identica">
			<a href="http://identi.ca//index.php?action=newnotice&amp;status_textarea=Reading:+&quot;Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&quot;+-+from+http://b2l.me/uftqt" rel="nofollow" title="Post this to Identica">Post this to Identica</a>
		</li>
		<li class="sexy-xerpi">
			<a href="http://www.xerpi.com/block/add_link_from_extension?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Save this to Xerpi">Save this to Xerpi</a>
		</li>
		<li class="sexy-wikio">
			<a href="http://www.wikio.com/sharethis?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Share this on Wikio">Share this on Wikio</a>
		</li>
		<li class="sexy-techmeme">
			<a href="http://twitter.com/home/?status=Tip+@Techmeme+http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/+&quot;Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&quot;" rel="nofollow" title="Tip this to TechMeme">Tip this to TechMeme</a>
		</li>
		<li class="sexy-sphinn">
			<a href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/" rel="nofollow" title="Sphinn this on Sphinn">Sphinn this on Sphinn</a>
		</li>
		<li class="sexy-posterous">
			<a href="http://posterous.com/share?linkto=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&amp;selection=En%20art%C3%ADculos%20anteriores%20como%20el%20art%C3%ADculo%20sobre%20reconocimiento%20b%C3%A1sico%20de%20objetos%20con%20OpenCV%20y%20el%20art%C3%ADculo%20sobre%20segmentaci%C3%B3n%20b%C3%A1sica%20en%20OpenCV%20hemos%20visto%20como%20detectar%20distintos%20objetos%20de%20color%20determinado%20en%20una%20imagen%2C%20e%20incluso%20calcular%20sus%20puntos%20medios%20y%20distancias%20entre%20ellos.%20En%20el%20art%C3" rel="nofollow" title="Post this to Posterous">Post this to Posterous</a>
		</li>
		<li class="sexy-globalgrind">
			<a href="http://globalgrind.com/submission/submit.aspx?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;type=Article&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Grind this! on Global Grind">Grind this! on Global Grind</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&amp;body=En%20art%C3%ADculos%20anteriores%20como%20el%20art%C3%ADculo%20sobre%20reconocimiento%20b%C3%A1sico%20de%20objetos%20con%20OpenCV%20y%20el%20art%C3%ADculo%20sobre%20segmentaci%C3%B3n%20b%C3%A1sica%20en%20OpenCV%20hemos%20visto%20como%20detectar%20distintos%20objetos%20de%20color%20determinado%20en%20una%20imagen%2C%20e%20incluso%20calcular%20sus%20puntos%20medios%20y%20distancias%20entre%20ellos.%20En%20el%20art%C3" rel="nofollow" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-nujij">
			<a href="http://nujij.nl/jij.lynkx?t=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&amp;u=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;b=En%20art%C3%ADculos%20anteriores%20como%20el%20art%C3%ADculo%20sobre%20reconocimiento%20b%C3%A1sico%20de%20objetos%20con%20OpenCV%20y%20el%20art%C3%ADculo%20sobre%20segmentaci%C3%B3n%20b%C3%A1sica%20en%20OpenCV%20hemos%20visto%20como%20detectar%20distintos%20objetos%20de%20color%20determinado%20en%20una%20imagen%2C%20e%20incluso%20calcular%20sus%20puntos%20medios%20y%20distancias%20entre%20ellos.%20En%20el%20art%C3" rel="nofollow" title="Submit this to NUjij">Submit this to NUjij</a>
		</li>
		<li class="sexy-ekudos">
			<a href="http://www.ekudos.nl/artikel/nieuw?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&amp;desc=En%20art%C3%ADculos%20anteriores%20como%20el%20art%C3%ADculo%20sobre%20reconocimiento%20b%C3%A1sico%20de%20objetos%20con%20OpenCV%20y%20el%20art%C3%ADculo%20sobre%20segmentaci%C3%B3n%20b%C3%A1sica%20en%20OpenCV%20hemos%20visto%20como%20detectar%20distintos%20objetos%20de%20color%20determinado%20en%20una%20imagen%2C%20e%20incluso%20calcular%20sus%20puntos%20medios%20y%20distancias%20entre%20ellos.%20En%20el%20art%C3" rel="nofollow" title="Submit this to eKudos">Submit this to eKudos</a>
		</li>
		<li class="sexy-netvouz">
			<a href="http://www.netvouz.com/action/submitBookmark?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&amp;popup=no" rel="nofollow" title="Submit this to Netvouz">Submit this to Netvouz</a>
		</li>
		<li class="sexy-netvibes">
			<a href="http://www.netvibes.com/share?title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC&amp;url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/" rel="nofollow" title="Submit this to Netvibes">Submit this to Netvibes</a>
		</li>
		<li class="sexy-fleck">
			<a href="http://beta3.fleck.com/bookmarklet.php?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Share this on Fleck">Share this on Fleck</a>
		</li>
		<li class="sexy-blogospherenews">
			<a href="http://www.blogospherenews.com/submit.php?url=http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/&amp;title=Navegaci%C3%B3n+esquivando+obst%C3%A1culos%3A+RobotC" rel="nofollow" title="Share this on Blogosphere News">Share this on Blogosphere News</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://blog.electricbricks.com/2010/05/deteccion-objetos-opencv-robotc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Visión Artificial]]></series:name>
	</item>
		<item>
		<title>NXT Sonar 3D en RobotC con coordenadas esféricas</title>
		<link>http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/</link>
		<comments>http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/#comments</comments>
		<pubDate>Thu, 13 May 2010 13:19:26 +0000</pubDate>
		<dc:creator>Alvaro</dc:creator>
				<category><![CDATA[NXT]]></category>
		<category><![CDATA[RobotC]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[robótica]]></category>

		<guid isPermaLink="false">http://blog.electricbricks.com/?p=7119</guid>
		<description><![CDATA[
El objetivo de este experimento es lograr una representación de la visión que obtiene el robot mediante un movimiento del sonar en dos ejes. Para ello se ha situado al sensor ultrasónico en una plataforma capaz de moverse con dos grados de libertad y se han realizado lecturas medidas en varias posiciones. En este caso [...]]]></description>
			<content:encoded><![CDATA[<ul class="lang_switch"></ul>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Coord_sys-150x145.png" alt="Coord_sys" title="Coord_sys" width="150" height="145" class="alignleft size-thumbnail wp-image-7174" />El objetivo de este experimento es lograr una representación de la visión que obtiene el robot mediante un movimiento del sonar en dos ejes. Para ello se ha situado al sensor ultrasónico en una plataforma capaz de moverse con dos grados de libertad y se han realizado lecturas medidas en varias posiciones. En este caso haremos una representación transformando los datos obtenidos anteriormente a coordenadas esféricas.<span id="more-7119"></span></p>
<p>El objetivo de este artículo es doble: por un lado realizar una representación más acorde a la realidad, puesto que los datos se están capturando mediante un sistema de coordenadas esféricas y la representación que hemos elegido en gnuplot es mediante representación cartesiana. Aprovechando  el hecho de que hemos realizado previamente un artículo sobre <a href="http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/">tratamiento de ficheros en RobotC</a> y de que debemos hacer una transformación de coordenadas, para trabajar ambos conceptos dividiremos el proceso en dos partes:</p>
<ul>
<li>En una primera parte haremos uso del programa implementado en el artículo anterior, <a href="http://blog.electricbricks.com/2010/05/nxt-3d-sonar/">NXT Sonar 3D en RobotC</a>, modificándolo para que escriba la información de las lecturas realizadas en coordenadas esféricas como floats en un fichero.</li>
<li>La segunda parte la realiza un segundo programa que se encarga de leer la información del fichero que ha creado el primero, convertir los datos a coordenadas de esféricas a cartesianas, y crear un segundo fichero que será el que gnuplot leerá y representará.</li>
</ul>
<p><strong>Coordenadas esféricas:</strong></p>
<p>El sistema de coordenadas esféricas se utiliza para determinar la posición espacial de un punto mediante una distancia y dos ángulos. En este caso contamos con esos datos, ya que tenemos los grados que ha girado horizontalmente, la elevación (grados verticales), y la distancia, medida por el sensor de ultrasonidos. Teniendo entonces un punto de la siguiente manera:</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/600px-Spherical_with_grid-500x445.png" alt="Spherical_with_grid" title="Spherical_with_grid" width="500" height="445" class="aligncenter size-large wp-image-7166" /></p>
<p>Podríamos hallar las coordenadas cartesianas (x, y, z) del punto mediante las siguientes formulas:</p>
<p><center><img src="http://blog.electricbricks.com/wp-content/uploads/Coordenas-Esféricas.png" alt="Coordenas Esféricas" title="Coordenas Esféricas" width="450" height="18" class="aligncenter size-full wp-image-7167"/></center></p>
<p>Puesto que RobotC dispone de funciones trigonométricas para hallar senos y cosenos es posible implementar esta conversión.</p>
<p><strong>Modificación del primer programa:</strong></p>
<p>Modificaremos el primer programa para que escriba los datos como float, y así practicaremos lectura y escritura de ficheros (revisad el artículo sobre <a href="http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/">manejo de ficheros en RobotC</a>). La parte del código donde se escribe en el fichero es la siguiente:</p>
<div class="codecolorer-container cpp dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; WriteFloat<span style="color: #008000;">&#40;</span>hFileHandle, nIoResult, <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">float</span><span style="color: #008000;">&#41;</span>angle<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; WriteFloat<span style="color: #008000;">&#40;</span>hFileHandle, nIoResult, <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">float</span><span style="color: #008000;">&#41;</span>elevation<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; WriteFloat<span style="color: #008000;">&#40;</span>hFileHandle, nIoResult, <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">float</span><span style="color: #008000;">&#41;</span>distance_in_cm <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #666666;">//sString = &quot;&quot; + angle + &quot;.0 &quot; + elevation + &quot;.0 &quot; + distance_in_cm + &quot;.0\n&quot;;</span><br />
&nbsp; &nbsp; <span style="color: #666666;">//WriteText(hFileHandle, nIoResult, sString);</span></div></td></tr></tbody></table></div>
<p>La parte que está comentada es lo que teníamos escrito anteriormente. Ahora ya podemos crear nuestro programa que leerá de este archivo y escribirá los datos ya procesados en uno nuevo.</p>
<p><strong>Programa de conversión de coordenadas esféricas a cartesianas:</strong></p>
<p>Este programa lee datos de tipo float de un archivo, calcula las correspondientes coordenadas (x, y, z) , y las escribe en un nuevo archivo de texto que gnuplot sea capaz de interpretar. El código es el siguiente:</p>
<div class="codecolorer-container cpp dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">const</span> string nombre_fichero1 <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;DatosRadar3D.dat&quot;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">const</span> string nombre_fichero2 <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;NDatosRadar3D.dat&quot;</span><span style="color: #008080;">;</span><br />
TFileIOResult error_IO<span style="color: #008080;">;</span><br />
TFileHandle fichero1<span style="color: #008080;">;</span><br />
TFileHandle fichero2<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> tamano <span style="color: #000080;">=</span> <span style="color: #0000dd;">40000</span><span style="color: #008080;">;</span><br />
<br />
task main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp;<span style="color: #0000ff;">float</span> x, y, z<span style="color: #008080;">;</span><br />
&nbsp;<span style="color: #0000ff;">float</span> distance_in_cm, elevation, angle<span style="color: #008080;">;</span><br />
<br />
&nbsp; Delete<span style="color: #008000;">&#40;</span>nombre_fichero2, error_IO<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; OpenWrite<span style="color: #008000;">&#40;</span>fichero2, error_IO, nombre_fichero2, tamano<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; OpenRead<span style="color: #008000;">&#40;</span>fichero1, error_IO, nombre_fichero1, tamano<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
&nbsp; <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;=</span> <span style="color: #0000dd;">1025</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; ReadFloat<span style="color: #008000;">&#40;</span>fichero1, error_IO, angle<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; ReadFloat<span style="color: #008000;">&#40;</span>fichero1, error_IO, elevation<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; ReadFloat<span style="color: #008000;">&#40;</span>fichero1, error_IO, distance_in_cm<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>distance_in_cm <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">255</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; x <span style="color: #000080;">=</span> distance_in_cm<span style="color: #000040;">*</span>cosDegrees<span style="color: #008000;">&#40;</span>elevation<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>cosDegrees<span style="color: #008000;">&#40;</span>angle<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; y <span style="color: #000080;">=</span> distance_in_cm<span style="color: #000040;">*</span>cosDegrees<span style="color: #008000;">&#40;</span>elevation<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>sinDegrees<span style="color: #008000;">&#40;</span>angle<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; z <span style="color: #000080;">=</span> distance_in_cm<span style="color: #000040;">*</span>sinDegrees<span style="color: #008000;">&#40;</span>elevation<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; string cadena<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; cadena <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>x <span style="color: #000040;">+</span> <span style="color: #FF0000;">&quot; &quot;</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>y <span style="color: #000040;">+</span> <span style="color: #FF0000;">&quot; &quot;</span> <span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>z <span style="color: #000040;">+</span> <span style="color: #FF0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; WriteText <span style="color: #008000;">&#40;</span>fichero2, error_IO, cadena<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
Close<span style="color: #008000;">&#40;</span>fichero1, error_IO<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
Close<span style="color: #008000;">&#40;</span>fichero2, error_IO<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p>Ahora una explicación de algunas líneas:</p>
<p><strong>12 -</strong> Borramos el archivo, para que al abrirlo cree uno nuevo y vacío.</p>
<p><strong>13 y 14 -</strong> Abrimos tanto para lectura el que tiene los datos, como para escritura el que vamos a crear.</p>
<p><strong>16 -</strong> Este bucle nos asegura que leeremos el fichero entero, ya que sabiendo que tenemos 40 lecturas horizontales por 25 lecturas verticales.</p>
<p><strong>20 &#8211; </strong>Aquí realizamos un filtrado que tiene por objeto eliminar las medidas que hayan podido ser erróneas (eliminamos los 255).</p>
<p><strong>21 a 23 -</strong> Hacemos la transformación de coordenadas esféricas a cartesianas.</p>
<p><strong>24 a 26 &#8211; </strong>Y finalmente las escribimos en el nuevo fichero.</p>
<p>Ya solo nos queda representar los datos que hemos calculado con el gnuplot.</p>
<p><strong>Representación con el gnuplot:</strong></p>
<p>Hemos puesto a nuestro radar enfrente de un enorme camión de LEGO, y después de pasarle el radar3D, y usar el nuevo programa para convertir las coordenadas esféricas estamos listos para representarlo. Lo primero que hay que hacer es descargar el archivo del NXT, y emplazarlo en la carpeta <em>binary </em>del gnuplot. Una vez hecho esto ejecutamos el <em>wgnuplot.exe</em>, se abrirá una ventana donde tenemos que copiar estos datos:</p>
<div class="codecolorer-container gnuplot dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td><div class="gnuplot codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">set</span> <span style="color: #990000;">title</span> <span style="color: #0000ff;">&quot;Lecturas del sensor ultrasónico&quot;</span><br />
<span style="color: #b1b100;">unset</span> <span style="color: #990000;">hidden3d</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">ticslevel</span> <span style="color: #cc66cc;">2.0</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">view</span> <span style="color: #cc66cc;">38</span><span style="color: #000; font-weight: bold;">,</span><span style="color: #cc66cc;">45</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">autoscale</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">parametric</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">style</span> data <span style="color: #448888;">lines</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">key</span> <span style="color: #448888;">box</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">dgrid3d</span> <span style="color: #cc66cc;">30</span><span style="color: #000; font-weight: bold;">,</span><span style="color: #cc66cc;">30</span><span style="color: #000; font-weight: bold;">,</span><span style="color: #cc66cc;">100</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">xlabel</span> <span style="color: #0000ff;">&quot;www.electricBricks.com&quot;</span><br />
<span style="color: #b1b100;">splot</span> <span style="color: #0000ff;">&quot;NDatosRadar3D.dat&quot;</span><br />
<span style="color: #b1b100;">pause</span> <span style="color: #000; font-weight: bold;">-</span><span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">&quot;Hit return to continue (1)&quot;</span><br />
<span style="color: #b1b100;">reset</span></div></td></tr></tbody></table></div>
<p><strong>11 &#8211; </strong>Aquí es donde va el nombre de vuestro archivo.</p>
<p>Si todo sale bien os saldrá una gráfica, donde se verá más o menos representado el objeto que hubiese enfrente del NXT. En nuestro caso sale lo siguiente:</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Representacion_Grafica-500x325.jpg" alt="Representacion_Grafica" title="Representacion_Grafica" width="500" height="325" class="aligncenter size-large wp-image-7177" /></p>
<p>Se ve el perfil del camión, con su altura aproximada de 30cm y posicionado en diagonal.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-scriptstyle">
			<a href="http://scriptandstyle.com/submit?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Submit this to Script &amp; Style">Submit this to Script &amp; Style</a>
		</li>
		<li class="sexy-blinklist">
			<a href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;Title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Share this on Blinklist">Share this on Blinklist</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&amp;desc=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po" rel="nofollow" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;submitHeadline=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&amp;submitSummary=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/" rel="nofollow" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;t=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-designfloat">
			<a href="http://www.designfloat.com/submit.php?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Submit this to DesignFloat">Submit this to DesignFloat</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?u=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;t=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas+-+http://b2l.me/uaa66+" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22NXT%20Sonar%203D%20en%20RobotC%20con%20coordenadas%20esf%C3%A9ricas%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-tomuse">
			<a href="mailto:tips@tomuse.com?subject=New%20tip%20submitted%20via%20the%20SexyBookmarks%20Plugin!&amp;body=I%20would%20like%20to%20submit%20this%20article%3A%20%22NXT%20Sonar%203D%20en%20RobotC%20con%20coordenadas%20esf%C3%A9ricas%22%20for%20possible%20inclusion%20on%20ToMuse.%0A%0A%22El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/" rel="nofollow" title="Suggest this article to ToMuse">Suggest this article to ToMuse</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&amp;summary=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po&amp;source=electricBricks" rel="nofollow" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-newsvine">
			<a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;h=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Seed this on Newsvine">Seed this on Newsvine</a>
		</li>
		<li class="sexy-devmarks">
			<a href="http://devmarks.com/index.php?posttext=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po&amp;posturl=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;posttitle=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Share this on Devmarks">Share this on Devmarks</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;bm_description=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&amp;plugin=sexybookmarks" rel="nofollow" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="sexy-izeby">
			<a href="http://izeby.com/submit.php?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/" rel="nofollow" title="Add this to Izeby">Add this to Izeby</a>
		</li>
		<li class="sexy-tipd">
			<a href="http://tipd.com/submit.php?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/" rel="nofollow" title="Share this on Tipd">Share this on Tipd</a>
		</li>
		<li class="sexy-pfbuzz">
			<a href="http://pfbuzz.com/submit?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Share this on PFBuzz">Share this on PFBuzz</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&amp;link=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/" rel="nofollow" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-blogmarks">
			<a href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Mark this on BlogMarks">Mark this on BlogMarks</a>
		</li>
		<li class="sexy-twittley">
			<a href="http://twittley.com/submit/?title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&amp;url=http%3A%2F%2Fblog.electricbricks.com%2F2010%2F05%2Fnxt-sonar-3d-robotc-coordenadas-esfericas%2F&amp;desc=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po&amp;pcat=Technology&amp;tags=" rel="nofollow" title="Submit this to Twittley">Submit this to Twittley</a>
		</li>
		<li class="sexy-fwisp">
			<a href="http://fwisp.com/submit?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/" rel="nofollow" title="Share this on Fwisp">Share this on Fwisp</a>
		</li>
		<li class="sexy-designmoo">
			<a href="http://designmoo.com/submit?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&amp;body=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po" rel="nofollow" title="Moo this on DesignMoo!">Moo this on DesignMoo!</a>
		</li>
		<li class="sexy-bobrdobr">
			<a href="http://bobrdobr.ru/addext.html?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Share this on BobrDobr">Share this on BobrDobr</a>
		</li>
		<li class="sexy-yandex">
			<a href="http://zakladki.yandex.ru/userarea/links/addfromfav.asp?bAddLink_x=1&amp;lurl=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;lname=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Add this to Yandex.Bookmarks">Add this to Yandex.Bookmarks</a>
		</li>
		<li class="sexy-memoryru">
			<a href="http://memori.ru/link/?sm=1&amp;u_data[url]=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;u_data[name]=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Add this to Memory.ru">Add this to Memory.ru</a>
		</li>
		<li class="sexy-100zakladok">
			<a href="http://www.100zakladok.ru/save/?bmurl=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;bmtitle=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Add this to 100 bookmarks">Add this to 100 bookmarks</a>
		</li>
		<li class="sexy-moemesto">
			<a href="http://moemesto.ru/post.php?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Add this to MyPlace">Add this to MyPlace</a>
		</li>
		<li class="sexy-hackernews">
			<a href="http://news.ycombinator.com/submitlink?u=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;t=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Submit this to Hacker News">Submit this to Hacker News</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/" rel="nofollow" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
		<li class="sexy-designbump">
			<a href="http://designbump.com/submit?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&amp;body=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po" rel="nofollow" title="Bump this on DesignBump">Bump this on DesignBump</a>
		</li>
		<li class="sexy-ning">
			<a href="http://bookmarks.ning.com/addItem.php?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;T=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Add this to Ning">Add this to Ning</a>
		</li>
		<li class="sexy-identica">
			<a href="http://identi.ca//index.php?action=newnotice&amp;status_textarea=Reading:+&quot;NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&quot;+-+from+http://b2l.me/uaa66" rel="nofollow" title="Post this to Identica">Post this to Identica</a>
		</li>
		<li class="sexy-xerpi">
			<a href="http://www.xerpi.com/block/add_link_from_extension?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Save this to Xerpi">Save this to Xerpi</a>
		</li>
		<li class="sexy-wikio">
			<a href="http://www.wikio.com/sharethis?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Share this on Wikio">Share this on Wikio</a>
		</li>
		<li class="sexy-techmeme">
			<a href="http://twitter.com/home/?status=Tip+@Techmeme+http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/+&quot;NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&quot;" rel="nofollow" title="Tip this to TechMeme">Tip this to TechMeme</a>
		</li>
		<li class="sexy-sphinn">
			<a href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/" rel="nofollow" title="Sphinn this on Sphinn">Sphinn this on Sphinn</a>
		</li>
		<li class="sexy-posterous">
			<a href="http://posterous.com/share?linkto=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&amp;selection=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po" rel="nofollow" title="Post this to Posterous">Post this to Posterous</a>
		</li>
		<li class="sexy-globalgrind">
			<a href="http://globalgrind.com/submission/submit.aspx?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;type=Article&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Grind this! on Global Grind">Grind this! on Global Grind</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&amp;body=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po" rel="nofollow" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-nujij">
			<a href="http://nujij.nl/jij.lynkx?t=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&amp;u=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;b=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po" rel="nofollow" title="Submit this to NUjij">Submit this to NUjij</a>
		</li>
		<li class="sexy-ekudos">
			<a href="http://www.ekudos.nl/artikel/nieuw?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&amp;desc=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po" rel="nofollow" title="Submit this to eKudos">Submit this to eKudos</a>
		</li>
		<li class="sexy-netvouz">
			<a href="http://www.netvouz.com/action/submitBookmark?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&amp;popup=no" rel="nofollow" title="Submit this to Netvouz">Submit this to Netvouz</a>
		</li>
		<li class="sexy-netvibes">
			<a href="http://www.netvibes.com/share?title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas&amp;url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/" rel="nofollow" title="Submit this to Netvibes">Submit this to Netvibes</a>
		</li>
		<li class="sexy-fleck">
			<a href="http://beta3.fleck.com/bookmarklet.php?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Share this on Fleck">Share this on Fleck</a>
		</li>
		<li class="sexy-blogospherenews">
			<a href="http://www.blogospherenews.com/submit.php?url=http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/&amp;title=NXT+Sonar+3D+en+RobotC+con+coordenadas+esf%C3%A9ricas" rel="nofollow" title="Share this on Blogosphere News">Share this on Blogosphere News</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://blog.electricbricks.com/2010/05/nxt-sonar-3d-robotc-coordenadas-esfericas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[RobotC]]></series:name>
	</item>
		<item>
		<title>Manejo de Ficheros en RobotC</title>
		<link>http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/</link>
		<comments>http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/#comments</comments>
		<pubDate>Wed, 12 May 2010 11:10:30 +0000</pubDate>
		<dc:creator>Alvaro</dc:creator>
				<category><![CDATA[NXT]]></category>
		<category><![CDATA[RobotC]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[robótica]]></category>

		<guid isPermaLink="false">http://blog.electricbricks.com/?p=7073</guid>
		<description><![CDATA[
English

Una de las funcionalidades más pobres, peor implementadas, y con menor documentación de RobotC es el manejo de ficheros. El manejo de ficheros es una herramienta muy útil que nos puede servir para guardar información y usarla con otros programas, independientemente de su lenguaje de programación. Por tanto es la universalidad de los ficheros la [...]]]></description>
			<content:encoded><![CDATA[<ul class="lang_switch">
<li class="lang_switch"><a href="http://blog.electricbricks.com/en/2010/05/manejo-ficheros-robotc/"><img src="http://blog.electricbricks.com/wp-content/plugins/zdmultilang/flags/en_US.png" alt="English" title="English" border="0">English</a></li>
</ul>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/file-150x120.jpg" alt="" title="" width="150" height="120" class="alignleft size-thumbnail wp-image-7127"/>Una de las funcionalidades más pobres, peor implementadas, y con menor documentación de RobotC es el manejo de ficheros. El manejo de ficheros es una herramienta muy útil que nos puede servir para guardar información y usarla con otros programas, independientemente de su lenguaje de programación. Por tanto es la universalidad de los ficheros la que nos permitiría comunicar RobotC con otro programa de cualquier lenguaje. Sin embargo los creadores de RobotC no vieron está utilidad cómo algo importante, y por tanto no han implementado la funcionalidad necesaria para el correcto manejo de ficheros.<span id="more-7073"></span></p>
<p><strong>Apertura y cierre de ficheros:</strong></p>
<p>Antes de poder operar con un fichero es necesario abrirlo. En la mayoria de lenguajes de programación hay dos modos de apertura, modo <strong>lectura</strong> y modo <strong>escritura</strong>. Abrimos en modo lectura si queremos leer la información que hay en el archivo, sin modificarlo. Abrimos en modo escritura si queremos escribir en el archivo, modificando su contenido.</p>
<p><span style="color: #3366ff;"><strong><span style="color: #0000ff;">OpenRead</span></strong></span><strong>(fichero, error, nombre_fichero, tamaño_fichero) </strong>:  Abre el fichero con el nombre indicado en modo lectura. En tamaño_fichero tenemos que indicar el tamaño del fichero. La variable error será distinta de 0 si ha habido algún error a la hora de abrir el fichero. A partir de que este abierto trabajaremos con el fichero usando el nombre que le hayamos dado a la variable <em>fichero.</em></p>
<p><em><span style="font-style: normal;"><strong>Nota: </strong>La variable fichero es de tipo </span>TFileHandle<span style="font-style: normal;">, y la variable error es de tipo </span>TFileIOResult<span style="font-style: normal;">. </span></em></p>
<p><em><span style="font-style: normal;"><span style="color: #3366ff;"><strong><span style="color: #0000ff;">OpenWrite</span></strong></span><strong>(fichero, error, nombre_fichero, tamaño_fichero) </strong>: En este caso se abre el fichero en modo escritura. En caso de que el fichero no exista se crea automáticamente, y si existe se borra su contenido antes de empezar a escribir.</span></em></p>
<p><span style="color: #3366ff;"><strong><span style="color: #0000ff;">Close</span></strong></span><strong>(fichero, error) </strong>: Cierra el fichero. Como siempre la variable error nos indicará si ha habido algún problema, en este caso a la hora de cerrar el fichero.</p>
<p><em><span style="font-style: normal;">Es <strong>muy importante</strong> cerrar los ficheros cuando hemos acabado de usarlos, o podrían generar errores la próxima vez que queramos utilizarlos.</span></em></p>
<p><strong>Lectura de ficheros:</strong></p>
<p>En RobotC hay diversas funciones para leer de ficheros, se diferencian principalmente en el tipo de dato que leen. Para que la lectura sea correcta el dato tiene que haber sido escrito con el mismo tipo que vamos a leer. El principal problema de RobotC es que no tiene capacidad de leer <strong>strings</strong>, lo que es un gran problema a la hora de tratar de leer archivos con strings. Las funciones para leer de archivos en RobotC son las siguientes:</p>
<p><strong><span style="color: #0000ff;">ReadByte</span>(fichero, error, nParm):</strong> Lee una variable tipo <em>byte</em> (8-bit) del fichero especificado. El valor de la variable <em>error</em> es distinto de cero si ocurre algún error de lectura.</p>
<p><span style="color: #0000ff;"><strong><span style="color: #0000ff;">ReadFloat</span></strong></span><strong>(fichero, error, fParm): </strong>Lee una variable tipo <em>float</em> del fichero especificado.  El valor de la variable <em>error</em> es distinto de cero si ocurre algún error de lectura.</p>
<p><span style="color: #0000ff;"><strong><span style="color: #0000ff;">ReadLong</span></strong></span><strong>(fichero, error, nParm): </strong>Lee una variable tipo <em>long </em>(32-bit) del fichero especificado.  El valor de la variable<em>error</em> es distinto de cero si ocurre algún error de lectura.</p>
<p><span style="color: #0000ff;"><strong><span style="color: #0000ff;">ReadShort</span></strong></span><strong>(fichero, nIoResult, nParm): </strong>Lee una variable tipo <em>short</em>(16-bit) del fichero especificado.  El valor de la variable<em>error</em> es distinto de cero si ocurre algún error de lectura.</p>
<p>Estas funciones solo nos servirán a la hora de leer variables que hayamos escrito con la función de escritura correspondiente que escriba el mismo tipo de dato en el fichero. Hay que ser muy cuidadoso a la hora de escribir ficheros en otros lenguajes de programación para que los lea RobotC, ya que muchas veces no funcionará. Los más compatibles serán lógicamente C y C++.</p>
<p><strong>Escritura de ficheros:</strong></p>
<p>Al contrario que con la lectura, sí se pueden escribir ficheros con strings, lo cuál nos ayudará bastante a la hora de usar datos capturados por RobotC con otro programa (por ejemplo dibujar gráficas con el gnuplot). Otros tipos de datos escritos por RobotC pueden ser leídos por RobotC con la función de lectura correspondiente, o por otros lenguajes de programación. Las funciones para la escritura en ficheros en RobotC son:</p>
<p><span style="color: #0000ff;"><strong><span style="color: #0000ff;">WriteByte</span></strong></span><strong>(fichero, error, nParm):</strong> Escribe un byte en el fichero especificado. El valor de la variable <em>error</em> es distinto de cero cuando existe algún error de escritura.</p>
<p><span style="color: #0000ff;"><strong><span style="color: #0000ff;">WriteFloat</span></strong></span><strong>(fichero, error, fParm):</strong> Escribe un float en el fichero especificado. El valor de la variable <em>error</em> es distinto de cero cuando existe algún error de escritura.</p>
<p><span style="color: #0000ff;"><strong><span style="color: #0000ff;">WriteLong</span></strong></span><strong>(fichero, error, nParm): </strong>Escribe un long (32-bit) en el fichero especificado. El valor de la variable <em>error</em> es distinto de cero cuando existe algún error de escritura.</p>
<p><span style="color: #0000ff;"><strong><span style="color: #0000ff;">WriteShort</span></strong></span><strong>(fichero, error, nParm):</strong> Escribe un short (16-bit) en el fichero especificado. El valor de la variable <em>error</em> es distinto de cero cuando existe algún error de escritura.</p>
<p><span style="color: #0000ff;"><strong><span style="color: #0000ff;">WriteString</span></strong></span><strong>(fichero, error, sParm):</strong> Escribe una cadena de texto con el terminador null en el fichero especificado. El valor de la variable <em>error</em> es distinto de cero cuando existe algún error de escritura.</p>
<p><strong><span style="color: #0000ff;">WriteText</span>(fichero, error, sParm):</strong> Escribe una cadena de texto sin el terminador null en el fichero especificado. El valor de la variable <em>error</em> es distinto de cero cuando existe algún error de escritura.</p>
<p>La escritura de ficheros en RobotC esta más desarrollada que la lectura, lo que potencia la compatibilidad e itercambio de datos con otros programas. Aún así es curioso que el manejo de ficheros en RobotC sea más limitado que en NXT-G, cuando NXT-G debería ser mucho más limitado en este aspecto.</p>
<p><strong>¿Qué escribe RobotC en los ficheros?:</strong></p>
<p>Para ver qué escribe RobotC en los ficheros hemos hecho unas pruebas: escribimos ficheros con las distintas funciones de RobotC, y luego vemos su contenido con un editor hexadecimal. Los resultados son los siguientes:</p>
<p><span style="color: #0000ff;"><span style="color: #0000ff;">WriteByte</span></span>(fichero, error, (<span style="color: #0000ff;">byte</span><strong><span style="font-weight: normal;">)  &#8221;a&#8221;):</span></strong></p>
<p><img class="aligncenter size-full wp-image-7105" title="hex1" src="http://blog.electricbricks.com/wp-content/uploads/hex1.JPG" alt="hex1" width="473" height="46" /></p>
<p>Veamos cómo efectivamente escribe un byte (8 bits)</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 1460px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">ff</div>
<p><span style="color: #0000ff;"><span style="color: #0000ff;">WriteFloat</span></span>(fichero, error, (<span style="color: #0000ff;">float</span>) 17.0):</p>
<p><img class="aligncenter size-full wp-image-7106" title="hex2" src="http://blog.electricbricks.com/wp-content/uploads/hex2.JPG" alt="hex2" width="482" height="47"/></p>
<p>Vemos que los float ocupan unos 32 bits (4 bytes).</p>
<p><strong><span style="font-weight: normal;"><span style="color: #0000ff;"><span style="color: #0000ff;">WriteFloat</span></span>(fichero, error, (<span style="color: #0000ff;">float</span>) 1.5):</span></strong><br />
<strong><span style="font-weight: normal;"><span style="color: #0000ff;"><span style="color: #0000ff;">WriteFloat</span></span>(fichero, error, (<span style="color: #0000ff;">float</span>) 1.5):</span></strong></p>
<p><img class="aligncenter size-full wp-image-7107" title="hex3" src="http://blog.electricbricks.com/wp-content/uploads/hex3.JPG" alt="hex3" width="506" height="46"/></p>
<p>Entre float y float no se escribe ningún byte, sino que van seguidos. A la hora de leerlos simplemente se leerán 32 bits y se interpretarán. Esto sucede también con todos los demás tipos de escritura.</p>
<p><span style="color: #0000ff;"><span style="color: #0000ff;">WriteLong</span></span>(fichero, error, (<span style="color: #0000ff;">long</span>) 17):</p>
<p><img class="aligncenter size-full wp-image-7108" title="hex4" src="http://blog.electricbricks.com/wp-content/uploads/hex4.JPG" alt="hex4" width="472" height="40" /></p>
<p>Los long también se componen de 32 bits como vimos en su definición.</p>
<p><span style="color: #0000ff;"><span style="color: #0000ff;">WriteShort</span></span>(fichero, error, (<span style="color: #0000ff;">short</span>) 17):</p>
<p><img class="aligncenter size-full wp-image-7109" title="hex5" src="http://blog.electricbricks.com/wp-content/uploads/hex5.JPG" alt="hex5" width="472" height="44" /></p>
<p>Así como los short se componen de solo 16 bits (la mitad).</p>
<p><span style="color: #0000ff;"><span style="color: #0000ff;">WriteString</span></span>(fichero, error,<span style="color: #ff0000;"> </span><span style="color: #ff6600;">&#8220;hola&#8221;</span>):</p>
<p><img class="aligncenter size-full wp-image-7110" title="hex6" src="http://blog.electricbricks.com/wp-content/uploads/hex6.JPG" alt="hex6" width="472" height="42" /></p>
<p>Se escribe hola, a byte por carácter, añadiendo el null al final (el byte 00).</p>
<p><span style="color: #0000ff;">WriteText</span>(fichero, error, <span style="color: #ff6600;">&#8220;hola&#8221;</span>):</p>
<p><img class="aligncenter size-full wp-image-7111" title="hex7" src="http://blog.electricbricks.com/wp-content/uploads/hex7.JPG" alt="hex7" width="475" height="42" /></p>
<p>Aquí podemos ver cómo WriteText no escribe el carácter null al final de cada cadena de texto.</p>
<p><strong>Cómo escribir ficheros en C++ para leerlos en RobotC:</strong></p>
<p><strong><span style="font-weight: normal;">Para escribir datos en un fichero de tipo float, long &#8230; necesitaremos crear un archivo de tipo binario. Luego necesitaremos escribir en dicho fichero haciendo un <em>casting</em> especial, indicando el tipo de archivo que vamos a escribir, y su tamaño. Por último cerraremos el fichero. El código que escribe un float en un fichero binario capaz de ser leído por RobotC sería así:</span></strong></p>
<div class="codecolorer-container cpp dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">float</span> numero <span style="color: #000080;">=</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span><br />
ofstream fsalida<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;numero.dat&quot;</span>, ofstream<span style="color: #008080;">::</span><span style="color: #007788;">out</span> <span style="color: #000040;">|</span> ios<span style="color: #008080;">::</span><span style="color: #007788;">binary</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
fsalida.<span style="color: #007788;">write</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>gt<span style="color: #008080;">;</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>amp<span style="color: #008080;">;</span>numero<span style="color: #008000;">&#41;</span>, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>numero<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
fsalida.<span style="color: #007788;">close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></div></td></tr></tbody></table></div>
<p>Espero que os haya gustado el artículo, ante cualquier duda podéis preguntar en el <a href="http://www.electricbricks.com/forum/index.php?topic=416.0">foro</a>, que para eso estamos.</p>
<p>P.D.: Este artículo hace referencia a la versión 2.02 de RobotC, la versión más actualizada a fecha de publicación de este artículo.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-scriptstyle">
			<a href="http://scriptandstyle.com/submit?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Submit this to Script &amp; Style">Submit this to Script &amp; Style</a>
		</li>
		<li class="sexy-blinklist">
			<a href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;Title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Share this on Blinklist">Share this on Blinklist</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+&amp;desc=EnglishUna%20de%20las%20funcionalidades%20m%C3%A1s%20pobres%2C%20peor%20implementadas%2C%20y%20con%20menor%20documentaci%C3%B3n%20de%20RobotC%20es%20el%20manejo%20de%20ficheros.%20El%20manejo%20de%20ficheros%20es%20una%20herramienta%20muy%20%C3%BAtil%20que%20nos%20puede%20servir%20para%20guardar%20informaci%C3%B3n%20y%20usarla%20con%20otros%20programas%2C%20independientemente%20de%20su%20lenguaje%20de%20progr" rel="nofollow" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;submitHeadline=Manejo+de+Ficheros+en+RobotC+&amp;submitSummary=EnglishUna%20de%20las%20funcionalidades%20m%C3%A1s%20pobres%2C%20peor%20implementadas%2C%20y%20con%20menor%20documentaci%C3%B3n%20de%20RobotC%20es%20el%20manejo%20de%20ficheros.%20El%20manejo%20de%20ficheros%20es%20una%20herramienta%20muy%20%C3%BAtil%20que%20nos%20puede%20servir%20para%20guardar%20informaci%C3%B3n%20y%20usarla%20con%20otros%20programas%2C%20independientemente%20de%20su%20lenguaje%20de%20progr&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/" rel="nofollow" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;t=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-designfloat">
			<a href="http://www.designfloat.com/submit.php?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Submit this to DesignFloat">Submit this to DesignFloat</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?u=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;t=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Manejo+de+Ficheros+en+RobotC++-+http://b2l.me/t3yfx+" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Manejo%20de%20Ficheros%20en%20RobotC%20%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22EnglishUna%20de%20las%20funcionalidades%20m%C3%A1s%20pobres%2C%20peor%20implementadas%2C%20y%20con%20menor%20documentaci%C3%B3n%20de%20RobotC%20es%20el%20manejo%20de%20ficheros.%20El%20manejo%20de%20ficheros%20es%20una%20herramienta%20muy%20%C3%BAtil%20que%20nos%20puede%20servir%20para%20guardar%20informaci%C3%B3n%20y%20usarla%20con%20otros%20programas%2C%20independientemente%20de%20su%20lenguaje%20de%20progr%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-tomuse">
			<a href="mailto:tips@tomuse.com?subject=New%20tip%20submitted%20via%20the%20SexyBookmarks%20Plugin!&amp;body=I%20would%20like%20to%20submit%20this%20article%3A%20%22Manejo%20de%20Ficheros%20en%20RobotC%20%22%20for%20possible%20inclusion%20on%20ToMuse.%0A%0A%22EnglishUna%20de%20las%20funcionalidades%20m%C3%A1s%20pobres%2C%20peor%20implementadas%2C%20y%20con%20menor%20documentaci%C3%B3n%20de%20RobotC%20es%20el%20manejo%20de%20ficheros.%20El%20manejo%20de%20ficheros%20es%20una%20herramienta%20muy%20%C3%BAtil%20que%20nos%20puede%20servir%20para%20guardar%20informaci%C3%B3n%20y%20usarla%20con%20otros%20programas%2C%20independientemente%20de%20su%20lenguaje%20de%20progr%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/" rel="nofollow" title="Suggest this article to ToMuse">Suggest this article to ToMuse</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+&amp;summary=EnglishUna%20de%20las%20funcionalidades%20m%C3%A1s%20pobres%2C%20peor%20implementadas%2C%20y%20con%20menor%20documentaci%C3%B3n%20de%20RobotC%20es%20el%20manejo%20de%20ficheros.%20El%20manejo%20de%20ficheros%20es%20una%20herramienta%20muy%20%C3%BAtil%20que%20nos%20puede%20servir%20para%20guardar%20informaci%C3%B3n%20y%20usarla%20con%20otros%20programas%2C%20independientemente%20de%20su%20lenguaje%20de%20progr&amp;source=electricBricks" rel="nofollow" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-newsvine">
			<a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;h=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Seed this on Newsvine">Seed this on Newsvine</a>
		</li>
		<li class="sexy-devmarks">
			<a href="http://devmarks.com/index.php?posttext=EnglishUna%20de%20las%20funcionalidades%20m%C3%A1s%20pobres%2C%20peor%20implementadas%2C%20y%20con%20menor%20documentaci%C3%B3n%20de%20RobotC%20es%20el%20manejo%20de%20ficheros.%20El%20manejo%20de%20ficheros%20es%20una%20herramienta%20muy%20%C3%BAtil%20que%20nos%20puede%20servir%20para%20guardar%20informaci%C3%B3n%20y%20usarla%20con%20otros%20programas%2C%20independientemente%20de%20su%20lenguaje%20de%20progr&amp;posturl=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;posttitle=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Share this on Devmarks">Share this on Devmarks</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;bm_description=Manejo+de+Ficheros+en+RobotC+&amp;plugin=sexybookmarks" rel="nofollow" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="sexy-izeby">
			<a href="http://izeby.com/submit.php?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/" rel="nofollow" title="Add this to Izeby">Add this to Izeby</a>
		</li>
		<li class="sexy-tipd">
			<a href="http://tipd.com/submit.php?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/" rel="nofollow" title="Share this on Tipd">Share this on Tipd</a>
		</li>
		<li class="sexy-pfbuzz">
			<a href="http://pfbuzz.com/submit?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Share this on PFBuzz">Share this on PFBuzz</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Manejo+de+Ficheros+en+RobotC+&amp;link=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/" rel="nofollow" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-blogmarks">
			<a href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Mark this on BlogMarks">Mark this on BlogMarks</a>
		</li>
		<li class="sexy-twittley">
			<a href="http://twittley.com/submit/?title=Manejo+de+Ficheros+en+RobotC+&amp;url=http%3A%2F%2Fblog.electricbricks.com%2F2010%2F05%2Fmanejo-ficheros-robotc%2F&amp;desc=EnglishUna%20de%20las%20funcionalidades%20m%C3%A1s%20pobres%2C%20peor%20implementadas%2C%20y%20con%20menor%20documentaci%C3%B3n%20de%20RobotC%20es%20el%20manejo%20de%20ficheros.%20El%20manejo%20de%20ficheros%20es%20una%20herramienta%20muy%20%C3%BAtil%20que%20nos%20puede%20servir%20para%20guardar%20informaci%C3%B3n%20y%20usarla%20con%20otros%20programas%2C%20independientemente%20de%20su%20lenguaje%20de%20progr&amp;pcat=Technology&amp;tags=" rel="nofollow" title="Submit this to Twittley">Submit this to Twittley</a>
		</li>
		<li class="sexy-fwisp">
			<a href="http://fwisp.com/submit?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/" rel="nofollow" title="Share this on Fwisp">Share this on Fwisp</a>
		</li>
		<li class="sexy-designmoo">
			<a href="http://designmoo.com/submit?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+&amp;body=EnglishUna%20de%20las%20funcionalidades%20m%C3%A1s%20pobres%2C%20peor%20implementadas%2C%20y%20con%20menor%20documentaci%C3%B3n%20de%20RobotC%20es%20el%20manejo%20de%20ficheros.%20El%20manejo%20de%20ficheros%20es%20una%20herramienta%20muy%20%C3%BAtil%20que%20nos%20puede%20servir%20para%20guardar%20informaci%C3%B3n%20y%20usarla%20con%20otros%20programas%2C%20independientemente%20de%20su%20lenguaje%20de%20progr" rel="nofollow" title="Moo this on DesignMoo!">Moo this on DesignMoo!</a>
		</li>
		<li class="sexy-bobrdobr">
			<a href="http://bobrdobr.ru/addext.html?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Share this on BobrDobr">Share this on BobrDobr</a>
		</li>
		<li class="sexy-yandex">
			<a href="http://zakladki.yandex.ru/userarea/links/addfromfav.asp?bAddLink_x=1&amp;lurl=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;lname=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Add this to Yandex.Bookmarks">Add this to Yandex.Bookmarks</a>
		</li>
		<li class="sexy-memoryru">
			<a href="http://memori.ru/link/?sm=1&amp;u_data[url]=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;u_data[name]=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Add this to Memory.ru">Add this to Memory.ru</a>
		</li>
		<li class="sexy-100zakladok">
			<a href="http://www.100zakladok.ru/save/?bmurl=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;bmtitle=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Add this to 100 bookmarks">Add this to 100 bookmarks</a>
		</li>
		<li class="sexy-moemesto">
			<a href="http://moemesto.ru/post.php?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Add this to MyPlace">Add this to MyPlace</a>
		</li>
		<li class="sexy-hackernews">
			<a href="http://news.ycombinator.com/submitlink?u=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;t=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Submit this to Hacker News">Submit this to Hacker News</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/" rel="nofollow" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
		<li class="sexy-designbump">
			<a href="http://designbump.com/submit?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+&amp;body=EnglishUna%20de%20las%20funcionalidades%20m%C3%A1s%20pobres%2C%20peor%20implementadas%2C%20y%20con%20menor%20documentaci%C3%B3n%20de%20RobotC%20es%20el%20manejo%20de%20ficheros.%20El%20manejo%20de%20ficheros%20es%20una%20herramienta%20muy%20%C3%BAtil%20que%20nos%20puede%20servir%20para%20guardar%20informaci%C3%B3n%20y%20usarla%20con%20otros%20programas%2C%20independientemente%20de%20su%20lenguaje%20de%20progr" rel="nofollow" title="Bump this on DesignBump">Bump this on DesignBump</a>
		</li>
		<li class="sexy-ning">
			<a href="http://bookmarks.ning.com/addItem.php?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;T=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Add this to Ning">Add this to Ning</a>
		</li>
		<li class="sexy-identica">
			<a href="http://identi.ca//index.php?action=newnotice&amp;status_textarea=Reading:+&quot;Manejo+de+Ficheros+en+RobotC+&quot;+-+from+http://b2l.me/t3yfx" rel="nofollow" title="Post this to Identica">Post this to Identica</a>
		</li>
		<li class="sexy-xerpi">
			<a href="http://www.xerpi.com/block/add_link_from_extension?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Save this to Xerpi">Save this to Xerpi</a>
		</li>
		<li class="sexy-wikio">
			<a href="http://www.wikio.com/sharethis?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Share this on Wikio">Share this on Wikio</a>
		</li>
		<li class="sexy-techmeme">
			<a href="http://twitter.com/home/?status=Tip+@Techmeme+http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/+&quot;Manejo+de+Ficheros+en+RobotC+&quot;" rel="nofollow" title="Tip this to TechMeme">Tip this to TechMeme</a>
		</li>
		<li class="sexy-sphinn">
			<a href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/" rel="nofollow" title="Sphinn this on Sphinn">Sphinn this on Sphinn</a>
		</li>
		<li class="sexy-posterous">
			<a href="http://posterous.com/share?linkto=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+&amp;selection=EnglishUna%20de%20las%20funcionalidades%20m%C3%A1s%20pobres%2C%20peor%20implementadas%2C%20y%20con%20menor%20documentaci%C3%B3n%20de%20RobotC%20es%20el%20manejo%20de%20ficheros.%20El%20manejo%20de%20ficheros%20es%20una%20herramienta%20muy%20%C3%BAtil%20que%20nos%20puede%20servir%20para%20guardar%20informaci%C3%B3n%20y%20usarla%20con%20otros%20programas%2C%20independientemente%20de%20su%20lenguaje%20de%20progr" rel="nofollow" title="Post this to Posterous">Post this to Posterous</a>
		</li>
		<li class="sexy-globalgrind">
			<a href="http://globalgrind.com/submission/submit.aspx?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;type=Article&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Grind this! on Global Grind">Grind this! on Global Grind</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+&amp;body=EnglishUna%20de%20las%20funcionalidades%20m%C3%A1s%20pobres%2C%20peor%20implementadas%2C%20y%20con%20menor%20documentaci%C3%B3n%20de%20RobotC%20es%20el%20manejo%20de%20ficheros.%20El%20manejo%20de%20ficheros%20es%20una%20herramienta%20muy%20%C3%BAtil%20que%20nos%20puede%20servir%20para%20guardar%20informaci%C3%B3n%20y%20usarla%20con%20otros%20programas%2C%20independientemente%20de%20su%20lenguaje%20de%20progr" rel="nofollow" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-nujij">
			<a href="http://nujij.nl/jij.lynkx?t=Manejo+de+Ficheros+en+RobotC+&amp;u=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;b=EnglishUna%20de%20las%20funcionalidades%20m%C3%A1s%20pobres%2C%20peor%20implementadas%2C%20y%20con%20menor%20documentaci%C3%B3n%20de%20RobotC%20es%20el%20manejo%20de%20ficheros.%20El%20manejo%20de%20ficheros%20es%20una%20herramienta%20muy%20%C3%BAtil%20que%20nos%20puede%20servir%20para%20guardar%20informaci%C3%B3n%20y%20usarla%20con%20otros%20programas%2C%20independientemente%20de%20su%20lenguaje%20de%20progr" rel="nofollow" title="Submit this to NUjij">Submit this to NUjij</a>
		</li>
		<li class="sexy-ekudos">
			<a href="http://www.ekudos.nl/artikel/nieuw?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+&amp;desc=EnglishUna%20de%20las%20funcionalidades%20m%C3%A1s%20pobres%2C%20peor%20implementadas%2C%20y%20con%20menor%20documentaci%C3%B3n%20de%20RobotC%20es%20el%20manejo%20de%20ficheros.%20El%20manejo%20de%20ficheros%20es%20una%20herramienta%20muy%20%C3%BAtil%20que%20nos%20puede%20servir%20para%20guardar%20informaci%C3%B3n%20y%20usarla%20con%20otros%20programas%2C%20independientemente%20de%20su%20lenguaje%20de%20progr" rel="nofollow" title="Submit this to eKudos">Submit this to eKudos</a>
		</li>
		<li class="sexy-netvouz">
			<a href="http://www.netvouz.com/action/submitBookmark?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+&amp;popup=no" rel="nofollow" title="Submit this to Netvouz">Submit this to Netvouz</a>
		</li>
		<li class="sexy-netvibes">
			<a href="http://www.netvibes.com/share?title=Manejo+de+Ficheros+en+RobotC+&amp;url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/" rel="nofollow" title="Submit this to Netvibes">Submit this to Netvibes</a>
		</li>
		<li class="sexy-fleck">
			<a href="http://beta3.fleck.com/bookmarklet.php?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Share this on Fleck">Share this on Fleck</a>
		</li>
		<li class="sexy-blogospherenews">
			<a href="http://www.blogospherenews.com/submit.php?url=http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/&amp;title=Manejo+de+Ficheros+en+RobotC+" rel="nofollow" title="Share this on Blogosphere News">Share this on Blogosphere News</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://blog.electricbricks.com/2010/05/manejo-ficheros-robotc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[RobotC]]></series:name>
	</item>
		<item>
		<title>NXT Sonar 3D en RobotC</title>
		<link>http://blog.electricbricks.com/2010/05/nxt-3d-sonar/</link>
		<comments>http://blog.electricbricks.com/2010/05/nxt-3d-sonar/#comments</comments>
		<pubDate>Mon, 03 May 2010 14:53:29 +0000</pubDate>
		<dc:creator>electricbricks</dc:creator>
				<category><![CDATA[NXT]]></category>
		<category><![CDATA[RobotC]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[robótica]]></category>

		<guid isPermaLink="false">http://blog.electricbricks.com/?p=3054</guid>
		<description><![CDATA[
El objetivo de este experimento es lograr una representación de la visión que obtiene el robot mediante un movimiento del sonar en dos ejes. Para ello se ha situado al sensor ultrasónico en una plataforma capaz de moverse con dos grados de libertad y se han realizado lecturas medidas en varias posiciones.
Dado que la posición [...]]]></description>
			<content:encoded><![CDATA[<ul class="lang_switch"></ul>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Gráfica_-150x116.jpg" alt="Gráfica_" title="" width="150" height="116" class="alignleft size-thumbnail wp-image-6813" />El objetivo de este experimento es lograr una representación de la visión que obtiene el robot mediante un movimiento del sonar en dos ejes. Para ello se ha situado al sensor ultrasónico en una plataforma capaz de moverse con dos grados de libertad y se han realizado lecturas medidas en varias posiciones.<span id="more-3054"></span></p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/hyperboloide.png" alt="hyperboloide" title="hyperboloide" width="203" height="228" class="alignright size-full wp-image-3063" />Dado que la posición del robot que sostiene el sensor es fija y sólo se trabaja con movimientos de ángulo horizontal y vertical del mismo, si tomamos las lecturas del robot enfrentado a una pared y las representamos deberíamos obtener una figura similar a una de las hojas de un hiperboloide de dos hojas. Como el alcance del sensor es limitado, esta figura será truncada por el alcance del sensor. Existirán además otras distorsiones derivadas de la dependencia que tiene la medida de la distancia con ángulo con el que la superficie se enfrenta al sensor.</p>
<p>Desafortunadamente la teoría anterior no se traduce tan fácilmente en resultados acordes. El motivo es que la distancia devuelta por el sensor ultrasónico se basa en el principio del tiempo de vuelo, pero las ondas de sonido emitidas por el sonar no siempre rebotan en la superficie más cercana y vuelven directamente. La dirección de reflexión dependerá de varios factores, como las características de la superficie sobre la que se refleja el sonido y el ángulo de incidencia entre el haz de sonido y la superficie. Si el ángulo entre el haz y la superficie es muy bajo y la superficie es lisa, es probable que el haz no vuelva al emisor sino que siga otro camino alejándose (es lo que se denomina reflexión especular), por lo que si vuelve en algún momento al emisor, la distancia que interpretará el sonar no será la distancia correcta existente entre el sonar y la superficie, sino mayor. En el peor de los casos el haz se perderá y no tendremos ninguna lectura de distancia. Este problema puede desaparecer si la superficie con la que se encuentra es rugosa porque al llegar el haz a la misma se producen reflexiones irregulares y en este contexto es más probable que alguno de esos haces dispersos sea devuelto directamente al emisor, proporcionando una lectura correcta.</p>
<p>Vista la limitación anterior, una forma de obtener medidas estadísticamente más correctas sería alterar el medio en el que opera el robot y cubrirlo con una capa rugosa. Podríamos emplear para ello papel de lija, por ejemplo, forrando las superficies sobre las esperamos que incida el haz ultrasónico. Esto puede ser factible en un entorno conocido y controlado o con fines educativos, como cuando hacemos experimentos dentro de un laberinto, pero en un entorno &#8220;real&#8221; será prácticamente imposible, como por ejemplo si tratamos de medir el fondo marino.</p>
<p>Como la sugerencia de alterar el entorno no es posible en la práctica, nos vemos forzados a solucionar el problema de dos modos posibles, bien incrementando el hardware y trabajando con un array de sensores desfasados que realizan medidas sobre un mismo objeto, o bien complicando el programa que interpreta los datos recibidos: la idea en este segundo caso sería realizar un procesado posterior sobre las medidas que el robot fuera tomando y, almacenando dichas medidas, aceptar como válidas aquellas que fuesen variando de forma paulatina. Esta técnica puede ser combinada con ciertas acciones, como forzando al robot a tomar medidas sobre un mismo punto desde diferentes ángulos en zonas con discontinuidades o incongruencias [1]. Por ejemplo: si nos acercamos hacia una supuesta pared, las medidas recibidas deberán ir reduciéndose y, si no es así, podríamos tomar las medidas como incorrectas o revisar la suposición de la existencia de dicha pared.</p>
<p>Otra forma posible de elevar la garantía de las medidas en un proceso de localización del robot es combinando las lecturas del sonar con las de un segundo dispositivo, como por ejemplo un sistema de visión.</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/scaner_2d_2_-500x375.jpg" alt="scaner_2d_2_" title="scaner 2D www.electricbricks.com" width="500" height="375" class="aligncenter size-large wp-image-6811" /></p>
<p>La siguiente es una vista típica de un sonar en dos dimensiones en la que el robot estaría situado en el triángulo rojo. Nos fijamos en que muchas de las dimensiones crecen en líneas que siguen la dirección de un radio que partiría del robot.</p>
<p><center><a href="http://blog.electricbricks.com/wp-content/uploads/vista_sonar.jpg"><img src="http://blog.electricbricks.com/wp-content/uploads/vista_sonar.jpg" alt="vista de sonar" title="vista de sonar" width="403" height="336" class="aligncenter size-full wp-image-4071" /></a></center></p>
<p>En el diagrama anterior podemos ver varias zonas en las que se producen saltos bruscos de medidas de distancia, como el señalado con la flecha azul: es bastante sensato pensar que la discontinuidad en la medida entre la parte superior de la zona señalada por el extremo de la línea azul y la parte inferior de la misma sea debida a una reflexión especular. Para confirmar la medida de esa zona podría ser necesario desplazar el robot a una posición como la señalada por el triángulo verde y volver a tomar la medida desde un angulo diferente.</p>
<p>Para el siguiente programa, implementado en <a href="http://blog.electricbricks.com/?s=robotC">robotC</a>, se debe tener en cuenta que el motor A es el encargado de realizar el barrido horizontal, mientras que el motor B es el que proporciona la elevación. En cada barrido horizontal se realizan tantas lecturas como indique el parámetro nr_h_readings, mientras que el parámetro nr_v_readings indica el número de barridos horizontales realizar. Si int nr_v_readings = 1 transformamos el radar 3D en un radar 2D.</p>
<p>Cada una de las lecturas del sensor ultrasónico, situado en el puerto 1 según el programa, se almacena en una línea del fichero de texto testfile.dat. Para que la representación mediante gnuplot sea correcta, en cada una de las líneas del fichero mencionado se incluyen, junto al valor de la lectura de distancia del sensor, las coordenadas de ángulo y elevación.</p>
<p>El siguiente es el inicio del fichero con unas lecturas a modo de ejemplo:</p>
<p>1.0 1.0 39.0<br />
2.0 1.0 39.0<br />
3.0 1.0 39.0<br />
4.0 1.0 39.0<br />
5.0 1.0 38.0</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#pragma config(Sensor, S4, sonarSensor, sensorSONAR)</span><br />
<span style="color: #666666; font-style: italic;">//*!!Code automatically generated by 'ROBOTC' configuration wizard!!*//</span><br />
<span style="color: #666666; font-style: italic;">//</span><br />
<span style="color: #666666; font-style: italic;">// www.electricbricks.com</span><br />
<span style="color: #666666; font-style: italic;">//</span><br />
<br />
<span style="color: #993333;">const</span> <span style="color: #993333;">string</span> sFileName <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;testfile.dat&quot;</span><span style="color: #339933;">;</span><br />
TFileIOResult nIoResult<span style="color: #339933;">;</span><br />
TFileHandle hFileHandle<span style="color: #339933;">;</span><br />
<span style="color: #993333;">int</span> nFileSize <span style="color: #339933;">=</span> <span style="color: #0000dd;">40000</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">string</span> sString<span style="color: #339933;">;</span><br />
<br />
<span style="color: #993333;">task</span> <span style="color: #993333;">main</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp;<span style="color: #993333;">int</span> distance_in_cm<span style="color: #339933;">;</span><br />
&nbsp;<span style="color: #993333;">int</span> increment_h <span style="color: #339933;">=</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// step increment for angle and elevation</span><br />
&nbsp;<span style="color: #993333;">int</span> increment_v <span style="color: #339933;">=</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// step increment for angle and elevation</span><br />
&nbsp;<span style="color: #993333;">int</span> nr_h_readings <span style="color: #339933;">=</span> <span style="color: #0000dd;">40</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// number of horizontal readings</span><br />
&nbsp;<span style="color: #993333;">int</span> nr_v_readings <span style="color: #339933;">=</span> <span style="color: #0000dd;">25</span><span style="color: #339933;">;</span> &nbsp;<span style="color: #666666; font-style: italic;">// number of horizontal lines</span><br />
<br />
&nbsp;nMotorEncoder<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Reset Motor A Encoder</span><br />
&nbsp;nMotorEncoder<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Reset Motor B Encoder</span><br />
<br />
Delete<span style="color: #009900;">&#40;</span>sFileName<span style="color: #339933;">,</span> nIoResult<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
OpenWrite<span style="color: #009900;">&#40;</span>hFileHandle<span style="color: #339933;">,</span> nIoResult<span style="color: #339933;">,</span> sFileName<span style="color: #339933;">,</span> nFileSize<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> angle <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> angle <span style="color: #339933;">&lt;=</span> nr_h_readings<span style="color: #339933;">*</span>increment_h<span style="color: #339933;">;</span> angle <span style="color: #339933;">=</span> angle <span style="color: #339933;">+</span> increment_h<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> elevation <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> elevation <span style="color: #339933;">&lt;=</span> nr_v_readings<span style="color: #339933;">*</span>increment_v<span style="color: #339933;">;</span> elevation <span style="color: #339933;">=</span> elevation <span style="color: #339933;">+</span> increment_v<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>nMotorEncoder<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> elevation<span style="color: #009900;">&#41;</span> &nbsp;<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">20</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// Motor A is sincinc</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; distance_in_cm <span style="color: #339933;">=</span> SensorValue<span style="color: #009900;">&#91;</span>sonarSensor<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">4</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Distancia: %d&quot;</span><span style="color: #339933;">,</span> distance_in_cm<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; sString <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #339933;">+</span> angle <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot;.0 &quot;</span> <span style="color: #339933;">+</span> elevation <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot;.0 &quot;</span> <span style="color: #339933;">+</span> distance_in_cm <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot;.0<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; WriteText<span style="color: #009900;">&#40;</span>hFileHandle<span style="color: #339933;">,</span> nIoResult<span style="color: #339933;">,</span> sString<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>nMotorEncoder<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> angle<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">20</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #666666; font-style: italic;">//return motor A:</span><br />
&nbsp; <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>nMotorEncoder<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> &nbsp;<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">10</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #666666; font-style: italic;">//return motor B:</span><br />
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>nMotorEncoder<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> &nbsp;<span style="color: #009900;">&#123;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">10</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<br />
<br />
Close<span style="color: #009900;">&#40;</span>hFileHandle<span style="color: #339933;">,</span> nIoResult<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Los datos se graban en un fichero que, finalizada la ejecución del programa, debe ser enviado posteriormente al PC para su representación gráfica. La aplicación que hemos empleado para representar los datos leídos es <a href="http://gnuplot.sourceforge.net/">gnuplot</a> y el programa encargado de ello es el siguiente:</p>
<div class="codecolorer-container gnuplot dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="gnuplot codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #adadad; font-style: italic;">#</span><br />
<span style="color: #adadad; font-style: italic;"># Representación de las lecturas del lector ultrasónico</span><br />
<span style="color: #adadad; font-style: italic;">#</span><br />
<span style="color: #adadad; font-style: italic;"># www.electricbricks.com</span><br />
<span style="color: #adadad; font-style: italic;">#</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">title</span> <span style="color: #0000ff;">&quot;Lecturas del sensor ultrasónico&quot;</span><br />
<span style="color: #b1b100;">unset</span> <span style="color: #990000;">hidden3d</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">ticslevel</span> <span style="color: #cc66cc;">2.0</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">view</span> <span style="color: #cc66cc;">38</span><span style="color: #000; font-weight: bold;">,</span><span style="color: #cc66cc;">45</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">autoscale</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">parametric</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">style</span> data <span style="color: #448888;">lines</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">key</span> <span style="color: #448888;">box</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">dgrid3d</span> <span style="color: #cc66cc;">30</span><span style="color: #000; font-weight: bold;">,</span><span style="color: #cc66cc;">30</span><span style="color: #000; font-weight: bold;">,</span><span style="color: #cc66cc;">100</span><br />
<span style="color: #b1b100;">set</span> <span style="color: #990000;">xlabel</span> <span style="color: #0000ff;">&quot;www.electricBricks.com&quot;</span><br />
<span style="color: #b1b100;">splot</span> <span style="color: #0000ff;">&quot;testfile.dat&quot;</span><br />
<span style="color: #b1b100;">pause</span> <span style="color: #000; font-weight: bold;">-</span><span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">&quot;Hit return to continue (1)&quot;</span><br />
<span style="color: #b1b100;">reset</span></div></td></tr></tbody></table></div>
<p>Os ponemos un vídeo del proceso de escaneo, acelerado <strong>3x</strong>. El robot de la parte inferior es el que realiza el escaneo del modelo TETRIX que tiene enfrente. </p>
<p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/PW9qqTIm9IA&#038;hl=es_ES&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/PW9qqTIm9IA&#038;hl=es_ES&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="400"></embed></object></p>
<p>Y un vídeo que muestra los resultados del escáner en gnuplot. La depresión que vemos en el gráfico representa la zona en la que se está encontrando al robot Tetrix. La parte plana superior se corresponde a las medidas devueltas con valor 255, valor que devuelve el sensor cuando la distancia está fuera de rango, por lo que esas zonas medidas hay que descartarlas o interpretarlas como fuera de rango.</p>
<p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/MzCJctrlWXw&#038;hl=es_ES&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/MzCJctrlWXw&#038;hl=es_ES&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="400"></embed></object></p>
<p><em>Nota: Dado que todos los datos se toman desde el mismo punto, lo ideal sería representar la gráfica en coordenadas esféricas y filtrando las mediciones erróneas de 255, pero por simplicidad se ha realizado una representación cartesiana, cuyos valores habría que corregir. Como una primera representación aproximada puede ser suficiente, puesto que no es ése el objetivo de este artículo.</em></p>
<p>Información adicional:</p>
<ul>
<li>A Method of  Ultrasonic Sensor Data Integration for Floorplan Recognition, Joong Hyup Ko, et al.</li>
</ul>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-scriptstyle">
			<a href="http://scriptandstyle.com/submit?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Submit this to Script &amp; Style">Submit this to Script &amp; Style</a>
		</li>
		<li class="sexy-blinklist">
			<a href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;Title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Share this on Blinklist">Share this on Blinklist</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC&amp;desc=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po" rel="nofollow" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;submitHeadline=NXT+Sonar+3D+en+RobotC&amp;submitSummary=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/" rel="nofollow" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;t=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-designfloat">
			<a href="http://www.designfloat.com/submit.php?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Submit this to DesignFloat">Submit this to DesignFloat</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?u=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;t=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=NXT+Sonar+3D+en+RobotC+-+http://b2l.me/srfvg+" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22NXT%20Sonar%203D%20en%20RobotC%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/05/nxt-3d-sonar/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-tomuse">
			<a href="mailto:tips@tomuse.com?subject=New%20tip%20submitted%20via%20the%20SexyBookmarks%20Plugin!&amp;body=I%20would%20like%20to%20submit%20this%20article%3A%20%22NXT%20Sonar%203D%20en%20RobotC%22%20for%20possible%20inclusion%20on%20ToMuse.%0A%0A%22El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/05/nxt-3d-sonar/" rel="nofollow" title="Suggest this article to ToMuse">Suggest this article to ToMuse</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.electricbricks.com/2010/05/nxt-3d-sonar/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC&amp;summary=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po&amp;source=electricBricks" rel="nofollow" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-newsvine">
			<a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;h=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Seed this on Newsvine">Seed this on Newsvine</a>
		</li>
		<li class="sexy-devmarks">
			<a href="http://devmarks.com/index.php?posttext=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po&amp;posturl=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;posttitle=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Share this on Devmarks">Share this on Devmarks</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;bm_description=NXT+Sonar+3D+en+RobotC&amp;plugin=sexybookmarks" rel="nofollow" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="sexy-izeby">
			<a href="http://izeby.com/submit.php?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/" rel="nofollow" title="Add this to Izeby">Add this to Izeby</a>
		</li>
		<li class="sexy-tipd">
			<a href="http://tipd.com/submit.php?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/" rel="nofollow" title="Share this on Tipd">Share this on Tipd</a>
		</li>
		<li class="sexy-pfbuzz">
			<a href="http://pfbuzz.com/submit?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Share this on PFBuzz">Share this on PFBuzz</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=NXT+Sonar+3D+en+RobotC&amp;link=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/" rel="nofollow" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-blogmarks">
			<a href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Mark this on BlogMarks">Mark this on BlogMarks</a>
		</li>
		<li class="sexy-twittley">
			<a href="http://twittley.com/submit/?title=NXT+Sonar+3D+en+RobotC&amp;url=http%3A%2F%2Fblog.electricbricks.com%2F2010%2F05%2Fnxt-3d-sonar%2F&amp;desc=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po&amp;pcat=Technology&amp;tags=" rel="nofollow" title="Submit this to Twittley">Submit this to Twittley</a>
		</li>
		<li class="sexy-fwisp">
			<a href="http://fwisp.com/submit?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/" rel="nofollow" title="Share this on Fwisp">Share this on Fwisp</a>
		</li>
		<li class="sexy-designmoo">
			<a href="http://designmoo.com/submit?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC&amp;body=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po" rel="nofollow" title="Moo this on DesignMoo!">Moo this on DesignMoo!</a>
		</li>
		<li class="sexy-bobrdobr">
			<a href="http://bobrdobr.ru/addext.html?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Share this on BobrDobr">Share this on BobrDobr</a>
		</li>
		<li class="sexy-yandex">
			<a href="http://zakladki.yandex.ru/userarea/links/addfromfav.asp?bAddLink_x=1&amp;lurl=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;lname=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Add this to Yandex.Bookmarks">Add this to Yandex.Bookmarks</a>
		</li>
		<li class="sexy-memoryru">
			<a href="http://memori.ru/link/?sm=1&amp;u_data[url]=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;u_data[name]=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Add this to Memory.ru">Add this to Memory.ru</a>
		</li>
		<li class="sexy-100zakladok">
			<a href="http://www.100zakladok.ru/save/?bmurl=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;bmtitle=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Add this to 100 bookmarks">Add this to 100 bookmarks</a>
		</li>
		<li class="sexy-moemesto">
			<a href="http://moemesto.ru/post.php?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Add this to MyPlace">Add this to MyPlace</a>
		</li>
		<li class="sexy-hackernews">
			<a href="http://news.ycombinator.com/submitlink?u=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;t=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Submit this to Hacker News">Submit this to Hacker News</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/" rel="nofollow" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
		<li class="sexy-designbump">
			<a href="http://designbump.com/submit?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC&amp;body=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po" rel="nofollow" title="Bump this on DesignBump">Bump this on DesignBump</a>
		</li>
		<li class="sexy-ning">
			<a href="http://bookmarks.ning.com/addItem.php?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;T=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Add this to Ning">Add this to Ning</a>
		</li>
		<li class="sexy-identica">
			<a href="http://identi.ca//index.php?action=newnotice&amp;status_textarea=Reading:+&quot;NXT+Sonar+3D+en+RobotC&quot;+-+from+http://b2l.me/srfvg" rel="nofollow" title="Post this to Identica">Post this to Identica</a>
		</li>
		<li class="sexy-xerpi">
			<a href="http://www.xerpi.com/block/add_link_from_extension?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Save this to Xerpi">Save this to Xerpi</a>
		</li>
		<li class="sexy-wikio">
			<a href="http://www.wikio.com/sharethis?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Share this on Wikio">Share this on Wikio</a>
		</li>
		<li class="sexy-techmeme">
			<a href="http://twitter.com/home/?status=Tip+@Techmeme+http://blog.electricbricks.com/2010/05/nxt-3d-sonar/+&quot;NXT+Sonar+3D+en+RobotC&quot;" rel="nofollow" title="Tip this to TechMeme">Tip this to TechMeme</a>
		</li>
		<li class="sexy-sphinn">
			<a href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/" rel="nofollow" title="Sphinn this on Sphinn">Sphinn this on Sphinn</a>
		</li>
		<li class="sexy-posterous">
			<a href="http://posterous.com/share?linkto=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC&amp;selection=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po" rel="nofollow" title="Post this to Posterous">Post this to Posterous</a>
		</li>
		<li class="sexy-globalgrind">
			<a href="http://globalgrind.com/submission/submit.aspx?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;type=Article&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Grind this! on Global Grind">Grind this! on Global Grind</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC&amp;body=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po" rel="nofollow" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-nujij">
			<a href="http://nujij.nl/jij.lynkx?t=NXT+Sonar+3D+en+RobotC&amp;u=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;b=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po" rel="nofollow" title="Submit this to NUjij">Submit this to NUjij</a>
		</li>
		<li class="sexy-ekudos">
			<a href="http://www.ekudos.nl/artikel/nieuw?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC&amp;desc=El%20objetivo%20de%20este%20experimento%20es%20lograr%20una%20representaci%C3%B3n%20de%20la%20visi%C3%B3n%20que%20obtiene%20el%20robot%20mediante%20un%20movimiento%20del%20sonar%20en%20dos%20ejes.%20Para%20ello%20se%20ha%20situado%20al%20sensor%20ultras%C3%B3nico%20en%20una%20plataforma%20capaz%20de%20moverse%20con%20dos%20grados%20de%20libertad%20y%20se%20han%20realizado%20lecturas%20medidas%20en%20varias%20po" rel="nofollow" title="Submit this to eKudos">Submit this to eKudos</a>
		</li>
		<li class="sexy-netvouz">
			<a href="http://www.netvouz.com/action/submitBookmark?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC&amp;popup=no" rel="nofollow" title="Submit this to Netvouz">Submit this to Netvouz</a>
		</li>
		<li class="sexy-netvibes">
			<a href="http://www.netvibes.com/share?title=NXT+Sonar+3D+en+RobotC&amp;url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/" rel="nofollow" title="Submit this to Netvibes">Submit this to Netvibes</a>
		</li>
		<li class="sexy-fleck">
			<a href="http://beta3.fleck.com/bookmarklet.php?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Share this on Fleck">Share this on Fleck</a>
		</li>
		<li class="sexy-blogospherenews">
			<a href="http://www.blogospherenews.com/submit.php?url=http://blog.electricbricks.com/2010/05/nxt-3d-sonar/&amp;title=NXT+Sonar+3D+en+RobotC" rel="nofollow" title="Share this on Blogosphere News">Share this on Blogosphere News</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://blog.electricbricks.com/2010/05/nxt-3d-sonar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vehículos de Braitenberg en RobotC</title>
		<link>http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/</link>
		<comments>http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 16:22:53 +0000</pubDate>
		<dc:creator>Alvaro</dc:creator>
				<category><![CDATA[Educación]]></category>
		<category><![CDATA[NXT]]></category>
		<category><![CDATA[RobotC]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[Braitenberg]]></category>
		<category><![CDATA[robótica]]></category>

		<guid isPermaLink="false">http://blog.electricbricks.com/?p=6722</guid>
		<description><![CDATA[
English

Los vehículos de Braitenberg fueron concebidos por el investigador Italo-Autriaco Valentino Braitenberg para ilustrar de manera evolutiva las habilidades de agentes simples. Los vehículos representan la forma más simple de inteligencia artificial basada en comportamientos o conocimiento corporal, por ejemplo el comportamiento inteligente que surje de la interacción sensor-motor entre el agente y su entorno, [...]]]></description>
			<content:encoded><![CDATA[<ul class="lang_switch">
<li class="lang_switch"><a href="http://blog.electricbricks.com/en/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/"><img src="http://blog.electricbricks.com/wp-content/plugins/zdmultilang/flags/en_US.png" alt="English" title="English" border="0">English</a></li>
</ul>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Frontal-150x146.jpg" alt="Frontal" title="Frontal" width="150" height="146" class="alignleft size-thumbnail wp-image-6739"/>Los vehículos de Braitenberg fueron concebidos por el investigador Italo-Autriaco Valentino Braitenberg para ilustrar de manera evolutiva las habilidades de agentes simples. Los vehículos representan la forma más simple de inteligencia artificial basada en comportamientos o conocimiento corporal, por ejemplo el comportamiento inteligente que surje de la interacción sensor-motor entre el agente y su entorno, sin necesidad de una memoria interna, representación del entorno, o inferencia.<span id="more-6722"></span></p>
<p><strong>¿Qué es un vehículo de Braitenberg?:</strong></p>
<p>Un vehículo de Braitenberg es un agente que puede moverse de forma autónoma por un entorno. Tiene sensores primitivos (capaces de medir estímulos), y ruedas (cada una manejada por su propio motor) que funcionan como actuadores o efectores. Un sensor, en su forma más simple, está directamente conectado a un efector, de manera que una señal o estímulo en dicho sensor produce una respuesta inmediata en el motor (moviendo la rueda, por ejemplo). </p>
<p>Dependiendo de la forma en que estén conectados los sensores y motores, el vehículo mostrará distintos comportamientos. Basándonos en esta idea podemos definir dichas conexiones con objeto de cumplir cierto objetivo o comportamiento. Parecerá que el vehículo intenta lograr llegar a ciertas situaciones y evadir otras, cambiando su trayectoria cuando la situación cambia.</p>
<p><strong>Ejemplos de vehículos de Braitenberg:</strong></p>
<p>Los siguientes ejemplos son algunos de los vehículos de Braitenberg más simples:</p>
<p>Un primer agente tiene un sensor detector de luz que estimula directamente a su única rueda, implementado las siguientes reglas:</p>
<ul>
<li>Más luz produce un movimiento más rápido.</li>
<li>Menos luz produce un movimiento más lento.</li>
<li>La oscuridad produce que se quede quieto.</li>
</ul>
<p>Este comportamiento puede ser interpretado como una criatura que teme a la luz y que se mueve rápido para salir de ella. Su objetivo es encontrar un hueco oscuro en el que ocultarse.</p>
<p>Un segundo agente algo más complicado tiene dos sensores de luz (izquierdo y derecho), cada uno estimulando a la rueda de su mismo lado. Obedece las siguientes reglas:</p>
<ul>
<li>Más luz en la derecha → la rueda derecha gira más rapido → gira hacia la izquierda, fuera de la luz.</li>
<li>Más luz en la izquierda → la rueda izquierda gira más rapido → gira hacia la derecha, fuera de la luz.</li>
</ul>
<p>Este es más eficiente como un comportamiento para escapar de la fuente de luz, ya que la criatura puede moverse en diferentes  direcciones, y tiene a orientarse hacia la dirección desde la que procede menos luz.</p>
<p>En otra variación las conexiones son negativas o innovadoras:</p>
<ul>
<li>Más luz en la derecha → la rueda derecha gira más lento → gira hacia la derecha, hacia la luz.</li>
<li>Más luz en la izquierda → la rueda izquierda gira más lento → gira hacia la izquierda, hacia la luz.</li>
</ul>
<p>En este caso el agente huye de la oscuridad, moviéndose hacia la luz.</p>
<p><strong>Configuración de motor y sensores mediante el menú de RobotC:</strong></p>
<p>Una manera cómoda de configurar los sensores y motores en RobotC es mediante el menú de configuración de motores y sensores (Motors and Sensores Setup). Para acceder al mismo seguid la siguiente ruta:<em> Robot → Motors and Sensores Setup</em> y os saldrá el siguiente menú:</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Braitenberg-conf1-500x396.jpg" alt="Braitenberg-conf1" title="Braitenberg-conf1" width="500" height="396" class="aligncenter size-large wp-image-6735"/></p>
<p>En la pestaña de motores podremos elegir qué motores vamos a usar y ponerles el nombre que deseemos, y si queremos que tenga el PID (<a href="http://es.wikipedia.org/wiki/Proporcional_integral_derivativo">Controlador Proporcional Integral Derivativo</a>) activado. En la pestaña de sensores podemos elegir qué tipo de sensores queremos anclar a cada puerto, así como el nombre que deseemos darles. Una vez configurado todo le dais a aceptar y ya os escribe el código directamente:</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Braitenberg-conf2-500x394.jpg" alt="Braitenberg-conf2" title="Braitenberg-conf2" width="500" height="394" class="aligncenter size-large wp-image-6736"/></p>
<p><strong>Vehículo de Braitenberg en RobotC:</strong></p>
<p>Como ya habréis supuesto los vehículos de Braitenberg no son problemas muy complejos de resolver con RobotC. En este caso vamos a implementar el último de los ejemplos que he puesto: </p>
<ul>
<li>Más luz en la derecha → la rueda derecha gira más lento → gira hacia la derecha, hacia la luz.</li>
<li>Más luz en la izquierda → la rueda izquierda gira más lento → gira hacia la izquierda, hacia la luz.</li>
</ul>
<p>Necesitaremos construir un robot con dos sensores de luz y dos motores. Es importante que los sensores de luz miren más o menos hacia los lados y no hacia adelante, o no podremos medir bien la cantidad de luz que proviene de cada lado. Con un ángulo de 45º es suficiente, como el robot que hemos construido nosotros:</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/lateral3-500x383.jpg" alt="lateral" title="lateral" width="500" height="383" class="aligncenter size-large wp-image-6743"/></p>
<p>A la hora de configurar los sensores de luz es importante que los pongáis en modo pasivo, o sea sin que emitan luz, ya que en este caso dicha luz nos entorpecería en nuestro cometido. Ponedle nombres intuitivos a los motores y a los sensores, como motorDerecho, sensorIzquierdo&#8230; Así se os hará mucho más fácil programarlos, y ver qué es lo que falla en caso de problemas. El código del programa sería así:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#pragma config(Sensor, S1, Sizq, sensorLightInactive)</span><br />
<span style="color: #339933;">#pragma config(Sensor, S4, Sder, sensorLightInactive)</span><br />
<span style="color: #339933;">#pragma config(Motor, motorB, Mder, tmotorNormal, PIDControl,)</span><br />
<span style="color: #339933;">#pragma config(Motor, motorC, Mizq, tmotorNormal, PIDControl,)</span><br />
<span style="color: #666666; font-style: italic;">//*!Code automatically generated by ROBOTC configuration wizard!*//</span><br />
<br />
<span style="color: #339933;">#pragma platform(NXT)</span><br />
<br />
<span style="color: #993333;">task</span> <span style="color: #993333;">main</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Sizq: %d&quot;</span><span style="color: #339933;">,</span> SensorValue<span style="color: #009900;">&#91;</span>Sizq<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">4</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Sder: %d&quot;</span><span style="color: #339933;">,</span> SensorValue<span style="color: #009900;">&#91;</span>Sder<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>SensorValue<span style="color: #009900;">&#91;</span>Sizq<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> SensorValue<span style="color: #009900;">&#91;</span>Sder<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>Mder<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>Mizq<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">70</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>SensorValue<span style="color: #009900;">&#91;</span>Sizq<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> SensorValue<span style="color: #009900;">&#91;</span>Sder<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>Mder<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">70</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>Mizq<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>Mizq<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">70</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>Mder<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">70</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Y aquí os dejo un vídeo de muestra para que veáis como funciona:</p>
<p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/7mzOJvo-xhQ&#038;hl=es_ES&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/7mzOJvo-xhQ&#038;hl=es_ES&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="400"></embed></object></p>
<p>Ante cualquier duda podéis visitar el <a href="http://www.electricbricks.com/forum/index.php?topic=400.0">foro</a>.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-scriptstyle">
			<a href="http://scriptandstyle.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Submit this to Script &amp; Style">Submit this to Script &amp; Style</a>
		</li>
		<li class="sexy-blinklist">
			<a href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;Title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Share this on Blinklist">Share this on Blinklist</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC&amp;desc=EnglishLos%20veh%C3%ADculos%20de%20Braitenberg%20fueron%20concebidos%20por%20el%20investigador%20Italo-Autriaco%20Valentino%20Braitenberg%20para%20ilustrar%20de%20manera%20evolutiva%20las%20habilidades%20de%20agentes%20simples.%20Los%20veh%C3%ADculos%20representan%20la%20forma%20m%C3%A1s%20simple%20de%20inteligencia%20artificial%20basada%20en%20comportamientos%20o%20conocimiento%20co" rel="nofollow" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;submitHeadline=Veh%C3%ADculos+de+Braitenberg+en+RobotC&amp;submitSummary=EnglishLos%20veh%C3%ADculos%20de%20Braitenberg%20fueron%20concebidos%20por%20el%20investigador%20Italo-Autriaco%20Valentino%20Braitenberg%20para%20ilustrar%20de%20manera%20evolutiva%20las%20habilidades%20de%20agentes%20simples.%20Los%20veh%C3%ADculos%20representan%20la%20forma%20m%C3%A1s%20simple%20de%20inteligencia%20artificial%20basada%20en%20comportamientos%20o%20conocimiento%20co&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/" rel="nofollow" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;t=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-designfloat">
			<a href="http://www.designfloat.com/submit.php?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Submit this to DesignFloat">Submit this to DesignFloat</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?u=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;t=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Veh%C3%ADculos+de+Braitenberg+en+RobotC+-+http://b2l.me/rx7na+" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Veh%C3%ADculos%20de%20Braitenberg%20en%20RobotC%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22EnglishLos%20veh%C3%ADculos%20de%20Braitenberg%20fueron%20concebidos%20por%20el%20investigador%20Italo-Autriaco%20Valentino%20Braitenberg%20para%20ilustrar%20de%20manera%20evolutiva%20las%20habilidades%20de%20agentes%20simples.%20Los%20veh%C3%ADculos%20representan%20la%20forma%20m%C3%A1s%20simple%20de%20inteligencia%20artificial%20basada%20en%20comportamientos%20o%20conocimiento%20co%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-tomuse">
			<a href="mailto:tips@tomuse.com?subject=New%20tip%20submitted%20via%20the%20SexyBookmarks%20Plugin!&amp;body=I%20would%20like%20to%20submit%20this%20article%3A%20%22Veh%C3%ADculos%20de%20Braitenberg%20en%20RobotC%22%20for%20possible%20inclusion%20on%20ToMuse.%0A%0A%22EnglishLos%20veh%C3%ADculos%20de%20Braitenberg%20fueron%20concebidos%20por%20el%20investigador%20Italo-Autriaco%20Valentino%20Braitenberg%20para%20ilustrar%20de%20manera%20evolutiva%20las%20habilidades%20de%20agentes%20simples.%20Los%20veh%C3%ADculos%20representan%20la%20forma%20m%C3%A1s%20simple%20de%20inteligencia%20artificial%20basada%20en%20comportamientos%20o%20conocimiento%20co%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/" rel="nofollow" title="Suggest this article to ToMuse">Suggest this article to ToMuse</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC&amp;summary=EnglishLos%20veh%C3%ADculos%20de%20Braitenberg%20fueron%20concebidos%20por%20el%20investigador%20Italo-Autriaco%20Valentino%20Braitenberg%20para%20ilustrar%20de%20manera%20evolutiva%20las%20habilidades%20de%20agentes%20simples.%20Los%20veh%C3%ADculos%20representan%20la%20forma%20m%C3%A1s%20simple%20de%20inteligencia%20artificial%20basada%20en%20comportamientos%20o%20conocimiento%20co&amp;source=electricBricks" rel="nofollow" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-newsvine">
			<a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;h=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Seed this on Newsvine">Seed this on Newsvine</a>
		</li>
		<li class="sexy-devmarks">
			<a href="http://devmarks.com/index.php?posttext=EnglishLos%20veh%C3%ADculos%20de%20Braitenberg%20fueron%20concebidos%20por%20el%20investigador%20Italo-Autriaco%20Valentino%20Braitenberg%20para%20ilustrar%20de%20manera%20evolutiva%20las%20habilidades%20de%20agentes%20simples.%20Los%20veh%C3%ADculos%20representan%20la%20forma%20m%C3%A1s%20simple%20de%20inteligencia%20artificial%20basada%20en%20comportamientos%20o%20conocimiento%20co&amp;posturl=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;posttitle=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Share this on Devmarks">Share this on Devmarks</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;bm_description=Veh%C3%ADculos+de+Braitenberg+en+RobotC&amp;plugin=sexybookmarks" rel="nofollow" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="sexy-izeby">
			<a href="http://izeby.com/submit.php?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/" rel="nofollow" title="Add this to Izeby">Add this to Izeby</a>
		</li>
		<li class="sexy-tipd">
			<a href="http://tipd.com/submit.php?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/" rel="nofollow" title="Share this on Tipd">Share this on Tipd</a>
		</li>
		<li class="sexy-pfbuzz">
			<a href="http://pfbuzz.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Share this on PFBuzz">Share this on PFBuzz</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Veh%C3%ADculos+de+Braitenberg+en+RobotC&amp;link=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/" rel="nofollow" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-blogmarks">
			<a href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Mark this on BlogMarks">Mark this on BlogMarks</a>
		</li>
		<li class="sexy-twittley">
			<a href="http://twittley.com/submit/?title=Veh%C3%ADculos+de+Braitenberg+en+RobotC&amp;url=http%3A%2F%2Fblog.electricbricks.com%2F2010%2F04%2Ftutorial-braitenberg-robotc-nxt-lego-11%2F&amp;desc=EnglishLos%20veh%C3%ADculos%20de%20Braitenberg%20fueron%20concebidos%20por%20el%20investigador%20Italo-Autriaco%20Valentino%20Braitenberg%20para%20ilustrar%20de%20manera%20evolutiva%20las%20habilidades%20de%20agentes%20simples.%20Los%20veh%C3%ADculos%20representan%20la%20forma%20m%C3%A1s%20simple%20de%20inteligencia%20artificial%20basada%20en%20comportamientos%20o%20conocimiento%20co&amp;pcat=Technology&amp;tags=" rel="nofollow" title="Submit this to Twittley">Submit this to Twittley</a>
		</li>
		<li class="sexy-fwisp">
			<a href="http://fwisp.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/" rel="nofollow" title="Share this on Fwisp">Share this on Fwisp</a>
		</li>
		<li class="sexy-designmoo">
			<a href="http://designmoo.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC&amp;body=EnglishLos%20veh%C3%ADculos%20de%20Braitenberg%20fueron%20concebidos%20por%20el%20investigador%20Italo-Autriaco%20Valentino%20Braitenberg%20para%20ilustrar%20de%20manera%20evolutiva%20las%20habilidades%20de%20agentes%20simples.%20Los%20veh%C3%ADculos%20representan%20la%20forma%20m%C3%A1s%20simple%20de%20inteligencia%20artificial%20basada%20en%20comportamientos%20o%20conocimiento%20co" rel="nofollow" title="Moo this on DesignMoo!">Moo this on DesignMoo!</a>
		</li>
		<li class="sexy-bobrdobr">
			<a href="http://bobrdobr.ru/addext.html?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Share this on BobrDobr">Share this on BobrDobr</a>
		</li>
		<li class="sexy-yandex">
			<a href="http://zakladki.yandex.ru/userarea/links/addfromfav.asp?bAddLink_x=1&amp;lurl=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;lname=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Add this to Yandex.Bookmarks">Add this to Yandex.Bookmarks</a>
		</li>
		<li class="sexy-memoryru">
			<a href="http://memori.ru/link/?sm=1&amp;u_data[url]=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;u_data[name]=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Add this to Memory.ru">Add this to Memory.ru</a>
		</li>
		<li class="sexy-100zakladok">
			<a href="http://www.100zakladok.ru/save/?bmurl=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;bmtitle=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Add this to 100 bookmarks">Add this to 100 bookmarks</a>
		</li>
		<li class="sexy-moemesto">
			<a href="http://moemesto.ru/post.php?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Add this to MyPlace">Add this to MyPlace</a>
		</li>
		<li class="sexy-hackernews">
			<a href="http://news.ycombinator.com/submitlink?u=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;t=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Submit this to Hacker News">Submit this to Hacker News</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/" rel="nofollow" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
		<li class="sexy-designbump">
			<a href="http://designbump.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC&amp;body=EnglishLos%20veh%C3%ADculos%20de%20Braitenberg%20fueron%20concebidos%20por%20el%20investigador%20Italo-Autriaco%20Valentino%20Braitenberg%20para%20ilustrar%20de%20manera%20evolutiva%20las%20habilidades%20de%20agentes%20simples.%20Los%20veh%C3%ADculos%20representan%20la%20forma%20m%C3%A1s%20simple%20de%20inteligencia%20artificial%20basada%20en%20comportamientos%20o%20conocimiento%20co" rel="nofollow" title="Bump this on DesignBump">Bump this on DesignBump</a>
		</li>
		<li class="sexy-ning">
			<a href="http://bookmarks.ning.com/addItem.php?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;T=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Add this to Ning">Add this to Ning</a>
		</li>
		<li class="sexy-identica">
			<a href="http://identi.ca//index.php?action=newnotice&amp;status_textarea=Reading:+&quot;Veh%C3%ADculos+de+Braitenberg+en+RobotC&quot;+-+from+http://b2l.me/rx7na" rel="nofollow" title="Post this to Identica">Post this to Identica</a>
		</li>
		<li class="sexy-xerpi">
			<a href="http://www.xerpi.com/block/add_link_from_extension?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Save this to Xerpi">Save this to Xerpi</a>
		</li>
		<li class="sexy-wikio">
			<a href="http://www.wikio.com/sharethis?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Share this on Wikio">Share this on Wikio</a>
		</li>
		<li class="sexy-techmeme">
			<a href="http://twitter.com/home/?status=Tip+@Techmeme+http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/+&quot;Veh%C3%ADculos+de+Braitenberg+en+RobotC&quot;" rel="nofollow" title="Tip this to TechMeme">Tip this to TechMeme</a>
		</li>
		<li class="sexy-sphinn">
			<a href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/" rel="nofollow" title="Sphinn this on Sphinn">Sphinn this on Sphinn</a>
		</li>
		<li class="sexy-posterous">
			<a href="http://posterous.com/share?linkto=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC&amp;selection=EnglishLos%20veh%C3%ADculos%20de%20Braitenberg%20fueron%20concebidos%20por%20el%20investigador%20Italo-Autriaco%20Valentino%20Braitenberg%20para%20ilustrar%20de%20manera%20evolutiva%20las%20habilidades%20de%20agentes%20simples.%20Los%20veh%C3%ADculos%20representan%20la%20forma%20m%C3%A1s%20simple%20de%20inteligencia%20artificial%20basada%20en%20comportamientos%20o%20conocimiento%20co" rel="nofollow" title="Post this to Posterous">Post this to Posterous</a>
		</li>
		<li class="sexy-globalgrind">
			<a href="http://globalgrind.com/submission/submit.aspx?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;type=Article&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Grind this! on Global Grind">Grind this! on Global Grind</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC&amp;body=EnglishLos%20veh%C3%ADculos%20de%20Braitenberg%20fueron%20concebidos%20por%20el%20investigador%20Italo-Autriaco%20Valentino%20Braitenberg%20para%20ilustrar%20de%20manera%20evolutiva%20las%20habilidades%20de%20agentes%20simples.%20Los%20veh%C3%ADculos%20representan%20la%20forma%20m%C3%A1s%20simple%20de%20inteligencia%20artificial%20basada%20en%20comportamientos%20o%20conocimiento%20co" rel="nofollow" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-nujij">
			<a href="http://nujij.nl/jij.lynkx?t=Veh%C3%ADculos+de+Braitenberg+en+RobotC&amp;u=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;b=EnglishLos%20veh%C3%ADculos%20de%20Braitenberg%20fueron%20concebidos%20por%20el%20investigador%20Italo-Autriaco%20Valentino%20Braitenberg%20para%20ilustrar%20de%20manera%20evolutiva%20las%20habilidades%20de%20agentes%20simples.%20Los%20veh%C3%ADculos%20representan%20la%20forma%20m%C3%A1s%20simple%20de%20inteligencia%20artificial%20basada%20en%20comportamientos%20o%20conocimiento%20co" rel="nofollow" title="Submit this to NUjij">Submit this to NUjij</a>
		</li>
		<li class="sexy-ekudos">
			<a href="http://www.ekudos.nl/artikel/nieuw?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC&amp;desc=EnglishLos%20veh%C3%ADculos%20de%20Braitenberg%20fueron%20concebidos%20por%20el%20investigador%20Italo-Autriaco%20Valentino%20Braitenberg%20para%20ilustrar%20de%20manera%20evolutiva%20las%20habilidades%20de%20agentes%20simples.%20Los%20veh%C3%ADculos%20representan%20la%20forma%20m%C3%A1s%20simple%20de%20inteligencia%20artificial%20basada%20en%20comportamientos%20o%20conocimiento%20co" rel="nofollow" title="Submit this to eKudos">Submit this to eKudos</a>
		</li>
		<li class="sexy-netvouz">
			<a href="http://www.netvouz.com/action/submitBookmark?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC&amp;popup=no" rel="nofollow" title="Submit this to Netvouz">Submit this to Netvouz</a>
		</li>
		<li class="sexy-netvibes">
			<a href="http://www.netvibes.com/share?title=Veh%C3%ADculos+de+Braitenberg+en+RobotC&amp;url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/" rel="nofollow" title="Submit this to Netvibes">Submit this to Netvibes</a>
		</li>
		<li class="sexy-fleck">
			<a href="http://beta3.fleck.com/bookmarklet.php?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Share this on Fleck">Share this on Fleck</a>
		</li>
		<li class="sexy-blogospherenews">
			<a href="http://www.blogospherenews.com/submit.php?url=http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/&amp;title=Veh%C3%ADculos+de+Braitenberg+en+RobotC" rel="nofollow" title="Share this on Blogosphere News">Share this on Blogosphere News</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://blog.electricbricks.com/2010/04/tutorial-braitenberg-robotc-nxt-lego-11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[RobotC]]></series:name>
	</item>
		<item>
		<title>Bump&amp;Go en RobotC</title>
		<link>http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/</link>
		<comments>http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 12:04:12 +0000</pubDate>
		<dc:creator>Alvaro</dc:creator>
				<category><![CDATA[NXT]]></category>
		<category><![CDATA[RobotC]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[robótica]]></category>

		<guid isPermaLink="false">http://blog.electricbricks.com/?p=6671</guid>
		<description><![CDATA[
English

En el artículo de hoy voy a explicar el Bump&#038;Go en RobotC. El Bump&#038;Go es un programa en el que el robot se mueve aleatóriamente por una habitación esquivando obstáculos cuando los detecta. Puesto que el movimiento es aleatorio llegará un momento en que se haya movido por toda la habitación. Este tipo de robot [...]]]></description>
			<content:encoded><![CDATA[<ul class="lang_switch">
<li class="lang_switch"><a href="http://blog.electricbricks.com/en/2010/04/bumpgo-robotc-tutorial-10/"><img src="http://blog.electricbricks.com/wp-content/plugins/zdmultilang/flags/en_US.png" alt="English" title="English" border="0">English</a></li>
</ul>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/BumpGo2-150x114.jpg" alt="Bump&amp;Go2" title="Bump&amp;Go2" width="150" height="114" class="alignleft size-thumbnail wp-image-6680" />En el artículo de hoy voy a explicar el Bump&#038;Go en RobotC. El Bump&#038;Go es un programa en el que el robot se mueve aleatóriamente por una habitación esquivando obstáculos cuando los detecta. Puesto que el movimiento es aleatorio llegará un momento en que se haya movido por toda la habitación. Este tipo de robot ya existe, y tiene uso comercial, como la <a href="http://store.irobot.com/category/index.jsp?categoryId=3334619&#038;cp=2804605&#038;ab=CMS_IRBT_Storefront_011510_vacuumcleaning">aspiradora Roomba</a>, que es capaz de aspirarte la casa automáticamente. <span id="more-6671"></span></p>
<p>El Bump&#038;Go es un programa bastante sencillo que se puede implementar de varias maneras, en nuestro caso lo haremos con sensores de contacto. A diferencia del de LeJOS, este lo haremos con dos sensores de contacto, para tener una mayor precisión. Como montaje recomiendo un tribot modificado, de manera que el parachoques quede mirando hacia adelante y no no en diagonal como el montaje estandar de tribot del del LEGO Mindstorms NXT. pero no es muy difícil de implementar.</p>
<p><strong>Manejo básico de los motores:</strong></p>
<p>Vamos a hacer un pequeño recordatorio del manejo de motores en RobotC. La forma más sencilla de manejar los motores era mediante la función motor:</p>
<p><strong>motor[nombre_motor] = int potencia:</strong> Ponemos el motor deseado (MotorA, MotorB, MotorC, o motores que hayamos definido nosotros mismos) a la potencia indicada. Potencias negativas significan que el motor rotará en sentido contrario, y una potencia de 0 parará el motor.</p>
<p>Si queremos que el motor A se mueva hacia adelante a máxima potencia sería:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">100</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>No serán necesarias más funciones para este programa.</p>
<p><strong>Manejo del sensor de contacto:</strong></p>
<p>El sensor de contacto es el más simple de los sensores del NXT. Básicamente tiene dos estados, pulsado o sin pulsar. Por tanto la función que se utiliza para determinar su estado devolverá un booleano con <em>true </em> en caso de que esté presionado, o <em>false</em> en caso contrario. Lo primero que necesitamos hacer es definir los puertos a los que van anclados dichos sensores, esto se hace de la siguiente manera:</p>
<p><strong>#pragma config(Sensor, puerto,     nombre,           tipo_sensor):</strong> Anclamos el sensor del tipo deseado al puerto que elijamos, utilizaremos el nombre que le hemos dado aquí para referirnos a el dentro del programa.</p>
<p>Si quisiésemos poner dos sensores de contacto, en los puertos 1 y 2, se haría de la siguiente manera:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#pragma config(Sensor, S1, &nbsp; &nbsp; contacto1, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sensorTouch)</span><br />
<span style="color: #339933;">#pragma config(Sensor, S2, &nbsp; &nbsp; contacto2, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sensorTouch)</span></div></td></tr></tbody></table></div>
<p>Una vez definidos podremos utilizarlos. Se usa la función <em>SensorValue(nombre_sensor)</em> para tomar el valor del sensor. En este caso nos devolverá un booleano, por lo que podríamos utilizarlo en las condiciones de los bucles o de las sentencias selectivas <em>if</em>. Un ejemplo sería:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>SensorValue<span style="color: #009900;">&#91;</span>contacto1<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span></div></td></tr></tbody></table></div>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/BumpGo1-500x352.jpg" alt="Bump&amp;Go1" title="Bump&amp;Go1" width="500" height="352" class="aligncenter size-large wp-image-6681" /></p>
<p><strong>Bump&#038;Go:</strong></p>
<p>Bump&#038;Go es un robot móvil que se mueve erráticamente por una habitación o piso, esquivando cualquier obstáculo que encuentre a su paso. En este caso, y dado que usaremos el sensor de contacto, podemos decir que más que esquivar lo que el robot irá haciendo cada vez que colisione con un obstáculo es dar marcha atrás y girar para encontrar otra posible ruta sin obstáculos. Puesto que contamos con dos sensores de contactos podemos tener en cuenta si se ha presionado uno, otro o los dos, para saber a donde girar para esquivar dicho obstáculo. Si queremos además que el giro sea un número aleatorio de grados, usaremos la función matemática <em>random(max)</em> de RobotC, que nos devuelve un número aleatorio entre 0 y max. Suponiendo que queramos un rango entre un número distinto de 0 y el máximo que elijamos no tendríamos más que sumarle nuestro valor min, por ejemplo:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333;">int</span> aleatorio <span style="color: #339933;">=</span> <span style="color: #0000dd;">1000</span> <span style="color: #339933;">+</span> random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">5000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Nos devolveria en aleatorio un valor entre 1000 y 6000.</p>
<p>Puesto que su comportamiento va a ser aleatorio, está claro que será capaz de recorrer una habitación entera. Es solo cuestión de tiempo el que lo logre. Implementado así es un tipo de navegación muy simple, y tiene la ventaja de no exigir la necesidad de ningún sistema de localización, puesto que al tratarse de un movimiento aleatorio no se requiere conocer la posición del robot. (Versiones más avanzadas permiten que el robot pueda volver a la base para recargar las baterías. El problema de volver a una ubicación determinada sí requiere de un sistema más evolucionado).</p>
<p>El programa en RobotC sería:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#pragma config(Sensor, S1, &nbsp; &nbsp; contacto1, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sensorTouch)</span><br />
<span style="color: #339933;">#pragma config(Sensor, S4, &nbsp; &nbsp; contacto4, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sensorTouch)</span><br />
<br />
<span style="color: #339933;">#pragma platform(NXT)</span><br />
<br />
<span style="color: #993333;">task</span> <span style="color: #993333;">main</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #993333;">int</span> tiempoMA<span style="color: #339933;">,</span> tiempoGiro<span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">100</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">100</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>SensorValue<span style="color: #009900;">&#91;</span>contacto1<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; tiempoMA <span style="color: #339933;">=</span> <span style="color: #0000dd;">200</span> <span style="color: #339933;">+</span> random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">100</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">100</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span>tiempoMA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; tiempoGiro <span style="color: #339933;">=</span> <span style="color: #0000dd;">200</span> <span style="color: #339933;">+</span> random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">400</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span>tiempoGiro<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>SensorValue<span style="color: #009900;">&#91;</span>contacto4<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; tiempoMA <span style="color: #339933;">=</span> <span style="color: #0000dd;">200</span> <span style="color: #339933;">+</span> random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">100</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">100</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span>tiempoMA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; tiempoGiro <span style="color: #339933;">=</span> <span style="color: #0000dd;">200</span> <span style="color: #339933;">+</span> random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">400</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span>tiempoGiro<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>A continuación explicaré las lineas más importantes:</p>
<p><strong>13 -</strong> En mi caso el contacto1 esta en el lado derecho del parachoques, teniendo en cuenta esto:</p>
<p><strong>14 &#8211; </strong>Calculamos un tiempo aleatorio de milisegundos para dar marcha atrás, este número estará entre 200 y 500 milisegundos.</p>
<p><strong>15, 16 y 17 -</strong> Damos marcha atrás durante el tiempo deseado.</p>
<p><strong>18 -</strong> Calculamos un tiempo aleatorio de giro en milisegundos, este número estará entre 200 y 600 milisegundos. Por supuesto los tiempos los elegís vosotros, quizás os venga mejor otro número para vuestro robot.</p>
<p><strong>19 y 20 -</strong> IMPORTANTE, aquí giramos el robot hacia la izquierda (motorC es dondo está mi rueda izquierda, al rotar marcha atrás el robot girará hacia la izquierda). Hacemos esto lógicamente porque nos hemos chocado por la derecha, por lo que es la mejor manera de esquivar el obstáculo.</p>
<p><strong>23 a 31 -</strong> Repetimos el proceso, pero en este casi si nos hemos chocado por la izquierda. Por tanto el robot después de dar marcha atrás girará hacia la derecha.</p>
<p>Todo esto está dentro de un búcle infinito. En caso de que se presionen los dos sensores a la vez se ejecutará el primer <em>if</em>, como si hubiera chocado por la derecha. En realidad nos es indiferente en este caso.</p>
<p>En resumidas cuentas lo que hace este programa es que el robot ande marcha adelante hasta chocarse con un obstáculo; entonces dará marcha atrás, girará en una dirección determinada según que sensor de contacto haya sido presionado un número aleatorio de grados, y seguirá otra vez moviéndose adelante. El robot solo detendrá la ejecución del programa cuando presionemos el botón ESCAPE del NXT. Aquí os pongo un vídeo demostrativo con el mismo programa que os he escrito en el artículo (recordad hacer un buen parachoques o puede que se os atasque):</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/aNhPKwhNO5o&#038;hl=es_ES&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/aNhPKwhNO5o&#038;hl=es_ES&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<p>Si tenéis alguna duda podéis postearla en el foro.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-scriptstyle">
			<a href="http://scriptandstyle.com/submit?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Submit this to Script &amp; Style">Submit this to Script &amp; Style</a>
		</li>
		<li class="sexy-blinklist">
			<a href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;Title=Bump%26Go+en+RobotC" rel="nofollow" title="Share this on Blinklist">Share this on Blinklist</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC&amp;desc=EnglishEn%20el%20art%C3%ADculo%20de%20hoy%20voy%20a%20explicar%20el%20Bump%26Go%20en%20RobotC.%20El%20Bump%26Go%20es%20un%20programa%20en%20el%20que%20el%20robot%20se%20mueve%20aleat%C3%B3riamente%20por%20una%20habitaci%C3%B3n%20esquivando%20obst%C3%A1culos%20cuando%20los%20detecta.%20Puesto%20que%20el%20movimiento%20es%20aleatorio%20llegar%C3%A1%20un%20momento%20en%20que%20se%20haya%20movido%20por%20toda%20la%20habitaci" rel="nofollow" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;submitHeadline=Bump%26Go+en+RobotC&amp;submitSummary=EnglishEn%20el%20art%C3%ADculo%20de%20hoy%20voy%20a%20explicar%20el%20Bump%26Go%20en%20RobotC.%20El%20Bump%26Go%20es%20un%20programa%20en%20el%20que%20el%20robot%20se%20mueve%20aleat%C3%B3riamente%20por%20una%20habitaci%C3%B3n%20esquivando%20obst%C3%A1culos%20cuando%20los%20detecta.%20Puesto%20que%20el%20movimiento%20es%20aleatorio%20llegar%C3%A1%20un%20momento%20en%20que%20se%20haya%20movido%20por%20toda%20la%20habitaci&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/" rel="nofollow" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;t=Bump%26Go+en+RobotC" rel="nofollow" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-designfloat">
			<a href="http://www.designfloat.com/submit.php?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Submit this to DesignFloat">Submit this to DesignFloat</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?u=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;t=Bump%26Go+en+RobotC" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Bump%26Go+en+RobotC+-+http://b2l.me/rh65b+" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Bump%26Go%20en%20RobotC%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22EnglishEn%20el%20art%C3%ADculo%20de%20hoy%20voy%20a%20explicar%20el%20Bump%26Go%20en%20RobotC.%20El%20Bump%26Go%20es%20un%20programa%20en%20el%20que%20el%20robot%20se%20mueve%20aleat%C3%B3riamente%20por%20una%20habitaci%C3%B3n%20esquivando%20obst%C3%A1culos%20cuando%20los%20detecta.%20Puesto%20que%20el%20movimiento%20es%20aleatorio%20llegar%C3%A1%20un%20momento%20en%20que%20se%20haya%20movido%20por%20toda%20la%20habitaci%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-tomuse">
			<a href="mailto:tips@tomuse.com?subject=New%20tip%20submitted%20via%20the%20SexyBookmarks%20Plugin!&amp;body=I%20would%20like%20to%20submit%20this%20article%3A%20%22Bump%26Go%20en%20RobotC%22%20for%20possible%20inclusion%20on%20ToMuse.%0A%0A%22EnglishEn%20el%20art%C3%ADculo%20de%20hoy%20voy%20a%20explicar%20el%20Bump%26Go%20en%20RobotC.%20El%20Bump%26Go%20es%20un%20programa%20en%20el%20que%20el%20robot%20se%20mueve%20aleat%C3%B3riamente%20por%20una%20habitaci%C3%B3n%20esquivando%20obst%C3%A1culos%20cuando%20los%20detecta.%20Puesto%20que%20el%20movimiento%20es%20aleatorio%20llegar%C3%A1%20un%20momento%20en%20que%20se%20haya%20movido%20por%20toda%20la%20habitaci%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/" rel="nofollow" title="Suggest this article to ToMuse">Suggest this article to ToMuse</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC&amp;summary=EnglishEn%20el%20art%C3%ADculo%20de%20hoy%20voy%20a%20explicar%20el%20Bump%26Go%20en%20RobotC.%20El%20Bump%26Go%20es%20un%20programa%20en%20el%20que%20el%20robot%20se%20mueve%20aleat%C3%B3riamente%20por%20una%20habitaci%C3%B3n%20esquivando%20obst%C3%A1culos%20cuando%20los%20detecta.%20Puesto%20que%20el%20movimiento%20es%20aleatorio%20llegar%C3%A1%20un%20momento%20en%20que%20se%20haya%20movido%20por%20toda%20la%20habitaci&amp;source=electricBricks" rel="nofollow" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-newsvine">
			<a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;h=Bump%26Go+en+RobotC" rel="nofollow" title="Seed this on Newsvine">Seed this on Newsvine</a>
		</li>
		<li class="sexy-devmarks">
			<a href="http://devmarks.com/index.php?posttext=EnglishEn%20el%20art%C3%ADculo%20de%20hoy%20voy%20a%20explicar%20el%20Bump%26Go%20en%20RobotC.%20El%20Bump%26Go%20es%20un%20programa%20en%20el%20que%20el%20robot%20se%20mueve%20aleat%C3%B3riamente%20por%20una%20habitaci%C3%B3n%20esquivando%20obst%C3%A1culos%20cuando%20los%20detecta.%20Puesto%20que%20el%20movimiento%20es%20aleatorio%20llegar%C3%A1%20un%20momento%20en%20que%20se%20haya%20movido%20por%20toda%20la%20habitaci&amp;posturl=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;posttitle=Bump%26Go+en+RobotC" rel="nofollow" title="Share this on Devmarks">Share this on Devmarks</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;bm_description=Bump%26Go+en+RobotC&amp;plugin=sexybookmarks" rel="nofollow" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="sexy-izeby">
			<a href="http://izeby.com/submit.php?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/" rel="nofollow" title="Add this to Izeby">Add this to Izeby</a>
		</li>
		<li class="sexy-tipd">
			<a href="http://tipd.com/submit.php?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/" rel="nofollow" title="Share this on Tipd">Share this on Tipd</a>
		</li>
		<li class="sexy-pfbuzz">
			<a href="http://pfbuzz.com/submit?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Share this on PFBuzz">Share this on PFBuzz</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Bump%26Go+en+RobotC&amp;link=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/" rel="nofollow" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-blogmarks">
			<a href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Mark this on BlogMarks">Mark this on BlogMarks</a>
		</li>
		<li class="sexy-twittley">
			<a href="http://twittley.com/submit/?title=Bump%26Go+en+RobotC&amp;url=http%3A%2F%2Fblog.electricbricks.com%2F2010%2F04%2Fbumpgo-robotc-tutorial-10%2F&amp;desc=EnglishEn%20el%20art%C3%ADculo%20de%20hoy%20voy%20a%20explicar%20el%20Bump%26Go%20en%20RobotC.%20El%20Bump%26Go%20es%20un%20programa%20en%20el%20que%20el%20robot%20se%20mueve%20aleat%C3%B3riamente%20por%20una%20habitaci%C3%B3n%20esquivando%20obst%C3%A1culos%20cuando%20los%20detecta.%20Puesto%20que%20el%20movimiento%20es%20aleatorio%20llegar%C3%A1%20un%20momento%20en%20que%20se%20haya%20movido%20por%20toda%20la%20habitaci&amp;pcat=Technology&amp;tags=" rel="nofollow" title="Submit this to Twittley">Submit this to Twittley</a>
		</li>
		<li class="sexy-fwisp">
			<a href="http://fwisp.com/submit?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/" rel="nofollow" title="Share this on Fwisp">Share this on Fwisp</a>
		</li>
		<li class="sexy-designmoo">
			<a href="http://designmoo.com/submit?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC&amp;body=EnglishEn%20el%20art%C3%ADculo%20de%20hoy%20voy%20a%20explicar%20el%20Bump%26Go%20en%20RobotC.%20El%20Bump%26Go%20es%20un%20programa%20en%20el%20que%20el%20robot%20se%20mueve%20aleat%C3%B3riamente%20por%20una%20habitaci%C3%B3n%20esquivando%20obst%C3%A1culos%20cuando%20los%20detecta.%20Puesto%20que%20el%20movimiento%20es%20aleatorio%20llegar%C3%A1%20un%20momento%20en%20que%20se%20haya%20movido%20por%20toda%20la%20habitaci" rel="nofollow" title="Moo this on DesignMoo!">Moo this on DesignMoo!</a>
		</li>
		<li class="sexy-bobrdobr">
			<a href="http://bobrdobr.ru/addext.html?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Share this on BobrDobr">Share this on BobrDobr</a>
		</li>
		<li class="sexy-yandex">
			<a href="http://zakladki.yandex.ru/userarea/links/addfromfav.asp?bAddLink_x=1&amp;lurl=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;lname=Bump%26Go+en+RobotC" rel="nofollow" title="Add this to Yandex.Bookmarks">Add this to Yandex.Bookmarks</a>
		</li>
		<li class="sexy-memoryru">
			<a href="http://memori.ru/link/?sm=1&amp;u_data[url]=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;u_data[name]=Bump%26Go+en+RobotC" rel="nofollow" title="Add this to Memory.ru">Add this to Memory.ru</a>
		</li>
		<li class="sexy-100zakladok">
			<a href="http://www.100zakladok.ru/save/?bmurl=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;bmtitle=Bump%26Go+en+RobotC" rel="nofollow" title="Add this to 100 bookmarks">Add this to 100 bookmarks</a>
		</li>
		<li class="sexy-moemesto">
			<a href="http://moemesto.ru/post.php?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Add this to MyPlace">Add this to MyPlace</a>
		</li>
		<li class="sexy-hackernews">
			<a href="http://news.ycombinator.com/submitlink?u=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;t=Bump%26Go+en+RobotC" rel="nofollow" title="Submit this to Hacker News">Submit this to Hacker News</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/" rel="nofollow" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
		<li class="sexy-designbump">
			<a href="http://designbump.com/submit?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC&amp;body=EnglishEn%20el%20art%C3%ADculo%20de%20hoy%20voy%20a%20explicar%20el%20Bump%26Go%20en%20RobotC.%20El%20Bump%26Go%20es%20un%20programa%20en%20el%20que%20el%20robot%20se%20mueve%20aleat%C3%B3riamente%20por%20una%20habitaci%C3%B3n%20esquivando%20obst%C3%A1culos%20cuando%20los%20detecta.%20Puesto%20que%20el%20movimiento%20es%20aleatorio%20llegar%C3%A1%20un%20momento%20en%20que%20se%20haya%20movido%20por%20toda%20la%20habitaci" rel="nofollow" title="Bump this on DesignBump">Bump this on DesignBump</a>
		</li>
		<li class="sexy-ning">
			<a href="http://bookmarks.ning.com/addItem.php?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;T=Bump%26Go+en+RobotC" rel="nofollow" title="Add this to Ning">Add this to Ning</a>
		</li>
		<li class="sexy-identica">
			<a href="http://identi.ca//index.php?action=newnotice&amp;status_textarea=Reading:+&quot;Bump%26Go+en+RobotC&quot;+-+from+http://b2l.me/rh65b" rel="nofollow" title="Post this to Identica">Post this to Identica</a>
		</li>
		<li class="sexy-xerpi">
			<a href="http://www.xerpi.com/block/add_link_from_extension?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Save this to Xerpi">Save this to Xerpi</a>
		</li>
		<li class="sexy-wikio">
			<a href="http://www.wikio.com/sharethis?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Share this on Wikio">Share this on Wikio</a>
		</li>
		<li class="sexy-techmeme">
			<a href="http://twitter.com/home/?status=Tip+@Techmeme+http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/+&quot;Bump%26Go+en+RobotC&quot;" rel="nofollow" title="Tip this to TechMeme">Tip this to TechMeme</a>
		</li>
		<li class="sexy-sphinn">
			<a href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/" rel="nofollow" title="Sphinn this on Sphinn">Sphinn this on Sphinn</a>
		</li>
		<li class="sexy-posterous">
			<a href="http://posterous.com/share?linkto=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC&amp;selection=EnglishEn%20el%20art%C3%ADculo%20de%20hoy%20voy%20a%20explicar%20el%20Bump%26Go%20en%20RobotC.%20El%20Bump%26Go%20es%20un%20programa%20en%20el%20que%20el%20robot%20se%20mueve%20aleat%C3%B3riamente%20por%20una%20habitaci%C3%B3n%20esquivando%20obst%C3%A1culos%20cuando%20los%20detecta.%20Puesto%20que%20el%20movimiento%20es%20aleatorio%20llegar%C3%A1%20un%20momento%20en%20que%20se%20haya%20movido%20por%20toda%20la%20habitaci" rel="nofollow" title="Post this to Posterous">Post this to Posterous</a>
		</li>
		<li class="sexy-globalgrind">
			<a href="http://globalgrind.com/submission/submit.aspx?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;type=Article&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Grind this! on Global Grind">Grind this! on Global Grind</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC&amp;body=EnglishEn%20el%20art%C3%ADculo%20de%20hoy%20voy%20a%20explicar%20el%20Bump%26Go%20en%20RobotC.%20El%20Bump%26Go%20es%20un%20programa%20en%20el%20que%20el%20robot%20se%20mueve%20aleat%C3%B3riamente%20por%20una%20habitaci%C3%B3n%20esquivando%20obst%C3%A1culos%20cuando%20los%20detecta.%20Puesto%20que%20el%20movimiento%20es%20aleatorio%20llegar%C3%A1%20un%20momento%20en%20que%20se%20haya%20movido%20por%20toda%20la%20habitaci" rel="nofollow" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-nujij">
			<a href="http://nujij.nl/jij.lynkx?t=Bump%26Go+en+RobotC&amp;u=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;b=EnglishEn%20el%20art%C3%ADculo%20de%20hoy%20voy%20a%20explicar%20el%20Bump%26Go%20en%20RobotC.%20El%20Bump%26Go%20es%20un%20programa%20en%20el%20que%20el%20robot%20se%20mueve%20aleat%C3%B3riamente%20por%20una%20habitaci%C3%B3n%20esquivando%20obst%C3%A1culos%20cuando%20los%20detecta.%20Puesto%20que%20el%20movimiento%20es%20aleatorio%20llegar%C3%A1%20un%20momento%20en%20que%20se%20haya%20movido%20por%20toda%20la%20habitaci" rel="nofollow" title="Submit this to NUjij">Submit this to NUjij</a>
		</li>
		<li class="sexy-ekudos">
			<a href="http://www.ekudos.nl/artikel/nieuw?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC&amp;desc=EnglishEn%20el%20art%C3%ADculo%20de%20hoy%20voy%20a%20explicar%20el%20Bump%26Go%20en%20RobotC.%20El%20Bump%26Go%20es%20un%20programa%20en%20el%20que%20el%20robot%20se%20mueve%20aleat%C3%B3riamente%20por%20una%20habitaci%C3%B3n%20esquivando%20obst%C3%A1culos%20cuando%20los%20detecta.%20Puesto%20que%20el%20movimiento%20es%20aleatorio%20llegar%C3%A1%20un%20momento%20en%20que%20se%20haya%20movido%20por%20toda%20la%20habitaci" rel="nofollow" title="Submit this to eKudos">Submit this to eKudos</a>
		</li>
		<li class="sexy-netvouz">
			<a href="http://www.netvouz.com/action/submitBookmark?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC&amp;popup=no" rel="nofollow" title="Submit this to Netvouz">Submit this to Netvouz</a>
		</li>
		<li class="sexy-netvibes">
			<a href="http://www.netvibes.com/share?title=Bump%26Go+en+RobotC&amp;url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/" rel="nofollow" title="Submit this to Netvibes">Submit this to Netvibes</a>
		</li>
		<li class="sexy-fleck">
			<a href="http://beta3.fleck.com/bookmarklet.php?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Share this on Fleck">Share this on Fleck</a>
		</li>
		<li class="sexy-blogospherenews">
			<a href="http://www.blogospherenews.com/submit.php?url=http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/&amp;title=Bump%26Go+en+RobotC" rel="nofollow" title="Share this on Blogosphere News">Share this on Blogosphere News</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://blog.electricbricks.com/2010/04/bumpgo-robotc-tutorial-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[RobotC]]></series:name>
	</item>
		<item>
		<title>Sonar mejorado en RobotC</title>
		<link>http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/</link>
		<comments>http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 12:07:35 +0000</pubDate>
		<dc:creator>Alvaro</dc:creator>
				<category><![CDATA[NXT]]></category>
		<category><![CDATA[RobotC]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[robótica]]></category>

		<guid isPermaLink="false">http://blog.electricbricks.com/es/?p=6612</guid>
		<description><![CDATA[
English

En el artículo anterior vimos como implementar el sonar básico. En este artículo voy a expandir el sonar para que tenga una mayor funcionalidad, y se puedan observar mejor los objetos por pantalla. Para ello usaremos nuevas funciones del LCD del NXT, y seguiremos utilizando la trigonometría para mostrar de forma precisa objetos por pantalla.
Funciones [...]]]></description>
			<content:encoded><![CDATA[<ul class="lang_switch">
<li class="lang_switch"><a href="http://blog.electricbricks.com/en/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/"><img src="http://blog.electricbricks.com/wp-content/plugins/zdmultilang/flags/en_US.png" alt="English" title="English" border="0">English</a></li>
</ul>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Sonar1-150x95.jpg" alt="Sonar1" title="Sonar1" width="150" height="95" class="alignleft size-thumbnail wp-image-6620" />En el <a href="http://blog.electricbricks.com/es/2010/04/tutorial-robotc-lego-mindstorms-nxt-8">artículo anterior</a> vimos como implementar el sonar básico. En este artículo voy a expandir el sonar para que tenga una mayor funcionalidad, y se puedan observar mejor los objetos por pantalla. Para ello usaremos nuevas funciones del LCD del NXT, y seguiremos utilizando la trigonometría para mostrar de forma precisa objetos por pantalla.<span id="more-6612"></span></p>
<p><strong>Funciones para el LCD:</strong></p>
<p>La nueva función del LCD que vamos a utilizar es <em>nxtDrawLine</em>, que dibuja una línea entre dos puntos píxeles). La sintaxis es:</p>
<p><strong>nxtDrawLine(punto1x, punto1y, punto2x, punto2y):</strong> Dibuja la recta que une los píxeles cuyas coordenas son las de punto1 y punto2. </p>
<p>Usaremos esta función para dibujar líneas negras entre donde detecta el objeto y el borde de la circunferencia del sonar. De esta manera los objetos quedarán representados por píxeles de color negro, mientras que el espacio libre será todo lo que esté en blanco.</p>
<p><strong>Dibujo de objetos:</strong></p>
<p>En el programa anterior, cada vez que detectábamos un objeto, lo representábamos como un punto, dibujándolo a la misma altura y en la que hubiéramos dibujado el borde de la circunferencia:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">nxtSetPixel<span style="color: #009900;">&#40;</span>distancia<span style="color: #339933;">*</span>cosDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">31</span><span style="color: #339933;">*</span>sinDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">32</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Sin embargo es una representación muy poco precisa, ya que en realidad el objeto se debería dibujar en una coordenada y distinta, ya que es un punto intermedio de la recta que une el punto central de la circunferencia con su borde:</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/seno.jpg" alt="seno" title="seno" width="496" height="291" class="aligncenter size-full wp-image-6622" /></p>
<p>Por tanto habría que modificar la coordenada y, de forma que su valor sea igual a la distancia por el seno, igual que la coordenada x es la distancia por el coseno:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">nxtSetPixel<span style="color: #009900;">&#40;</span>distancia<span style="color: #339933;">*</span>cosDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> distancia<span style="color: #339933;">*</span>sinDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">32</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Para dibuja la recta necesitamos dos puntos. El otro punto será por supuesto el borde de la circunferencia de radio 32 píxeles donde estamos representando el sonar. Por tanto para pintar el recta sería:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">nxtDrawLine<span style="color: #009900;">&#40;</span>distancia<span style="color: #339933;">*</span>cosDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> distancia<span style="color: #339933;">*</span>sinDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">32</span><span style="color: #339933;">,</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">31</span><span style="color: #339933;">*</span>cosDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">31</span><span style="color: #339933;">*</span>sinDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">32</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>A la hora de detectar un objeto grande, dibujará varias lineas negras, una por cada grado que lo detecte, quedando como resultado un bloque negro representando dicho objeto.</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Sonar3-500x356.jpg" alt="Sonar" title="Sonar" width="500" height="356" class="aligncenter size-large wp-image-6632" /></p>
<p><strong>Eliminación de errores:</strong></p>
<p>Es sabido que el sensor de ultrasonidos falla bastante, generando una gran cantidad de lecturas erróneas con valor 255. Por ello es importante eliminar estos errores de medida para que no aparezcan representados en el dibujo (por ejemplo que este dibujando en el sonar una caja que tenga enfrente y de repente dibuje una línea de color blanco en medio de todas las negras). </p>
<p>Una buena idea es controlar cuando el el sensor marque 255 y actuar en consecuencia. Pero, ¿qué se podría hacer?, tratar de dibujar una línea negra cuando el objeto quizás se encuentre a más de 2 metros es igual de erróneo. Por tanto nos debemos fijar más bien en las medidas tomadas recientemente, y basarnos en ellas para saber si dibujar o no una línea, y de que longitud. Para ello tenemos que guardar todas las distancias medidas anteriormente.</p>
<p>Una vez tenemos las distancias anteriores guardadas podemos hacer que cada vez que detecte 255 cm, tome en cuenta un pequeño espectro de medidas anteriores (por ejemplo las diez medidas anteriores), calcule una media de esas medidas, y la use como referencia. Suponiendo que tengamos un vector llamado distancias, quedaría de la siguiente manera:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>valor <span style="color: #339933;">==</span> <span style="color: #0000dd;">255</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; aux <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> j <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;=</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; aux <span style="color: #339933;">=</span> aux <span style="color: #339933;">+</span> distancias<span style="color: #009900;">&#91;</span>actual<span style="color: #339933;">-</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; valor <span style="color: #339933;">=</span> aux <span style="color: #339933;">/</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Con estos dos conceptos podemos crear un radar bastante mas eficaz, aunque como siempre dependemos de la poca precisión del sensor de ultrasonidos de LEGO.</p>
<p><strong>Programa del Sonar:</strong></p>
<p>Aplicando los conceptos vistos anteriormente, el programa del sonar ampliado gana precisión en la representación de los objetos que detecta. Todo esto nos facilitará comprender más el funcionamiento del sensor de ultrasonidos. Recordad repasar el <a href="http://blog.electricbricks.com/es/2010/03/tutorial-robotc-lego-mindstorms-nxt-4/">artículo sobre ultrasonidos</a>, para tener más claro el uso avanzado de motores. El programa completo es el siguiente:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#pragma config(Sensor, S4, &nbsp; &nbsp; sonarSensor, &nbsp; &nbsp; &nbsp; &nbsp; sensorSONAR)</span><br />
<br />
<span style="color: #993333;">task</span> <span style="color: #993333;">main</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #993333;">int</span> grado<span style="color: #339933;">,</span> valor<span style="color: #339933;">,</span> aux<span style="color: #339933;">,</span> alcance <span style="color: #339933;">=</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> espectro <span style="color: #339933;">=</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">;</span><br />
&nbsp; nMotorEncoder<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #993333;">int</span> distancias<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">360</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;=</span> <span style="color: #0000dd;">359</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>nMotorEncoder<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> i<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; valor <span style="color: #339933;">=</span> SensorValue<span style="color: #009900;">&#91;</span>sonarSensor<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; distancias<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> valor<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>valor <span style="color: #339933;">==</span> <span style="color: #0000dd;">255</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;=</span> espectro<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; aux <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> j <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;=</span> espectro<span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; aux <span style="color: #339933;">=</span> aux <span style="color: #339933;">+</span> distancias<span style="color: #009900;">&#91;</span>i<span style="color: #339933;">-</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; valor <span style="color: #339933;">=</span> aux <span style="color: #339933;">/</span> espectro<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>valor <span style="color: #339933;">&lt;=</span> alcance<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #993333;">int</span> aux <span style="color: #339933;">=</span> valor<span style="color: #339933;">*</span><span style="color: #0000dd;">32</span><span style="color: #339933;">/</span>alcance<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; nxtDrawLine<span style="color: #009900;">&#40;</span>aux<span style="color: #339933;">*</span>cosDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> aux<span style="color: #339933;">*</span>sinDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">32</span><span style="color: #339933;">,</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">31</span><span style="color: #339933;">*</span>cosDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">31</span><span style="color: #339933;">*</span>sinDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">32</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; nxtSetPixel<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">31</span><span style="color: #339933;">*</span>cosDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">31</span><span style="color: #339933;">*</span>sinDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">32</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>nMotorEncoder<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">30</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">5000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p><strong>5 &#8211; </strong>Creamos bastantes variables que nos ayudarán a manejar nuestro programa, como rango del sonar, el valor actual actual, o espectro para realizar la media en caso de lectura errónea.</p>
<p><strong>7 -</strong> Así es como se define una tabla de 360 elementos, en ella guardaremos todas las distancias.</p>
<p><strong>18 a 24 -</strong> Aquí controlamos los valores 255.</p>
<p><strong>26 a 33 &#8211; </strong>Aquí realizamos el dibujo.</p>
<p>Y aquí está el video que os prometí:</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/4i8e0qYgSNU&#038;hl=es_ES&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/4i8e0qYgSNU&#038;hl=es_ES&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<p>Por favor visitad el <a href="http://www.electricbricks.com/forum/index.php?topic=396.msg2342#msg2342">foro</a> si tenéis alguna duda. </p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-scriptstyle">
			<a href="http://scriptandstyle.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Submit this to Script &amp; Style">Submit this to Script &amp; Style</a>
		</li>
		<li class="sexy-blinklist">
			<a href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;Title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Share this on Blinklist">Share this on Blinklist</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC&amp;desc=EnglishEn%20el%20art%C3%ADculo%20anterior%20vimos%20como%20implementar%20el%20sonar%20b%C3%A1sico.%20En%20este%20art%C3%ADculo%20voy%20a%20expandir%20el%20sonar%20para%20que%20tenga%20una%20mayor%20funcionalidad%2C%20y%20se%20puedan%20observar%20mejor%20los%20objetos%20por%20pantalla.%20Para%20ello%20usaremos%20nuevas%20funciones%20del%20LCD%20del%20NXT%2C%20y%20seguiremos%20utilizando%20la%20trigonometr%C3" rel="nofollow" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;submitHeadline=Sonar+mejorado+en+RobotC&amp;submitSummary=EnglishEn%20el%20art%C3%ADculo%20anterior%20vimos%20como%20implementar%20el%20sonar%20b%C3%A1sico.%20En%20este%20art%C3%ADculo%20voy%20a%20expandir%20el%20sonar%20para%20que%20tenga%20una%20mayor%20funcionalidad%2C%20y%20se%20puedan%20observar%20mejor%20los%20objetos%20por%20pantalla.%20Para%20ello%20usaremos%20nuevas%20funciones%20del%20LCD%20del%20NXT%2C%20y%20seguiremos%20utilizando%20la%20trigonometr%C3&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/" rel="nofollow" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;t=Sonar+mejorado+en+RobotC" rel="nofollow" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-designfloat">
			<a href="http://www.designfloat.com/submit.php?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Submit this to DesignFloat">Submit this to DesignFloat</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?u=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;t=Sonar+mejorado+en+RobotC" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Sonar+mejorado+en+RobotC+-+http://b2l.me/q4kvq+" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Sonar%20mejorado%20en%20RobotC%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22EnglishEn%20el%20art%C3%ADculo%20anterior%20vimos%20como%20implementar%20el%20sonar%20b%C3%A1sico.%20En%20este%20art%C3%ADculo%20voy%20a%20expandir%20el%20sonar%20para%20que%20tenga%20una%20mayor%20funcionalidad%2C%20y%20se%20puedan%20observar%20mejor%20los%20objetos%20por%20pantalla.%20Para%20ello%20usaremos%20nuevas%20funciones%20del%20LCD%20del%20NXT%2C%20y%20seguiremos%20utilizando%20la%20trigonometr%C3%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-tomuse">
			<a href="mailto:tips@tomuse.com?subject=New%20tip%20submitted%20via%20the%20SexyBookmarks%20Plugin!&amp;body=I%20would%20like%20to%20submit%20this%20article%3A%20%22Sonar%20mejorado%20en%20RobotC%22%20for%20possible%20inclusion%20on%20ToMuse.%0A%0A%22EnglishEn%20el%20art%C3%ADculo%20anterior%20vimos%20como%20implementar%20el%20sonar%20b%C3%A1sico.%20En%20este%20art%C3%ADculo%20voy%20a%20expandir%20el%20sonar%20para%20que%20tenga%20una%20mayor%20funcionalidad%2C%20y%20se%20puedan%20observar%20mejor%20los%20objetos%20por%20pantalla.%20Para%20ello%20usaremos%20nuevas%20funciones%20del%20LCD%20del%20NXT%2C%20y%20seguiremos%20utilizando%20la%20trigonometr%C3%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/" rel="nofollow" title="Suggest this article to ToMuse">Suggest this article to ToMuse</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC&amp;summary=EnglishEn%20el%20art%C3%ADculo%20anterior%20vimos%20como%20implementar%20el%20sonar%20b%C3%A1sico.%20En%20este%20art%C3%ADculo%20voy%20a%20expandir%20el%20sonar%20para%20que%20tenga%20una%20mayor%20funcionalidad%2C%20y%20se%20puedan%20observar%20mejor%20los%20objetos%20por%20pantalla.%20Para%20ello%20usaremos%20nuevas%20funciones%20del%20LCD%20del%20NXT%2C%20y%20seguiremos%20utilizando%20la%20trigonometr%C3&amp;source=electricBricks" rel="nofollow" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-newsvine">
			<a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;h=Sonar+mejorado+en+RobotC" rel="nofollow" title="Seed this on Newsvine">Seed this on Newsvine</a>
		</li>
		<li class="sexy-devmarks">
			<a href="http://devmarks.com/index.php?posttext=EnglishEn%20el%20art%C3%ADculo%20anterior%20vimos%20como%20implementar%20el%20sonar%20b%C3%A1sico.%20En%20este%20art%C3%ADculo%20voy%20a%20expandir%20el%20sonar%20para%20que%20tenga%20una%20mayor%20funcionalidad%2C%20y%20se%20puedan%20observar%20mejor%20los%20objetos%20por%20pantalla.%20Para%20ello%20usaremos%20nuevas%20funciones%20del%20LCD%20del%20NXT%2C%20y%20seguiremos%20utilizando%20la%20trigonometr%C3&amp;posturl=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;posttitle=Sonar+mejorado+en+RobotC" rel="nofollow" title="Share this on Devmarks">Share this on Devmarks</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;bm_description=Sonar+mejorado+en+RobotC&amp;plugin=sexybookmarks" rel="nofollow" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="sexy-izeby">
			<a href="http://izeby.com/submit.php?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/" rel="nofollow" title="Add this to Izeby">Add this to Izeby</a>
		</li>
		<li class="sexy-tipd">
			<a href="http://tipd.com/submit.php?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/" rel="nofollow" title="Share this on Tipd">Share this on Tipd</a>
		</li>
		<li class="sexy-pfbuzz">
			<a href="http://pfbuzz.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Share this on PFBuzz">Share this on PFBuzz</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Sonar+mejorado+en+RobotC&amp;link=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/" rel="nofollow" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-blogmarks">
			<a href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Mark this on BlogMarks">Mark this on BlogMarks</a>
		</li>
		<li class="sexy-twittley">
			<a href="http://twittley.com/submit/?title=Sonar+mejorado+en+RobotC&amp;url=http%3A%2F%2Fblog.electricbricks.com%2F2010%2F04%2Ftutorial-robotc-lego-mindstorms-nxt-9%2F&amp;desc=EnglishEn%20el%20art%C3%ADculo%20anterior%20vimos%20como%20implementar%20el%20sonar%20b%C3%A1sico.%20En%20este%20art%C3%ADculo%20voy%20a%20expandir%20el%20sonar%20para%20que%20tenga%20una%20mayor%20funcionalidad%2C%20y%20se%20puedan%20observar%20mejor%20los%20objetos%20por%20pantalla.%20Para%20ello%20usaremos%20nuevas%20funciones%20del%20LCD%20del%20NXT%2C%20y%20seguiremos%20utilizando%20la%20trigonometr%C3&amp;pcat=Technology&amp;tags=" rel="nofollow" title="Submit this to Twittley">Submit this to Twittley</a>
		</li>
		<li class="sexy-fwisp">
			<a href="http://fwisp.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/" rel="nofollow" title="Share this on Fwisp">Share this on Fwisp</a>
		</li>
		<li class="sexy-designmoo">
			<a href="http://designmoo.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC&amp;body=EnglishEn%20el%20art%C3%ADculo%20anterior%20vimos%20como%20implementar%20el%20sonar%20b%C3%A1sico.%20En%20este%20art%C3%ADculo%20voy%20a%20expandir%20el%20sonar%20para%20que%20tenga%20una%20mayor%20funcionalidad%2C%20y%20se%20puedan%20observar%20mejor%20los%20objetos%20por%20pantalla.%20Para%20ello%20usaremos%20nuevas%20funciones%20del%20LCD%20del%20NXT%2C%20y%20seguiremos%20utilizando%20la%20trigonometr%C3" rel="nofollow" title="Moo this on DesignMoo!">Moo this on DesignMoo!</a>
		</li>
		<li class="sexy-bobrdobr">
			<a href="http://bobrdobr.ru/addext.html?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Share this on BobrDobr">Share this on BobrDobr</a>
		</li>
		<li class="sexy-yandex">
			<a href="http://zakladki.yandex.ru/userarea/links/addfromfav.asp?bAddLink_x=1&amp;lurl=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;lname=Sonar+mejorado+en+RobotC" rel="nofollow" title="Add this to Yandex.Bookmarks">Add this to Yandex.Bookmarks</a>
		</li>
		<li class="sexy-memoryru">
			<a href="http://memori.ru/link/?sm=1&amp;u_data[url]=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;u_data[name]=Sonar+mejorado+en+RobotC" rel="nofollow" title="Add this to Memory.ru">Add this to Memory.ru</a>
		</li>
		<li class="sexy-100zakladok">
			<a href="http://www.100zakladok.ru/save/?bmurl=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;bmtitle=Sonar+mejorado+en+RobotC" rel="nofollow" title="Add this to 100 bookmarks">Add this to 100 bookmarks</a>
		</li>
		<li class="sexy-moemesto">
			<a href="http://moemesto.ru/post.php?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Add this to MyPlace">Add this to MyPlace</a>
		</li>
		<li class="sexy-hackernews">
			<a href="http://news.ycombinator.com/submitlink?u=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;t=Sonar+mejorado+en+RobotC" rel="nofollow" title="Submit this to Hacker News">Submit this to Hacker News</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/" rel="nofollow" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
		<li class="sexy-designbump">
			<a href="http://designbump.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC&amp;body=EnglishEn%20el%20art%C3%ADculo%20anterior%20vimos%20como%20implementar%20el%20sonar%20b%C3%A1sico.%20En%20este%20art%C3%ADculo%20voy%20a%20expandir%20el%20sonar%20para%20que%20tenga%20una%20mayor%20funcionalidad%2C%20y%20se%20puedan%20observar%20mejor%20los%20objetos%20por%20pantalla.%20Para%20ello%20usaremos%20nuevas%20funciones%20del%20LCD%20del%20NXT%2C%20y%20seguiremos%20utilizando%20la%20trigonometr%C3" rel="nofollow" title="Bump this on DesignBump">Bump this on DesignBump</a>
		</li>
		<li class="sexy-ning">
			<a href="http://bookmarks.ning.com/addItem.php?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;T=Sonar+mejorado+en+RobotC" rel="nofollow" title="Add this to Ning">Add this to Ning</a>
		</li>
		<li class="sexy-identica">
			<a href="http://identi.ca//index.php?action=newnotice&amp;status_textarea=Reading:+&quot;Sonar+mejorado+en+RobotC&quot;+-+from+http://b2l.me/q4kvq" rel="nofollow" title="Post this to Identica">Post this to Identica</a>
		</li>
		<li class="sexy-xerpi">
			<a href="http://www.xerpi.com/block/add_link_from_extension?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Save this to Xerpi">Save this to Xerpi</a>
		</li>
		<li class="sexy-wikio">
			<a href="http://www.wikio.com/sharethis?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Share this on Wikio">Share this on Wikio</a>
		</li>
		<li class="sexy-techmeme">
			<a href="http://twitter.com/home/?status=Tip+@Techmeme+http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/+&quot;Sonar+mejorado+en+RobotC&quot;" rel="nofollow" title="Tip this to TechMeme">Tip this to TechMeme</a>
		</li>
		<li class="sexy-sphinn">
			<a href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/" rel="nofollow" title="Sphinn this on Sphinn">Sphinn this on Sphinn</a>
		</li>
		<li class="sexy-posterous">
			<a href="http://posterous.com/share?linkto=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC&amp;selection=EnglishEn%20el%20art%C3%ADculo%20anterior%20vimos%20como%20implementar%20el%20sonar%20b%C3%A1sico.%20En%20este%20art%C3%ADculo%20voy%20a%20expandir%20el%20sonar%20para%20que%20tenga%20una%20mayor%20funcionalidad%2C%20y%20se%20puedan%20observar%20mejor%20los%20objetos%20por%20pantalla.%20Para%20ello%20usaremos%20nuevas%20funciones%20del%20LCD%20del%20NXT%2C%20y%20seguiremos%20utilizando%20la%20trigonometr%C3" rel="nofollow" title="Post this to Posterous">Post this to Posterous</a>
		</li>
		<li class="sexy-globalgrind">
			<a href="http://globalgrind.com/submission/submit.aspx?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;type=Article&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Grind this! on Global Grind">Grind this! on Global Grind</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC&amp;body=EnglishEn%20el%20art%C3%ADculo%20anterior%20vimos%20como%20implementar%20el%20sonar%20b%C3%A1sico.%20En%20este%20art%C3%ADculo%20voy%20a%20expandir%20el%20sonar%20para%20que%20tenga%20una%20mayor%20funcionalidad%2C%20y%20se%20puedan%20observar%20mejor%20los%20objetos%20por%20pantalla.%20Para%20ello%20usaremos%20nuevas%20funciones%20del%20LCD%20del%20NXT%2C%20y%20seguiremos%20utilizando%20la%20trigonometr%C3" rel="nofollow" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-nujij">
			<a href="http://nujij.nl/jij.lynkx?t=Sonar+mejorado+en+RobotC&amp;u=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;b=EnglishEn%20el%20art%C3%ADculo%20anterior%20vimos%20como%20implementar%20el%20sonar%20b%C3%A1sico.%20En%20este%20art%C3%ADculo%20voy%20a%20expandir%20el%20sonar%20para%20que%20tenga%20una%20mayor%20funcionalidad%2C%20y%20se%20puedan%20observar%20mejor%20los%20objetos%20por%20pantalla.%20Para%20ello%20usaremos%20nuevas%20funciones%20del%20LCD%20del%20NXT%2C%20y%20seguiremos%20utilizando%20la%20trigonometr%C3" rel="nofollow" title="Submit this to NUjij">Submit this to NUjij</a>
		</li>
		<li class="sexy-ekudos">
			<a href="http://www.ekudos.nl/artikel/nieuw?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC&amp;desc=EnglishEn%20el%20art%C3%ADculo%20anterior%20vimos%20como%20implementar%20el%20sonar%20b%C3%A1sico.%20En%20este%20art%C3%ADculo%20voy%20a%20expandir%20el%20sonar%20para%20que%20tenga%20una%20mayor%20funcionalidad%2C%20y%20se%20puedan%20observar%20mejor%20los%20objetos%20por%20pantalla.%20Para%20ello%20usaremos%20nuevas%20funciones%20del%20LCD%20del%20NXT%2C%20y%20seguiremos%20utilizando%20la%20trigonometr%C3" rel="nofollow" title="Submit this to eKudos">Submit this to eKudos</a>
		</li>
		<li class="sexy-netvouz">
			<a href="http://www.netvouz.com/action/submitBookmark?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC&amp;popup=no" rel="nofollow" title="Submit this to Netvouz">Submit this to Netvouz</a>
		</li>
		<li class="sexy-netvibes">
			<a href="http://www.netvibes.com/share?title=Sonar+mejorado+en+RobotC&amp;url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/" rel="nofollow" title="Submit this to Netvibes">Submit this to Netvibes</a>
		</li>
		<li class="sexy-fleck">
			<a href="http://beta3.fleck.com/bookmarklet.php?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Share this on Fleck">Share this on Fleck</a>
		</li>
		<li class="sexy-blogospherenews">
			<a href="http://www.blogospherenews.com/submit.php?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/&amp;title=Sonar+mejorado+en+RobotC" rel="nofollow" title="Share this on Blogosphere News">Share this on Blogosphere News</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[RobotC]]></series:name>
	</item>
		<item>
		<title>Sonar básico en RobotC</title>
		<link>http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/</link>
		<comments>http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 12:10:03 +0000</pubDate>
		<dc:creator>Alvaro</dc:creator>
				<category><![CDATA[NXT]]></category>
		<category><![CDATA[RobotC]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[robótica]]></category>

		<guid isPermaLink="false">http://blog.electricbricks.com/es/?p=6604</guid>
		<description><![CDATA[
English

El sonar (del inglés SONAR, acrónimo de Sound Navigation And Ranging, ‘navegación y alcance por sonido’) es una técnica que usa la propagación del sonido bajo el agua (principalmente) para navegar, comunicarse o detectar otros buques.
El sonar puede usarse como medio de localización acústica, funcionando de forma similar al radar, con la diferencia de que [...]]]></description>
			<content:encoded><![CDATA[<ul class="lang_switch">
<li class="lang_switch"><a href="http://blog.electricbricks.com/en/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/"><img src="http://blog.electricbricks.com/wp-content/plugins/zdmultilang/flags/en_US.png" alt="English" title="English" border="0">English</a></li>
</ul>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/sonar_an_sqS31-150x170.jpg" alt="sonar_an_sqS31" title="sonar_an_sqS31" width="150" height="170" class="alignleft size-thumbnail wp-image-6607" />El sonar (del inglés SONAR, acrónimo de Sound Navigation And Ranging, ‘navegación y alcance por sonido’) es una técnica que usa la propagación del sonido bajo el agua (principalmente) para navegar, comunicarse o detectar otros buques.</p>
<p>El sonar puede usarse como medio de localización acústica, funcionando de forma similar al radar, con la diferencia de que en lugar de emitir señales de radiofrecuencia se emplean impulsos sonoros. De hecho, la localización acústica se usó en aire antes que el radar, siendo aún de aplicación el SODAR (la exploración vertical aérea con sonar) para la investigación atmosférica.<span id="more-6604"></span></p>
<p>El término «sonar» se usa también para aludir al equipo empleado para generar y recibir el sonido. Las frecuencias usadas en los sistemas de sonar van desde las infrasónicas a las ultrasónicas.</p>
<p>Aunque algunos animales (como delfines y murciélagos) han usado probablemente el sonido para la detección de objetos durante millones de años, el uso por parte de humanos fue registrado por vez primera por Leonardo Da Vinci en 1490. Se decía que se usaba un tubo metido en el agua para detectar barcos, poniendo un oído en su extremo. En el siglo XIX se usaron campanas subacuáticas como complemento a los faros para avisar del peligro a los marineros.</p>
<p><strong>Manejo de sensores:</strong></p>
<p>El manejo básico del sensor de ultrasonidos lo vimos en el artículo <a href="http://blog.electricbricks.com/es/2010/03/tutorial-robotc-lego-mindstorms-nxt-4/">Manejo del sensor de ultrasonido en RobotC</a>. En este artículo no añadiremos más funcionalidad al ultrasonido , aunque si veremos una nueva función para mostrar datos por pantalla. En este caso usaremos una función para dibujar píxeles, ya que necesitaremos dibujar obstáculos. La función es:</p>
<p>nxtSetPixel(int x, int y): Dibuja el píxel de la posición indicada. Recordad que la pantalla tiene 100 píxeles de ancho (del 0 al 99) por 64 de alto (del 0 al 63).</p>
<p><strong>Un poco de trigonometría:</strong></p>
<p>Para dibujar el sonar en forma de círculo y los objetos que detectemos necesitamos utilizar senos y cosenos. Suponiendo que queramos crear un circulo de radio 32 (la mitad de 64 que es el ancho de la pantalla), centrado en medio de la pantalla (coordenadas x = 50 e y = 32 aprox) necesitaremos dibujar 360 píxeles. La posición de cada píxel será igual a:</p>
<p>x = 50 + 32*cos(número de píxel)<br />
y = 32 + 32*sen(número de píxel) </p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/9846-NXT-Ultra-Sonic-Sensor-500x339.jpg" alt="9846 NXT Ultra Sonic Sensor" title="9846 NXT Ultra Sonic Sensor" width="500" height="339" class="aligncenter size-large wp-image-6610" /></p>
<p>En RobotC existen funciones para calcular senos y cosenos:</p>
<p><strong>sinDegrees(angulo_en_grados):</strong> Devuelve el seno del ángulo cuyos grados son los indicados.<br />
<strong>cosDegrees(angulo_en_grados):</strong> Devuelve el coseno del ángulo cuyos grados son los indicados.</p>
<p><strong>Programa de prueba:</strong></p>
<p>Lo que hará este programa es realizar un giro completo de 360º mientras va tomando mediciones de distancia con el sensor de ultrasonidos, y a la vez dibujando un círculo y dentro de el todos los objetos que se encuentren a menos de 100 cm en este caso. Una vez finalizado el recorrido el sensor de ultrasonidos volverá a su posición. Aquí tenéis el código:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#pragma config(Sensor, S4, &nbsp; &nbsp; sonarSensor, &nbsp; &nbsp; &nbsp; &nbsp; sensorSONAR)</span><br />
<br />
<span style="color: #993333;">task</span> <span style="color: #993333;">main</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #993333;">int</span> grado<span style="color: #339933;">,</span> valor<span style="color: #339933;">,</span> min <span style="color: #339933;">=</span> <span style="color: #0000dd;">255</span><span style="color: #339933;">;</span><br />
&nbsp; nMotorEncoder<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;=</span> <span style="color: #0000dd;">360</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>nMotorEncoder<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> i<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; nxtSetPixel<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">31</span><span style="color: #339933;">*</span>cosDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">31</span><span style="color: #339933;">*</span>sinDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">32</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; valor <span style="color: #339933;">=</span> SensorValue<span style="color: #009900;">&#91;</span>sonarSensor<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>valor <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #993333;">int</span> aux <span style="color: #339933;">=</span> valor<span style="color: #339933;">*</span><span style="color: #0000dd;">32</span><span style="color: #339933;">/</span><span style="color: #0000dd;">100</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; nxtSetPixel<span style="color: #009900;">&#40;</span>aux<span style="color: #339933;">*</span>cosDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">31</span><span style="color: #339933;">*</span>sinDegrees<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">32</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>nMotorEncoder<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">30</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; motor<span style="color: #009900;">&#91;</span>motorB<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; wait1Msec<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">5000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>En breve colgaremos un vídeo de muestra.</p>
<p>Espero que os guste el programa. Si tenéis dudas, preguntad en el <a href="http://www.electricbricks.com/forum/index.php?topic=396.msg2342#msg2342">foro</a>.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-scriptstyle">
			<a href="http://scriptandstyle.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Submit this to Script &amp; Style">Submit this to Script &amp; Style</a>
		</li>
		<li class="sexy-blinklist">
			<a href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;Title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Share this on Blinklist">Share this on Blinklist</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC&amp;desc=EnglishEl%20sonar%20%28del%20ingl%C3%A9s%20SONAR%2C%20acr%C3%B3nimo%20de%20Sound%20Navigation%20And%20Ranging%2C%20%E2%80%98navegaci%C3%B3n%20y%20alcance%20por%20sonido%E2%80%99%29%20es%20una%20t%C3%A9cnica%20que%20usa%20la%20propagaci%C3%B3n%20del%20sonido%20bajo%20el%20agua%20%28principalmente%29%20para%20navegar%2C%20comunicarse%20o%20detectar%20otros%20buques.%0D%0A%0D%0AEl%20sonar%20puede%20usarse%20como%20medio%20de%20localizaci" rel="nofollow" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;submitHeadline=Sonar+b%C3%A1sico+en+RobotC&amp;submitSummary=EnglishEl%20sonar%20%28del%20ingl%C3%A9s%20SONAR%2C%20acr%C3%B3nimo%20de%20Sound%20Navigation%20And%20Ranging%2C%20%E2%80%98navegaci%C3%B3n%20y%20alcance%20por%20sonido%E2%80%99%29%20es%20una%20t%C3%A9cnica%20que%20usa%20la%20propagaci%C3%B3n%20del%20sonido%20bajo%20el%20agua%20%28principalmente%29%20para%20navegar%2C%20comunicarse%20o%20detectar%20otros%20buques.%0D%0A%0D%0AEl%20sonar%20puede%20usarse%20como%20medio%20de%20localizaci&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/" rel="nofollow" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;t=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-designfloat">
			<a href="http://www.designfloat.com/submit.php?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Submit this to DesignFloat">Submit this to DesignFloat</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?u=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;t=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Sonar+b%C3%A1sico+en+RobotC+-+http://b2l.me/q4kvs+" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Sonar%20b%C3%A1sico%20en%20RobotC%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22EnglishEl%20sonar%20%28del%20ingl%C3%A9s%20SONAR%2C%20acr%C3%B3nimo%20de%20Sound%20Navigation%20And%20Ranging%2C%20%E2%80%98navegaci%C3%B3n%20y%20alcance%20por%20sonido%E2%80%99%29%20es%20una%20t%C3%A9cnica%20que%20usa%20la%20propagaci%C3%B3n%20del%20sonido%20bajo%20el%20agua%20%28principalmente%29%20para%20navegar%2C%20comunicarse%20o%20detectar%20otros%20buques.%0D%0A%0D%0AEl%20sonar%20puede%20usarse%20como%20medio%20de%20localizaci%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-tomuse">
			<a href="mailto:tips@tomuse.com?subject=New%20tip%20submitted%20via%20the%20SexyBookmarks%20Plugin!&amp;body=I%20would%20like%20to%20submit%20this%20article%3A%20%22Sonar%20b%C3%A1sico%20en%20RobotC%22%20for%20possible%20inclusion%20on%20ToMuse.%0A%0A%22EnglishEl%20sonar%20%28del%20ingl%C3%A9s%20SONAR%2C%20acr%C3%B3nimo%20de%20Sound%20Navigation%20And%20Ranging%2C%20%E2%80%98navegaci%C3%B3n%20y%20alcance%20por%20sonido%E2%80%99%29%20es%20una%20t%C3%A9cnica%20que%20usa%20la%20propagaci%C3%B3n%20del%20sonido%20bajo%20el%20agua%20%28principalmente%29%20para%20navegar%2C%20comunicarse%20o%20detectar%20otros%20buques.%0D%0A%0D%0AEl%20sonar%20puede%20usarse%20como%20medio%20de%20localizaci%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/" rel="nofollow" title="Suggest this article to ToMuse">Suggest this article to ToMuse</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC&amp;summary=EnglishEl%20sonar%20%28del%20ingl%C3%A9s%20SONAR%2C%20acr%C3%B3nimo%20de%20Sound%20Navigation%20And%20Ranging%2C%20%E2%80%98navegaci%C3%B3n%20y%20alcance%20por%20sonido%E2%80%99%29%20es%20una%20t%C3%A9cnica%20que%20usa%20la%20propagaci%C3%B3n%20del%20sonido%20bajo%20el%20agua%20%28principalmente%29%20para%20navegar%2C%20comunicarse%20o%20detectar%20otros%20buques.%0D%0A%0D%0AEl%20sonar%20puede%20usarse%20como%20medio%20de%20localizaci&amp;source=electricBricks" rel="nofollow" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-newsvine">
			<a href="http://www.newsvine.com/_tools/seed&amp;save?u=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;h=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Seed this on Newsvine">Seed this on Newsvine</a>
		</li>
		<li class="sexy-devmarks">
			<a href="http://devmarks.com/index.php?posttext=EnglishEl%20sonar%20%28del%20ingl%C3%A9s%20SONAR%2C%20acr%C3%B3nimo%20de%20Sound%20Navigation%20And%20Ranging%2C%20%E2%80%98navegaci%C3%B3n%20y%20alcance%20por%20sonido%E2%80%99%29%20es%20una%20t%C3%A9cnica%20que%20usa%20la%20propagaci%C3%B3n%20del%20sonido%20bajo%20el%20agua%20%28principalmente%29%20para%20navegar%2C%20comunicarse%20o%20detectar%20otros%20buques.%0D%0A%0D%0AEl%20sonar%20puede%20usarse%20como%20medio%20de%20localizaci&amp;posturl=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;posttitle=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Share this on Devmarks">Share this on Devmarks</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;bm_description=Sonar+b%C3%A1sico+en+RobotC&amp;plugin=sexybookmarks" rel="nofollow" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="sexy-izeby">
			<a href="http://izeby.com/submit.php?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/" rel="nofollow" title="Add this to Izeby">Add this to Izeby</a>
		</li>
		<li class="sexy-tipd">
			<a href="http://tipd.com/submit.php?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/" rel="nofollow" title="Share this on Tipd">Share this on Tipd</a>
		</li>
		<li class="sexy-pfbuzz">
			<a href="http://pfbuzz.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Share this on PFBuzz">Share this on PFBuzz</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Sonar+b%C3%A1sico+en+RobotC&amp;link=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/" rel="nofollow" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-blogmarks">
			<a href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Mark this on BlogMarks">Mark this on BlogMarks</a>
		</li>
		<li class="sexy-twittley">
			<a href="http://twittley.com/submit/?title=Sonar+b%C3%A1sico+en+RobotC&amp;url=http%3A%2F%2Fblog.electricbricks.com%2F2010%2F04%2Ftutorial-robotc-lego-mindstorms-nxt-8%2F&amp;desc=EnglishEl%20sonar%20%28del%20ingl%C3%A9s%20SONAR%2C%20acr%C3%B3nimo%20de%20Sound%20Navigation%20And%20Ranging%2C%20%E2%80%98navegaci%C3%B3n%20y%20alcance%20por%20sonido%E2%80%99%29%20es%20una%20t%C3%A9cnica%20que%20usa%20la%20propagaci%C3%B3n%20del%20sonido%20bajo%20el%20agua%20%28principalmente%29%20para%20navegar%2C%20comunicarse%20o%20detectar%20otros%20buques.%0D%0A%0D%0AEl%20sonar%20puede%20usarse%20como%20medio%20de%20localizaci&amp;pcat=Technology&amp;tags=" rel="nofollow" title="Submit this to Twittley">Submit this to Twittley</a>
		</li>
		<li class="sexy-fwisp">
			<a href="http://fwisp.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/" rel="nofollow" title="Share this on Fwisp">Share this on Fwisp</a>
		</li>
		<li class="sexy-designmoo">
			<a href="http://designmoo.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC&amp;body=EnglishEl%20sonar%20%28del%20ingl%C3%A9s%20SONAR%2C%20acr%C3%B3nimo%20de%20Sound%20Navigation%20And%20Ranging%2C%20%E2%80%98navegaci%C3%B3n%20y%20alcance%20por%20sonido%E2%80%99%29%20es%20una%20t%C3%A9cnica%20que%20usa%20la%20propagaci%C3%B3n%20del%20sonido%20bajo%20el%20agua%20%28principalmente%29%20para%20navegar%2C%20comunicarse%20o%20detectar%20otros%20buques.%0D%0A%0D%0AEl%20sonar%20puede%20usarse%20como%20medio%20de%20localizaci" rel="nofollow" title="Moo this on DesignMoo!">Moo this on DesignMoo!</a>
		</li>
		<li class="sexy-bobrdobr">
			<a href="http://bobrdobr.ru/addext.html?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Share this on BobrDobr">Share this on BobrDobr</a>
		</li>
		<li class="sexy-yandex">
			<a href="http://zakladki.yandex.ru/userarea/links/addfromfav.asp?bAddLink_x=1&amp;lurl=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;lname=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Add this to Yandex.Bookmarks">Add this to Yandex.Bookmarks</a>
		</li>
		<li class="sexy-memoryru">
			<a href="http://memori.ru/link/?sm=1&amp;u_data[url]=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;u_data[name]=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Add this to Memory.ru">Add this to Memory.ru</a>
		</li>
		<li class="sexy-100zakladok">
			<a href="http://www.100zakladok.ru/save/?bmurl=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;bmtitle=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Add this to 100 bookmarks">Add this to 100 bookmarks</a>
		</li>
		<li class="sexy-moemesto">
			<a href="http://moemesto.ru/post.php?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Add this to MyPlace">Add this to MyPlace</a>
		</li>
		<li class="sexy-hackernews">
			<a href="http://news.ycombinator.com/submitlink?u=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;t=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Submit this to Hacker News">Submit this to Hacker News</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/" rel="nofollow" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
		<li class="sexy-designbump">
			<a href="http://designbump.com/submit?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC&amp;body=EnglishEl%20sonar%20%28del%20ingl%C3%A9s%20SONAR%2C%20acr%C3%B3nimo%20de%20Sound%20Navigation%20And%20Ranging%2C%20%E2%80%98navegaci%C3%B3n%20y%20alcance%20por%20sonido%E2%80%99%29%20es%20una%20t%C3%A9cnica%20que%20usa%20la%20propagaci%C3%B3n%20del%20sonido%20bajo%20el%20agua%20%28principalmente%29%20para%20navegar%2C%20comunicarse%20o%20detectar%20otros%20buques.%0D%0A%0D%0AEl%20sonar%20puede%20usarse%20como%20medio%20de%20localizaci" rel="nofollow" title="Bump this on DesignBump">Bump this on DesignBump</a>
		</li>
		<li class="sexy-ning">
			<a href="http://bookmarks.ning.com/addItem.php?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;T=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Add this to Ning">Add this to Ning</a>
		</li>
		<li class="sexy-identica">
			<a href="http://identi.ca//index.php?action=newnotice&amp;status_textarea=Reading:+&quot;Sonar+b%C3%A1sico+en+RobotC&quot;+-+from+http://b2l.me/q4kvs" rel="nofollow" title="Post this to Identica">Post this to Identica</a>
		</li>
		<li class="sexy-xerpi">
			<a href="http://www.xerpi.com/block/add_link_from_extension?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Save this to Xerpi">Save this to Xerpi</a>
		</li>
		<li class="sexy-wikio">
			<a href="http://www.wikio.com/sharethis?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Share this on Wikio">Share this on Wikio</a>
		</li>
		<li class="sexy-techmeme">
			<a href="http://twitter.com/home/?status=Tip+@Techmeme+http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/+&quot;Sonar+b%C3%A1sico+en+RobotC&quot;" rel="nofollow" title="Tip this to TechMeme">Tip this to TechMeme</a>
		</li>
		<li class="sexy-sphinn">
			<a href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/" rel="nofollow" title="Sphinn this on Sphinn">Sphinn this on Sphinn</a>
		</li>
		<li class="sexy-posterous">
			<a href="http://posterous.com/share?linkto=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC&amp;selection=EnglishEl%20sonar%20%28del%20ingl%C3%A9s%20SONAR%2C%20acr%C3%B3nimo%20de%20Sound%20Navigation%20And%20Ranging%2C%20%E2%80%98navegaci%C3%B3n%20y%20alcance%20por%20sonido%E2%80%99%29%20es%20una%20t%C3%A9cnica%20que%20usa%20la%20propagaci%C3%B3n%20del%20sonido%20bajo%20el%20agua%20%28principalmente%29%20para%20navegar%2C%20comunicarse%20o%20detectar%20otros%20buques.%0D%0A%0D%0AEl%20sonar%20puede%20usarse%20como%20medio%20de%20localizaci" rel="nofollow" title="Post this to Posterous">Post this to Posterous</a>
		</li>
		<li class="sexy-globalgrind">
			<a href="http://globalgrind.com/submission/submit.aspx?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;type=Article&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Grind this! on Global Grind">Grind this! on Global Grind</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC&amp;body=EnglishEl%20sonar%20%28del%20ingl%C3%A9s%20SONAR%2C%20acr%C3%B3nimo%20de%20Sound%20Navigation%20And%20Ranging%2C%20%E2%80%98navegaci%C3%B3n%20y%20alcance%20por%20sonido%E2%80%99%29%20es%20una%20t%C3%A9cnica%20que%20usa%20la%20propagaci%C3%B3n%20del%20sonido%20bajo%20el%20agua%20%28principalmente%29%20para%20navegar%2C%20comunicarse%20o%20detectar%20otros%20buques.%0D%0A%0D%0AEl%20sonar%20puede%20usarse%20como%20medio%20de%20localizaci" rel="nofollow" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-nujij">
			<a href="http://nujij.nl/jij.lynkx?t=Sonar+b%C3%A1sico+en+RobotC&amp;u=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;b=EnglishEl%20sonar%20%28del%20ingl%C3%A9s%20SONAR%2C%20acr%C3%B3nimo%20de%20Sound%20Navigation%20And%20Ranging%2C%20%E2%80%98navegaci%C3%B3n%20y%20alcance%20por%20sonido%E2%80%99%29%20es%20una%20t%C3%A9cnica%20que%20usa%20la%20propagaci%C3%B3n%20del%20sonido%20bajo%20el%20agua%20%28principalmente%29%20para%20navegar%2C%20comunicarse%20o%20detectar%20otros%20buques.%0D%0A%0D%0AEl%20sonar%20puede%20usarse%20como%20medio%20de%20localizaci" rel="nofollow" title="Submit this to NUjij">Submit this to NUjij</a>
		</li>
		<li class="sexy-ekudos">
			<a href="http://www.ekudos.nl/artikel/nieuw?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC&amp;desc=EnglishEl%20sonar%20%28del%20ingl%C3%A9s%20SONAR%2C%20acr%C3%B3nimo%20de%20Sound%20Navigation%20And%20Ranging%2C%20%E2%80%98navegaci%C3%B3n%20y%20alcance%20por%20sonido%E2%80%99%29%20es%20una%20t%C3%A9cnica%20que%20usa%20la%20propagaci%C3%B3n%20del%20sonido%20bajo%20el%20agua%20%28principalmente%29%20para%20navegar%2C%20comunicarse%20o%20detectar%20otros%20buques.%0D%0A%0D%0AEl%20sonar%20puede%20usarse%20como%20medio%20de%20localizaci" rel="nofollow" title="Submit this to eKudos">Submit this to eKudos</a>
		</li>
		<li class="sexy-netvouz">
			<a href="http://www.netvouz.com/action/submitBookmark?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC&amp;popup=no" rel="nofollow" title="Submit this to Netvouz">Submit this to Netvouz</a>
		</li>
		<li class="sexy-netvibes">
			<a href="http://www.netvibes.com/share?title=Sonar+b%C3%A1sico+en+RobotC&amp;url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/" rel="nofollow" title="Submit this to Netvibes">Submit this to Netvibes</a>
		</li>
		<li class="sexy-fleck">
			<a href="http://beta3.fleck.com/bookmarklet.php?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Share this on Fleck">Share this on Fleck</a>
		</li>
		<li class="sexy-blogospherenews">
			<a href="http://www.blogospherenews.com/submit.php?url=http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/&amp;title=Sonar+b%C3%A1sico+en+RobotC" rel="nofollow" title="Share this on Blogosphere News">Share this on Blogosphere News</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://blog.electricbricks.com/2010/04/tutorial-robotc-lego-mindstorms-nxt-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[RobotC]]></series:name>
	</item>
		<item>
		<title>Robot seguidor básico con sensor de ultrasonidos</title>
		<link>http://blog.electricbricks.com/2010/04/tutorial-robotc-mindstorms-nxt-7/</link>
		<comments>http://blog.electricbricks.com/2010/04/tutorial-robotc-mindstorms-nxt-7/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 11:31:27 +0000</pubDate>
		<dc:creator>Alvaro</dc:creator>
				<category><![CDATA[NXT]]></category>
		<category><![CDATA[RobotC]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[robótica]]></category>

		<guid isPermaLink="false">http://blog.electricbricks.com/?p=6585</guid>
		<description><![CDATA[
English

Actualmente es posible crear Robots avanzados que sean capaces de seguir a una persona guiándose por determinados patrones: como por el color de la ropa, su altura, &#8230; Aunque estos robots no tienen gran utilidad en la actualidad, es una funcionalidad que podría ser útil para complementar otras en un futuro. Con los LEGO Mindstorms [...]]]></description>
			<content:encoded><![CDATA[<ul class="lang_switch">
<li class="lang_switch"><a href="http://blog.electricbricks.com/en/2010/04/tutorial-robotc-mindstorms-nxt-7/"><img src="http://blog.electricbricks.com/wp-content/plugins/zdmultilang/flags/en_US.png" alt="English" title="English" border="0">English</a></li>
</ul>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Sigue-Objetos-1-150x112.jpg" alt="Sigue Objetos 1" title="Sigue Objetos 1" width="150" height="112" class="alignleft size-thumbnail wp-image-6590" />Actualmente es posible crear Robots avanzados que sean capaces de seguir a una persona guiándose por determinados patrones: como por el color de la ropa, su altura, &#8230; Aunque estos robots no tienen gran utilidad en la actualidad, es una funcionalidad que podría ser útil para complementar otras en un futuro. Con los LEGO Mindstorms NXT no es posible ser tan preciso, pero se puede conseguir un comportamiento parecido. Para ello usaremos el sensor de ultrasonido.<span id="more-6585"></span></p>
<p><strong>Programa de prueba:</strong><br />
Puesto que hoy no dispongo de mucho tiempo, el artículo no es tan largo como de costumbre. Antes de poneros con este programa os recomiendo que os leáis mis anteriores artículos de RobotC, especialmente el del manejo del <a href="http://blog.electricbricks.com/2010/03/tutorial-robotc-lego-mindstorms-nxt-4/">sensor de ultrasonidos</a>.</p>
<p>Este robot lo que hará principalmente es seguir a un objeto que se encuentre en línea con el. Cuando el objeto avance el robot lo seguirá avanzando también. Si el objeto se acerca demasiado el robot dará marcha atrás para no chocar con el.</p>
<p><img src="http://blog.electricbricks.com/wp-content/uploads/Sigue-Objetos-2-500x553.jpg" alt="Sigue Objetos 2" title="Sigue Objetos 2" width="500" height="553" class="aligncenter size-large wp-image-6591" /></p>
<p>Es importante definir unos buenos umbrales de distancia para saber cuando el robot tiene que seguir al objeto, o cuando tiene que dar marcha atrás. Teniendo en cuenta que el sensor de ultrasonidos suele fallar bastante en distancias menores a los 15cm, es aconsejable que la distancia para empezar a dar marcha atrás sea mayor (unos 25 cm por ejemplo). También es buena idea que no sean la misma distancia, que haya un margen de más de 10cm entre ellas. Por ejemplo si estoy diciendo que el robot de marcha atrás cuando me acerque a el a menos de 30 cm, le tendré que decir que se mueva para adelante solo cuando me encuentre a más de 40 cm. Si el robot se encuentra dentro de ese intervalo deberá estar parado.</p>
<p>Es también recomendable que cuando el sensor de utrasonidos detecte 255 cm (que en la mayoría de casos significa error) se quede quieto. Así evitaremos que el robot acelere cuando nos acercamos demasiado a el y las lecturas fallan. El código del programa no es muy largo, os lo escribo a continuación:</p>
<div class="codecolorer-container c dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#pragma config(Sensor, S4, &nbsp; &nbsp; sonar1, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sensorSONAR)</span><br />
<br />
<span style="color: #993333;">task</span> <span style="color: #993333;">main</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #993333;">int</span> min <span style="color: #339933;">=</span> <span style="color: #0000dd;">25</span><span style="color: #339933;">,</span> max <span style="color: #339933;">=</span> <span style="color: #0000dd;">35</span><span style="color: #339933;">;</span><br />
&nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Distancia al&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">3</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;objetivo: &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; nxtDisplayCenteredTextLine<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">5</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;%d cm&quot;</span><span style="color: #339933;">,</span> SensorValue<span style="color: #009900;">&#91;</span>sonar1<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>SensorValue<span style="color: #009900;">&#91;</span>sonar1<span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">255</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>SensorValue<span style="color: #009900;">&#91;</span>sonar1<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> max<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">100</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">100</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>SensorValue<span style="color: #009900;">&#91;</span>sonar1<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> min<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">100</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">100</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorA<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; motor<span style="color: #009900;">&#91;</span>motorC<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Aquí os dejo un vídeo bastante orientativo de como se comportaría el robor con dicho programa:</p>
<p><object width="480" height="385"><param name="movie" value="http:/