scieee Science in your language
[sp] (orig)

Comunicación remota con un sistema ROS mediante WebRTC

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.

Read accessible full text

Comunicación remota con un sistema ROS mediante WebRTC

Author: Cuenca García, Carlos
Year: 2018
Source: https://riuma.uma.es/xmlui/bitstream/10630/16924/1/CarloscuencagarciaMemoriaTFG.pdf
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”.