scieee Open visual document viewer

Comunicación remota con un sistema ROS mediante WebRTC

Cuenca García, Carlos

Abstract

El objetivo de este proyecto consiste en establecer una conexión directa mediante p2p (peer to peer) entre un usuario usando una aplicación web y un robot gobernado por una arquitectura robótica basada en el framework ROS, con el fin de realizar un "streaming" de audio y vídeo, así como intercambiar datos. El establecimiento de la comunicación se basa en la tecnología WebRTC, desarrollada por Google en colaboración con Mozilla y Opera. La aplicación web cuenta con un servidor Django, que gestiona las diferentes funcionalidades de ésta, así como el acceso de los usuarios y la comunicación inicial con el robot remoto. Dicha comunicación inicial es posible gracias al uso de webSockets, que permiten el intercambio de mensajes entre aquellos usuarios o dispositivos que se encuentren en una misma "room". El chat integrado en la web se nutre de este sistema de igual forma. El ecosistema ROS del robot gestiona diversos nodos, que se encargan de establecer la comunicación con el usuario remoto, gestionar los recursos multimedia locales y remotos, así como del control del hardware del robot. Por tanto, el usuario podrá controlar el respectivo robot de forma remota, visualizando lo que ve el robot y recibiendo la información que proporcionan sus sensores, con el único requisito de que tanto el usuario como el robot dispongan de conexión a internet, sin importar la ubicación de cada uno de ellos.

Full text

