<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6972070096295156428</id><updated>2011-11-23T11:21:47.532-08:00</updated><title type='text'>PFC Alberto Corrales García - ARBOT</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-9028569688068858159</id><published>2008-09-24T02:35:00.000-07:00</published><updated>2008-09-24T02:48:28.753-07:00</updated><title type='text'>The end!!</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hola a todos,&lt;br /&gt;&lt;br /&gt;Una vez realizada presentación del proyecto el tribunal decidió que el trabajo realizado se merecía la máxima puntuación: &lt;span style="font-weight: bold;"&gt;¡¡¡Matrícula de Honor!!!&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;La verdad es que he trabajado duro en el proyecto, pero también tengo que reconocer que he pasado muy buenos momentos y que he aprendido muchísimo.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qLqx8As_TX0/SNoMhvun4gI/AAAAAAAAASE/XasOjzBggpg/s1600-h/end.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qLqx8As_TX0/SNoMhvun4gI/AAAAAAAAASE/XasOjzBggpg/s400/end.bmp" alt="" id="BLOGGER_PHOTO_ID_5249522089540968962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Además, como ya redactaba en la memoria del proyecto, me gustaría agradecer en este último post a toda la gente que en cierta medida ha contribuido, de una manera o de otra, a que todo esto haya sido posible:&lt;br /&gt;&lt;br /&gt;En primer lugar me gustaría agradecer a toda mi familia y en especial a mis padres por su apoyo incondicional en todo momento.&lt;br /&gt;&lt;br /&gt;También quería agradecer a mis tutores José Pascual y Arturo por haber confiado en mí para realizar un proyecto de estas características y por el tiempo que me han dedicado dentro de sus apretadas agendas.&lt;br /&gt;&lt;br /&gt;A todos los amigos que he hecho durante mi estancia en Albacete por todos los buenos momentos que hemos pasado juntos y por ser tan geniales.&lt;br /&gt;&lt;br /&gt;A mis compañeros del club .Net por lo bien que lo he pasado con ellos aprendiendo y trasteando con las nuevas tecnologías.&lt;br /&gt;&lt;br /&gt;A la gran mayoría de los profesores/as que he tenido, por la formación que me han dado y sobre todo por hacer que si ya me gustaba la informática cuando empecé la carrera, hoy en día sea una de mis pasiones.&lt;br /&gt;&lt;br /&gt;Y en especial a ti, Bego, por los cuatro años maravillosos que hemos compartido.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-9028569688068858159?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/9028569688068858159/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=9028569688068858159' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/9028569688068858159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/9028569688068858159'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/09/end.html' title='The end!!'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qLqx8As_TX0/SNoMhvun4gI/AAAAAAAAASE/XasOjzBggpg/s72-c/end.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-8528110696652715552</id><published>2008-09-09T08:00:00.001-07:00</published><updated>2008-09-10T09:04:50.253-07:00</updated><title type='text'>Casos de Estudio</title><content type='html'>Buenas,&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;una vez finalizado el desarrollo se han propuesto una serie de casos de uso a fin de mostar el funcionamiento y verificar el cumplimiento de los objetivos. Aquí se comentan de manera resumida:&lt;br /&gt;&lt;br /&gt;MODO 1: NAVEGACIÓN MEDIANTE ODOMETRÍA&lt;br /&gt;&lt;br /&gt;Se pretende que el robot navegue sobre una ruta predefinida haciendo uso del odómetro para ilustrar el la situación de la que se parte. En el vídeo se puede observar cómo el robot acaba chocándose con la puerta, mientras que según la información odométrica debería estar saliendo por la puerta.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/xtFldi3Vb6U&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/xtFldi3Vb6U&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;MODO 2: OBTENCIÓN DE DATOS DE LAS MARCAS&lt;br /&gt;&lt;br /&gt;Situando una marca en diferentes posiciones (a 1, 2, 3 y 4 metros) y diferentes ángulos en cada posición (0º, 15º, 30º, 45º, 60º, y 75º) se han llevado a cabo los siguientes estudios:&lt;br /&gt;&lt;br /&gt;• Error en la estimación con respecto a la distancia:&lt;br /&gt;&lt;br /&gt;Como se observa en la figura siguiente el error en la estimación de la posición pierde precisión de forma casi exponencial, por tanto interesa realizar calibraciones de la posición sólo cuando la marca se encuentre en una distancia relativamente pequeña.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qLqx8As_TX0/SMfsol0anNI/AAAAAAAAARk/nPqi831OMYA/s1600-h/uno.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qLqx8As_TX0/SMfsol0anNI/AAAAAAAAARk/nPqi831OMYA/s400/uno.jpg" alt="" id="BLOGGER_PHOTO_ID_5244420473187114194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;• Error en la estimación del ángulo&lt;br /&gt;&lt;br /&gt;A la vista de los resultados de la siguiente figura se aprecia que la estimación del ángulo en ocasiones acumula un error importante, sobre todo en distancias más lejanas. También se observa que a partir de un metro de distancia, no es posible reconocer la marca cuando se orienta a 75º debido a que su inclinación es demasiado grande. En conclusión, calibrar el giro del robot mediante la inclinación de la marca es en ocasiones peligroso, ya que si se comete un error, por pequeño que sea, y posteriormente se avanza una distancia significativa, el robot se irá alejando cada vez más de la trayectoria que debía seguir.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qLqx8As_TX0/SMfsy_Zd_JI/AAAAAAAAARs/6BcNv9lKAUg/s1600-h/dos.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qLqx8As_TX0/SMfsy_Zd_JI/AAAAAAAAARs/6BcNv9lKAUg/s400/dos.jpg" alt="" id="BLOGGER_PHOTO_ID_5244420651852102802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;• Tamaño de las marcas visuales&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;  En la gráfica siguiente se puede apreciar que existe una relación prácticamente lineal. Analizando los resultados, se observa que con 53mm el campo de acción es muy limitado, mientras que con 106mm se obtiene un rango de uso de casi 4 metros, lo cuál será suficiente para este tipo de aplicación, teniendo en cuenta que la información  a distancias grandes comente un error mayor, y por tanto se desprecia. En caso de necesitar un rango de acción mayor se recurrirá a marcas de 160mm de ancho.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qLqx8As_TX0/SMfsy6RSFtI/AAAAAAAAAR0/Zm0CBgojl_M/s1600-h/tres.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_qLqx8As_TX0/SMfsy6RSFtI/AAAAAAAAAR0/Zm0CBgojl_M/s400/tres.jpg" alt="" id="BLOGGER_PHOTO_ID_5244420650475591378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;MODO 3: NAVEGACIÓN USANDO CALIBRACIÓN MEDIANTE MARCAS&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Sobre el mapa que se muestra a continuación realizado con la herramienta Mapper3Basic se ha definido una ruta donde el robot debe usar la información de las marcas para calibrarse en determinados momentos.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qLqx8As_TX0/SMfuThb7_cI/AAAAAAAAAR8/1HYEFv9O8v4/s1600-h/cuatro.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_qLqx8As_TX0/SMfuThb7_cI/AAAAAAAAAR8/1HYEFv9O8v4/s400/cuatro.jpg" alt="" id="BLOGGER_PHOTO_ID_5244422310256704962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;En el vídeo se observa cómo apoyando la navegación con marcas el robot puede navegar por  entornos muy restingidos con gran precisión, completando la ruta propuesta en este caso de estudio.En determinados momentos del vídeo se realiza zoom sobre el mapa para observar la diferencia entre la posición calibrada y la odométrica.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zaQoHDArVOo&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/zaQoHDArVOo&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;MODO 4: NAVEGACIÓN SOBRE UNA RUTA DEFINIDA POR MARCAS&lt;br /&gt;&lt;br /&gt;En este vídeo se muestra cómo colocando determinadas marcas por el entorno se puede transmitir cierta semántica al robot, en este caso le indican el orden que debe seguir. Cuando alcanza una marca se aprecia cómo realiza la búsqueda del la siguiente marca hasta alcanzar el final de la ruta.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/G5nGyWFOzzk&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/G5nGyWFOzzk&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;MODO 5: NAVEGACIÓN REACTIVA AL MOVIMIENTO DE UNA MARCA&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;En este caso se observa cómo el robot sigue una marca mediante el movimiento de la cámara, rotaciones y translacioines.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/x89zVpLqmlI&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/x89zVpLqmlI&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;MODO 6: CONTROL MANUAL&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;En este modo de funcionamiento se observa cómo el robot responde a los comandos que le envía un teleoperador remoto.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CR9kyMd9-aA&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/CR9kyMd9-aA&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Esto es todo por ahora,&lt;br /&gt;&lt;br /&gt;espero que os haya gustado!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-8528110696652715552?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/8528110696652715552/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=8528110696652715552' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/8528110696652715552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/8528110696652715552'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/09/casos-de-estudio.html' title='Casos de Estudio'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qLqx8As_TX0/SMfsol0anNI/AAAAAAAAARk/nPqi831OMYA/s72-c/uno.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-3831323146081780716</id><published>2008-08-22T03:17:00.000-07:00</published><updated>2008-09-09T07:58:58.231-07:00</updated><title type='text'>Diseño de la aplicación</title><content type='html'>&lt;div style="text-align: justify;"&gt;Buenas,&lt;br /&gt;&lt;br /&gt;a fin de que el lector obtenga una idea mental del funcionamiento de ARBOT añadiré algunos diagramas.&lt;br /&gt;&lt;br /&gt;La aplicación esta compuesta por un cliente (la interfaz de usuario) y un servidor (ejecuta los modos de funcionamiento sobre el robot), como se muestra en el dagrama de despliegue.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qLqx8As_TX0/SK6UZRWA8HI/AAAAAAAAAP8/LR8MByJTyZA/s1600-h/despliegue.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qLqx8As_TX0/SK6UZRWA8HI/AAAAAAAAAP8/LR8MByJTyZA/s400/despliegue.bmp" alt="" id="BLOGGER_PHOTO_ID_5237286578551844978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Entre ellos intercambian los siguientes mensajes:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qLqx8As_TX0/SK6TreJmGJI/AAAAAAAAAP0/hU5cMFLDyR8/s1600-h/ClientServerconversation.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_qLqx8As_TX0/SK6TreJmGJI/AAAAAAAAAP0/hU5cMFLDyR8/s400/ClientServerconversation.png" alt="" id="BLOGGER_PHOTO_ID_5237285791715432594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;En el diseño del diagrama de clases se utiliza la técnica de &lt;i style=""&gt;especialización&lt;/i&gt;, de forma que conforme se va bajando en la jerarquía se van definiendo clases abstractas más específicas hasta la implementación de cada modo de forma concreta. Esta propiedad, aparte de dar una visión clara de la clasificación de cada uno de los modos de funcionamiento dentro de la jerarquía, permite extender las clases de forma sencilla, lo que facilita implementar futuros modos. Por otro lado también permite una mayor reutilización del código, ya que se evita tener métodos repetidos en varias clases.&lt;/span&gt;&lt;span style="font-size:100%;"&gt; A continuación se muestra el diagrama desarrollado:&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qLqx8As_TX0/SMVwDz5uXPI/AAAAAAAAARE/2NqsAzelO_0/s1600-h/Diagrafmadeclasesdedise%C3%B1o.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qLqx8As_TX0/SMVwDz5uXPI/AAAAAAAAARE/2NqsAzelO_0/s400/Diagrafmadeclasesdedise%C3%B1o.png" alt="" id="BLOGGER_PHOTO_ID_5243720551917051122" border="0" /&gt;&lt;/a&gt;Esto es todo por ahora,&lt;br /&gt;&lt;br /&gt;saludos!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-3831323146081780716?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/3831323146081780716/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=3831323146081780716' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/3831323146081780716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/3831323146081780716'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/08/diseo-de-la-aplicacin.html' title='Diseño de la aplicación'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qLqx8As_TX0/SK6UZRWA8HI/AAAAAAAAAP8/LR8MByJTyZA/s72-c/despliegue.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-5121961945284946321</id><published>2008-08-21T08:25:00.000-07:00</published><updated>2008-08-22T03:36:24.785-07:00</updated><title type='text'>Estado del arte: posibilidades de la realidad aumentada</title><content type='html'>Buenas,&lt;br /&gt;&lt;br /&gt;al documentarme sobre el estado del arte para la memoria me he topado con proyectos alucinantes que usan realidad aumentada. Puesto que no estaban en relación con el tema del proyecto (videovigilancia y robots) no los incluí en la memoria, pero como me llamaron la atención no podía evitar mencionarlos por aquí. Seguro que agradan la vista a los interesados en el tema:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Eye Of Judgement:&lt;/span&gt; juego de rol para playstation, donde a partir de unas cartas generan todo un escenario de batalla con criaturas en 3D aumentando la realidad.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Bhlq_GhYGsM&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/Bhlq_GhYGsM&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Camspace&lt;/span&gt;: proyecto que a partir de diferentes objetos recrea toda serie de dispositivos para jugar a cualquier juego (vídeo muy recomendado).&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/v0srY37kkMw&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/v0srY37kkMw&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;PARIS (Personal Augmented Reality Immersive System)&lt;/span&gt;: proyecto en el que generan todo un sistema de realidad virtual a partir de ralidad aumentada para implantes de prótesis:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/1fLXdC6LRYQ&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/1fLXdC6LRYQ&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Augmented Reality and Information Visualization&lt;/span&gt;: un sistema de visualización de gráficos estadísticos en 3D con realidad aumentada:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/z-aBUyrhcj0&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/z-aBUyrhcj0&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Living Augmented Reality:&lt;/span&gt; todo el interior de una habitación generado con realidad aumentada:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/2_X-c4ah7Ww&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/2_X-c4ah7Ww&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Neon Racer&lt;/span&gt;: juego de naves sobre una pantalla-tablero:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/VtIopu0UgXE&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/VtIopu0UgXE&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Genesis:&lt;/span&gt; proyecto donde se genera un escenario aumentado haciendo uso de un proyector y marcas visuales. El argumento es un juego que emula ser "Dios" y construir un mundo.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/P9mrmbTBj74&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/P9mrmbTBj74&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ARlego:&lt;/span&gt; guia de autoayuda para el montaje de diferentes prototipos con el Lego Mindstorm mediante realidad aumentada.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/lM9rH5XKWsM&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/lM9rH5XKWsM&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Y como estas, hay muchísimas aplicaciones vistosas hechas con realidad aumentada. En mi opinión, hoy por hoy la mayoría de proyectos son de investigación, pero solo es cuestión de tiempo que esta tecnología se empleé en el uso cotidiano de determinadas tareas, ya que como habréis visto, tiene infinidad de posibilidades. El primer campo sin duda será el mundo de los videojuegos por ser el más comercial, pero para mí lo más impactante son las nuevas formas de interacción persona-ordenador que se pueden plantear a partir de proyectos como Camspace.&lt;br /&gt;&lt;br /&gt;Saludos y espero que os haya gustado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-5121961945284946321?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/5121961945284946321/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=5121961945284946321' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/5121961945284946321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/5121961945284946321'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/08/estado-del-arte-posibilidades-de-la.html' title='Estado del arte: posibilidades de la realidad aumentada'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-8468741715111970031</id><published>2008-08-06T11:48:00.000-07:00</published><updated>2008-08-06T12:25:13.013-07:00</updated><title type='text'>Ha nacido ARBOT!!!</title><content type='html'>Salvo pequeños detalles, ya se puede dar por &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;concluida&lt;/span&gt; la implementación de este proyecto que he bautizado como &lt;span style="font-weight: bold;font-size:130%;" class="blsp-spelling-error" id="SPELLING_ERROR_1" &gt;ARBOT&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;(&lt;span style="font-weight: bold;"&gt;A&lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;ugmented&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;R&lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;eality&lt;/span&gt; ro&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;BOT&lt;/span&gt;&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qLqx8As_TX0/SJn29INoW1I/AAAAAAAAAPU/pHB1f45CKfk/s1600-h/19062008146.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_qLqx8As_TX0/SJn29INoW1I/AAAAAAAAAPU/pHB1f45CKfk/s400/19062008146.jpg" alt="" id="BLOGGER_PHOTO_ID_5231483972204649298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En esta última versión, se han añadido las siguientes características:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;En el cliente: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Loading&lt;/span&gt; y pintado de mapas, actualizando sobre éste la posición del robot en tiempo real y la posición según el odómetro para observar visualmente la desviación que corrige el uso de calibración por marcas visuales.&lt;br /&gt;&lt;br /&gt;- Añadidos dos &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;botones&lt;/span&gt; de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;ZoomIn&lt;/span&gt; y &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;ZoomOut&lt;/span&gt; para agrandar el mapa.&lt;br /&gt;&lt;br /&gt;- Añadida una sección de estadísticas, donde se muestra: nº &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;frames&lt;/span&gt; que se han observado, nº &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;frames&lt;/span&gt; usados para recalibrar, distancia (en mm) que se ha recalibrado, rotación (en grados) que ha recalibrado. (Actualmente en esta parte calculo esta información en el cliente, pero tengo que cambiarlo al servidor y enviarla dentro de los paquetes de información, pues hay &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;frames&lt;/span&gt; que el servidor procesa pero no llegan al cliente, ya que tiene una tasa de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;frames&lt;/span&gt; más baja para no saturar la red.)&lt;br /&gt;&lt;br /&gt;En cuanto al &lt;span style="font-weight: bold;"&gt;servidor&lt;/span&gt;, se han probado las estrategias el uso de marcas para navegar sobre mapas daba diversos problemas inexplicables, y tras darle vueltas y vueltas he dado con solución: "en cambiar las &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;ArActions&lt;/span&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;GoTo&lt;/span&gt;(x,y)) por comandos a bajo nivel(&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;move&lt;/span&gt;(), &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;setVel&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;setHeading&lt;/span&gt;()...) para tener un mayor control y conocimiento de los comandos que se le están mandando al robot en todo momento" y ahora funciona correctamente.&lt;br /&gt;&lt;br /&gt;En mi opinión esta quedando bastante chulo, en cuanto pueda subo unas capturas y algunos vídeos para que lo &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_18"&gt;podáis&lt;/span&gt; ver y opinar.&lt;br /&gt;&lt;br /&gt;Como comentaba, salvo pequeños detalles, en breve empezaré con la memoria  cerrando el ciclo de implementación, pero eso no significa que vaya a olvidar el blog, si no que realizaré &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_19"&gt;artículos&lt;/span&gt; con información interesante o curiosa que me vaya encontrando en la redacción de la memoria, ya que la idea de hacer este blog tiene como objetivos:&lt;br /&gt;&lt;br /&gt;-Que mis tutores (u otros interesados) puedan hacer un mejor seguimiento de los avances.&lt;br /&gt;-Compartir el conocimiento adquirido con el mundo.&lt;br /&gt;-Que esta información quede inmortalizada por si en el futuro pudiera ayudar a otros proyectos sobre la materia, ya que son varios los que me han escrito preguntando dudas, o comentandome que les ha encantado la iniciativa y la aplicarán a proyectos futuros.&lt;br /&gt;&lt;br /&gt;Por cierto, os podeis suscribir a las RSS si estais interesados ;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Saludos!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-8468741715111970031?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/8468741715111970031/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=8468741715111970031' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/8468741715111970031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/8468741715111970031'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/08/ha-nacido-arbot.html' title='Ha nacido ARBOT!!!'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qLqx8As_TX0/SJn29INoW1I/AAAAAAAAAPU/pHB1f45CKfk/s72-c/19062008146.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-7062525447362591697</id><published>2008-08-01T13:06:00.000-07:00</published><updated>2008-12-11T03:42:49.019-08:00</updated><title type='text'>Video en el cliente</title><content type='html'>Ya tengo el vídeo en la parte del cliente.&lt;br /&gt;&lt;br /&gt;Tras hacer pruebas, como cabía de esperar la tasa de frames por segundo es reducida pero aceptable, pues el limitado procesador del robot tiene que realizar a la vez las tareas de manejar el robot, procesar cada frame por Artoolkit plus y comprir cada frame en jpeg para enviarlo. Aun así, se obtiene mayor tasa que las que se obtienen con programas como VCN para conexión remota.&lt;br /&gt;&lt;br /&gt;En cuanto a la calidad de imagen, es bastante aceptable, los frames se envian al 60% de su calidad original con una resolución de 640x480 (abajo una muestra de un frame) en escala de grises para minimizar el coste del flip vertical que hay que realizarles y el procesamiento del artoolkit plus. El usar compresión por frames independientes permite obetener un video de calidad, que no se degrada con el movimiento o con los cambios de escena como pasa con formatos de videoconferencia.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qLqx8As_TX0/SJNznd3w-nI/AAAAAAAAAPA/kkPcxHPFQJ8/s1600-h/client.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_qLqx8As_TX0/SJNznd3w-nI/AAAAAAAAAPA/kkPcxHPFQJ8/s400/client.jpg" alt="" id="BLOGGER_PHOTO_ID_5229650714177895026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Por otro lado, se han añadido 3 radio button para que el cliente pueda elegir el tamaño de frame.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qLqx8As_TX0/SJN02OaeCQI/AAAAAAAAAPI/5oTkOCUxZZY/s1600-h/2008-08-01_223700.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_qLqx8As_TX0/SJN02OaeCQI/AAAAAAAAAPI/5oTkOCUxZZY/s400/2008-08-01_223700.jpg" alt="" id="BLOGGER_PHOTO_ID_5229652067238152450" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-7062525447362591697?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/7062525447362591697/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=7062525447362591697' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/7062525447362591697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/7062525447362591697'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/08/video-en-el-cliente.html' title='Video en el cliente'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qLqx8As_TX0/SJNznd3w-nI/AAAAAAAAAPA/kkPcxHPFQJ8/s72-c/client.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-6103728187738384299</id><published>2008-07-30T10:13:00.000-07:00</published><updated>2008-12-11T03:42:49.506-08:00</updated><title type='text'>Diseñando la Aplicación Cliente</title><content type='html'>Buenas,&lt;br /&gt;&lt;br /&gt;puesto que en la parte servidora (el corazón de la aplicación) ya estan implementados los 6 modos de funcionamiento, ahora toca diseñar una aplicación cliente que se conecte y lance el modo seleccionado o en caso del control manual pueda enviar los comandos.&lt;br /&gt;&lt;br /&gt;Para esto, estoy planteando una aplicación MFC basada en un cuadro de dialogo que contiene el control. Un boceto de la interfaz de usuario sería algo similar a esto:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qLqx8As_TX0/SJClqp6_YbI/AAAAAAAAAOw/6meaKjJE5xI/s1600-h/interface.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_qLqx8As_TX0/SJClqp6_YbI/AAAAAAAAAOw/6meaKjJE5xI/s400/interface.jpg" alt="" id="BLOGGER_PHOTO_ID_5228861319603511730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Aunque a primera vista parecía sencillo, aparte de tener que casi aprender MFC en unos dos dias, la cosa se pudo bastante fea al toparme con el término de "functores".  Los functores son plantillas de punteros a funciones (que ya suena a chungo) que se han inventado la gente de Aria y que básicamente sirven para llamar a la función que apuntan en determinados momentos. En este caso servirá para manejar las respuestas del servidor a las peticiones del cliente.&lt;br /&gt;&lt;br /&gt;Otro problema fue, la actualización de los componentes del dialogo cuando escribe el método de callback (la llamada del functor), ya que este es invocado por un hilo (el cliente, que se ejecuta de manera asíncrona, y este no puede usar la función UpdateData(bool), que actualiza los componentes con sus variables asignadas, y en este caso se usaría para, por ejemplo, actualizar la información del log con la información que recive de los mensajes. Para esto en vez de usar UpdateData hay que usar "SetWindowText" que escribe directamente sobre el componente y no da problemas con el Threading.&lt;br /&gt;&lt;br /&gt;Por último, comentar que he diseñado un icono para aplicación que representa al robot y una marca del Artoolkit&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qLqx8As_TX0/SJCm4SmHwgI/AAAAAAAAAO4/xwGItUQNnjk/s1600-h/logo.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_qLqx8As_TX0/SJCm4SmHwgI/AAAAAAAAAO4/xwGItUQNnjk/s400/logo.jpg" alt="" id="BLOGGER_PHOTO_ID_5228862653371761154" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-6103728187738384299?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/6103728187738384299/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=6103728187738384299' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/6103728187738384299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/6103728187738384299'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/07/diseando-la-aplicacin-cliente.html' title='Diseñando la Aplicación Cliente'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qLqx8As_TX0/SJClqp6_YbI/AAAAAAAAAOw/6meaKjJE5xI/s72-c/interface.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-5632666056099453849</id><published>2008-07-27T23:55:00.000-07:00</published><updated>2008-07-28T00:00:19.969-07:00</updated><title type='text'>Conversaciones Cliente-Servidor</title><content type='html'>Buenas,&lt;br /&gt;&lt;br /&gt;puesto que se pretente hacer una arquitectura cliente-servidor para iniciar los modos de funcionamiento, obtener los datos y la imagen que el robot captura o para poder controlarlo en el modo manual, nos hace falta definir un protocolo de mensajes para que puedan conversar entre el cliente y el servidor. Para este proposito he definido el siguiente formato de tramas de mensajes que intercambian:&lt;br /&gt;&lt;br /&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cthinkill%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5Cthinkill%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5Cthinkill%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;ES&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Cambria; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073741899 0 0 159 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} h2 	{mso-style-priority:9; 	mso-style-qformat:yes; 	mso-style-link:"Título 2 Car"; 	mso-style-next:Normal; 	margin-top:10.0pt; 	margin-right:0cm; 	margin-bottom:0cm; 	margin-left:0cm; 	margin-bottom:.0001pt; 	line-height:115%; 	mso-pagination:widow-orphan lines-together; 	page-break-after:avoid; 	mso-outline-level:2; 	font-size:13.0pt; 	font-family:"Cambria","serif"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:major-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:major-fareast; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:major-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:major-bidi; 	color:#4F81BD; 	mso-themecolor:accent1; 	mso-fareast-language:EN-US;} p.MsoTitle, li.MsoTitle, div.MsoTitle 	{mso-style-priority:10; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-link:"Título Car"; 	mso-style-next:Normal; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:15.0pt; 	margin-left:0cm; 	mso-add-space:auto; 	mso-pagination:widow-orphan; 	border:none; 	mso-border-bottom-alt:solid #4F81BD 1.0pt; 	mso-border-bottom-themecolor:accent1; 	padding:0cm; 	mso-padding-alt:0cm 0cm 4.0pt 0cm; 	font-size:26.0pt; 	font-family:"Cambria","serif"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:major-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:major-fareast; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:major-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:major-bidi; 	color:#17365D; 	mso-themecolor:text2; 	mso-themeshade:191; 	letter-spacing:.25pt; 	mso-font-kerning:14.0pt; 	mso-fareast-language:EN-US;} p.MsoTitleCxSpFirst, li.MsoTitleCxSpFirst, div.MsoTitleCxSpFirst 	{mso-style-priority:10; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-link:"Título Car"; 	mso-style-next:Normal; 	mso-style-type:export-only; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	mso-pagination:widow-orphan; 	border:none; 	mso-border-bottom-alt:solid #4F81BD 1.0pt; 	mso-border-bottom-themecolor:accent1; 	padding:0cm; 	mso-padding-alt:0cm 0cm 4.0pt 0cm; 	font-size:26.0pt; 	font-family:"Cambria","serif"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:major-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:major-fareast; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:major-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:major-bidi; 	color:#17365D; 	mso-themecolor:text2; 	mso-themeshade:191; 	letter-spacing:.25pt; 	mso-font-kerning:14.0pt; 	mso-fareast-language:EN-US;} p.MsoTitleCxSpMiddle, li.MsoTitleCxSpMiddle, div.MsoTitleCxSpMiddle 	{mso-style-priority:10; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-link:"Título Car"; 	mso-style-next:Normal; 	mso-style-type:export-only; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	mso-pagination:widow-orphan; 	border:none; 	mso-border-bottom-alt:solid #4F81BD 1.0pt; 	mso-border-bottom-themecolor:accent1; 	padding:0cm; 	mso-padding-alt:0cm 0cm 4.0pt 0cm; 	font-size:26.0pt; 	font-family:"Cambria","serif"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:major-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:major-fareast; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:major-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:major-bidi; 	color:#17365D; 	mso-themecolor:text2; 	mso-themeshade:191; 	letter-spacing:.25pt; 	mso-font-kerning:14.0pt; 	mso-fareast-language:EN-US;} p.MsoTitleCxSpLast, li.MsoTitleCxSpLast, div.MsoTitleCxSpLast 	{mso-style-priority:10; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-link:"Título Car"; 	mso-style-next:Normal; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:15.0pt; 	margin-left:0cm; 	mso-add-space:auto; 	mso-pagination:widow-orphan; 	border:none; 	mso-border-bottom-alt:solid #4F81BD 1.0pt; 	mso-border-bottom-themecolor:accent1; 	padding:0cm; 	mso-padding-alt:0cm 0cm 4.0pt 0cm; 	font-size:26.0pt; 	font-family:"Cambria","serif"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:major-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:major-fareast; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:major-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:major-bidi; 	color:#17365D; 	mso-themecolor:text2; 	mso-themeshade:191; 	letter-spacing:.25pt; 	mso-font-kerning:14.0pt; 	mso-fareast-language:EN-US;} span.Ttulo2Car 	{mso-style-name:"Título 2 Car"; 	mso-style-priority:9; 	mso-style-unhide:no; 	mso-style-locked:yes; 	mso-style-link:"Título 2"; 	mso-ansi-font-size:13.0pt; 	mso-bidi-font-size:13.0pt; 	font-family:"Cambria","serif"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:major-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:major-fareast; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:major-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:major-bidi; 	color:#4F81BD; 	mso-themecolor:accent1; 	font-weight:bold;} span.TtuloCar 	{mso-style-name:"Título Car"; 	mso-style-priority:10; 	mso-style-unhide:no; 	mso-style-locked:yes; 	mso-style-link:Título; 	mso-ansi-font-size:26.0pt; 	mso-bidi-font-size:26.0pt; 	font-family:"Cambria","serif"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:major-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:major-fareast; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:major-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:major-bidi; 	color:#17365D; 	mso-themecolor:text2; 	mso-themeshade:191; 	letter-spacing:.25pt; 	mso-font-kerning:14.0pt;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} .MsoPapDefault 	{mso-style-type:export-only; 	margin-bottom:10.0pt; 	line-height:115%;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin;} table.MsoTableMediumGrid1Accent5 	{mso-style-name:"Cuadrícula media 1 - Énfasis 5"; 	mso-tstyle-rowband-size:1; 	mso-tstyle-colband-size:1; 	mso-style-priority:67; 	mso-style-unhide:no; 	border:solid #78C0D4 1.0pt; 	mso-border-themecolor:accent5; 	mso-border-themetint:191; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-border-insideh:1.0pt solid #78C0D4; 	mso-border-insideh-themecolor:accent5; 	mso-border-insideh-themetint:191; 	mso-border-insidev:1.0pt solid #78C0D4; 	mso-border-insidev-themecolor:accent5; 	mso-border-insidev-themetint:191; 	mso-tstyle-shading:#D2EAF1; 	mso-tstyle-shading-themecolor:accent5; 	mso-tstyle-shading-themetint:63; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-fareast-language:EN-US;} table.MsoTableMediumGrid1Accent5FirstRow 	{mso-style-name:"Cuadrícula media 1 - Énfasis 5"; 	mso-table-condition:first-row; 	mso-style-priority:67; 	mso-style-unhide:no; 	mso-ansi-font-weight:bold; 	mso-bidi-font-weight:bold;} table.MsoTableMediumGrid1Accent5LastRow 	{mso-style-name:"Cuadrícula media 1 - Énfasis 5"; 	mso-table-condition:last-row; 	mso-style-priority:67; 	mso-style-unhide:no; 	mso-tstyle-border-top:2.25pt solid #78C0D4; 	mso-tstyle-border-top-themecolor:accent5; 	mso-tstyle-border-top-themetint:191; 	mso-ansi-font-weight:bold; 	mso-bidi-font-weight:bold;} table.MsoTableMediumGrid1Accent5FirstCol 	{mso-style-name:"Cuadrícula media 1 - Énfasis 5"; 	mso-table-condition:first-column; 	mso-style-priority:67; 	mso-style-unhide:no; 	mso-ansi-font-weight:bold; 	mso-bidi-font-weight:bold;} table.MsoTableMediumGrid1Accent5LastCol 	{mso-style-name:"Cuadrícula media 1 - Énfasis 5"; 	mso-table-condition:last-column; 	mso-style-priority:67; 	mso-style-unhide:no; 	mso-ansi-font-weight:bold; 	mso-bidi-font-weight:bold;} table.MsoTableMediumGrid1Accent5OddColumn 	{mso-style-name:"Cuadrícula media 1 - Énfasis 5"; 	mso-table-condition:odd-column; 	mso-style-priority:67; 	mso-style-unhide:no; 	mso-tstyle-shading:#A5D5E2; 	mso-tstyle-shading-themecolor:accent5; 	mso-tstyle-shading-themetint:127;} table.MsoTableMediumGrid1Accent5OddRow 	{mso-style-name:"Cuadrícula media 1 - Énfasis 5"; 	mso-table-condition:odd-row; 	mso-style-priority:67; 	mso-style-unhide:no; 	mso-tstyle-shading:#A5D5E2; 	mso-tstyle-shading-themecolor:accent5; 	mso-tstyle-shading-themetint:127;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;div style="border-style: none none solid; border-color: -moz-use-text-color -moz-use-text-color rgb(79, 129, 189); border-width: medium medium 1pt; padding: 0cm 0cm 4pt;"&gt;  &lt;p class="MsoTitle"&gt;&lt;span style="" lang="EN-US"&gt;Client-Server Communication&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;h2&gt;&lt;span style="" lang="EN-US"&gt;Init robot (TCP):&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Client request:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableMediumGrid1Accent5" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid rgb(120, 192, 212); padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 432.2pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="576"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_INIT&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Server response confirmation:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableMediumGrid1Accent5" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid rgb(120, 192, 212); padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 86.4pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="115"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_INIT&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 86.45pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="115"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_ACK&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 259.35pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="346"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;"Server   state: INIT"&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Server response error:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableMediumGrid1Accent5" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid rgb(120, 192, 212); padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 86.4pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="115"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_INIT&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 86.45pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="115"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_CRITICAL_ERROR&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 259.35pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="346"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;"server   can't init due to call has failed"&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span style="" lang="EN-US"&gt;Exe Mode N (TCP):&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Client request:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableMediumGrid1Accent5" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid rgb(120, 192, 212); padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 436pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="581"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_EXE_MODE_N&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Server response confirmation:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableMediumGrid1Accent5" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid rgb(120, 192, 212); padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 94.85pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="126"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_EXE_MODE_N&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 59.4pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="79"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_ACK&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 112.15pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="150"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;“(Server State): Running   mode N”&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 169.6pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="226"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;MapaData(*)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;(*) Only in modes 1, 2 and 3 &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Server response error:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableMediumGrid1Accent5" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid rgb(120, 192, 212); padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 94.85pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="126"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_EXE_MODE_N&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 118.85pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="158"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_CRITICAL_ERROR&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 222.3pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="296"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;1)"server can't run   strategy due to the state wasn't ST_INIT"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;2)   &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;"server can't run strategy due to init function   failed"&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span style="" lang="EN-US"&gt;Robot and Camera commands (only on mode 6) (UDP):&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Client request:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableMediumGrid1Accent5" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid rgb(120, 192, 212); padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 432.2pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="576"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_COM_ADVANCE | SMS_COM_GO_BACK | SMS_COM_TURN_RIGHT | SMS_COM_TURN_LEFT   | SMS_COM_TILT_UP | SMS_COM_TILT_DOWN | SMS_COM_PAN_RIGHT | SMS_COM_PAN_LEFT   | SMS_COM_CAM_RST | SMS_COM_STOP&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span style="" lang="EN-US"&gt;Cancel active mode (TCP):&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Client request:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableMediumGrid1Accent5" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid rgb(120, 192, 212); padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 432.2pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="576"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_CANCEL&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Server response confirmation:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableMediumGrid1Accent5" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid rgb(120, 192, 212); padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 86.4pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="115"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_CANCEL&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 86.45pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="115"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_ACK&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 259.35pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="346"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;"Stopped mode N"&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Server response error:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableMediumGrid1Accent5" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid rgb(120, 192, 212); padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 86.4pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="115"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_CANCEL&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 86.45pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="115"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;SMS_WARNING&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 259.35pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="346"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;"Couldn't stop mode   due to it wasn's running"&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span style="" lang="EN-US"&gt;Get data without image (UDP):&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Client request:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableMediumGrid1Accent5" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid rgb(120, 192, 212); padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 436pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="581"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;SMS_RETURN_TEXT&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Server response:&lt;/span&gt;&lt;/b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;table class="MsoTableMediumGrid1Accent5" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid rgb(120, 192, 212); padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 100.85pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="134"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;SMS_RETURN_TEXT&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 84.45pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="113"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;GoalReached   (*)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 83.2pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="111"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;PosRobotX&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 83.15pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="111"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;PosRobotY&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 84.35pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="112"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;RobotTh&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color rgb(120, 192, 212) rgb(120, 192, 212); border-width: medium 1pt 1pt; padding: 0cm 5.4pt; background: rgb(165, 213, 226) none repeat scroll 0% 0%; width: 100.85pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="134"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;idMark&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(165, 213, 226) none repeat scroll 0% 0%; width: 84.45pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="113"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;posMarkX&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(165, 213, 226) none repeat scroll 0% 0%; width: 83.2pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="111"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;posMarkY&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(165, 213, 226) none repeat scroll 0% 0%; width: 83.15pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="111"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;MarkTh&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(165, 213, 226) none repeat scroll 0% 0%; width: 84.35pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="112"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;UseMarkInfo   (**)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td colspan="5" style="border-style: none solid solid; border-color: -moz-use-text-color rgb(120, 192, 212) rgb(120, 192, 212); border-width: medium 1pt 1pt; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 436pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="581"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;“date and time”&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;(*) Some modes finished when reach one goal: 0 or 1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;(**) 0 or 1 if use or not the position estimation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span style="" lang="EN-US"&gt;Get data with image (UDP):&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Client request:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableMediumGrid1Accent5" style="border: medium none ; border-collapse: collapse; margin-left: 4.8pt; margin-right: 4.8pt;" align="left" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid rgb(120, 192, 212); padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 436pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="581"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;SMS_RETURN_IMAGE&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Server response:&lt;/span&gt;&lt;/b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;table class="MsoTableMediumGrid1Accent5" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid rgb(120, 192, 212); padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 106.9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="143"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;SMS_RETURN_IMAGE&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 83.3pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="111"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;GoalReached   (*)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 81.35pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="108"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;PosRobotX&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 81.3pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="108"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;PosRobotY&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: rgb(120, 192, 212) rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 83.15pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="111"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="" lang="EN-US"&gt;RobotTh&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color rgb(120, 192, 212) rgb(120, 192, 212); border-width: medium 1pt 1pt; padding: 0cm 5.4pt; background: rgb(165, 213, 226) none repeat scroll 0% 0%; width: 106.9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="143"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;idMark&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(165, 213, 226) none repeat scroll 0% 0%; width: 83.3pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="111"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;posMarkX&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(165, 213, 226) none repeat scroll 0% 0%; width: 81.35pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="108"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;posMarkY&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(165, 213, 226) none repeat scroll 0% 0%; width: 81.3pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="108"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;MarkTh&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(165, 213, 226) none repeat scroll 0% 0%; width: 83.15pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="111"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;UseMarkInfo   (**)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color rgb(120, 192, 212) rgb(120, 192, 212); border-width: medium 1pt 1pt; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 106.9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="143"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;“date   and time”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td colspan="4" style="border-style: none solid solid none; border-color: -moz-use-text-color rgb(120, 192, 212) rgb(120, 192, 212) -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; background: rgb(210, 234, 241) none repeat scroll 0% 0%; width: 329.1pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="439"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="" lang="EN-US"&gt;ImageData&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;(*) Some modes finished when reach one goal: 0 or 1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;(**) 0 or 1 if use or not the position estimation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;br /&gt;Saludos!!&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-5632666056099453849?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/5632666056099453849/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=5632666056099453849' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/5632666056099453849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/5632666056099453849'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/07/conversaciones-cliente-servidor.html' title='Conversaciones Cliente-Servidor'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-1199078290853536070</id><published>2008-07-24T03:49:00.000-07:00</published><updated>2008-07-25T15:07:44.227-07:00</updated><title type='text'>Modos de funcionamiento implementados</title><content type='html'>Una vez con los datos que nos proporcionan las marcas se han implementado los siguientes modos de funcionamiento:&lt;br /&gt;&lt;br /&gt;1)   Seguimiento de una ruta planificada sobre un mapa sin asistencia de marcas&lt;br /&gt;2)   Seguimiento de una ruta planificada sobre un mapa recogiendo información aportada por las marcas del entorno.&lt;br /&gt;3)    Seguimiento de una ruta planificada sobre un mapa usando la información que considera de utilidad de la información aportada por las marcas del entorno.&lt;br /&gt;4)    Seguimiento de una ruta que es establecida solo por marcas visuales, sin el uso de mapas.&lt;br /&gt;5)    Seguimiento de una marca en movimiento.&lt;br /&gt;&lt;br /&gt;Por otro lado también tengo pensado (si me diera tiempo) hacer un modo manual, donde un usuario controla remotamente el robot y la cámara.&lt;br /&gt;&lt;br /&gt;Ahora la aplicacion esta corriendo directamente sobre el robot, pero se intentara implementar una aplicacion cliente que inicie el servicio haciendo uso de la librería ArNetworking, escoja el modo que quiere ejecutar y pueda ver la imagen que el robot esta capturando. Este ultimo punto puede crear un cuello de botella en el procesamiento al tener que comprimir la imagen y enviarla en tiempo real.&lt;br /&gt;&lt;br /&gt;Hasta pronto!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-1199078290853536070?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/1199078290853536070/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=1199078290853536070' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/1199078290853536070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/1199078290853536070'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/07/estrategias-implementadas.html' title='Modos de funcionamiento implementados'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-2971621269986563385</id><published>2008-07-16T06:23:00.000-07:00</published><updated>2008-12-11T03:42:49.646-08:00</updated><title type='text'>Obteniendo la posicion mediante marcas</title><content type='html'>Buenas,&lt;br /&gt;&lt;br /&gt;tras probar el caso anterior, en la negación sin marcas se observa que la odometria comente ciertos errores de medición.&lt;br /&gt;&lt;br /&gt;Ahora, se plantea un caso de estudio, donde el robot va navegando normalmente y cuando se encuentra una marca calcula su posición en el mapa con respecto la posición global de la marca en el mapa. Aparte, cada vez que detecta una marca muestra la información por pantalla y añade una entrada en un log con la siguiente información:&lt;br /&gt;&lt;br /&gt;-Fecha y hora en que se ha encontrado la marca&lt;br /&gt;-Posición del robot en el mapa que se estima mediante el odómetro y el giroscopio.&lt;br /&gt;-Posición del robot en el mapa que estima mediante la información que le aporta la marca.&lt;br /&gt;&lt;br /&gt;Con esto, aparte de poder depurar de forma visual en tiempo de ejecución, se proporciona un log que se puede consultar a posteriori para hacer comparaciones. En la siguiente figura se puede observar lo comentado anteriormente.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qLqx8As_TX0/SH36RLhSAlI/AAAAAAAAAOg/-71J2Xzlwq8/s1600-h/imagen.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qLqx8As_TX0/SH36RLhSAlI/AAAAAAAAAOg/-71J2Xzlwq8/s400/imagen.bmp" alt="" id="BLOGGER_PHOTO_ID_5223606315876745810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para la prueba se ha situado la marca a un metro del robot y el error aproximado según se observa en las entradas del log es de unos 30-50 milímetros como máximo Lo cual parece un resultado positivo para trabajar en futuros modos de funcionamiento que usen esta información para tomar determinadas decisiones.    &lt;br /&gt;&lt;br /&gt;Como comentario, cabe anotar que se ha sustituido el uso de jpegLib por OpenCV [1], ya que tiene una mayor funcionalidad y en nuestro caso nos permitirá operaciones como:&lt;br /&gt;-Añadir información al frame(como texto o formas básicas)&lt;br /&gt;-Realizar diferentes transformaciones (lo que se ha usado para realizarle un flip vertical a la imagen, pues la capturadora la proporciona invertida)&lt;br /&gt;-Guardar un frame en diferentes formas (aparte del jpeg).&lt;br /&gt;-Mostrar la imagen en una ventana de forma sencilla.&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http://sourceforge.net/projects/opencvlibrary/"&gt;http://sourceforge.net/projects/opencvlibrary/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-2971621269986563385?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/2971621269986563385/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=2971621269986563385' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/2971621269986563385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/2971621269986563385'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/07/obteniendo-la-posicion-mediante-marcas.html' title='Obteniendo la posicion mediante marcas'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qLqx8As_TX0/SH36RLhSAlI/AAAAAAAAAOg/-71J2Xzlwq8/s72-c/imagen.bmp' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-8927607960226016425</id><published>2008-07-14T04:24:00.001-07:00</published><updated>2008-12-11T03:42:49.864-08:00</updated><title type='text'>Moviendo a Don Pioneer 3AT</title><content type='html'>Buenas,&lt;br /&gt;&lt;br /&gt;una vez asentadas las bases del funcionamiento de Artoolkit, Aria, etc... me dispongo a implementar un caso de estudio para comprobar la funcionalidad que podría tener el uso de marcas para conseguir un posicionamiento del robot más robusto y fiable.&lt;br /&gt;&lt;br /&gt;Para este objetivo he creado un mapa de la segunda planta del I3A con la herramienta Mapper3Basic [1].&lt;br /&gt;&lt;br /&gt;Primeramente se intentó hacer una implementación de un algoritmo de navegación híbrida que se componía de un algoritmo de planificación global basado en rejillas (que divide el mapa en casillas y calcula la mínima distancia de un origen a un destino) para calcular por qué puertas debía pasar y un algoritmo de navegación local (en concreto se usó el algoritmo Vector Field Histograms [2]) para esquivar obstáculos inesperados que se pudieran presentar durante la navegación.&lt;br /&gt;&lt;br /&gt;Tras la implementación del algoritmo se probó que la navegación local es impracticable debido a las fluctuaciones de los sonares (quizá con la herramienta del láser se obtendría mayor precisión y sería aplicable).&lt;br /&gt;&lt;br /&gt;A la vista de esto, como el desarrollo de un algoritmo de navegación no es parte del objetivo del proyecto (aunque si me hubiera gustado que funcionara, aunque fuera por probar alguna cosa más) se ha opatado por definir una ruta preestablecida en el mapa (como se puede ver en la siguiente figura) para empezar observar el error de odometría cometido y probar diferentes estategias en las cuales las marcas podrían aportar cierta semántica al entorno para mejorar el posicionamiento en la navegación.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qLqx8As_TX0/SHs6uILPZpI/AAAAAAAAAOY/jCTpMTEpmMg/s1600-h/mapa.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qLqx8As_TX0/SHs6uILPZpI/AAAAAAAAAOY/jCTpMTEpmMg/s400/mapa.bmp" alt="" id="BLOGGER_PHOTO_ID_5222832757009245842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[1]  &lt;a href="http://robots.mobilerobots.com/Mapper3Basic/"&gt;http://robots.mobilerobots.com/Mapper3Basic/&lt;/a&gt;&lt;br /&gt;[2]  &lt;a href="http://www-personal.umich.edu/%7Ejohannb/vff&amp;amp;vfh.htm"&gt;http://www-personal.umich.edu/~johannb/vff&amp;amp;vfh.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-8927607960226016425?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/8927607960226016425/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=8927607960226016425' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/8927607960226016425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/8927607960226016425'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/07/moviendo-al-robot.html' title='Moviendo a Don Pioneer 3AT'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qLqx8As_TX0/SHs6uILPZpI/AAAAAAAAAOY/jCTpMTEpmMg/s72-c/mapa.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-494862552709909232</id><published>2008-07-02T02:40:00.000-07:00</published><updated>2008-12-11T03:42:50.077-08:00</updated><title type='text'>Jugando con las coordenadas de ARToolkitPlus</title><content type='html'>Una vez puesto en marcha Artoolkit Plus, presenta dos ejemplos muy básicos.&lt;br /&gt;&lt;br /&gt;En el caso de detectar una sola marca te devuelve una matriz de transformación que representa la posición de la marca con respecto a la cámara. La salida del programa es la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/math/5/8/4/5841dcd4e4e0914af51593a872d51bf2.png"&gt;&lt;br /&gt;&lt;/a&gt; &lt;div class="smallfont" style="margin-bottom: 2px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 274px; text-align: left;"&gt;ARToolKitPlus: CamSize 320 , 240&lt;br /&gt;ARToolKitPlus: Dist.Factor 159.00 139.00 -84.90 0.98&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Found marker 100  (confidence 100%)&lt;br /&gt;&lt;br /&gt;Pose-Matrix:&lt;br /&gt;&lt;b&gt;0.28  0.58  -0.77&lt;/b&gt;  0.00&lt;br /&gt;&lt;b&gt;  0.96  -0.20  0.20&lt;/b&gt;  0.00&lt;br /&gt;&lt;b&gt;  -0.04  -0.79  -0.61&lt;/b&gt;  0.00&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;6.29  -3.43  265.68 &lt;/span&gt; 1.00&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;Esta matriz representa la orientación mediante una matriz 3x3 (macada en negrita) y la dustancia x, y, z (marcadas en rojo).&lt;br /&gt;&lt;br /&gt;La duda que se plantea es cómo pasar de una matriz 3x3 a tres ángulos de rotación (uno por eje).&lt;br /&gt;&lt;br /&gt;Teniendo en cuenta que la matriz de transformación esta basada en la matriz de OpenGl, la matriz de rotación se obtiene de la multiplicación de la multiplicación de las tres las matrices de rotación:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qLqx8As_TX0/SIO3E9Fh1kI/AAAAAAAAAOo/xVl92VTlcgo/s1600-h/matrices.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qLqx8As_TX0/SIO3E9Fh1kI/AAAAAAAAAOo/xVl92VTlcgo/s400/matrices.jpg" alt="" id="BLOGGER_PHOTO_ID_5225221288425018946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Realizando las siguientes simplificaciones: cx=Cos(x), cy=Cos(y), cz=Cos(z), stx=Sin(x), sty=Sin(y), stz=Sin(z), y multiplicando las tres rotaciones nos que daría la siguiente matriz:&lt;br /&gt;&lt;br /&gt;&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="6%"&gt;[R] =&lt;/td&gt;     &lt;td width="29%"&gt;rotate about z (last rotation)        &lt;table border="1" width="100%"&gt;         &lt;tbody&gt;&lt;tr&gt;            &lt;td width="60"&gt;cz&lt;/td&gt;           &lt;td width="52"&gt;-sz&lt;/td&gt;           &lt;td width="55"&gt;0&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;            &lt;td width="60"&gt;sz&lt;/td&gt;           &lt;td width="52"&gt;cz&lt;/td&gt;           &lt;td width="55"&gt;0&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;            &lt;td width="60"&gt;0&lt;/td&gt;           &lt;td width="52"&gt;0&lt;/td&gt;           &lt;td width="55"&gt;1&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;    &lt;/td&gt;     &lt;td width="2%"&gt;* (&lt;/td&gt;     &lt;td width="28%"&gt;rotate about y (second rotation)        &lt;table border="1" width="100%"&gt;         &lt;tbody&gt;&lt;tr&gt;            &lt;td width="60"&gt;cy&lt;/td&gt;           &lt;td width="52"&gt;0&lt;/td&gt;           &lt;td width="55"&gt;sy&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;            &lt;td width="60"&gt;0&lt;/td&gt;           &lt;td width="52"&gt;1&lt;/td&gt;           &lt;td width="55"&gt;0&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;            &lt;td width="60"&gt;-sy&lt;/td&gt;           &lt;td width="52"&gt;0&lt;/td&gt;           &lt;td width="55"&gt;cy&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;    &lt;/td&gt;     &lt;td width="3%"&gt;*&lt;/td&gt;     &lt;td width="29%"&gt;rotate about x (first rotation)        &lt;table border="1" width="100%"&gt;         &lt;tbody&gt;&lt;tr&gt;            &lt;td width="60"&gt;1&lt;/td&gt;           &lt;td width="52"&gt;0&lt;/td&gt;           &lt;td width="55"&gt;0&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;            &lt;td width="60"&gt;0&lt;/td&gt;           &lt;td width="52"&gt;cx&lt;/td&gt;           &lt;td width="55"&gt;-sx&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;            &lt;td width="60"&gt;0&lt;/td&gt;           &lt;td width="52"&gt;sx&lt;/td&gt;           &lt;td width="55"&gt;cx&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;    &lt;/td&gt;     &lt;td width="3%"&gt;)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;[R] =                      &lt;table border="1" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;            &lt;td&gt;cy * cz&lt;/td&gt;           &lt;td&gt;sx*sy*cz-cx*sz&lt;/td&gt;           &lt;td&gt;cx*sy*cz+sx*sz&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;            &lt;td&gt;cy * sz&lt;/td&gt;           &lt;td&gt;sx*sy*sz +cx*cz&lt;/td&gt;           &lt;td&gt;cx*sy*sz-sx*cz&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;            &lt;td&gt;-sy&lt;/td&gt;           &lt;td&gt;sx*cy&lt;/td&gt;           &lt;td&gt;cx*cy&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;De donde es fácil ver que:&lt;br /&gt;&lt;div style="text-align: center;"&gt; Ang x = atan(r[2][1]/r[2][2])&lt;br /&gt;Ang y = asin(-r[2][0])&lt;br /&gt;Ang z = atan(r[0][0]/r[0][1])&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;De estas operaciones se observa que se puede producir "Gimbal Lock" si se divide por algún seno o coseno que tenga valor 0.  Como para este caso solo hace falta saber el giro del eje Y, y se obtiene de asin(-sy) solo puede valer 0 en -90 o +90 grados, lo que no se da nunca porque con esa inclinación la cámara no ve la marca. En cualquier caso, si se diera esta problema puede consultarse el siguiente enlace para resolverlo [1].&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Por otro lado también comentar que si queremos la posición de la cámara respecto a la marca, se llamará a la función arUtilMatInv de artoolkit ya que artoolkit plus no incluye esta función.&lt;br /&gt;&lt;br /&gt;Por ahora es todo.&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http:/www.j3d.org/matrix_faq/matrfaq_latest.html#Q37"&gt;http:/www.j3d.org/matrix_faq/matrfaq_latest.html#Q37&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="file:///C:/DOCUME%7E1/ADMINI%7E1/CONFIG%7E1/Temp/moz-screenshot.jpg" alt="" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-494862552709909232?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/494862552709909232/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=494862552709909232' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/494862552709909232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/494862552709909232'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/07/jugando-con-las-coordenadas-de.html' title='Jugando con las coordenadas de ARToolkitPlus'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qLqx8As_TX0/SIO3E9Fh1kI/AAAAAAAAAOo/xVl92VTlcgo/s72-c/matrices.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-4983619016689068719</id><published>2008-06-23T09:14:00.000-07:00</published><updated>2008-06-23T09:30:37.170-07:00</updated><title type='text'>Probando ARToolKitPlus</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://studierstube.icg.tu-graz.ac.at/handheld_ar/images/artoolkitplus_logo.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://studierstube.icg.tu-graz.ac.at/handheld_ar/images/artoolkitplus_logo.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Aunque hasta ahora he trabajado con ARTK, me comentaron el otro día que existe una variante, el ArtoolkitPlus [1], que minimiza la necesidad de procesamiento (lo cual es bastante interesante para el limitado procesador del robot). Pero esta versión de la  libreria se encuentra con los siguientes grandes problemas:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Carece practicamente de DOCUMENTACIÓN. En teoría y según ellos la documentación de ARTK debería ser suficiente, pero se supone que previamente has debido trabajar con esta. &lt;/i&gt;&lt;/li&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;li&gt;&lt;i&gt;Apenas hay ejemplos solo incluye dos que son muy simples.&lt;/i&gt;&lt;/li&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;li&gt;&lt;i&gt;ARTK+ no dispone de librerias de acceso a camaras (ARTK si dispone de ellas). Si queremos utilzar esta funcionalidad en ARTK+ debemos fabricarnos nuestras propias librerias de acceso.&lt;/i&gt;&lt;/li&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;li&gt;&lt;i&gt;Por último los creadores de ARTK+ han dejado su desarrollo paralizado su desarrollo y lo han dejado de lado. Actualmente estan trabajando en un nuevo proyeto que realizaría estas funcionalidades de una forma más optimizada. Su nombre es STUDIERSTUBE TRACKER. Pero también aqui tenemos otro problema, puesto que este proyecto no se distribuye bajo el mismo tipo de licencia que los anteriores y si deseas obtenerlo debes ponerte en contacto con su creador y solicitarselo.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;Por tanto ante estos problemas, según se vea la experiencia con esta librería se hará uso de ella  o no.&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http://studierstube.icg.tu-graz.ac.at/handheld_ar/artoolkitplus.php"&gt;http://studierstube.icg.tu-graz.ac.at/handheld_ar/artoolkitplus.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-4983619016689068719?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/4983619016689068719/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=4983619016689068719' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/4983619016689068719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/4983619016689068719'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/06/probando-artoolkitplus.html' title='Probando ARToolKitPlus'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-6272086420188008819</id><published>2008-06-13T09:25:00.000-07:00</published><updated>2008-12-11T03:42:50.354-08:00</updated><title type='text'>Diseñando la implementación</title><content type='html'>Buenas,&lt;br /&gt;&lt;br /&gt;ya despues de todos los exámenes superados con éxito :D, retomo el desarrollo del proyecto y ahora ya toca ir trabajando la implementación.&lt;br /&gt;&lt;br /&gt;  Como buen analista, el primer paso consta en analizar el problema y esbozar un diagrama que refleje el funcionamineto. Para eso he diseñado el siguiente diagrama de clases, que aunque es un prototipo muy temprano, da una idea de la estructura y el funcionamiendo del proyecto:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qLqx8As_TX0/SFKiKpdrgEI/AAAAAAAAAOI/2BjhEaf0Bt4/s1600-h/Diagrama+de+clases.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qLqx8As_TX0/SFKiKpdrgEI/AAAAAAAAAOI/2BjhEaf0Bt4/s400/Diagrama+de+clases.jpg" alt="" id="BLOGGER_PHOTO_ID_5211406022633816130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;El fucionamiento un poco por encima sería el siguiente:&lt;br /&gt;&lt;br /&gt;-El &lt;b&gt;servidor &lt;/b&gt;(o clase principal) se crea un objeto &lt;b&gt;contexto &lt;/b&gt;con la información que le pasa el cliente al establecer la conexión.&lt;br /&gt;  -Posteriormente se crea un objeto de "&lt;b&gt;control robot&lt;/b&gt;" al que le pasa como parametro el objeto "contexto" (ya que lo van a modificar) y que contiene dos objetos: "&lt;b&gt;control camara&lt;/b&gt;" y "&lt;b&gt;control Movimiento&lt;/b&gt;".&lt;br /&gt;  -Se crea un objeto "&lt;b&gt;Estimacion Posición mediante Artoolkit&lt;/b&gt;" que es la parte que accede a la capturadora de vídeo para tomar un fotograma y calcular su posición respecto al fotograma, aparte de poder devolver vídeo frame a frame.&lt;br /&gt;  -Todos los objetos creados son pasados como parámetros a un objeto "&lt;b&gt;Strategy&lt;/b&gt;" según el tipo de estrategia que decida utilizar el usuario y estas pueden ser:&lt;br /&gt;&lt;br /&gt;   1) Contol manual del robot y la cámara,&lt;br /&gt;   2) Funcionamiento autónomo buscando las marcas cercanas a la ruta para calibrarse&lt;br /&gt;   3) Funcionamiento autónomo sin buscar las marcas pero teniéndolas en cuenta si se encuentra con alguna de forma casual.&lt;br /&gt;&lt;br /&gt;De momento voy a ver como empiezo a implementar todo esto porque son muchas cosas y ya iré comentando como va la cosa.&lt;br /&gt;&lt;br /&gt;Saludos!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-6272086420188008819?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/6272086420188008819/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=6272086420188008819' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/6272086420188008819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/6272086420188008819'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/06/diseando-la-implementacin.html' title='Diseñando la implementación'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qLqx8As_TX0/SFKiKpdrgEI/AAAAAAAAAOI/2BjhEaf0Bt4/s72-c/Diagrama+de+clases.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-4091200367200003232</id><published>2008-04-15T19:02:00.000-07:00</published><updated>2008-12-11T03:42:50.715-08:00</updated><title type='text'>Ya tengo las fuentes de vídeo</title><content type='html'>Tras mucho cacharrear, he conseguido sacar el vídeo frame a frame en formato JPEG, tanto para la imagen real, como para la aumentada. Para esta última he utilizado la función de OpenGl "glReadPixels" [1], la cual captura lo último que se ha pintado OpenGl y lo almacena en un buffer, que posteriormente comprimo a JPEG. Aunque para el proyecto no es el objetivo insertar gráficos aumentados en la imagen pienso que esto podría ser de utilidad para futuros proyectos.&lt;br /&gt;&lt;br /&gt;Para la compresión de JPEG he usado la librería libjpeg [2], bastante extendida en el tema.&lt;br /&gt;&lt;br /&gt;A continuación se muestra una captura del mismo instante de la imagen real y la aumentada&lt;br /&gt;&lt;br /&gt;Imagen real:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qLqx8As_TX0/SAVgFfmkK6I/AAAAAAAAANQ/S85R04nKr5M/s1600-h/juan2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qLqx8As_TX0/SAVgFfmkK6I/AAAAAAAAANQ/S85R04nKr5M/s400/juan2.jpg" alt="" id="BLOGGER_PHOTO_ID_5189659793113230242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Imagen aumentada:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qLqx8As_TX0/SAVf7fmkK5I/AAAAAAAAANI/w9twntnMKl0/s1600-h/juan.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qLqx8As_TX0/SAVf7fmkK5I/AAAAAAAAANI/w9twntnMKl0/s400/juan.jpg" alt="" id="BLOGGER_PHOTO_ID_5189659621314538386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;El próximo objetivo será estudiar las apliaciones cliente-servidor y realizar el envío de imágenes entre ambas.&lt;br /&gt;&lt;br /&gt;[1] http://www.rootr.net/man/man/glReadPixels/3G&lt;br /&gt;[2] http://en.wikipedia.org/wiki/Libjpeg&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-4091200367200003232?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/4091200367200003232/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=4091200367200003232' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/4091200367200003232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/4091200367200003232'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/04/ya-tengo-las-fuentes-de-vdeo.html' title='Ya tengo las fuentes de vídeo'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qLqx8As_TX0/SAVgFfmkK6I/AAAAAAAAANQ/S85R04nKr5M/s72-c/juan2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-1087328337352850570</id><published>2008-04-14T10:22:00.000-07:00</published><updated>2008-12-11T03:42:50.887-08:00</updated><title type='text'>Modelando el problema</title><content type='html'>Buenas,&lt;br /&gt;&lt;br /&gt;  tras una reunión con mis tutores de proyecto (Arturo y José Pascual), hemos planteado el problema según el siguiente diagrama, donde se propone el desarrollo como un módulo independiente, cuyas entradas y salidas serán:&lt;br /&gt;-Entradas: inicialización del módulo y diferentes comandos con el objetivo de parametrizar la salida.&lt;br /&gt;-Salida: datos de la posición del robot, salida de vídeo real o salida de vídeo aumentado.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qLqx8As_TX0/SAOVyfmkK4I/AAAAAAAAANA/q8ckk6usZPY/s1600-h/Dibujo.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_qLqx8As_TX0/SAOVyfmkK4I/AAAAAAAAANA/q8ckk6usZPY/s400/Dibujo.JPG" alt="" id="BLOGGER_PHOTO_ID_5189155890370194306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Por este tipo de arquitectura, a priori se plantean los siguientes problemas:&lt;br /&gt;-Hacer una apliación clienteso-servidor&lt;br /&gt;-y lo que será mas problemático, comprimir el vídeo en tiempo real y enviarlo.&lt;br /&gt;  Para esta última tarea adelanto que trataré de abordarla usando el  estandar JPEG. La compliación vendrá si no es capaz de realizar una compresión en tiempo real frame a frame, aunque según parece el cliente-servidor de vídeo que proporciona MobileRobots [1] comprime en tiempo real en JPEG.&lt;br /&gt;&lt;br /&gt;En cualquier caso, ya iré contando los progresos.&lt;br /&gt;&lt;br /&gt;[1] Aplicacion cliente-servidor de vídeo: &lt;a href="http://robots.mobilerobots.com/SAV/"&gt;http://robots.mobilerobots.com/SAV/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-1087328337352850570?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/1087328337352850570/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=1087328337352850570' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/1087328337352850570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/1087328337352850570'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/04/modelando-el-problema.html' title='Modelando el problema'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qLqx8As_TX0/SAOVyfmkK4I/AAAAAAAAANA/q8ckk6usZPY/s72-c/Dibujo.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-4730122096814861888</id><published>2008-04-07T03:44:00.000-07:00</published><updated>2008-04-08T13:12:26.309-07:00</updated><title type='text'>Por fin tengo la imagen!</title><content type='html'>Algunos compañeros mios tienen el dicho de que "cuando un tonto sigue un camino, el camino acaba pero el tonto sigue". Pero en este caso, aunque parecía que no se podría utilizar la cámara en el proyecto al no ser compatible con DirectShow y este cámino parecia descartardo, indagando en la SDK grauita y limitada que proporcionan los fabricantes de la capturadora, encontré la forma de pasar el buffer que contiene la imagen directamente al artoolkit haciendo uso de los adorables punteros de c++ que suelen dar muchos dolores de cabeza, pero en ocasiones te sacan de muchos lios, como es el caso. La importancia de este hecho radica en que al estar trabajando directamente con la capturadora del robot, en teoría toda cámara conectada a ella trabajaría con Artoolkit, lo cual le da gran flexibilidad a la hora de cambiar la cámara del robot.&lt;br /&gt;&lt;br /&gt;Así pues en este punto, las siguentes tareas a realizar son:&lt;br /&gt;- Calibrar la cámara para un mejor uso de artoolkit.&lt;br /&gt;- Manejar el movimiento Pan&amp;amp;Tild y zoom de la cámara.&lt;br /&gt;- Hallar la ditancia y posición del robot basándose en la posición con que vé la marca.&lt;br /&gt;- Empezar a mover el robot sobre un mapa (del I3A a ser posible).&lt;br /&gt;- Integrar y estructurar todo en un proyecto&lt;br /&gt;&lt;br /&gt;Dicho esto...manos a la obra!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-4730122096814861888?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/4730122096814861888/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=4730122096814861888' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/4730122096814861888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/4730122096814861888'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/04/por-fin-tengo-la-imagen.html' title='Por fin tengo la imagen!'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-3990089732123052436</id><published>2008-02-29T00:31:00.000-08:00</published><updated>2008-12-11T03:42:51.233-08:00</updated><title type='text'>Primeros problemillas</title><content type='html'>Hola a todos, como siempre que se intenta integrar HW y SW han surgido los primeros problemas, pues como cada uno viene de su padre y su madre es dificil que trabajen en armonia. En este caso, el problema fue al intentar probar Artoolkit con la cámara PTZ canon vc-c50i :&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qLqx8As_TX0/R8fDq5JOoaI/AAAAAAAAAMg/YBw2cQ34BA0/s1600-h/cannon-vcc50i.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_qLqx8As_TX0/R8fDq5JOoaI/AAAAAAAAAMg/YBw2cQ34BA0/s320/cannon-vcc50i.jpg" alt="" id="BLOGGER_PHOTO_ID_5172317838719754658" border="0" /&gt;&lt;/a&gt;   Que la verdad, es una cámara muy completa, pues tiene Pan &amp;amp; Tild, un zoom increible, visión nocturna, resolución enorme... pero en realidad ella no tiene la culpa, pues esta conectada a una capturadora de video Sensoray 311 que no ofrece soporte para DirectShow y por tanto no funciona con Artoolkit.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qLqx8As_TX0/R8fEt5JOobI/AAAAAAAAAMo/2foqM-NkWa4/s1600-h/311_500pixels.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_qLqx8As_TX0/R8fEt5JOobI/AAAAAAAAAMo/2foqM-NkWa4/s320/311_500pixels.jpg" alt="" id="BLOGGER_PHOTO_ID_5172318989770990002" border="0" /&gt;&lt;/a&gt;   Otra prosibilidad podría haber sido que la capturadora guardara vídeo .AVI y pasárselo a Artoolkit como entrada, pero según me comentan los fabricantes de Sensoray 311 solo captura video sin comprimir y para el limitado procesador del P3AT sería demasiado tener que comprimir vídeo y realizar el procesamiendo del Artoolkit en tiempo real, por tanto esta opción por el momento queda descartada.&lt;br /&gt;  Así que en este punto, como solución se plantea usar otro tipo de cámara como una webcam USB que suelen dar menos problemas al usar estas librerias.&lt;br /&gt;&lt;br /&gt;  Hasta aqui el primero de mis problemas y seguramente no será el último,&lt;br /&gt;&lt;br /&gt;  saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-3990089732123052436?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/3990089732123052436/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=3990089732123052436' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/3990089732123052436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/3990089732123052436'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/02/primeros-problemillas.html' title='Primeros problemillas'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qLqx8As_TX0/R8fDq5JOoaI/AAAAAAAAAMg/YBw2cQ34BA0/s72-c/cannon-vcc50i.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-3792746398246282277</id><published>2008-02-25T09:34:00.000-08:00</published><updated>2008-12-11T03:42:52.026-08:00</updated><title type='text'>Augmented Reality Aracnophobia Therapy</title><content type='html'>Hola a todos de nuevo,&lt;br /&gt;&lt;br /&gt;ya adentrándome un poco en el mundo Artoolkit he realizado un trabajo para ponerlo en funcionamiento y hacer algunas pruebas. Primero, para quien le interese haré una breve descripción sobre "qué es Artoolkit" y "cómo se instala" (si ya lo conoce puede saltar este paso).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;¿Qué es Artoolkit?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;ArToolKit es un conjunto de librerías para C/C++ que sirven para la creación de aplicaciones de realidad aumentada. Para ello proporciona una serie de funciones para la captura de vídeo y para la búsqueda de ciertos patrones, en las imágenes capturadas, mediante técnicas de visión por computador. También proporciona una serie de ejemplos y utilidades de gran ayuda al programador que quiera realizar este tipo de aplicaciones.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Instalación y puesta en marcha de Artoolkit&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;A continuación se detalla cómo se ha realizado la instalación y puesta en marcha de Artoolkit en su última versión (2.72.1) bajo Windows XP usando el entorno Visual Studio .NET 2003 en C++.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Prerequisitos:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- Entorno de desarrollo&lt;/span&gt;: donde se ha usado .NET 2003 pero también es posible usar Microsoft Visual Studio 6&lt;br /&gt;- &lt;span style="font-weight: bold;"&gt;DSVideoLib-0.0.8b-win32&lt;/span&gt;: librería usada para controlar la comunicación con el driver de la cámara.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- GLUT&lt;/span&gt;: con el kit estas librerías deberían estar en los siguientes directorios si no existieran ya:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;glut32.dll en c:\widows\system32&lt;/li&gt;&lt;li&gt;glut.dll en C:\widows\system&lt;/li&gt;&lt;li&gt;glut.h en (*)\Include\gl\&lt;/li&gt;&lt;li&gt;glut32.lib en (*)\Lib\&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;- DirectX Runtime:&lt;/span&gt; librerías de DirectX en su versión 9.0b o posterior&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- Entrada de vídeo:&lt;/span&gt; en este caso mediante una cámara web (hay que apreciar que para el correcto funcionamiento si se tiene otra fuente de vídeo, como pudiera ser una capturadora de televisión, es necesario deshabilitarla).&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- OpenVRML-0.14.3-win32&lt;/span&gt;: para trabajar con VRML como será el caso.&lt;br /&gt;*Nota: para nuestro caso (*) se corresponde con la ruta “C:\Archivos de programa\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK”&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Instalación:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Para poner en marcha Artoolkit, se recomienda seguir los siguientes pasos, aunque algunos en esta última versión ya vienen configurados dentro del directorio de Artoolkit:&lt;br /&gt;&lt;br /&gt;1. Descomprimir ARToolKit.zip en cualquier directorio, siempre y cuando el directorio que contenga todo se llame ARToolKit.&lt;br /&gt;2. Descomprimir DSVideoLib zip dentro {ARToolKit}. Asegurarse de que este directorio se llama "DSVL".&lt;br /&gt;3. Copiar los archivos DSVL.dll y DSVLd.dll desde {ARToolKit}\DSVL\bin dentro de {ARToolKit}\bin.&lt;br /&gt;4. Instalar GLUT DLL dentro de la carpeta de Windows System32, y la librería y cabeceras dentro de las carpetas de la plataforma VS SDK .&lt;br /&gt;5. Ejercutar el script {ARToolKit}\Configure.win32.bat para crear include/AR/config.h.&lt;br /&gt;6. Abrir ARToolKit.sln (VS.NET) o ARToolkit.dsw (VS6).&lt;br /&gt;7. Ejecutar Artoolkit.&lt;br /&gt;8. La libreria de renderizado de VRML y el ejemplo son opcionales pero para nuestro caso necesarios:&lt;br /&gt;9. Descomprimir OpenVRML zip dentro de {ARToolKit}.&lt;br /&gt;10. Copiar js32.dll desde {ARToolKit}\OpenVRML\bin dentro de {ARToolKit}\bin.&lt;br /&gt;11. Habilitar libARvrml y simpleVRML projects en el controlador de configuración del VS.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Caso de estudio&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;En nuestro caso pretendemos que cuando la cámara detecte determinados patrones, superponga modelos VRML de arácnidos, dando lugar a una realidad aumentada que mezcle el entorno real con estos modelos virtuales añadidos.&lt;br /&gt;Para esto vamos a trabajar sobre el ejemplo “simpleVRML.vcproj” ubicado en “ARToolKit\examples\simpleVRML”.&lt;br /&gt;Para que funcione correctamente en dicho directorio necesitamos tener las carpetas “Data” (que contiene datos de configuración, patronest, etc) y “Wrl” (que contiene los archivos VRML y los datos de configuración de estos). Estos directorios se encuentran {Artoolkit}/bin/.&lt;br /&gt;Una vez hecho esto, iniciamos Visual Studio .Net 2003 y abrimos un nuevo proyecto, donde uscaremos en la siguiente ruta ARToolKit\examples\simpleVRML\ simpleVRML.vcproj&lt;br /&gt;Al ejecutar el proyecto debe aparecer una ventana que nos deja personalizar los parámetros de la cámara y posteriormente la imagen capturada por la cámara. Ahora cuando detecte algún patrón de los configurados mostrará añadirá información a la imagen capturada con la imagen virtual. En el siguiente ejemplo se aprecia cómo en un entorno real introduce una abeja volando cuando detecta el patrón “hiro”, que básicamente consiste en un modelo VRML.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qLqx8As_TX0/R8MDGkyhJCI/AAAAAAAAAL4/mN2X22AOyj8/s1600-h/abeja.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qLqx8As_TX0/R8MDGkyhJCI/AAAAAAAAAL4/mN2X22AOyj8/s320/abeja.JPG" alt="" id="BLOGGER_PHOTO_ID_5170980208641123362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Con todo esto ya sólo faltaría encontrar unos modelos de arañas para nuestro caso de estudio y modificar los archivos de configuración para que los muestre de acuerdo con los patrones que asociemos a cada uno.&lt;br /&gt;Para esto, primero modificamos el en ARToolKit\examples\simpleVRML\Data\ el archivo object_data_vrml con el notepad de la siguiente manera:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#the number of patterns to be recognized&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;3&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#pattern 1&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;VRML Wrl/spider1.dat&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;Data/patt.kanji&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;80.0&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;0.0 0.0&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;#pattern 2&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;VRML&lt;br /&gt;Wrl/spider2.dat&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Data/patt.hiro&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;80.0&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;0.0 0.0&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;#pattern 3&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;VRML Wrl/spider3.dat&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Data/patt.sample1&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;80.0&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;0.0 0.0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Y también habría que modificar los archivos .dat con el archivo .wrl que carga y las transformaciones que le realizará. Por ejemplo para el ejemplo 1 (spider1.dat) sería:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;spider1.wrl&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;0.0 0.0 50.0&lt;br /&gt;# Translation&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;0.0 0.0 0.0 0.0&lt;br /&gt;# Rotation&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;5 5 5&lt;br /&gt;# Scale&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;En total se han realizado tres casos, una araña estática (para ponerla en la pared o una mano), otra con movimiento de translación (para que se mueva por el suelo) y otra que cuelga de un hilo y sube o baja (para ponerla en una pared).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Resultados:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para los tres casos desarrollados estos son los resultados visuales:&lt;br /&gt;Para el ejemplo 1 (araña estática):&lt;br /&gt;&lt;img src="file:///C:/Documents%20and%20Settings/thinkill/Escritorio/arana1.JPG" alt="" /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qLqx8As_TX0/R8MEl0yhJDI/AAAAAAAAAMA/2yI6LrDCxDk/s1600-h/arana1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qLqx8As_TX0/R8MEl0yhJDI/AAAAAAAAAMA/2yI6LrDCxDk/s320/arana1.JPG" alt="" id="BLOGGER_PHOTO_ID_5170981845023663154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Para el ejemplo 2 (araña en movimiento)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qLqx8As_TX0/R8MF20yhJEI/AAAAAAAAAMI/woOkUzqpvR4/s1600-h/arana2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qLqx8As_TX0/R8MF20yhJEI/AAAAAAAAAMI/woOkUzqpvR4/s320/arana2.JPG" alt="" id="BLOGGER_PHOTO_ID_5170983236593067074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Como puede observarse en este ejemplo se ha creado un polígono que oculta el patrón, este método podría ser usado para ocultar las marcas con la textura de la zona donde se pone la&lt;br /&gt;marca, así incrementaría la sensación de realidad.&lt;br /&gt;Para el Ejemplo 3 (que sube y baja sobre su hilo):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qLqx8As_TX0/R8MGjkyhJFI/AAAAAAAAAMQ/4a9WEGtrrQM/s1600-h/arana3.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qLqx8As_TX0/R8MGjkyhJFI/AAAAAAAAAMQ/4a9WEGtrrQM/s320/arana3.JPG" alt="" id="BLOGGER_PHOTO_ID_5170984005392213074" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Observaciones:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Todo este desarrollo podría aplicar en cámara web sobre la cabeza del usuario que realice las funciones descritas de realidad aumentada y un visiocasco de realidad virtual para incrementar la sensación de realidad que percibe el usuario. Algo parecido a como se muestra en la figura siguiente.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qLqx8As_TX0/R8MHcUyhJGI/AAAAAAAAAMY/vNOdpZU14EM/s1600-h/cabezaweb.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_qLqx8As_TX0/R8MHcUyhJGI/AAAAAAAAAMY/vNOdpZU14EM/s320/cabezaweb.JPG" alt="" id="BLOGGER_PHOTO_ID_5170984980349789282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y de momento esto es todo, espero que os haya gustado e incluso os pueda ser de utilidad.&lt;br /&gt;&lt;br /&gt;saludos,&lt;br /&gt;Alberto.&lt;br /&gt;&lt;img src="file:///C:/DOCUME%7E1/thinkill/CONFIG%7E1/Temp/moz-screenshot.jpg" alt="" /&gt;&lt;img src="file:///C:/DOCUME%7E1/thinkill/CONFIG%7E1/Temp/moz-screenshot-1.jpg" alt="" /&gt;&lt;img src="file:///C:/DOCUME%7E1/thinkill/CONFIG%7E1/Temp/moz-screenshot-2.jpg" alt="" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-3792746398246282277?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/3792746398246282277/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=3792746398246282277' title='7 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/3792746398246282277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/3792746398246282277'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2008/02/virtual-aracnophobia-therapy.html' title='Augmented Reality Aracnophobia Therapy'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qLqx8As_TX0/R8MDGkyhJCI/AAAAAAAAAL4/mN2X22AOyj8/s72-c/abeja.JPG' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6972070096295156428.post-3269940920502279553</id><published>2007-11-11T03:21:00.001-08:00</published><updated>2008-08-06T12:16:16.038-07:00</updated><title type='text'>Robotic + Augmented Reality = My project!</title><content type='html'>&lt;p&gt;Muy buenas!!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;   Puesto que este año voy a trabajar mucho en mi PFC y creo que voy a aprender un montón he decidido dedicarle un blog exclusivo. Trabajaré en el preciso campo de la robótica, y en este caso, haciendo uso de la &lt;a href="http://es.wikipedia.org/wiki/Realidad_aumentada" target="_blank" mce_href="http://es.wikipedia.org/wiki/Realidad_aumentada"&gt;realidad aumentada&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;   En concreto voy a trabajar con el robot Pioneer 3AT usado para video vigilancia, con el que hasta ahora, se ha conseguido hacer navegar de forma autónoma, pero con la pega de descalibrarse con mucha facilidad, lo que tira abajo todo el trabajo realizado. Para evitar esto, mediente un sistema de marcas usado en Realidad Aumentada, el robot podrá complentar la información real con la aumentada (mediante marcas), mejorando su calibración.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;   Aunque es probable que tenga que usar C++ a pelo por la limitada potencia del robot, intenaré meterle la plataforma .NET aunque sea con calzador!! [:D]. De todas formas por aqui iré contando mis progresos, problemas y comederos de cabeza que vayan surguiendo.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://prt.fernuni-hagen.de/pro/pioneer/pioneer.jpg" mce_src="http://prt.fernuni-hagen.de/pro/pioneer/pioneer.jpg" width="450" height="350" /&gt;&lt;br /&gt;&lt;br /&gt;La verdad esque los temas de realidad aumentada estan mu chulos, por tanto para quien no le haya quedado muy claro que es o tenga curiosidad aqui le dejo un vídeo de ejemplo, aunque en YouTube hay muchos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="355"&gt;&lt;br /&gt;&lt;param name="movie" value="http://www.youtube.com/v/rr4heG5qbTw&amp;amp;rel=1"&gt;&lt;br /&gt;&lt;param name="wmode" value="transparent"&gt;&lt;br /&gt;&lt;embed src="http://www.youtube.com/v/rr4heG5qbTw&amp;amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;p&gt; Por último, queria mencionar a mis tutores de proyecto José Pascual Molina Massó que aparte de un gran profesor es una gran persona y un apasionado del mundillo de la tecnología y Arturo García Jimenez que, aunque aún no he tenido la oportunidad de conocerlo tanto a partir de ahora vamos a pasar intensas jornadas de trabajo, dudas, quebraderos de cabeza (por lo que ya le pido disculpas de antemano xD).&lt;/p&gt;1 saludo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6972070096295156428-3269940920502279553?l=pfc-albertocorralesgarcia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pfc-albertocorralesgarcia.blogspot.com/feeds/3269940920502279553/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6972070096295156428&amp;postID=3269940920502279553' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/3269940920502279553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6972070096295156428/posts/default/3269940920502279553'/><link rel='alternate' type='text/html' href='http://pfc-albertocorralesgarcia.blogspot.com/2007/11/robotic-augmented-reality-my-project.html' title='Robotic + Augmented Reality = My project!'/><author><name>Alberto</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
