<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>0121-4993</journal-id>
<journal-title><![CDATA[Revista de Ingeniería]]></journal-title>
<abbrev-journal-title><![CDATA[rev.ing.]]></abbrev-journal-title>
<issn>0121-4993</issn>
<publisher>
<publisher-name><![CDATA[Universidad de los Andes.]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S0121-49932007000100001</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Sistema configurable de simulación 3D para robótica móvil. Plataforma de desarrollo K++]]></article-title>
<article-title xml:lang="en"><![CDATA[Configurable system for 3D simulation of mobile robotics. Development platform K++]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Martínez Suárez]]></surname>
<given-names><![CDATA[Juan Bautista]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Muñoz Ceballos]]></surname>
<given-names><![CDATA[Nelson David]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Londoño Ospina]]></surname>
<given-names><![CDATA[Nelson]]></given-names>
</name>
<xref ref-type="aff" rid="A03"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad de Antioquia Grupo de investigación en manejo eficiente de la Energía Eléctrica GIMEL ]]></institution>
<addr-line><![CDATA[Medellín ]]></addr-line>
<country>Colombia</country>
</aff>
<aff id="A02">
<institution><![CDATA[,Universidad de Antioquia Grupo de investigación en manejo eficiente de la Energía Eléctrica GIMEL ]]></institution>
<addr-line><![CDATA[Medellín ]]></addr-line>
<country>Colombia</country>
</aff>
<aff id="A03">
<institution><![CDATA[,Universidad de Antioquia Grupo de investigación en manejo eficiente de la Energía Eléctrica GIMEL ]]></institution>
<addr-line><![CDATA[Medellín ]]></addr-line>
<country>Colombia</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>05</month>
<year>2007</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>05</month>
<year>2007</year>
</pub-date>
<numero>25</numero>
<fpage>04</fpage>
<lpage>11</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_arttext&amp;pid=S0121-49932007000100001&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_abstract&amp;pid=S0121-49932007000100001&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_pdf&amp;pid=S0121-49932007000100001&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[Se presenta un sistema software que permite simular y controlar robots móviles, parametrizar características hardware, visualizar el estado de sensores y accionar actuadores (simulados o reales). K++ utiliza un lenguaje de programación propio. Se describen los resultados obtenidos en la programación de un algoritmo de control.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[A software system for simulation and control of mobile robots is presented, which allows hardware characteristic parametrization, sensors state visualization and to drive actuators (simulated or real). K++ usesan own programming language. Results from the programming of control algorithm are described.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[Robótica móvil]]></kwd>
<kwd lng="es"><![CDATA[Simulación]]></kwd>
<kwd lng="es"><![CDATA[ActiveX]]></kwd>
<kwd lng="es"><![CDATA[DirectX]]></kwd>
<kwd lng="es"><![CDATA[Sockets]]></kwd>
<kwd lng="en"><![CDATA[Mobile robotics]]></kwd>
<kwd lng="en"><![CDATA[Simulation]]></kwd>
<kwd lng="en"><![CDATA[ActiveX]]></kwd>
<kwd lng="en"><![CDATA[DirectX]]></kwd>
<kwd lng="en"><![CDATA[Sockets]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[  <font face="Verdana" size="3">    <p align="center"><b>Sistema configurable de simulaci&oacute;n 3D para rob&oacute;tica m&oacute;vil. Plataforma de desarrollo K++</b></p></font> <font face="Verdana" size="2">    <p align="center"><b> Configurable system for 3D simulation of mobile robotics. Development platform K++</b></p>     <p><b>Juan Bautista Mart&iacute;nez Su&aacute;rez</b>    <br> Ingeniero Electr&oacute;nico. Gerente unidad de negocios Desarrollo en Internet, GoalNet Ltda. Miembro Grupo de investigaci&oacute;n en manejo eficiente de la Energ&iacute;a El&eacute;ctrica GIMEL (Categor&iacute;a A, Colciencias), Universidad de Antioquia, l&iacute;nea de Rob&oacute;tica y Mecatr&oacute;nica (GIRAA). Medell&iacute;n, Colombia.    <br> <a href="mailto:juanbm@epm.net.co">juanbm@epm.net.co</a></p>     <p><b>Nelson David Mu&ntilde;oz Ceballos</b>    <br> Ingeniero Electr&oacute;nico, M.Sc. en Ingenier&iacute;a. Depto. de Ingenier&iacute;a de Sistemas. Miembro del Grupo de investigaci&oacute;n en manejo eficiente de la Energ&iacute;a El&eacute;ctrica GIMEL (Categor&iacute;a A, Colciencias), Universidad de Antioquia, l&iacute;nea de Rob&oacute;tica y Mecatr&oacute;nica (GIRAA). Medell&iacute;n, Colombia.    <br> <a href="mailto:nmunoz@udea.edu.co">nmunoz@udea.edu.co</a></p>     <p><b>Nelson Londo&ntilde;o Ospina</b>    ]]></body>
<body><![CDATA[<br> Ingeniero Electr&oacute;nico, candidato a Ph.D. Universidad del Valle. Profesor Asociado, Departamento de Ingenier&iacute;a El&eacute;ctrica. Miembro del Grupo de investigaci&oacute;n en manejo eficiente de la Energ&iacute;a El&eacute;ctrica GIMEL (Categor&iacute;a A, Colciencias), Universidad de Antioquia, en la l&iacute;nea de Rob&oacute;tica y Mecatr&oacute;nica (GIRAA). Medell&iacute;n, Colombia.    <br> <a href="mailto:nlondono@udea.edu.co">nlondono@udea.edu.co</a></p>     <p>Recibido 20 de septiembre de 2006, aprobado 30 de noviembre de 2006.</p> <hr size="1">     <p><b>PALABRAS CLAVE</b>    <br> Rob&oacute;tica m&oacute;vil, Simulaci&oacute;n, ActiveX, DirectX, Sockets.</p>     <p><b>RESUMEN</b>    <br>   Se presenta un sistema software que permite simular y controlar robots m&oacute;viles, parametrizar caracter&iacute;sticas hardware, visualizar el estado de sensores y accionar actuadores (simulados o reales). K++ utiliza un lenguaje de programaci&oacute;n propio. Se describen los resultados obtenidos en la programaci&oacute;n de un algoritmo de control.</p>     <p><b>KEYWORDS</b>    <br> Mobile robotics, Simulation, ActiveX, DirectX, Sockets</p>     <p><b>ABSTRACT</b>    ]]></body>
<body><![CDATA[<br>   A software system for simulation and control of mobile robots is presented, which allows hardware characteristic parametrization, sensors state visualization and to drive actuators (simulated or real). K++ usesan own programming language. Results from the programming of control algorithm are described.</p> <hr size="1">     <p><b>INTRODUCCI&Oacute;N</b></p>     <p>La mayor&iacute;a de los sistemas de desarrollo o los simuladores en rob&oacute;tica m&oacute;vil est&aacute;n definidos para un robot espec&iacute;fico y generalmente no son compatibles con otros tipos de robots, por ejemplo: Kiks [<a href="#r1">1</a>], kMatlab [<a href="#r2">2</a>] y Amorsim [<a href="#r3">3</a>], entre otros. No obstante, son muchos los robots que no cuentan con sistemas de desarrollo estructurado ni posibilitan herramientas de simulaci&oacute;n y validaci&oacute;n. Existe la necesidad de contar con una plataforma software vers&aacute;til y reconfigurable para el estudio y validaci&oacute;n de diferentes tipos de robots m&oacute;viles, especialmente, plataformas rob&oacute;ticas de investigaci&oacute;n. Para suplir esta necesidad, se dise&ntilde;&oacute; un sistema de desarrollo para rob&oacute;tica m&oacute;vil denominado K++, compuesto por: un simulador y un lenguaje de programaci&oacute;n que permite desarrollar aplicaciones de control, ligado a un compilador que ofrece las posibilidades de convertir en ejecutable cualquier desarrollo implementado; dicha programaci&oacute;n es de tipo estructurada teniendo como premisa el f&aacute;cil manejo de la sintaxis. Adicionalmente, el simulador permite el levantamiento de mapas de entorno (navegaci&oacute;n 2D en mapas de bits y 3D con DirectX). Como sistema base, se tom&oacute; ejemplo de las caracter&iacute;sticas del robot Khepera [<a href="#r4">4</a>]. Se implement&oacute; un sistema de m&oacute;dulos funcionales o primitivas de software que describe las caracter&iacute;sticas y comportamientos del robot y permite simular motores, sensores, actuadores, etc. Dichos m&oacute;dulos fueron construidos en componentes ActiveX desarrollados en Visual Basic. Se us&oacute; la eficiencia del desarrollo RAD (Rapid Application Development), la reutilizaci&oacute;n de los componentes ActiveX [<a href="#r5">5</a>] y la potencialidad de creaci&oacute;n de escenarios 3D con DirectX [<a href="#r6">6</a>].</p>     <p>Para la investigaci&oacute;n y el desarrollo de software para robots aut&oacute;nomos, es muy importante contar con un entorno de simulaci&oacute;n lo m&aacute;s real posible, as&iacute; como con un software de alto nivel que permita sobrellevar las problem&aacute;ticas de bajo nivel de los dispositivos rob&oacute;ticos. Sin embargo, muchas veces es necesario tambi&eacute;n poder modificar caracter&iacute;sticas de bajo nivel para, por ejemplo, a&ntilde;adir nuevos dispositivos o modificarlos. Es por ello fundamental contar con un sistema de control y simulaci&oacute;n abierto, portable, escalable y reusable.</p>     <p><b>ARQUITECTURA T&Iacute;PICA DE UN SISTEMA ROBOT</b></p>     <p>Una breve descripci&oacute;n de la configuraci&oacute;n t&iacute;pica de un robot se presenta en la <a href="#f1">Figura 1</a> [<a href="#r7">7</a>]; este esquema b&aacute;sico es el utilizado en la arquitectura de software propuesta en el simulador de K++.</p>     <p><img src="/img/revistas/ring/n25/n25a1f1.jpg"><a name="f1"></a></p>     <p>Figura 1. Diagrama de bloques de una arquitectura b&aacute;sica de un robot</p>     <li>Usuario: define la tarea que debe realizar el robot y la supervisa.</li>     <li>Robot: conforma b&aacute;sicamente el hardware y software del sistema. A su vez consta de:</li>     ]]></body>
<body><![CDATA[<p><b>Sensores:</b> Elementos que perciben se&ntilde;ales del ambiente y la convierten en informaci&oacute;n.</p>     <p><b>Algoritmos de Control:</b> Estructura computacional formada por diversos m&oacute;dulos interconectados y cuya funci&oacute;n es garantizar el cumplimiento de las tareas.</p>     <p><b>Actuadores:</b> Elementos el&eacute;ctro-mec&aacute;nicos que generan el desplazamiento del robot.</p>     <li>Entorno: lo constituye todo sistema externo que interact&uacute;a con el robot, puede ser est&aacute;tico o din&aacute;mico.</li>     <p><img src="/img/revistas/ring/n25/n25a1f2.jpg"><a name="f2"></a></p>     <p>Figura 2. Acceso a caracterizar un robot</p>     <p><b>SISTEMA K++</b></p>     <p>El K++ est&aacute; compuesto por diferentes elementos (Ver <a href="#f3">Figura 3</a>):</p>     <p><img src="/img/revistas/ring/n25/n25a1f3.jpg"><a name="f3"></a></p>     <p>Figura 3. Diagrama de Bloques del Compilador/Simulador K++</p>     ]]></body>
<body><![CDATA[<p><b>El Simulador K++</b></p>     <p>Es interactivo y visual. En la <a href="#f2">Figura 2</a> se observa parte del aspecto del simulador, que se implement&oacute; aplicando t&eacute;cnicas de manejo en:</p>     <p>- Mapas de bits para detecci&oacute;n de bordes, posicionamiento, navegaci&oacute;n y levantamiento de mapas.    <br> - DirectX para la creaci&oacute;n y navegaci&oacute;n de espacios en 3D en base a im&aacute;genes en 2D.    <br> - Matrices de transformaci&oacute;n homog&eacute;neas para la rotaci&oacute;n y translaci&oacute;n de objetos en 2D y 3D.    <br> - Sockets para la comunicaci&oacute;n entre el programa de control y el simulador.    <br> - Funciones trigonom&eacute;tricas para el c&aacute;lculo de la direcci&oacute;n de los sensores durante la navegaci&oacute;n.</p>     <p>El simulador permite, mediante men&uacute;s, realizar un conjunto de funciones entre las que se destacan:</p>     <p><i>- Parametrizaci&oacute;n virtual del robot</i>: Uno de los aspectos m&aacute;s importantes del sistema K++ es poder definir un robot m&oacute;vil que cumpla con una serie de caracter&iacute;sticas preestablecidas, que pueden ser modificables dependiendo del tipo de robot que se desee simular. Este simulador permite definir los sensores (definici&oacute;n polinomial de la respuesta del sensor), los actuadores (definici&oacute;n de la cinem&aacute;tica) y los comandos de control asociados a funciones primitivas (definici&oacute;n de la velocidad de cada motor, respuesta de los conversores A/D asociados a los sensores, etc.). Por ejemplo: la opci&oacute;n de parametrizaci&oacute;n de un robot est&aacute; disponible en el simulador mediante men&uacute; de Herramientas, Caracterizar Robot, como se observa en la <a href="#f2">Figura 2</a>, y las opciones del parametrizador, que se indican en la <a href="#f4">Figura 4</a>, as&iacute;:</p>     <li><i>Sensores</i>: Cantidad de bit, de conversi&oacute;n l&oacute;gica de uso, introducci&oacute;n de funciones de transferencia (gr&aacute;ficas, tabulada o por ecuaciones)</li>     ]]></body>
<body><![CDATA[<li><i>Actuadores</i>: Cantidad, propiedades f&iacute;sicas, el&eacute;ctricas, caracter&iacute;stica cinem&aacute;tica y din&aacute;mica, etc.</li>     <li><i>Comandos Asociados</i> (subsecci&oacute;n del parametrizador): Se implement&oacute; debido a la necesidad de cambiar el tipo de algoritmo de control de los actuadores y la informaci&oacute;n enviada al robot real v&iacute;a RS-232.</li>     <p><img src="/img/revistas/ring/n25/n25a1f4.jpg"><a name="f4"></a></p>     <p>Figura 4. Vista inicial del Parametrizador</p>     <p>En el simulador es posible realizar varias operaciones, entre las que se resaltan:</p>     <p>- Cambio del &aacute;ngulo de inicio en la navegaci&oacute;n.    <br> - Guardado autom&aacute;tico de la imagen del entorno recorrido (mapa de navegaci&oacute;n), para evitar que por olvido, por falla de energ&iacute;a o por bloqueo del PC, se pierda el mapa generado.    <br> - Cambio del entorno de navegaci&oacute;n.    <br> - Posibilidad de cambiar la curva caracter&iacute;stica de los sensores (respuesta discretizada del sensor al material de las paredes del entorno ).    <br> - Ver las coordenadas del mapa y el &aacute;ngulo de navegaci&oacute;n respecto a la referencia absoluta.    ]]></body>
<body><![CDATA[<br> - Visualizar el espacio de trabajo en 3D (<a href="#f5">Figura 5</a>).    <br> - Cambio del tipo de renderizaci&oacute;n (re-dibujado de pol&iacute;gonos) del mapa en 3D. Los tipos de renderizado disponibles son: por puntos, por l&iacute;neas, por s&oacute;lidos.    <br> - Detener temporalmente la simulaci&oacute;n, cambiar el &aacute;ngulo de navegaci&oacute;n, salvar el mapa generado.    <br> - Facilitar que el usuario pueda establecer una posici&oacute;n inicial para el robot simulado.    <br> - Permite ver el entorno de simulaci&oacute;n por el que se navega y el mapa de entorno generado por los sensores del robot simulado, como se observa en la <a href="#f5">Figura 5</a>.    <br> - Visualizar y almacenar mapas de entorno mientras se efectuaba la simulaci&oacute;n o la navegaci&oacute;n del robot real, por lo que se opt&oacute; por hacerlo parte impl&iacute;cita del sistema; en este caso se pueden generar 2 tipos de mapas:</p>     <li>Por detecci&oacute;n de borde: El mapa se genera cuando uno de los sensores simulados detecta un borde, en esa coordenada se dibuja un punto.</li>     <li>Por espacio recorrido: Se genera dejando un rastro del espacio ocupado por el robot, es decir, mientras los sensores permitan el desplazamiento del robot, &eacute;ste genera una marca por donde se movi&oacute;.</li>     <p><img src="/img/revistas/ring/n25/n25a1f5.jpg"><a name="f5"></a></p>     <p>Figura 5. Vista del Simulador K++</p>     ]]></body>
<body><![CDATA[<p><b>EL Compilador K++</b></p>     <p>Un segundo componente desarrollado en el proyecto es el compilador, dada la necesidad de cambiar la estructura de control sin tener que cambiar el programa de simulaci&oacute;n en s&iacute;. Corresponde a la interfaz donde se van a programar todos los algoritmos de control. La <a href="#f6">Figura 6</a> ilustra el ambiente de trabajo del compilador. La necesidad de estructurar, por medio de un lenguaje de programaci&oacute;n espec&iacute;fico, los algoritmos de control, llev&oacute; a la implementaci&oacute;n de t&eacute;cnicas de programaci&oacute;n de alto nivel y condujo a la creaci&oacute;n de un lenguaje, denominado K++.</p>     <p><img src="/img/revistas/ring/n25/n25a1f6.jpg"><a name="f6"></a></p>     <p>Figura 6. Vista del compilador K++</p>     <p>Lenguaje de programaci&oacute;n</p>     <p>Trabajar con algoritmos de control para robots, exige aplicar lenguajes de programaci&oacute;n de alto nivel y, por tanto, comandos m&aacute;s espec&iacute;ficos para aplicaciones en rob&oacute;tica. K++ cuenta con archivos fuente propios que contienen b&aacute;sicamente:</p>     <p>- Una estructura algor&iacute;tmica regida por un estilo de programaci&oacute;n imperativo, funcional, modular y orientado a objetos.    <br> - Los archivos fuentes con extensi&oacute;n .kpp o .dpp (Archivos Backup).    <br> - Las l&iacute;neas de c&oacute;digo terminar&aacute;n con punto y coma.    <br> - Protocolo de declaraci&oacute;n, especificaci&oacute;n, inicializaci&oacute;n de variables y de funciones.    ]]></body>
<body><![CDATA[<br> - El compilador con depuraci&oacute;n de errores.    <br> - Men&uacute; ayuda.    <br> - Conversi&oacute;n a un programa ejecutable.    <br> - La comunicaci&oacute;n que realiza el programa es mediante sockets, no se requiere configurar.    <br> - Incluye comandos propios para cada tarea, como por ejemplo WSC que permite escribir el dato de control en el puerto para ser enviado al robot real o para el robot simulado.</p>     <p>El siguiente es un listado de algunas de las variables, comandos y m&eacute;todos utilizados por el lenguaje:</p>     <p>put [expresi&oacute;n]; Muestra texto, todo al tiempo.    <br> inp [variable]; Entrada de datos, no acepta nulos.    <br> pass [variable]; Entrada de datos encriptada(*).    <br> br; Retorno de carro (siguiente l&iacute;nea).    ]]></body>
<body><![CDATA[<br> title [expresi&oacute;n]; T&iacute;tulo de la aplicaci&oacute;n; se muestra en la barra de t&iacute;tulo.    <br> delete [expresi&oacute;n]; Borra un archivo espec&iacute;fico.    <br> box [expresi&oacute;n],[t&iacute;tulo]; Crea un cuadro de di&aacute;logo, [t&iacute;tulo] es opcional.    <br> pause [expresi&oacute;n]; Pausa el programa un tiempo espec&iacute;fico.    <br> open [expresi&oacute;n]; Abre un archivo especifico.    <br> web [expresi&oacute;n]; Enlaza a una URL.    <br> wav [expresi&oacute;n]; Ejecuta un archivo WAV (audio).    <br> var [variable]; Declara una nueva variable.    <br> var [variable]=[valor] Declara una variable y la asigna.    <br> var [var], [var], [var]; Declara m&aacute;s de una variable.    ]]></body>
<body><![CDATA[<br> [variable] = [expresi&oacute;n]; Asignaci&oacute;n de variable.    <br> hide; Oculta la aplicaci&oacute;n.    <br> show; Muestra la aplicaci&oacute;n.    <br> show_controls; Muestra los controles Minimizar &amp; Cerrar de la ventana.    <br> hide_controls; Oculta los controles Minimizar &amp; Cerrar de la ventana.    <br> enable_cad; Habilita CTL_ALT_DEL.    <br> disable_cad; Deshabilita CTL_ALT_DEL.    <br> end; Finaliza el programa en esa posici&oacute;n.    <br> finish; Finaliza ejecuci&oacute;n del programa.    <br> &#39; Comod&iacute;n para comentarios.</p>     ]]></body>
<body><![CDATA[<p><b>VALIDACI&Oacute;N DE RESULTADOS</b></p>     <p>Para validar los elementos del K++ se propuso una estrategia de control de la navegaci&oacute;n del robot m&oacute;vil khepera (<a href="#f7">Figura 7</a>), basada en la aplicaci&oacute;n de una t&eacute;cnica de inteligencia computacional:</p>     <p><img src="/img/revistas/ring/n25/n25a1f7.jpg"><a name="f7"></a></p>     <p>Figura 7. Algunas caracter&iacute;sticas del khepera</p>     <p><b>Navegaci&oacute;n y evasi&oacute;n de obst&aacute;culos basada en una red neuronal artificial (RNA)</b></p>     <p>Varias investigaciones sobre la aplicaci&oacute;n de las redes neuronales en el control de robots m&oacute;viles se describen en [<a href="#r8">8</a>]. En este caso, se implement&oacute; una red neuronal perceptron multicapa con algoritmo de aprendizaje backpropagation, funci&oacute;n de activaci&oacute;n tangente hiperb&oacute;lica, con 8 entradas, una capa oculta de 6 neuronas y una capa de salida con 2 neuronas. La arquitectura de la red se observa en la <a href="#f8">Figura 8</a> y la estructura de cada neurona se observa en la <a href="#f9">Figura 9</a>. Los patrones de entrenamiento representaron diferentes estados robot-obstaculos [<a href="#r9">9</a>]. La red neuronal se entren&oacute; mediante Matlab. Despu&eacute;s de 1200 iteraciones, el error disminuye notablemente y luego de 2000 iteraciones se obtuvo un error de 10-10. Las caracter&iacute;sticas de la red considerada son:</p>     <p>- Matriz de entrada [8 x # ], 8 sensores y # casos.*    <br> - Matriz de salida [2 x # ], 2 motores (actuadores) y # acciones esperadas.*    <br> - Funci&oacute;n de activaci&oacute;n, tangente hiperb&oacute;lica.    <br> - Algoritmo backpropagation r&aacute;pido con factor adaptable de aprendizaje y momentum.    ]]></body>
<body><![CDATA[<br> - Rata de aprendizaje 0.5.    <br> - Error 0.1.</p>     <p>*Donde, # = 7 en simulaci&oacute;n y 40 en la implementaci&oacute;n real en el robot.</p>     <p><img src="/img/revistas/ring/n25/n25a1f9.jpg"><a name="f9"></a></p>     <p>Figura 8. Representaci&oacute;n de la RNA</p>     <p><img src="/img/revistas/ring/n25/n25a1f9.jpg"><a name="f9"></a></p>     <p>Figura 9. Estructura de cada neurona</p>     <p><b>C&oacute;digo de la red neuronal en lenguaje de programaci&oacute;n K++</b></p>     <p>Con la red entrenada, se program&oacute; la arquitectura de la <a href="#f9">figura 9</a>, utilizando el lenguaje de programaci&oacute;n K++ y el compilador. A continuaci&oacute;n se observa parte del algoritmo codificado:</p>     <p><img src="/img/revistas/ring/n25/n25a1e1.jpg"></p>     ]]></body>
<body><![CDATA[<p>Los resultados obtenidos en la simulaci&oacute;n presentaron una respuesta aceptable; no se observan colisiones, pese a que en la red s&oacute;lo se especificaron 7 patrones de entrenamiento. Sin embargo, fue necesario reentrenar la red con m&aacute;s patrones de entradas - salidas (un total de 40 patrones), para que se desempe&ntilde;ara aceptablemente en el entorno real (a&uacute;n se presentaron algunas colisiones), dado que aspectos de la din&aacute;mica del sistema como la inercia, la fricci&oacute;n, entre otros, no fueron contemplados en la simulaci&oacute;n. Adem&aacute;s, se nota una gran influencia del ruido ambiente en los sensores infrarrojos de distancia, tanto por la luz de d&iacute;a, como por la iluminaci&oacute;n artificial de las l&aacute;mparas fluorescentes del laboratorio.</p>     <p><b>CONCLUSIONES</b></p>     <p>Se dise&ntilde;&oacute; e implemento una herramienta de amplia aplicaci&oacute;n en el estudio, desarrollo y validaci&oacute;n de sistemas robotizados, que facilita el dise&ntilde;o de algoritmos de control para robots m&oacute;viles, incluyendo la caracterizaci&oacute;n de diferentes dispositivos electr&oacute;mec&aacute;nicos, sensores, actuadores, entre otros. El compilador, el parametrizador y el simulador permiten definir un robot con base en una serie de caracter&iacute;sticas preestablecidas, que pueden ser modificables y acondicionadas a diferentes tipos de robots m&oacute;viles. La posibilidad de creaci&oacute;n de mapas de entorno derivados de la detecci&oacute;n de borde o seguimiento de ruta, es uno de los m&aacute;s importantes logros de este proyecto.</p>     <p>Los resultados obtenidos en la implementaci&oacute;n del algoritmo de control y navegaci&oacute;n dan pie a que el estudio de esquemas m&aacute;s complejos puedan ser implementados y validados mediante esta herramienta, lo cual facilita el trabajo a estudiantes e investigadores relacionados con el &aacute;rea de rob&oacute;tica m&oacute;vil y permite desarrollar la aplicaci&oacute;n de diferentes tipos de control en robots m&oacute;viles. Como trabajo futuro, se abre la posibilidad de hacer simulaciones remotas ya que la comunicaci&oacute;n entre el programa ejecutable (generado por el compilador) y el simulador se realiza a trav&eacute;s de sockets de comunicaci&oacute;n; &eacute;ste ser&iacute;a un proyecto complementario.</p> <hr size="1">     <p><b>REFERENCIAS</b></p>     <!-- ref --><p><a name="r1"></a>[1] T. Nilsson. <i>Kiks User Guide</i>. 2001.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000138&pid=S0121-4993200700010000100001&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="r1"></a>[2] Y. Piguet, S. Legon.  kMatlab -- Matlab commands for Khepera. K-Team SA. Acceso septiembre 20 de 2006. <a href="http://ftp.k-team.com/khepera/matlab/readme.txt" target="_blank">http://ftp.k-team.com/khepera/matlab/readme.txt</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000139&pid=S0121-4993200700010000100002&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><font size="2" face="Verdana"><a name="r3"></a>[3] T. Petrinic, E. Ivanjko, I. Petrovic.  &quot;AMORsim - A Mobile Robot Simulator for Matlab&quot; En <i>Proceedings of 15th International Workshop on Robotic</i>. Balatonf&uuml;red, Hungary, 2006.</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000140&pid=S0121-4993200700010000100003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="r4"></a>[4] Khepera user manual. K-Team SA. Acceso enero 15 de 2006. <a href="http://www.k-team.com/" target="_blank">http://www.k-team.com/</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000141&pid=S0121-4993200700010000100004&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="r5"></a>[5] K. Moore. <i>ActiveX Control Tutorial</i>.  Developer.com. Acceso Mayo 15 de 2005. <a href="http://www.developer.com/net/vb/article.php/1539541" target="_blank">http://www.developer.com/net/vb/article.php/1539541</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000142&pid=S0121-4993200700010000100005&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="r6"></a>[6] B. Correas Su&aacute;rez. <i>Fundamentos Gr&aacute;ficos por Computador</i>. 2003.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000143&pid=S0121-4993200700010000100006&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="r7"></a>[7] N. Londo&ntilde;o Ospina. <i>An&aacute;lisis y dise&ntilde;o de una arquitectura para robots, desde una concepci&oacute;n metodol&oacute;gica</i>. Medell&iacute;n, 2002.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000144&pid=S0121-4993200700010000100007&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="r8"></a>[8] A. M. Zalzala, y A. S. Morris. <i>Neural networks for robotic control</i>. ED. Ellis Horwood, 1996.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000145&pid=S0121-4993200700010000100008&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="r9"></a>[9] G. Pezzotti, N. Londo&ntilde;o, J. Valencia.  &quot;Redes neuronales para evitaci&oacute;n de obst&aacute;culos en rob&oacute;tica m&oacute;vil&quot;. En <i>Memorias IX Congreso Latinoamericano de Control Autom&aacute;tico</i>. Santiago de Cali, noviembre de 2000.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000146&pid=S0121-4993200700010000100009&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --> ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Nilsson]]></surname>
<given-names><![CDATA[T]]></given-names>
</name>
</person-group>
<source><![CDATA[Kiks User Guide]]></source>
<year>2001</year>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Piguet]]></surname>
<given-names><![CDATA[Y]]></given-names>
</name>
<name>
<surname><![CDATA[Legon]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[kMatlab -- Matlab commands for Khepera]]></source>
<year></year>
<publisher-name><![CDATA[K-Team SA]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Petrinic]]></surname>
<given-names><![CDATA[T]]></given-names>
</name>
<name>
<surname><![CDATA[Ivanjko]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[Petrovic]]></surname>
<given-names><![CDATA[I]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[AMORsim - A Mobile Robot Simulator for Matlab]]></article-title>
<source><![CDATA[Proceedings of 15th International Workshop on Robotic]]></source>
<year>2006</year>
<publisher-loc><![CDATA[Balatonfüred ]]></publisher-loc>
</nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="book">
<source><![CDATA[Khepera user manual]]></source>
<year></year>
<publisher-name><![CDATA[K-Team SA]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Moore]]></surname>
<given-names><![CDATA[K]]></given-names>
</name>
</person-group>
<source><![CDATA[ActiveX Control Tutorial]]></source>
<year></year>
<publisher-name><![CDATA[Developer.com]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Correas Suárez]]></surname>
<given-names><![CDATA[B]]></given-names>
</name>
</person-group>
<source><![CDATA[Fundamentos Gráficos por Computador]]></source>
<year>2003</year>
</nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Londoño Ospina]]></surname>
<given-names><![CDATA[N]]></given-names>
</name>
</person-group>
<source><![CDATA[Análisis y diseño de una arquitectura para robots, desde una concepción metodológica]]></source>
<year>2002</year>
<publisher-loc><![CDATA[Medellín ]]></publisher-loc>
</nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Zalzala]]></surname>
<given-names><![CDATA[A. M]]></given-names>
</name>
<name>
<surname><![CDATA[Morris]]></surname>
<given-names><![CDATA[A. S]]></given-names>
</name>
</person-group>
<source><![CDATA[Neural networks for robotic control]]></source>
<year>1996</year>
<publisher-name><![CDATA[Ellis Horwood]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Pezzotti]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
<name>
<surname><![CDATA[Londoño]]></surname>
<given-names><![CDATA[N]]></given-names>
</name>
<name>
<surname><![CDATA[Valencia]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<article-title xml:lang="es"><![CDATA[Redes neuronales para evitación de obstáculos en robótica móvil]]></article-title>
<source><![CDATA[Memorias IX Congreso Latinoamericano de Control Automático]]></source>
<year>novi</year>
<month>em</month>
<day>br</day>
<publisher-loc><![CDATA[Santiago de Cali ]]></publisher-loc>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