1 2 3 ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA GRADO EN INGENIERÍA INFORMÁTICA Comunicación emo a con un sis ema ROS median e WebRTC Remo e communica ion wi h ROS sys em h ough WebRTC Realizado po Ca los Cuenca Ga cía Tu o izado po Vicen e Manuel A é alo Espejo Depa amen o Ingenie ía de Sis emas y Au omá ica UNIVERSIDAD DE MÁLAGA MÁLAGA, JUNIO 2018 Fecha de ensa: El Sec e a io del T ibunal 4 A mis pad es Isabel y Juan Ca los, po su incondicional apoyo y e inqueb an able, a mi he mana Alba, po su capacidad de saca una son isa cuando más se necesi a, y a mi abuelo Juan, que con su compañía ilumina has a los sende os más oscu os. 5 Resumen El obje i o de es e p oyec o consis e en es ablece una conexión di ec a median e p2p (pee o pee ) en e un usua io usando una aplicación web y un obo gobe nado po una a qui ec u a obó ica basada en el amewo k ROS, con el in de ealiza un "s eaming" de audio y ídeo, así como in e cambia da os. El es ablecimien o de la comunicación se basa en la ecnología WebRTC, desa ollada po Google en colabo ación con Mozilla y Ope a. La aplicación web cuen a con un se ido Django, que ges iona las di e en es uncionalidades de és a, así como el acceso de los usua ios y la comunicación inicial con el obo emo o. Dicha comunicación inicial es posible g acias al uso de webSocke s, que pe mi en el in e cambio de mensajes en e aquellos usua ios o disposi i os que se encuen en en una misma " oom". El cha in eg ado en la web se nu e de es e sis ema de igual o ma. El ecosis ema ROS del obo ges iona di e sos nodos, que se enca gan de es ablece la comunicación con el usua io emo o, ges iona los ecu sos mul imedia locales y emo os, así como del con ol del ha dwa e del obo . Po an o, el usua io pod á con ola el espec i o obo de o ma emo a, isualizando lo que e el obo y ecibiendo la in o mación que p opo cionan sus senso es, con el único equisi o de que an o el usua io como el obo dispongan de conexión a in e ne , sin impo a la ubicación de cada uno de ellos. Palab as Cla e WebRTC, Robo , ROS, Django, Py hon, Web, WebSocke s. 6 Abs ac This p ojec has been de eloped o he po pose o es ablishing a di ec connec ion by p2p (pee o pee ) be ween an use using a web-based applica ion and a obo which is amewo k ROS based, o c ea e a ideo/audio s eaming and da a exchange. This di ec communica ion is based on WebRTC echnology, de eloped by Google, in collabo a ion wi h Mozilla and Ope a. The web applica ion wo ks wi h Django as se e , which manages all i s uncionali ies, use s au hen i ica ion and ini ial emo e obo communica ion. Such communica ion is c ea ed using websocke s, which c ea es di e en ooms, and all use s in each oom sha e hei messages. In eg a ed web cha uses his sys em as well. Robo ROS ecosys em leads all equi ed nodes, which manage he connec ion es ablishmen , local and emo e mul imedia esou ces and obo ha dwa e. So, use s can con ol he obo emo ely, isualizing e e y hing he obo sees and ecei ing obo senso s in o ma ion, wi h he only equi emen ha bo h o hem ha e in e ne connec ion, no ma e whe e is each one. Key Wo ds WebRTC, Robo , ROS, Django, Py hon, Web, WebSocke s. 7 Índice 1. In oducción ........................................................................................................................... 9 1.1 Con ex o ........................................................................................................................ 9 1.2 Obje i os del p oyec o .............................................................................................. 10 1.3 Es uc u a del documen o ........................................................................................ 11 2. Plan eamien o del p oblema ............................................................................................. 13 3. Sis ema ROS y su aplicación en el p oyec o ................................................................. 18 3.1 Ges ión del ídeo local y emo o ............................................................................ 19 3.2 Ges ión del audio local y emo o ............................................................................ 20 3.3 Ges ión de los da os locales y emo os ................................................................ 21 4. WebRTC y su aplicación en el p oyec o ......................................................................... 23 4.1 WebRTC aplicado al na egado .............................................................................. 26 4.2 WebRTC aplicado al obo ........................................................................................ 27 5. Me odología.......................................................................................................................... 29 5.1 1º I e ación: Desa ollo del se ido web .............................................................. 29 5.2 2º I e ación: Desa ollo de la aplicación web ....................................................... 30 5.3 3º I e ación: Desa ollo del canal de comunicación WebSocke ...................... 30 5.4 4º I e ación: Desa ollo del clien e WebRTC del na egado .............................. 31 5.5 5º I e ación: Desa ollo del clien e WebRTC del obo ....................................... 31 5.6 6º I e ación: Desa ollo de los ges o es mul imedia del obo .......................... 32 5.7 7º I e ación: C eación del nodo ROS-NXT ............................................................. 32 6. Solución p opues a ............................................................................................................ 33 6.1 Aplicación Django ...................................................................................................... 33 6.1.1 F on End (Na egado ).......................................................................................... 33 6.1.2 Back End (Se ido ) .............................................................................................. 35 6.2 Aplicación WebRosTC .............................................................................................. 43 6.2.1 Nodo B idge ............................................................................................................ 43 6.2.2 Nodo ROS ................................................................................................................ 53 7. P uebas y esul ados ......................................................................................................... 62 8. Conclusiones y u u as mejo as ...................................................................................... 65 9. Re e encias y bibliog a ía.................................................................................................. 68 10. Índice de ilus aciones .................................................................................................. 70 11. Anexo................................................................................................................................ 72 11.1 Manual de ins alación ............................................................................................... 72 8 11.1.1 Aplicación Django ............................................................................................. 72 11.1.2 Aplicación WebRosTC ...................................................................................... 72 11.2 Dependencias ............................................................................................................. 74 11.2.1 Dependencias del se ido Django ................................................................ 74 11.2.2 Dependencias WebRosTC ............................................................................... 74 9 1. In oducción 1.1 Con ex o Desde que el se humano comenzó a c ea los p ime os u ensilios en la p ehis o ia pa a ayuda se a caza has a nues os días, pasando po in en os como los ehículos a apo y pos e io men e de combus ión, la bombilla, la adio, el elé ono, in e ne , e c., ha enido como p opósi o desa olla he amien as que le pe mi a ealiza las mismas a eas, pe o de o ma más ápida y e icien e. El siglo XX, en pa e debido a las dos gue as mundiales que han enido luga , ha sido un pe íodo de g andes descub imien os, que han pe mi ido, en e o as cosas, hace del mundo un luga más pequeño, g acias a las mejo as en las comunicaciones y los anspo es. Y es que bas a con echa la is a apenas 20 años a ás, cuando in e ne se encon aba aún en pañales, pa a e la e iginosa e olución que ha enido en un pe íodo an educido de iempo. En la ac ualidad, y g acias a la inminen e implan ación de la ecnología 5G y de las eSIM, nos encon amos a las pue as de la denominada e a del "in e ne de las cosas" o "IoT" donde odo, absolu amen e odo, a a es a conec ado a in e ne , lle ando a un nue o ni el el día a día de miles de pe sonas. Del mismo modo, la e olución de la in o má ica ha ido de la mano del desa ollo de las elecomunicaciones, no sólo a ni el de ha dwa e, c eando disposi i os cada ez más compac os, pe o no po ello menos po en es, sino a ni el de so wa e, ob eniendo unos esul ados espec acula es, ácilmen e econocibles en amas como los ideojuegos, la in eligencia a i icial o el Big Da a. Asimismo, se ha podido ap ecia un g an a ance en el mundo de la obó ica, llegando a signi ica una nue a e olución indus ial, lle ando a o o ni el el sec o de la indus ia, ya que los obo s pe mi en agiliza a eas epe i i as, au oma iza p ocesos indus iales o educi cos es en la ab icación. Pe o no sólo se han aplicado a la indus ia, sino que han sido pa ícipes de p oyec os muchos más ambiciosos, como la explo ación espacial eleope ada, eniendo como ejemplo más cali icado el caso del obo "Cu iosi y", en iado po la NASA a Ma e en el 2011. 16 El se ido TURN pe mi e a los pee s hace s eaming de audio, ídeo y da os, lo que implica que odo el á ico pasa po ellos. Al con a io que los se ido es STUN, los se ido es TURN equie en au en i icación po pa e de los pee s, y ambos pee s deben conec a se al mismo se ido TURN. Ilus ación 2-4. Usando se ido es STUN/TURN. WebRTC ges iona in e namen e el uso de los di e en es se ido es y p o ocolos en unción de los escena ios en los que se ejecu a, lo que acili a su implemen ación en cualquie aplicación. Sin emba go, al se una ecnología que aún se encuen a en desa ollo, implemen a una aplicación es able supone una di icul ad adicional. Al in y al cabo, se a a de una ecnología sumamen e ecien e, que apenas iene unos años de ida. 17 Pe o no po ello me ece menos in e és, pues o que es á conside ado como un sis ema de comunicación con un g an po encial, espaldado po g andes emp esas como Google. In e conec a dos o más disposi i os es én donde es én, cuyo único equisi o sea ene conexión a in e ne ya es mo i o más que su icien e, y más conside ando que en b e e odo es a á conec ado a in e ne . 18 3. Sis ema ROS y su aplicación en el p oyec o El sis ema ROS [2] (ac ónimo de Robo Ope a ing Sys em) es un amewo k lib e cuya inalidad es p o ee a los desa ollado es de lib e ías y he amien as pa a c ea aplicaciones pa a obo s. ROS se basa en nodos, donde cada he amien a con o ma un nodo, y dichos nodos se comunican en e sí median e opics. Cada nodo puede susc ibi se a los opics que sean necesa ios, al igual que puede publica en an os opics como equie a. La ges ión de es os canales de comunicación es lle ada a cabo po el núcleo de ROS ( osco e). La elección del sis ema ROS como base pa a ges iona el sis ema obo no ha sido o ui a, ya que dicho amewo k apo a múl iples en ajas al desa ollado , ales como: - Abs acción del ha dwa e - Ve sa ilidad: pe mi e desa olla an o en C++ como en Py hon. - Mul ipla a o ma: Aunque inicialmen e se desa olló pa a Linux, se es á adap ando a o os sis emas ope a i os como Fedo a, Mac OSX, Debian, e c. - Sopo e: exis e una g an comunidad que man iene el so wa e ac ualizado con inuamen e, y sol en an cualquie duda o p oblema que se p esen e. Pa a lle a a cabo la comunicación emo a, se ha enido que do a al sis ema ROS de un nodo que haga de puen e en e los demás nodos del sis ema y el sis ema emo o. Dicho nodo puen e o b idge iene como p opósi o pe mi i al obo es ablece una conexión de s eaming en e el usua io emo o y el p opio obo pa a in e cambia ideo, audio y da os bidi eccionalmen e. (Ilus ación 3-1). Po an o, el nodo b idge iene es a eas p incipales: - Ges ión del ideo local y emo o - Ges ión del audio local y emo o - Ges ión de los da os locales y emo os 19 3.1 Ges ión del ídeo local y emo o Si bien ROS incluye un nodo ges o de ídeo, conc e amen e, “ ideo_s eam_openc ” [5] pa a el s eaming de ídeo, se ha op ado po desa olla una he amien a a medida pa a el p oyec o. La azón po la cual se ha omado es a decisión es la siguien e: El nodo “ ideo_s eam_openc ” dispone de un opic de comunicación, basado en mensajes de ipo “ROS Images” (senso _msgs/Image.msg) [6]. In e namen e, ges iona los mensajes usando los da os de cada ame pa a mos a los po pan alla, al mismo iempo que cap u a la imagen del disposi i o de ídeo, lo encapsula en un mensaje de ipo “ROS Images” y lo publica. La he amien a implemen ada en su luga se basa en el mismo p oceso y, de hecho, son muy simila es, con la p incipal di e encia de que és e se ha implemen ado en Py hon. En onces, ¿cuál es el p opósi o de dicha he amien a si son p ác icamen e simila es? Ilus ación 3-1. Es uc u a nodo ROS B idge. 20 La señal de ídeo emo a es ecibida po el obo como un a ay de by es, que p opiamen e es uc u ada p opo ciona una señal de ídeo en o ma o YUV420 [7], la cual equie e se ans o mada pos e io men e a o ma o RGB ( an o si se usa pa a el nodo como si se usa pa a openCV [8]). En caso de u iliza el nodo ex a “ ideo_s eam_openc ”, la señal end ía que econ e i se a ROS Image message, o ma o acep ado po el opic del nodo ex a, mien as que, al usa la he amien a implemen ada, di ec amen e se usa la in o mación ans o mada a RGB pa a mos a la po pan alla. Es impo an e ecalca que los p ocesos an e io men e mencionados se e ec úan pa a cada ame, po lo cual, cualquie ope ación ex a puede supone una di e encia de endimien o conside able. Con la ges ión del ídeo en el o o sen ido ocu e una si uación simila . La señal del ídeo es ecogida di ec amen e po el nodo puen e median e openCV, econ e ida de RGB a YUV420 y encapsulada pa a se en iada al usua io emo o. Ya que es e subp oceso es, sin p ác icamen e luga a dudas, la u ina que más ecu sos consume del obo , en unción de las ca ac e ís icas ha dwa e de és e, se puede a ia la calidad de la imagen en iada/ ecibida, pudiendo modi ica pa áme os como la esolución de la imagen, imagen a colo o escala de g ises, ames po segundo, e c. 3.2 Ges ión del audio local y emo o En es e caso ocu e una si uación simila al submódulo ges o de ídeo. ROS inco po a di e sos nodos den o del paque e “audio_common” [9] en e los cuales se encuen a uno pa a cap u a el sonido del mic ó ono, “audio_cap u e”, y o o pa a ep oduci audio en o ma o wa y ogg, llamado “sound_play”. Ambos ges ionan in e namen e la capa con el ha dwa e del obo pa a accede al mic ó ono y al al a oz. El nodo “sound_play”, al ecibi los da os po su opic median e mensajes “audio_common_msg”, ex ae el audio y lo ep oduce. Asimismo, el nodo “audio_cap u e” ob iene el audio del mic ó ono, y lo publica po su opic median e mensajes “audio_common_msg”. 21 La causa de la implemen ación de una he amien a ex a pa a ges iona el audio, en ez de usa los dos nodos es una me a cues ión de aho a p ocesos. Aunque es cie o que la he amien a implemen ada sí que di ie e lige amen e de los nodos apo ados po ROS pues o que se ha desa ollado en Py hon usando el paque e pyAudio [10], la esencia es la misma, pues o que dicha he amien a a a di ec amen e con los da os p o enien es del usua io emo o, al igual que encapsula el audio local di ec amen e en el o ma o admi ido po el nodo b idge. 3.3 Ges ión de los da os locales y emo os Inicialmen e, y aunque el canal empleado pa a los da os puede usa se has a pa a in e cambia a chi os, se ha limi ado el uso de es e módulo pa a ans e i da os locales del obo , ales como la elocidad de los mo o es o la in o mación de los senso es, así como pa a ecibi ins ucciones de mo imien o. Sin emba go, es e g an abanico de posibilidades no hace más que esal a el po encial de es a ecnología, pudiendo usa se en el u u o pa a en ia da os de eleme ía, GPS, da os de diagnós ico, e c. Es necesa io añadi que, en es e caso en conc e o, se ha añadido un módulo ex a de comunicación in e na en e el es o de los nodos de ROS y el nodo b idge, debido a un p oblema de compa ibilidades. Conc e amen e, an o el sis ema in e no como los nodos de ROS se ejecu an conjun amen e en C++ y Py hon. La e sión de Py hon co esponde con la 2.7. Sin emba go, el nodo b idge cuen a con di e sas lib e ías que, dado a que equie en mé odos añadidos a pa i de la e sión 3, esul a imposible de ejecu a en la e sión 2.7. Po ello, se ha ecu ido a un pequeño módulo que ec ea una comunicación in e na (basada en socke s UDP) pa a comunica ambos módulos. Es a medida es empo al, y se á p escindible an p on o como ROS inco po e Py hon 3 de o ma na i a. 22 Respec o a los aspec os écnicos del po qué se ha op ado po usa módulos p opios en ez de los p opo cionados po ROS (apa e de los ya expues os), así como del po qué del uso de dichos o ma os de ídeo, audio y da os, se analiza án pos e io men e en más p o undidad. 23 4. WebRTC y su aplicación en el p oyec o Como ya se explicó b e emen e en el capí ulo 2, WebRTC [1] (ac ónimo de Web Real- Time Communica ions) es un p oyec o abie o que pe mi e compa i en iempo eal da os, ídeo y audio en e dos disposi i os o na egado es. Además, WebRTC p o ee a cualquie na egado de las he amien as necesa ias pa a lle a a cabo la comunicación sin necesidad de ins ala so wa e adicional o de e ce os. Dichas he amien as son accesibles median e Ja aSc ip de o ma sencilla y pe mi en adap a se a los di e en es na egado es que sopo an es a ecnología, como Ch ome, Ope a o Fi e ox. La elección de dicha ecnología como sis ema de comunicación no ha sido u o del aza , ya que cuen a con in e esan es ca ac e ís icas que hacen que la balanza se decan e en su a o , ales como: - Se a a de un p oyec o abie o, con una comunidad de desa ollado es sumamen e amplia, lo que acili a, en p ime a ins ancia, su uso al se g a ui o y, po o o lado, la consul a en o os habili ados an e cualquie duda con espec o al mismo. - Mul ipla a o ma, acili ando su in eg ación en cualquie equipo y e i ando p oblemas de incompa ibilidad. - T ansmisión de ídeo y audio codi icada (median e el p o ocolo SRTP). - Calidad al a de ídeo y audio g acias al uso de los códecs Opus (pa a el audio) y VP8 (pa a el ídeo). - Ancho de banda adap a i o, egulando la calidad del audio y el ídeo en unción de la calidad de la conexión, o eciendo siemp e la mejo calidad posible. Pe o… ¿exac amen e cómo unciona WebRTC? En el capí ulo 2 se ha expues o la p oblemá ica exis en e en la comunicación emo a con los obo s, y que és e se basa en p2p, sin emba go, no se ha hecho mención del p oceso po el cual WebRTC c ea dicha conexión en e dos pun os cualesquie a que quie an conec a se. Aunque la API de es a po en e he amien a es á en cons an e cambio, (a o unadamen e) el p oceso del es ablecimien o de conexión se man iene p ác icamen e igual: 24 1. En p ime luga , cada uno de los pee s debe decla a qué desea compa i (audio, ídeo, e c.) y qué desea ecibi . (Ilus ación 4-1). Ilus ación 4-1. Ejemplo Ja aSc ip pa a de ini qué medios se an a en ia y cuáles se an a ecibi . 2. Se c ea el obje o RTCPee Connec ion, que hace e e encia al p opio pee . Si se desea compa i da os median e un da aChannel, uno de los dos usua ios debe c ea dicho canal a su ez. (Ilus ación 4-2). Ilus ación 4-2. Ejemplo Ja aSc ip pa a c ea un pee y un da aChannel. 3. Una ez de inido el usua io, en caso de que desee compa i audio y/o ídeo, dichos ecu sos deben se añadidos al pee . (Ilus ación 4-3). Ilus ación 4-3. Ejemplo Ja aSc ip pa a añadi los medios locales al pee . 25 4. Llegados a es e pun o, uno de ellos c ea una o e a, donde se de allan múl iples campos, como su di ección IP global (es aquí donde el pee ealiza la consul a al se ido STUN), los medios que desea compa i , o ma os y a e de audio/ ídeo, e c. (Ilus ación 4-4). Ilus ación 4-4. Ejemplo Ja aSc ip pa a c ea una o e a y mandá sela al pee emo o. 5. Dicha o e a se co esponde con la desc ipción local del pee . Po lo que se la manda al pee emo o pa a que la ome como desc ipción emo a, c ee su p opia desc ipción (o espues a) y se la uel a a manda al pee local. Es e p oceso se denomina “Signaling”. 6. Po o o lado, y de o ma p ác icamen e pa alela, ambos pee s gene an ICE Candida es, pa a en iá selos al pee emo o. (Ilus ación 4-5). Ilus ación 4-5. Ejemplo Ja aSc ip pa a c ea ICE Candida es cuando se encuen en disponibles. ¿Y qué son los ICE Candida es? ICE es el ac ónimo de “In e ac i e Connec i i y Es ablishmen ”, y hace e e encia a los di e en es mé odos usados en NAT pa a es ablece comunicaciones VOIP, p2p, mensaje ía ins an ánea, e c. Los di e en es candida os apo an in o mación sob e la di ección IP y el pue o donde es posible es ablece una comunicación, así como el p o ocolo a usa , ya sea UDP o 32 5.6 6º I e ación: Desa ollo de los ges o es mul imedia del obo Una ez es ablecida la conexión p2p con el usua io emo o, el siguien e obje i o consis e en ges iona co ec amen e los ecu sos mul imedia, an o locales como emo os. Po ello, se han implemen ado módulos enca gados de ecibi y mos a los da os mul imedia emo os, así como ob ene los da os mul imedia locales, encapsula los y en ia los. Inicialmen e se ha p obado a simplemen e ebo a la in o mación en an e del usua io emo o, a modo de espejo, con el p opósi o de e i ica que: 1. El obo ecibe co ec amen e el ídeo/audio y los da os. 2. El obo p ocesa co ec amen e la in o mación ecibida. Pos e io men e, se han e minado de implemen a los mé odos pa a que, en ez de ebo a la in o mación en an e, el obo en íe su p opia in o mación. 5.7 7º I e ación: C eación del nodo ROS-NXT Finalmen e, el obje i o ha sido in eg a el nodo desa ollado del obo con ROS, de al o ma que si ie a de puen e con el usua io emo o. Además, se ha decidido usa como obo un lego NXT [16], po lo que se ha añadido como equisi o la implemen ación del nodo ROS que ges ione dicho obo . Po an o, se ha implemen ado un nodo ROS que ges iona el obo , basado en “NXT- Co e ROS” [17] y en “NXT-Py hon” [18], que se comunica con el nodo b idge. De es a o ma, el usua io puede ac ua sob e el obo de o ma emo a, al mismo iempo que ecibe in o mación p o enien e de los senso es de és e. 33 6. Solución p opues a Como ya se pod á igu a el lec o , es e p oyec o se di ide en dos g andes bloques, cada uno ep esen ando a los dos pee s que se p e enden conec a . A con inuación, se an a desg ana ambas pa es, exponiendo con de alle cómo se han implemen ado, las lib e ías o paque es usados y el p opósi o de cada sección, con el in de acili a la comp ensión al lec o del uncionamien o en conjun o de cada módulo. Además, se añadi án algunos ex ac os de código con el in de complemen a la explicación dada. 6.1 Aplicación Django Ges ionando el módulo del usua io, se encuen a una aplicación basada en Django. Si bien es cie o que exis en o os amewo k que ealizan unciones simila es, Django cuen a con cie as ca ac e ís icas dis in i as que han decan ado la balanza a su a o , ales como: - Desa ollado en Py hon. - Ges ión sencilla de la base de da os. - Con ol y ges ión de usua ios inco po ado. - Sencilla implan ación de módulos ex e nos pa a añadi uncionalidades ex a. - Sopo e de se ido Web. - Código abie o. 6.1.1 F on End (Na egado ) Con el in de hace más amigable la in e acción del usua io con la aplicación y, po consiguien e, con la comunicación emo a del obo , se ha desa ollado una aplicación web, usando Django como sopo e. 34 Como se puede ap ecia en el da a low de dicha aplicación (Ilus ación 5-1), cualquie usua io anónimo que acceda a la aplicación únicamen e end á acceso a la página inicial (donde se mues a un pequeño esumen del p oyec o en sí, así como o os da os de in e és) y a la página de acceso. El es o de la aplicación se encuen a disponible únicamen e pa a usua ios egis ados. La azón po la cual los usua ios necesi an dispone de c edenciales pa a pode accede a las unciones emo as del obo , así como del cha , no es más que ga an iza un con ol sob e quién usa cada ecu so en cada momen o, e i a que dos usua ios accedan a la ez al mismo obo , e c. Además, el cha se nu e del nomb e del usua io pa a mos a quién ha esc i o cada mensaje, y e i a mensajes de usua ios ajenos a la aplicación. Ilus ación 6-1. Django F on End Da aFlow. 35 En la página home, el usua io iene a simple is a un esumen de su ac i idad en la aplicación, isualizando, en e o os, sus úl imos accesos, úl imas conexiones, e c. Pa a accede a los di e en es obo s disponibles, el usua io accede a la página “conexiones”, donde se mues an los obo s conec ados. En caso de que el obo ya es é en uso, el usua io únicamen e pod á accede al cha co espondien e a dicho obo , pa a in e ac ua con los demás usua ios que es én in e esados en su ac i idad. Tan p on o como el usua io que es é usando el obo abandone la página, libe a el ecu so pe mi iendo que o o usua io pueda usa lo. 6.1.2 Back End (Se ido ) La implemen ación del se ido se ha plan eado de o ma modula , de al o ma que cada pa e cumpla una unción di e en e, acili ando posibles u u as modi icaciones y/o ampliaciones del mismo. En el conjun o del se ido se con emplan los siguien es paque es, cada uno con una unción cla amen e de inida: - Templa es - Socke s - Excep ions - De ini ions - Da abase - Secu i y - S a ic iles 6.1.2.1 Templa es Es e módulo con iene odos los iche os “h ml” que cons i uyen el on end. Pa a acili a su desa ollo, se ha cons uido un iche o plan illa, con los elemen os básicos de odas las páginas, como la ba a supe io o el pie de página, pa a e i a la edundancia del código. 36 El uso de plan illas, así como de o as secciones de código se simpli ica eno memen e g acias a la sencilla ges ión que o ece Django, median e la di isión po “bloques”. De es a o ma, cada página cons i uye un bloque, que se inse a en la plan illa gene al, ans o mándose en la página inal deseada pa a cada ci cuns ancia. 6.1.2.2 Socke s Una de inición ápida pa a es e apa ado pod ía se “ges o de conexiones del webSocke ”, aunque segu amen e, no apo e g an in o mación al lec o . Como se ha comen ado an e io men e, Django pe mi e de ini de o ma sencilla an o la capa de “ on end” como la capa “back end”. Pe o no sólo eso, sino que pe mi e ges iona la capa in e media, o “middlewa e” usada a menudo pa a comunica el se ido con el na egado . Django incluye a ios paque es, cada uno con una unción especí ica como, po ejemplo, un ges o de las pe iciones al se ido ealizadas po los usua ios ( eques s), inculándolos usando sesiones (g acias a las c edenciales de los usua ios). En es e caso, el p opósi o de es e paque e es ges iona la conexión en e el clien e webSocke del na egado (c eado median e Ja aSc ip ) (Ilus ación 5- 2) y el clien e emo o webSocke del obo . Ilus ación 6-2. Clien e WebSocke Ja aSc ip . 37 El paque e socke s con iene es iche os. El p ime o, “ ou ing.py” iene como inalidad edi igi las conexiones en an es de los clien es webSocke en unción de su URL de conexión. Como se ha podido obse a en la ilus ación 5-2, se de inen dos u l, una pa a la conexión del cha , y o a pa a la conexión con el disposi i o emo o. Las conexiones a la u l “/ws/de ices/” son ges ionadas po el paque e “de icesConsume .py”, mien as que las conexiones a la u l “/ws/cha Room/” lo son po el paque e “use sConsume .py”. De es e modo, se puede de ini un compo amien o di e en e en unción de la u l a la que se conec e cada usua io. Cada consume he eda de la clase “AsyncWebsocke Consume ”, de la cual es necesa io de ini las unciones “connec ”, “ ecei e” y “disconnec ”, con el p opósi o de especi ica qué hace cuando un usua io se conec a, manda un mensaje o se desconec a. (Ilus ación 5-3). Además, g acias a las he amien as de Django, se puede incluso di e encia si el usua io que en ía una solici ud de conexión co esponde a un usua io egis ado en el sis ema o no. Ilus ación 6-3. Pa e de "de icesConsume .py". 38 En un p incipio, las conexiones webSocke es án ideadas pa a conexiones en e el na egado y el se ido , aunque pe mi e conexiones ex e nas de igual o ma. Sin emba go, és as úl imas, al no encon a se den o del en o no de la aplicación, sino que p o ienen de disposi i os ex e nos, conec ados a a és de in e ne , han eque ido añadi un sis ema de iden i icación y segu idad pa a e i a in usiones an o en ex emo del se ido Django como en el ex emo del obo . Pa a ello, y usando el paque e “secu i y”, explicado más adelan e, se ha ideado un sencillo mé odo que pe mi e e i ica la iden idad de ambos ex emos de la comunicación, así como es ablece una comunicación ci ada de o ma segu a y dinámica, al y como se puede obse a en la ilus ación 5-4. Ilus ación 6-4. Diag ama de conexión emo a. Es a conexión se basa en una comunicación simé ica/asimé ica, donde el se ido y el disposi i o emo o disponen de su pa p opio de cla es pública/p i ada y la cla e pública del o o disposi i o (el se ido debe dispone de odas las cla es públicas de los disposi i os emo os que quie an conec a se a él). 39 Como se puede e en el diag ama de la conexión emo a, en cada conexión el se ido c ea una cla e alea o ia nue a, conc e amen e AES-256, que pos e io men e compa e con el disposi i o emo o en cues ión pa a es ablece la conexión simé ica. Una ez inalizada la comunicación, dicha cla e se pie de. Es e sis ema, aunque sencillo, pe mi e c ea un mé odo segu o de ansmisión de da os en e ambas pa es, necesa io al usa in e ne como medio. 6.1.2.3 Excep ions Es e pequeño módulo con iene clases que he edan de “Excep ion” y pe mi en dis ingui el ipo de excepción que se ha p oducido. Las clases en sí son sumamen e simples, como se puede ap ecia en la ilus ación 5-5. Ilus ación 6-5. Ejemplo de una de las clases pa a maneja excepciones. 6.1.2.4 De ini ions Como se puede in ui po el í ulo, es e paque e con iene las de iniciones de las a iables globales usadas en la aplicación. Po un lado, se especi ican los códigos de cie e de conexión del se ido webSocke , que pe mi en especi ica los di e en es mo i os que han lle ado a dichos cie es. 40 Y, po o o lado, se encuen an las de iniciones de los di e en es ipos de mensajes json usados en la comunicación. La mayo ía usados en el p oceso de es ablecimien o de la misma. 6.1.2.5 Da abase Pa a egula iza y con ola los di e en es aspec os de la aplicación, se ha op ado po implemen a una sencilla base de da os que, nu iéndose de la p opia base de da os in e na de Django que ges iona los usua ios, pe mi e a a de igual modo con los disposi i os egis ados y su uso. Tal y como podemos e en el esquema de la base de da os c eada (Ilus ación 5-6), pa iendo de la abla “Use s”, ges ionada in e namen e po Django, se encuen a un egis o de ac i idad de los usua ios, conc e amen e de cada log. Ilus ación 6-6. Base de da os de la aplicación Django. Po o o lado, se iene un egis o de los disposi i os, de al o ma que cualquie disposi i o no egis ado no puede ene acceso al se ido , ya que en dicha abla se almacenan da os como su cla e pública, necesa ia pa a la comunicación asimé ica. 41 Además, se lle a un con ol de conexiones de los usua ios con los di e en es disposi i os, así como de las di e en es salas que se c ean dinámicamen e, y de los usua ios con enidos en ellas. Pa a ges iona la base de da os, se ha c eado una clase po cada abla que con iene los mé odos necesa ios pa a ealiza la inse ción, ac ualización y eliminación de da os en un iche o llamado “manage .py”. 6.1.2.6 Secu i y Como se mencionó con an e io idad en el apa ado de “Socke s”, el paque e “Secu i y” se enca ga de ges iona la enc ip ación y e i icación de los mensajes in e cambiados con el usua io emo o. En es e apa ado se encuen an a ias clases que engloban las di e en es uncionalidades necesa ias pa a lle a a cabo la comunicación. Todas es as clases usan como base el paque e Py hon “pyc yp odome” [19], que acili a la in e acción con cla es simé icas y asimé icas. En p ime luga , el iche o “asymme ic.py” con iene los mé odos necesa ios pa a i ma , enc ip a , desenc ip a y e i ica i mas con cla es públicas y p i adas, pe mi iendo lle a a cabo la comunicación de o ma asimé ica que, como se explicó con an e io idad, cons i uye la p ime a e apa de la conexión. Pa a in e cambia mensajes, an os simé icos como asimé icos, se ha es ablecido como es ánda los mensajes de ipo json, que pe mi en añadi an os campos como el mensaje equie a (Ilus ación 5-7). Ilus ación 6-7. Mensajes JSON usados en la enc ip ación de los da os. Po o o lado, el a chi o “symme ic.py” con iene mé odos muy simila es a los de inidos an e io men e, pe o aplicados al in e cambio de mensajes ci ados de o ma simé ica. Pa a es e ipo de ci ado se equie e una cla e simé ica, solici ada pa a 48 Una ez supe ada la ba e a de ob ene la in o mación, ya es cues ión de adap a los da os al o ma o necesa io pa a aio c. Es deci , ans o ma la imagen ob enida de la cáma a, ans o ma la a o ma o YUV420 y ans o ma la ma iz a un a ay de by es. Po úl imo, se encapsulan los da os, así como los pa áme os de al u a y anchu a de la imagen en un obje o VideoF ame y se manda al pee emo o. 6.2.1.3.2 Módulo de Audio La ges ión an o del ídeo en an e como salien e la podemos encon a en el módulo “audioHandle .py”. Al igual que en el caso del ídeo, aio c dispone de una clase especí ica pa a el audio, an o en an e como salien e. Conc e amen e, la clase AudioF ame, que se ca ac e iza po : - Núme o de canales del audio - Da os: a ay de by es (PCM – 16) - Sample- a e (44100, 48000, e c.) - Sample-wid h (16 bi s, 24 bi s, e c.) Pa a a a co ec amen e los da os en an es y encapsula los da os salien es, se ha ecu ido al paque e “pyAudio” [10] que, al igual que openCV, pe mi e in e ac ua de o ma sencilla con los elemen os ha dwa e. En p ime luga , pa a a a los da os en an es y ep oduci los po cualquie medio del obo (ya sea un al a oz o una salida de audio), an sólo ha sido necesa io ab i un s eaming de audio con las ca ac e ís icas del audio en an e. Los da os necesa ios pa a ab i lo, como el o ma o, los canales o el sample a e son p opo cionados po la p opia clase AudioF ame. Una ez abie o, cada paque e de da os ecibidos se ansmi e al s eam pa a se ep oducido (Ilus ación 5-13). Po o o lado, pa a ob ene los da os locales de audio (como, po ejemplo, los de un mic ó ono, y encapsula los pa a pode manda los a a és de aio c, pyAudio uel e a simpli ica eno memen e el p oceso: 1. Se especi ican inicialmen e los pa áme os del audio que se a a en ia , y se ab e el s eaming de audio. 49 2. Pos e io men e se c ea un nue o obje o de la clase AudioF ame con los pa áme os an e io men e especi icados, y se leen los da os del s eam (Ilus ación 5-14). Ilus ación 6-13. Rep oduciendo audio emo o (ex ac o de audioHandle .py). Ilus ación 6-14. Cap u ando audio del mic ó ono y encapsulándolo (ex ac o de audioHandle .py). 50 6.2.1.4 WebRTC De en e los di e en es módulos que componen es e nodo, pod ía deci se que és e es el p incipal, pues ag upa p ác icamen e a odos los módulos an e io es y con o ma los p ocedimien os pa a lle a a cabo la comunicación di ec a con el o o pee de o ma ap opiada. Tomando como base el paque e aio c, es e módulo es el enca gado de in e cambia la in o mación necesa ia con el pee emo o pa a es ablece la comunicación p2p. Además, ges iona la comunicación con el nodo ROS median e el paque e channel, a ando de es a o ma con los da os en an es y salien es. El p ocedimien o pa a es ablece la conexión con el sis ema emo o es muy simila a la ya is a en el lado del na egado . Inicialmen e se c ea un pee y se le añaden los ecu sos locales. Además, se c ea el da aChannel y los e en os pa a maneja los ecu sos emo os. (Ilus ación 5-15). Ilus ación 6-15. C eación del pee , da aChannel y sus manejado es (ex ac o de web c.py). Sin emba go, en es e caso, el obo , una ez conec ado al se ido webSocke emo o, se queda a la espe a de ecibi cualquie o e a de cualquie pee que equie a conec a se. 51 Una ez ecibida la o e a, el obo la p ocesa y almacena como de inición emo a. Luego c ea una espues a, que almacena como de inición local y se la manda al pee emo o. Como ya se comen ó du an e la explicación del p oceso del es ablecimien o de conexión en el na egado , dado que el paque e aio c se encuen a aún en desa ollo, ha sido necesa io epe i el p oceso de almacena la o e a emo a y c ea una nue a, ya que es en la segunda o e a donde el pee emo o incluye “ICE candida es” en la o e a. (Ilus ación 5-16). Ilus ación 6-16. Manejo de o e a emo a y c eación de espues a (ex ac o de web c.py). Tan p on o como se ag egue la uncionalidad de ag ega “ICE Candida es” de o ma dinámica al pee , es e “a eglo” no se á necesa io, a la ez que asegu a á la es abilidad de la aplicación. Como se puede ap ecia , an o el ídeo como el audio cuen an con mé odos independien es que lo ges ionan. Sin emba go, en el caso de los da os locales/ emo os, son ges ionados desde es e mismo módulo, enlazando los e en os de da os con el canal local c eado pa a comunica se con el nodo ROS (Ilus ación 5- 17). 52 Ilus ación 6-17. Ges o de mensajes en e channel in e no y da aChannel (ex ac o de web c.py). 6.2.1.5 Secu i y Al igual que en el se ido , el paque e “Secu i y” se enca ga de ges iona el manejo de cla es simé icas y pública/p i ada. De hecho, se a a del mismo paque e, ya que an o el sis ema de ci ado/desci ado como la es uc u a de los mensajes deben se idén icos. En el caso del obo , dispone en una ca pe a de las cla es pública y p i ada p opias, así como de la cla e pública del se ido . De es a o ma, al inicializa el módulo de segu idad asimé ica (Ilus ación 5-18), au omá icamen e se ca gan las cla es necesa ias pa a i ma y desenc ip a (cla e p i ada) y pa a enc ip a y e i ica la i ma emo a (cla e pública del se ido ). Ilus ación 6-18. Cons uc o y mé odo pa a i ma mensajes (ex ac o de asymme ic.py). 53 6.2.2 Nodo ROS Conjun amen e con el nodo b idge que se acaba de expone , se encuen a el nodo ROS, que se in eg a den o de la a qui ec u a ROS y hace de enlace con el nodo b idge. Tal y como se explicó en el apa ado 3, el sis ema ROS [2] consis e en un amewo k que pe mi e la u ilización de di e sas he amien as de o ma simul ánea y comunica las en e sí median e opics. El p opósi o de es a he amien a no es más que comunica los opics necesa ios con el pee emo o, con el in de, po un lado, con ola los mo o es del obo y, po o o lado, ob ene in o mación del obo como, po ejemplo, la elocidad de cada uno de los mo o es o las lec u as del senso de ul asonidos. Pa a el ejemplo de obo ac ual, se ha op ado po usa un obo lego NXT (Ilus ación 5-19), po las acilidades que apo a pa a p og ama lo y po los di e sos ac uado es y senso es que dispone. Po an o, pa a adap a el nodo ROS al esquema de es e ipo de obo , se han eque ido cie as he amien as adicionales, que sol en a án la capa en e el so wa e y el p opio obo . Ilus ación 6-19. Robo Lego MindS o ms NXT. Conc e amen e, se han u ilizado las lib e ías “NXT-Py hon” [18] (que en es e momen o sólo dispone de lib e ías pa a Py hon 3) y “NXT ROS – Co e” [17] (diseñado pa a ROS Kine ic). 54 NXT-Py hon iene como inalidad c ea una capa in isible pa a el desa ollado , haciendo de in e media ia en e el ha dwa e del NXT y el so wa e. Pe mi e ges iona los di e en es pue os de conexión del NXT, con igu a los pa a usa los según con enga, e c. Po o o lado, NXT ROS-Co e, ecu iendo a al paque e an e io , ans o ma el obo NXT en un nodo más de ROS, de iniendo unos opics conc e os pa a cada senso , encode y mo o . Además, es ablece los di e en es ipos de mensajes necesa ios pa a usa en cada opic. Cabe acla a que ROS ya con iene un paque e enca gado de ges iona los obo s NXT, llamado de esa o ma, “nx ”. Sin emba go, es e paque e únicamen e u o sopo e pa a la e sión elec ic de ROS, una e sión del 2011, azón po la cual se ha op ado po una he amien a más ac ualizada. Po an o, conociéndose qué opics son los que se co esponden con cada senso , mo o , e c., an sólo es cues ión de publica y susc ibi se a los opics adecuados. Y és a es p ecisamen e la misión del nodo ROS c eado. Pa a cons ui es e nodo, inicialmen e ha sido necesa io (apa e de ins ala el p opio mo o ROS) c ea una ca pe a que a a unciona como en o no de abajo (la amosa ca pe a “ca kin_ws”). En la ca pe a “s c” se encuen an odos los nodos del en o no de abajo. Po an o, po un lado, es necesa io añadi el nodo NXT-ROS Co e a dicha ca pe a. (Ilus ación 5-20). Po o o lado, se añade el nodo ROS que se ha implemen ado aco de con las especi icaciones necesa ias pa a es e p oyec o, el cual es á compues o po : - Código uen e: esc i o en Py hon, con iene la uncionalidad del nodo p opiamen e dicha. - Fiche o de con igu ación: con iene la con igu ación aplicada al obo NXT sob e el que se a a ejecu a . - Fiche o de ejecución: indica a ROS cómo ejecu a el/los nodo/s, así como los pa áme os necesa ios pa a su ejecución. - Dependencias y compilación 55 Ilus ación 6-20. Con enido de la ca pe a "ca kin_ws", donde se encuen an los nodos ROS. 6.2.2.1 Código Fuen e Pa a accede a los di e en es opics necesa ios del obo , es necesa io c ea un nodo, de iniendo un “Publishe ” y un “Subsc ibe “. El Publishe iene como misión con ola los mo o es del NXT en iando ins ucciones de po encia a los mismos. (Ilus ación 5- 21). Ilus ación 6-21. Inicio del nodo 'publishe ' pa a comunica se con el obo (ex ac o de opicsHandle .py). 56 Como ya se ha comen ado an e io men e, pa a sol en a la incompa ibilidad de los p og amas po la e sión de Py hon en la que se ejecu an, se ha implemen ado un sencillo canal UDP basado en socke s. Po an o, en es e nodo ha sido necesa io implemen a el o o ex emo del canal. De es a o ma, los mensajes ecibidos po el canal se clasi ican y, en unción del mensaje, se en ía la co espondien e ins ucción po el opic adecuado. Pa a acili a la a ea, se ha c eado una clase adicional auxilia “Mo emen s” (Ilus ación 5-22), que aduce la ins ucción en el mensaje acep ado po el opic, con la e e encia al mo o co espondien e, así como la po encia necesa ia pa a lle a a cabo al ins ucción. Ilus ación 6-22. Clase auxilia pa a maneja los comandos en an es (ex ac o de opicsHandle .py). 57 Po o o lado, se ha c eado un subsc ibe po cada opic que se quie e escucha . Conc e amen e, se han necesi ado es: uno po cada encode de los mo o es y un e ce o pa a el senso de ul asonidos. Pa a a a la in o mación y en ia la po el mismo canal, cada mé odo “callback” ecoge la in o mación espec i a a su opic, la encapsula en un a chi o Json y la manda po el canal UDP pa a que el nodo ROS lo een íe al pee emo o. (Ilus ación 5-23). Ilus ación 6-23. Cap u a de uno de los dos subsc ibe s (ex ac o de opicHandle .py). 6.2.2.2 Fiche o Con igu ación Dado que el so wa e que con ola el obo NXT necesi a conoce las especi icaciones conc e as del obo que se a a usa , es necesa io cons ui un iche o de con igu ación con ex ensión “.yaml” en el que se decla an los componen es exac os que con iene el obo , así como la p opia con igu ación de és os. El iche o de con igu ación debe ene un o ma o especí ico. A o unadamen e, el p opio ROS nos p opo ciona una guía [21] en la que nos indica, en e o as cosas, cómo c ea el iche o. 64 Sin emba go, el paque e aio c aún no dispone de dicha ca ac e ís ica, po lo que únicamen e dispone de los ICE Candida es iniciales pa a ealiza la conexión. Si po alguna azón dicho candida os se desconec an, se pie de la conexión po comple o. Además, ampoco pe mi e la mejo a de la conexión al no admi i nue os candida os. A es o se suma la incompa ibilidad de ROS con Py hon 3, que obliga a ejecu a un socke UDP en ambos p og amas que se ejecu a en la aspbe y, haciendo que, en conjun o, se ca gue en exceso al p ocesado . 65 8. Conclusiones y u u as mejo as Desde el plan eamien o de es e p oyec o como TFG, abo da lo en su o alidad ha supues o un g an e o pe sonal. Al se una ecnología an ecien e, no sólo dispone una API que cambia con inuamen e, así como su código, sino que esul a complejo encon a la solución a cie os p oblemas, como de compilación, compa ibilidad, e c. Hay que ene en cuen a que el p oyec o o iginal de WebRTC es á en ocado a la comunicación en e dos na egado es, muy lejos del p opósi o de es e p oyec o. Po si ue a poco, se ha enido que adap a al ecosis ema ROS, lo que supone una di icul ad adicional. Y es que, como se comen ó an e io men e, inicialmen e se a ó de abo da el nodo puen e con ROS usando C++, pe o el código uen e apo ado po WebRTC e a an sumamen e di uso que, unido al desconocimien o de la ecnología, supuso un e o imposible de a on a . A es o se le sumó el hecho de que WebRTC no incluye el canal de comunicación inicial, median e el cual se ponen de acue do ambos pee s. Po an o, se eque ía un se ido que hicie a de in e comunicado en e ellos. Es o desencadenó en la adición de equisi os a la ya ex ensa lis a. Dependiendo de cómo se plan ea a la solución, desa olla el so wa e comple o pod ía supone una in e sión de iempo demasiado amplia. La elección de implan a un se ido usando el amewo k Django supuso un aho o sus ancial de ecu sos, eniendo en cuen a las posibilidades y acilidades de las que dispone, pe mi iendo, no sólo desa olla el se ido que da ía sopo e a la web, sino inclui un módulo que ges iona ía el canal de comunicación inicial, i al pa a el p oyec o que aquí se expone. Asimismo, al se un amewo k en Py hon, no sólo disponía de mul i ud de paque es de código abie o, sino que pa e de su código podía se eu ilizado en el nodo b idge del obo , como se ha podido e , po ejemplo, en el paque e “Secu i y”. Si bien el equisi o base de dispone de un canal de comunicación pa a la p ime a oma de con ac o en e los pee s se había sa is echo, aún quedaba po implan a el clien e WebRTC en el obo . Aunque exis ían di e sas opciones, ales como “EasyRTC”, “node-WebRTC” o “OpenWebRTC”, ninguna cumplía los equisi os necesa ios, pues o bien no se podían implan a co ec amen e en el sopo e que 66 eque ía es e caso (en un en o no obó ico) o bien no con aban con el sopo e necesa io pa a man ene el so wa e necesa io, po lo que se co ía el iesgo de adop a una solución en b e e obsole a (en caso de que no lo es u ie a ya). La solución adop ada, median e el paque e aio c, es la que mejo se amolda a los equisi os del p oyec o. Desa ollada pa a Py hon 3, se basa en la lib e ía “asyncio” pa a maneja los e en os de en ada salida de o ma mucho más e icien e, ya que pe mi e ges iona de o ma in e na las di e en es heb as enca gadas de ecibi y en ia la in o mación a a és de los pue os co espondien es. A es o se le añade de que el au o man iene el so wa e ac ualizado al i mo de las no edades de WebRTC. Una ez log ado el obje i o p incipal, o lo que es lo mismo, es ablece la comunicación p2p en e dos clien es WebRTC, la e apa inal del desa ollo ha consis ido en in e conec a el módulo an e io con el módulo ges o del obo . Es deci , pe mi i que el nodo b idge pueda in e ac ua con los demás nodos que se ejecu an en el en o no ROS. Dado que se decidió in eg a el so wa e del obo en un Lego NXT, se inco po a on los nodos ROS que a an con el ha dwa e del obo pa a c ea una capa sencilla de usa que pe mi a in e ac ua con el mismo. A pesa de que el desa ollo del p oyec o ha supues o una g an in e sión de iempo y ene gía, la imp esión gene al ha sido sumamen e posi i a. La búsqueda incansable de posibles soluciones, así como el a o con nue as ecnologías como son Django jun o con Py hon o WebRTC ha posibili ado la explo ación de nue os campos, muchos de ellos con g an po encial de ca a al u u o. Y es que se a a de c ea una conexión en e un disposi i o y un na egado . Lo que quie e deci que se puede, po ejemplo, maneja un obo , sin impo a dónde es é, con el único equisi o de que disponga de conexión a in e ne . Si hoy en día es o supone algo sencillo de supli , en b e e se á algo común, an p on o como se implan e el “IoT” (in e ne de las cosas) y se no malice que cualquie disposi i o enga conexión a la ed. Si aho a la can idad de posibilidades de es a ecnología es más que amplia, en el u u o se e á mul iplicada sus ancialmen e. Es po ello po lo que es cues ión de iempo (a co o plazo incluso) que se sol en en los pequeños p oblemas que se p esen an ac ualmen e al a a de adap a es a 67 ecnología a o os ámbi os. Po ejemplo, la implemen ación de “ICE T ickle” (que consis e en comenza a in e cambia “ICE Candida es” an es incluso de c ea la o e a – espues a) ya se encuen a disponible en los na egado es, sin emba go, aio c aún la es á desa ollando. Tan p on o como se añada es a uncionalidad, el endimien o de la comunicación se e á mejo ada en g an medida. Cabe añadi , como mejo a u u a a es e p oyec o, la implemen ación del se ido Django en un dominio egis ado, de al o ma que se pueda accede de o ma global. Además, dado a que, po segu idad, si la conexión no es segu a, el na egado no pe mi e accede a los ecu sos mul imedia (cáma a y mic ó ono), es más que ecomendable añadi le un ce i icado pa a p opo ciona le SSL a la página web (h ps). Respec o a la conexión, se ía in e esan e añadi la uncionalidad de que un mismo obo , en ez ealiza una sola conexión con un pee emo o, se pueda conec a a a ios a la ez, con el p opósi o de ealiza un s eaming de ídeo con a ios usua ios al mismo iempo (aunque luego se limi e el canal de da os a un solo usua io pa a que el obo únicamen e sea manejado po un usua io). Como se puede ap ecia , hay in inidad de opciones posibles, la imaginación es la que es ablece el lími e. 68 9. Re e encias y bibliog a ía - [1] B owse s and Mobile apps Real – Time Communica ion WebRTC. (h ps://web c.o g) - [2] Robo Ope a ing Sys em (ROS) (h p://www. os.o g) - [3] Ne wo k Add ess T ansla ion (NAT) (h ps://en.wikipedia.o g/wiki/Ne wo k_add ess_ ansla ion) - [4] RFC 3489. (h ps:// ools.ie .o g/h ml/ c3489) - [5] “ ideo_s eam_openc ” (ROS Node) (h p://wiki. os.o g/ ideo_s eam_openc ) - [6] ROS Image (senso _msgs/Image.msg) (h p://docs. os.o g/kine ic/api/senso _msgs/h ml/msg/Image.h ml) - [7] YUV420 Video (h ps://en.wikipedia.o g/wiki/YUV) - [8] openCV – Py hon (h p://openc -py hon- u oals. ead hedocs.io/en/la es /py_ u o ials/py_se up/py_in o/py_in o.h ml#i n o) - [9] “audio_common” ROS Package (h p://wiki. os.o g/audio_common) - [10] PyAudio (h p://people.csail.mi .edu/hube /pyaudio/) - [11] Django (h ps://docs.djangop ojec .com/en/2.0/) - [12] Django channels (h ps://channels. ead hedocs.io/en/la es /) - [13] Desa ollo i e a i o e inc emen al (IDD) (h ps://es.wikipedia.o g/wiki/Desa ollo_i e a i o_y_c ecien e) - [14] WebSocke s (h p://websocke s. ead hedocs.io/en/s able/api.h ml) - [15] aioRTC (h ps://aio c. ead hedocs.io/en/la es /api.h ml) - [16] Lego NXT (h ps://www.lego.com/es-es/minds o ms) - [17] NXT-ROS Co e (h ps://gi hub.com/NXT-ROS/nx ) - [18] NXT-Py hon (h ps://gi hub.com/Eel iny/nx -py hon) - [19] PyC yp odome (h ps://pyc yp odome. ead hedocs.io/en/la es /) - [20] EAX Mode (Enc ip ación Simé ica) (h ps://en.wikipedia.o g/wiki/EAX_mode) - [21] Guía Fiche o Con igu ación NXT-ROS (h p://wiki. os.o g/nx _ os/Tu o ials/C ea ing%20a%20 ull%20 obo ) 69 - [22] Guía ROS c eación de paque es (h p://wiki. os.o g/ROS/Tu o ials/C ea ingPackage) - [23] Guía CMake CMakeLis s. x (h ps://cmake.o g/cmake- u o ial/) - [24] Guía ROS CMakeLis s. x (h p://wiki. os.o g/ca kin/CMakeLis s. x ) - [25] Guía ROS MakeFile Py hon (h p://wiki. os.o g/ ospy_ u o ials/Tu o ials/Make ile) - [26] Imágenes pa a Raspbe y con ROS P eins alado (h ps://downloads.ubiqui y obo ics.com/) - [27] Django Redis (h p://niwinz.gi hub.io/django- edis/la es /) - [28] Boo s ap 4 (h p://ge boo s ap.com/docs/4.1/ge ing- s a ed/in oduc ion/) - [29] Awesome Fon s (h ps:// on awesome.com/icons?d=galle y) - [30] PyUSB (h ps://gi hub.com/pyusb/pyusb) - [31] Py hon (h ps://www.py hon.o g/) 70 10. Índice de ilus aciones Ilus ación 2-1. Modelo conexión ideal........................................................................................ 13 Ilus ación 2-2. Modelo conexión eal. ........................................................................................ 14 Ilus ación 2-3. Usando se ido es STUN. ................................................................................. 15 Ilus ación 2-4. Usando se ido es STUN/TURN....................................................................... 16 Ilus ación 3-1. Es uc u a nodo ROS B idge. ............................................................................ 19 Ilus ación 4-1. Ejemplo Ja aSc ip pa a de ini qué medios se an a en ia y cuáles se an a ecibi . ......................................................................................................................................... 24 Ilus ación 4-2. Ejemplo Ja aSc ip pa a c ea un pee y un da aChannel. ............................ 24 Ilus ación 4-3. Ejemplo Ja aSc ip pa a añadi los medios locales al pee ............................ 24 Ilus ación 4-4. Ejemplo Ja aSc ip pa a c ea una o e a y mandá sela al pee emo o. ..... 25 Ilus ación 4-5. Ejemplo Ja aSc ip pa a c ea ICE Candida es cuando se encuen en disponibles..................................................................................................................................... 25 Ilus ación 4-6. Es uc u a de los nodos WebRTC. .................................................................... 26 Ilus ación 4-7. Ejemplo Ja aSc ip donde se cap u an los medios locales (audio/ ídeo)..... 27 Ilus ación 5-1. Django F on End Da aFlow. .............................................................................. 34 Ilus ación 5-2. Clien e WebSocke Ja aSc ip . ......................................................................... 36 Ilus ación 5-3. Pa e de "de icesConsume .py". ....................................................................... 37 Ilus ación 5-4. Diag ama de conexión emo a. ......................................................................... 38 Ilus ación 5-5. Ejemplo de una de las clases pa a maneja excepciones. ............................. 39 Ilus ación 5-6. Base de da os de la aplicación Django. ............................................................ 40 Ilus ación 5-7. Mensajes JSON usados en la enc ip ación de los da os. ............................... 41 Ilus ación 5-8. Ejemplo de uso de iche os es á icos (ex ac o de empla e.h ml). ................ 42 Ilus ación 5-9. Inicialización de los socke s (ex ac o de channels.py). .................................. 45 Ilus ación 5-10. Di e en es ipos de mensajes Json usados (ex ac o de jsonMessages.py). ........................................................................................................................................................ 45 Ilus ación 5-11. Mos ando ídeo mandado po el pee emo o (ex ac o de ideoHandle .py). .......................................................................................................................... 47 Ilus ación 5-12. Cap u a y encapsulamien o del ídeo (ex ac o de ideoHandle .py). ........ 47 Ilus ación 5-13. Rep oduciendo audio emo o (ex ac o de audioHandle .py). ...................... 49 Ilus ación 5-14. Cap u ando audio del mic ó ono y encapsulándolo (ex ac o de audioHandle .py)........................................................................................................................... 49 Ilus ación 5-15. C eación del pee , da aChannel y sus manejado es (ex ac o de web c.py). ........................................................................................................................................................ 50 Ilus ación 5-16. Manejo de o e a emo a y c eación de espues a (ex ac o de web c.py). 51 Ilus ación 5-17. Ges o de mensajes en e channel in e no y da aChannel (ex ac o de web c.py). ..................................................................................................................................... 52 Ilus ación 5-18. Cons uc o y mé odo pa a i ma mensajes (ex ac o de asymme ic.py). . 52 Ilus ación 5-19. Robo Lego MindS o ms NXT.......................................................................... 53 Ilus ación 5-20. Con enido de la ca pe a "ca kin_ws", donde se encuen an los nodos ROS. ........................................................................................................................................................ 55 Ilus ación 5-21. Inicio del nodo 'publishe ' pa a comunica se con el obo (ex ac o de opicsHandle .py). ......................................................................................................................... 55 Ilus ación 5-22. Clase auxilia pa a maneja los comandos en an es (ex ac o de opicsHandle .py). ......................................................................................................................... 56 Ilus ación 5-23. Cap u a de uno de los dos subsc ibe s (ex ac o de opicHandle .py). ....... 57 71 Ilus ación 5-24. Con igu ación del obo NXT (ex ac o de nx _ obo .yaml). .......................... 58 Ilus ación 5-25. Fiche o de lanzamien o de los nodos ROS co espondien es (ex ac o de web os c.launch). .......................................................................................................................... 59 Ilus ación 5-26. Cap u a del iche o package.xml con las dependencias del nodo web os c. ........................................................................................................................................................ 60 Ilus ación 5-27. Ex ac o del iche o CMakeLis s. x pa a cons ui el p oyec o “web os c”.. 61 72 11. Anexo 11.1 Manual de ins alación 11.1.1 Aplicación Django Si se desea implan a la solución Django, bien en un se ido dedicado, bien en un sis ema Linux/Mac/Windows, bas a con segui es os sencillos pasos: 1. En p ime luga , dado que Django es á basado en Py hon, es necesa io ins ala el compilado Py hon [31]. Ac ualmen e se encuen a en la e sión 3.6.5. 2. Pos e io men e, se ins alan las dependencias especi icadas en el pun o 7 con el ges o de paque es de Py hon3, pip3. Ejemplo: pip3 ins all django 3. Una ez ins aladas las dependencias, se puede ejecu a el se ido Django. Pa a ello, es an sencillo como na ega has a la ca pe a aíz del se ido (donde se encuen a el iche o “manage.py” y ejecu a “py hon3 manage.py unse e ”. Po de ec o, el se ido se inicia á en la di ección IP 127.0.0.1:8000 4. Pa a que el se ido sea accesible ue a del p opio equipo, es necesa io especi ica lo en el comando de ejecución. Conc e amen e, se especi ica que la IP sea 0.0.0.0 pa a que el se ido adop e la IP del equipo. Po an o, el comando esul an e se ía: “py hon3 manage.py unse e 0.0.0.0”. 11.1.2 Aplicación WebRosTC Pa a la ejecución del so wa e del obo , es p eciso u iliza un sis ema Unix, ya sea bien Linux, o bien Mac, debido que algunas dependencias del paque e aio c no se encuen an pa a los sis emas Windows (conc e amen e, los paque es “lib px” y “libopus”). Po o o lado, en el sis ema obo , se ha con ado con una imagen del sis ema ope a i o Lubun u 16.04.3 LTS [26] con el amewo k ROS p eins alado. Si se desea usa una imagen limpia de dicho S.O o cualquie o o compa ible, es necesa io ins ala además el sis ema ROS, como apa ece indicando en su página web [2]. 73 Pa a pode ejecu a co ec amen e el so wa e del obo , se equie en los siguien es pasos: 1. Al igual que ocu e con Django, es p eciso ins ala los compilado es necesa ios. Si se ha usado la imagen con ROS p eins alado, es e paso no es necesa io. En o o caso, se deben ins ala los compilado es an o de Py hon con de C++ y CMake. Pa a ello bas a con ins ala el paque e “build-essen ials” en Linux. Dependiendo de la dis ibución de Linux usada, el comando a ía. En el caso de Ubun u, pa a ins ala lo bas a ía con ejecu a el comando “sudo ap - ge ins all build-essen ials”. 2. A con inuación, de debe án ins ala las dependencias especi icadas en el apa ado 7. Aquellos que se especi ican jun o a un “ap -ge ” se ins alan de igual o ma que el apa ado an e io . Los especi icados con “pip” se ins alan median e la he amien a pip de Py hon. 3. Los elemen os ma cados como “sou ce” se deben ag ega a la ca pe a co espondien e al en o no ROS “ca kin_ws”. “NXT-Py hon”, al y como se indica en su página web [18] ha de compila se (make) e ins ala se (make ins all). Po o o lado, “NXT-Co e ROS” se añade como un nodo más, el cual se compila á jun o con el es o de los nodos. 4. An es de pode ejecu a cualquie p og ama, es p eciso compila lo, po ello, el siguien e paso es na ega has a la ca pe a “ca kin_ws” y ejecu a “ca kin build”. La azón po la que se usa es e comando en ez “ca kin_make” es po que, en p ime luga , pe mi e compila cada nodo de o ma independien e, y aunque algún nodo alle en su compilación, el es o de los nodos se siguen compilando y, en segundo luga , po que así lo especi ica el manual de ins alación de “NXT- Co e ROS” [17]. 5. Una ez compilado, es p eciso que los nue os a chi os ejecu ables sean is os po la consola, po ello, se ac ualizan las a iables de en o no con el comando “sou ce de el/se up.bash”. 6. Pa a ejecu a el nodo, se ejecu a el comando: “ oslaunch web os c web os c.launch”. 7. Además, es necesa io ejecu a el nodo b idge desde o o e minal, el cual se puede ejecu a desde su ca pe a aíz con el comando “py hon3 obo WebRTC.py”.