mediante un sensor Kinet! Estudios: Ingeniera tcnica en informtica de sistemas. Autor: Sammy Pfeiffer Director: Joan Aranda Lpe A!o: "#$$ %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. " * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. ndice de contenido $ Introduccin......................................................................................................................................, $.$ )inect........................................................................................................................................, $." -.mo funciona )inect/..........................................................................................................0 $.1 2ti&idad directa de& sensor: S3e&eton trac3ing..........................................................................4 $.5 6o'ot (umanoide: 7io&oid........................................................................................................4 $.5.$ Ser8omecanismos: Dynami9e&s......................................................................................$# " :';eti8os.........................................................................................................................................$$ 1 <ra'a;os pre8ios..............................................................................................................................$1 1.$ :S.e&eton= s3e&eton trac3ing.................................................................................................$1 1.$.$ Protoco&o :S.................................................................................................................$1 1.$." :pen>I frame?or3.........................................................................................................$1 1." .aractersticas )inect.............................................................................................................$5 5 Dise!o.............................................................................................................................................$, 5.$ P&anificacin tempora&............................................................................................................$, 5." @irm?are de 7io&oid...............................................................................................................$, 5.1 Adaptacin de datos de& esAue&eto..........................................................................................$, 5.5 Simu&acin de& ro'ot y cinemtica in8ersa.............................................................................$+ , Imp&ementacin..............................................................................................................................$0 ,.$ Programacin de& firm?are de& 7io&oid para e& acceso a &os Dynami9e&...............................$0 ,." Programacin de& simu&ador con cinemtica in8ersa de& 7io&oid...........................................$4 ,.".$ .inemtica in8ersa..........................................................................................................$B ,.1 Programacin de& simu&ador de coordenadas de )inect C1DD con e& cam'io sistema de coordenadas..................................................................................................................................."$ ,.5 Programacin de& esca&ado de &as coordenadas conseguidas tras e& cam'io de sistema de referencia......................................................................................................................................."" ,., .om'inacin de am'os simu&adores para &a ap&icacin fina&................................................."5 + 6esu&tados.......................................................................................................................................", 0 An&isis econmico........................................................................................................................."B 0.$ Argumentos econmicos de& proyecto:..................................................................................."B 4 .onc&usiones...................................................................................................................................1$ B Lineas futuras de tra'a;o................................................................................................................11 $# 7i'&iografa...................................................................................................................................1, $$ Agradecimientos...........................................................................................................................10 $" Ane9os:.........................................................................................................................................1B $".$ Documentacin de &a ap&icacin= gua insta&acin= gua de uso............................................1B $".$.$ 7io&oid...........................................................................................................................1B $".$." :rdenador......................................................................................................................5# $".$.".$ Insta&acin entorno Pyt(on Eindo?s:...................................................................5# $".$."." Insta&acin entorno pyt(on Linu9:........................................................................5# $".$.".1 Insta&acin :S.e&eton...........................................................................................5$ $".$.".5 2so de &a ap&icacin..............................................................................................5" $"." Ane9o cdigo fuente firm?are 7io&oid................................................................................51 $".1 .digo fuente ap&icacin pyt(on: ........................................................................................5+ $".5 Ane9o cdigo dec&aracin estructura simu&acin 7io&oid....................................................,0 $"., Ane9o cdigo dec&aracin de& %2I.......................................................................................,4 1 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 5 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 1 Introduccin 1.1 Kinect 6ecientemente (a sa&ido a& mercado un interesante sensor= comercia&mente &&amado )inect.Parafraseando a &a Ei3ipedia encontramos Aue )inect se puede definir como: Fun contro&ador de ;uego &i're y entretenimiento desarro&&ado por Gicrosoft para &a 8ideoconso&a H'o9 1+#. )inect permite a &os usuarios contro&ar e interactuar con &a conso&a sin necesidad de tener contacto fsico con un contro&ador de 8ideo;uegos tradiciona&= mediante una interfa natura& de usuario Aue reconoce gestos= comandos de 8o= y o';etos e imgenes F. Gicrosoft 6esearc( in8irti 8einte a!os de desarro&&o en &a tecno&oga de )inect. @ue anunciado por primera 8e e& $ de ;unio de "##B en &a E&ectronic Entertainment E9po "##B como IPro;ect >ata&I. E& sensor de )inect es una 'arra (orionta& de apro9imadamente "1 cm conectada a una peAue!a 'ase circu&ar con un e;e de articu&acin de rtu&a= y est dise!ado para ser co&ocado &ongitudina&mente por encima o por de'a;o de& te&e8isor. )inect se compone principa&mente de: J2na cmara tradiciona& C6eso&ucin +5#954# 6%7 1#fps K%AD. J2n emisor de infrarro;os. J2na cmara de infrarro;os. J5 Gicrfonos C$+'it samp&ing rate: $+LD. J2n motor. , * +# Ilustracin 1: Sensor Kinect %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. + * +# Ilustracin 2: Kinect desmontado Ilustracin 3: Imagen de profundidad en escala de grises, imagen webcam, profundidad en escala de colores %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 1.2 Cmo funciona Kinect? Para conocer &a distancia a &a Aue se encuentra cada p9e& de &a imagen de profundidad se emite un a conste&acin de puntos con e& emisor infrarro;o: 0 * +# Ilustracin 4: Esquema funcionamiento Ilustracin : !onstelacin infrarro"a Kinect %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. Entonces &a cmara infrarro;a detecta esta conste&acin y )inect ca&cu&a &a disparidad para cada p9e& C&a diferencia entre donde esta'a e& punto a& proyectar&o a donde est en &a proyeccinD. A esto se &e &&ama cmara de &u estructurada. 1.3 Utilidad directa del sensor: Skeleton tracking. S3e&eton <rac3ing= o &o Aue es &o mismo= (acer seguimiento de& cuerpo CesAue&etoD de un usuario en tiempo rea&. La situacin actua& es Aue Gicrosoft (a anunciado &a sa&ida de un SD) propio para usar e& )inect inc&uyendo S3e&eton <rac3ing. .on &o cua& (a surgido un mo8imiento para crear dri8ers y ap&icaciones para )inect mayormente opensource. A partir de &o cua& se (a creado :pen>I= una organiacin para promo8er &a compati'i&idad e interopera'i&idad de dispositi8os= ap&icaciones y midd&e?are de interaccin natura& C>atura& InteractionD. En :pen>I (an creado una &i'rera para rea&iar S3e&eton <rac3ing inc&uida en un paAuete &&amado >I<E. Esta &i'rera nos 'rinda seguimiento de& cuerpo de& usuario aportando &as coordenadas en e& espacio de cada uno de &os puntos de inters Ce9tremidades y articu&acionesD. 1.4 Root !umanoide: "ioloid 2n ro'ot (umanoide es ro'ot antropomorfo Aue= adems de imitar &a apariencia (umana= imita a&gunos aspectos de su conducta. 4 * +# Ilustracin #: E"emplo de S$eleton %rac$ing %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. Para este proyecto se (a usado e& 3it comercia& 7io&oid Premium )it= de 6o'otis. Este ro'ot est dise!ado para e& aprendia;e y (o''y de &a ro'tica. Est formado por 8arios sensores= una 'atera= e& contro&ador principa& &&amado .GJ,$#= &os componentes para unir &as diferentes pieas y ser8omecanismos modu&ares &&amados Dynami9e&s. Estos M&timos pueden usarse conectados en DaisyJc(ain para construir ro'ots de diferentes formas Ccon ruedas= piernas= (umanoides...D. Este 3it se programa en un &engua;e . propio= como es costum're en otros paAuetes simi&ares destinados a &a ro'tica como (o''y. E9isten otros 3its como por e;emp&o: JLego Gindstorms. Ji6o'ot .reate. JKe9 6o'otics Design System. J)L6J$ En este proyecto se (a usado e& 7io&oid Premium )it dado Aue satisface nuestras necesidades y adems e9ista uno a nuestra disponi'i&idad. B * +# Ilustracin &: 'ioloid en forma (umanoide %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 1.4.1 Servomecanismos: Dynamixels Los Dynami9e& tienen una simi&itud a &os tradiciona&es ser8omotores= am'os son motores 'asados en posicin= se &e puede indicar un ngu&o a& Aue girar y se posicionar en ese &ugar. Pero no aca'a a(= se puede ;ugar con unas ,# 8aria'&es distintas en re&acin a su mo8imiento: m9imo ngu&o de mo8imiento= 8e&ocidad de mo8imiento= fuera= carga actua&= temperatura= etc. Estos motores pueden ser manipu&ados directamente gracias a& adaptador suministrado con e& )it estando conectados por DaisyJc(ain unos con otros= con &o cua& se forma una peAue!a red por &a Aue se pueden mandar mensa;es para e;ecutar mo8imientos= &eer 8aria'&es de &os distintos motores= etc. <am'in se puede conectar por serie a& contro&ador .GJ,$# y este contro&ador se ocupar de mandar estos mensa;es. $# * +# Ilustracin ): *iferentes configuraciones del $it 'ioloid Ilustracin +: *,nami-el Ilustracin 1.: /daptador 0S' 1 *,nami-el 2 Serie %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 2 Objetivos E& o';eti8o principa& consiste en contro&ar &os 'raos de un ro'ot (umanoide mediante &os datos proporcionados por un sensor )inect. Este o';eti8o se compone de &os siguientes su'o';eti8os o tareas: JEstudio de &as caractersticas de &os actuadores: ser necesario sa'er como y Aue son capaces de (acer. JImp&ementacin de un firm?are de contro& de &os actuadores de& ro'ot. JImp&ementacin de &a cinemtica in8ersa de &os 'raos: se tendr Aue poder dar un punto en e& espacio donde se Auiera posicionar &a mano de& ro'ot y Aue este posicione &as articu&aciones donde sea necesario. JEstudio de &a reso&ucin y precisin de &os datos ofrecidos por )inect. JIncorporacin de &a &i'rera de S3e&eton <rac3ing: ser necesario conocer como funciona y Aue datos ofrece so're e& esAue&eto para tra'a;ar con &. JSimu&ador para e8a&uacin de &os datos de& esAue&eto: ser necesario representar &os datos de& esAue&eto para poder contro&ar su precisin. JSimu&ador para &a simu&acin de &os mo8imientos de& ro'ot: ser necesario simu&ar primero &os mo8imientos para no poner en pe&igro e& ro'ot y compro'ar Aue &os datos de &os mo8imientos son correctos. J2nin de &os simu&adores en una ap&icacin fina& Aue cump&a e& o';eti8o principa&. JPro'ar y e8a&uar &a ap&icacin fina& de integracin de &os simu&adores. Para e&&o se dise!arn &as prue'as necesarias una 8e &ogrado e& anterior su'o';eti8o. $$ * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. $" * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 3 rabajos !revios 3.1 #SCeleton$ skeleton tracking. :S.e&eton es un peAue!o programa Aue (ace uso de &os datos de esAue&eto proporcionados por e& :pen>I frame?or3 para en8iar por protoco&o :S. estas coordenadas. 3.1.1 "rotocolo OS# E& protoco&o :S. C:pen Sound .ontro&D es un protoco&o pensado para comunicar instrumentos musica&es= dispositi8os mu&timedia y ordenadores en tiempo rea&. .omMnmente es transportado por 2DP. Las caractersticas de este protoco&o son: JAmp&ia'&e= dinmico. EsAuema de nom'res sim'&icos tipo 26L. JDatos numricos sim'&icos y de a&ta reso&ucin JLengua;e de coincidencia de patrones Cpattern matc(ingD para especificar mM&tip&es receptores de un Mnico mensa;e. JGarcas de tiempo Ctime tagsD de a&ta reso&ucin. JGensa;es FempaAuetadosN para aAue&&os e8entos Aue de'en ocurrir simu&tneamente JSistema de interrogacin para encontrar dinmicamente &as capacidades de un ser8idor :S. y o'tener documentacin. 2n e;emp&o de un paAuete :S. de :S.e&eton podra ser: Address pattern: I*;ointI <ype tag: IsifffI s: Joint name= c(ec3 out t(e fu&& &ist of ;oints 'e&o?. i: <(e ID of t(e user. f: H coordinate of ;oint in inter8a& O#.#= $.#P f: Q coordinate of ;oint in inter8a& O#.#= $.#P f: R coordinate of ;oint in inter8a& O#.#= 0.#P 3.1.2 O!en$I %rame&or' :pen>I C:pen >atura& InteractionD es un frame?or3 mu&ti&engua;e= mu&tip&ataforma= Aue define APIs para escri'ir ap&icaciones Aue uti&icen Finteraccin natura&N. La interaccin natura& se refiere a& concepto donde &a interaccin entre (umano y dispositi8o esta 'asada en &os sentidos (umanos= norma&mente odo y 8ista. .on esta premisa e& frame?or3 inc&uye: J6econocimiento de 8o y comandos. J%estos con &as manos= gestos predeterminados para rea&iar acciones configura'&es. J7ody Gotion <rac3ing= donde todo e& cuerpo es ana&iado e interpretado para conseguir un trac3ing. $1 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 3.2 Caracter%sticas Kinect Las prue'as rea&iadas dieron &ugar a esta grfica donde podemos 8er &a precisin de &os datos otorgados por e& )inect. La informacin de un p9e& concreto ser cada 8e ms &e;ana a &a rea&idad segMn nos a&e;emos de& sensor. >os encontramos Aue e& )inect opera correctamente entre &os +#cm y &os , metros. En e& caso de& S3e&eton <rac3ing CsegMn &os desarro&&adores de :pen>I Aue coincide con &os conse;os de Gicrosoft so're e& uso de )inectD &a distancia idea& se sitMa entre &os " y "=, metros. $5 * +# Ilustracin 11: Error en cent3metros de un p3-el en funcin de la distancia de este %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 4 Dise(o 4.1 &lanificacin tem'oral Lay tareas Aue se encadenan unas con otras ya Aue resu&ta necesario tra'a;ar con;untamente. 4.2 (irm)are de "ioloid Ser necesario desarro&&ar un firm?are para comunicarse con &os ser8omotores de& 7io&oid de &a manera ms simp&e y eficiente posi'&e. 4.3 *da'tacin de datos del es+ueleto Ser necesario con8ertir &os datos de &as coordenadas de& esAue&eto de ta& manera Aue consigamos &as coordenadas de cada una de &as manos en referencia a& sistema de coordenadas de nuestro 7io&oid. Las coordenadas de &os puntos de& esAue&eto nos 8ienen dados en una referencia a& punto de 8ista de& )inect: JE& e;e H y e& e;e Q en un rango de O#..$P. JE& e;e R en un rango de O#..0P. $, * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. >ecesitamos tras&adar &as coordenadas de &as manos de& sistema de coordenadas proporcionado por :S.e&eton a& sistema de coordenadas en referencia a& usuario. E& p&ano formado por e& pec(o de& usuario de'e tener e& origen de coordenadas. 4.4 Simulacin del root , cinem-tica in.ersa La cinemtica in8ersa consiste en (a&&ar &os ngu&os de cada articu&acin dada &a configuracin deseada para &a figura= en nuestro caso= &a posicin de &a mano. La decisin de mo8er &os 'raos por cinemtica in8ersa (ace Aue crear un simu&ador sea muy necesario C(acer &as prue'as directamente en e& ro'ot entra!a cierto pe&igroD. La simu&acin (a de ser8ir para poder pro'ar &a ap&icacin sin tener Aue tener conectado e& ro'ot. La simu&acin tendr Aue tener cierto contro& so're: J>o tratar de introducir dentro de& cuerpo &a mano. J>o tratar de posicionar &a mano en posiciones no a&cana'&es. $+ * +# Ilustracin 12: 4osicin relati5a al usuario de sus manos %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. ) Im!lementacin La imp&ementacin est compuesta por &os siguientes pasos ordenados crono&gicamente segMn (an sido imp&ementados. /.1 &rogramacin del firm)are del "ioloid 'ara el acceso a los 0,nami1el E& cdigo para e& acceso (a de ser &o ms senci&&o y rpido posi'&e. La comunicacin entre e& ordenador y e& 7io&oid se rea&ia por serie Cusando un adaptador 2S7J serie en este casoD. .on &o cua& cuanto ms cortos y senci&&os sean &os mensa;es me;or reaccionarn &as articu&aciones. La estructura de &os mensa;es imp&ementada es &a siguiente: HH QQQQ Donde HH es e& nMmero identificador de& Dynami9e& Aue de'e reci'ir &a orden e QQQQ es &a Fcantidad de mo8imientoN o &o Aue es &o mismo= e& ngu&o a& Aue Aueremos Aue 8aya e& motor. Esta cantidad de mo8imiento est codificada en una esca&a de # a $#"1 representando &os 1+# grados. E& diagrama de f&u;o es e& siguiente: E& cdigo fuente consta en e& ane9o. $0 * +# Ilustracin 13: *iagrama de flu"o firmware 'ioloid %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. /.2 &rogramacin del simulador con cinem-tica in.ersa del "ioloid Se midi e& ro'ot y se consiguieron &as siguientes medidas apro9imadas: JDistancia (om'ro a (om'ro Canc(oD $#cm. JDistancia (om'ro a codo Bcm. JDistancia codo a mano 5=1cm. JDistancia (om'ro a FcaderaN "#cm. JLargo ro'ot $#cm. E& simu&ador se imp&ement a 'ase de formas simp&es conectando un cu'o centra&= representando e& torso= a &os 'raos. Estos estn representados por unos ci&indros Cuno para e& 'rao y otro para e& ante'raoD con unas esferas Aue marcan &as articu&aciones y &as manos. %racias a Kpyt(on= crear esta simu&acin es muy senci&&o. 7asta con dec&arar e& tipo de estructura C'o9= cy&inder= sp(ereD sus coordenadas= su tama!o y su 8ector direcciona& y ya est representado. E& cdigo de &a dec&aracin se encuentra en e& ane9o. $4 * +# Ilustracin 14: Estructura tronco superior bioloid en simulacin %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. ).2.1 #inem*tica inversa Rotai"n del hombro# <enemos e& 8ector K Aue es e& Aue 8a desde e& e;e C(om'roD a& punto de &a mano. Para sacar e& ngu&o de rotacin operaremos: Q esto &o negaremos dado Aue nos da e& ngu&o en negati8o. $ngulo del odo# $B * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. Dado Aue no podemos depender de en Aue e;es estn situadas &as partes de& 'rao &a forma ms senci&&a de proceder es tratar directamente con &as distancias en un p&ano imaginario. Primero sacamos &a distancia de un cateto de nuestro tringu&o imaginario: .ateto adyacente: CKm S Kector mano= a S ante'rao= ' S 'raoD Luego sacamos e& otro cateto= Aue estar en re&acin a este: Q sacamos e& ngu&o ca&cu&ando &a arcotangente como en &a articu&acin anterior: $ngulo del hombro# "# * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. So&o podemos depender de& e;e H dado Aue es so're e& cua& e& ngu&o se mo8er Cimaginariamente partiendo siempre de a(D= con &o cua& tendremos Aue tra'a;ar como en e& caso anterior con &as distancias para conseguir e& cateto adyacente pero teniendo en cuenta e& ngu&o de& codo. <odo esto (a'r Aue mu&tip&icar&o por su factor de esca&a para pasar&e &a informacin en e& formato apropiado a &os Dynami9e&. Adems &os ngu&os imaginarios de &os Aue partimos no coinciden con &os de &os Dynami9e&= as Aue tendremos Aue (acer una peAue!a ca&i'racin. Esta ca&i'racin consiste en sumar $5+T de offset a todos &os ngu&os. /.3 &rogramacin del simulador de coordenadas de Kinect 2303 con el camio sistema de coordenadas Para dar uso a nuestra cinemtica in8ersa necesitamos &as coordenadas de &as manos en e& mismo sistema de coordenadas en e& Aue se encuentra nuestra simu&acin. Para e&&o e& primer paso es conseguir &as coordenadas de &as manos en referencia a& pec(o de& usuario de& )inect. En este caso (e tomado e& origen de coordenadas en e& (om'ro iAuierdo por comodidad. Luego so&o (ace fa&ta (acer una tras&acin de coordenadas para situar&o en e& origen de& simu&ador Ce& centro de& cu'o Aue representa e& torsoD. Procedimiento: Sean C9=y=D &as coordenadas de& punto respecto a &os e;es de coordenadas HJQJR.Sean C9#=y#=#D &as coordenadas de& origen de coordenadas de &os e;es HJQJR respecto a& nue8o sistema de coordenadas HUJQUJRU. Sean a='=c e& ngu&o Aue se gira e& e;e HU respecto a &os e;es HJQJR= sean d=e=f e& ngu&o Aue se gira e& e;e QU respecto a &os e;es HJQJR= y sean g=(=i e& ngu&o Aue se gira e& e;e RU respecto a &os e;es HJ QJR.
"$ * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. Ser e& sistema de ecuaciones Aue nos dar &as coordenadas de nuestro punto en referencia a& nue8o sistema de coordenadas. /.4 &rogramacin del escalado de las coordenadas conseguidas tras el camio de sistema de referencia Dado Aue e& cuerpo (umano es distinto a& cuerpo de& 7io&oid Cprincipa&mente nuestro ante'rao sumado a nuestra mano es mas &argo Aue nuestro 'rao= mientras en e& 7io&oid pasa a& contrarioD necesitamos (acer un esca&ado de &as coordenadas de& punto teniendo esto en cuenta. Para e& 'rao iAuierdo Ce& proceso es muy simi&ar para e& derec(oD: "" * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. Lom'ro iAuierdo= codo iAuierdo= mano iAuierda se refiere a &as coordenadas de estos puntos. dV'rao S distanciaC(om'ro iAuierdo= codo iAuierdoD dVante'rao S distanciaCcodo iAuierdo= mano iAuierdaD dV'io&oidV'rao S #.#B dV'io&oidVante'rao S #.#51 dVtodoV3inect S dV'rao W dVante'rao dVtodoV'io&oid S dV'io&oidV'rao W dV'io&oidVante'rao 8V(iVaVci S Ccodo iAuierdo X (om'ro iAuierdoD 8V(iVaVci S Ccodo iAuierdo * modu&oC codo iAuierdo D D Y dV'io&oidV'rao 8VciVaVmi S Cmano iAuierda X codo iAuierdoD 8VciVaVmi S C8VciVaVmi *modu&oC 8VciVaVmi D D Y dV'io&oidVante'rao punto mano iAuierda S 8V(iVaVci W 8VciVaVmi W C#.#,= #.#,= #.#",D Donde C#.#,= #.#,= #.#",D es &a tras&acin a& origen de coordenadas. Lo Aue (acemos es usar &os 8ectores proporciona&es a& tama!o de& 'rao y de& ante'rao para situar correctamente y en esca&a &a posicin de &a mano. "1 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. /./ Cominacin de amos simuladores 'ara la a'licacin final Inicia&mente se inicia e& %2I C%rap(ica& 2ser InterfaceD en e& cua& se presenta &a simu&acin de& 7io&oid. A su 8e se inicia e& (i&o de e;ecucin Aue se encargar de mantener una estructura de 8aria'&es con &as coordenadas de &os puntos Aue nos interesan a tiempo rea&. Gientras e& programa siga corriendo se actua&iar &a %2I continuamente y en caso de estar conectado e& ro'ot se &e en8iarn &as ordenes correspondientes a cada Dynami9e&. "5 * +# Ilustracin 1: *iagrama de flu"o de la aplicacin %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. + ,esultados Se (a demostrado &a 8ia'i&idad de& uso de un sensor )inect como interficie Mti& y en tiempo rea& para e& contro& gestua& de &os 'raos de un ro'ot (umanoide. Kdeo en youtu'e: (ttp:**???.youtu'e.com*?atc(/8S?i1&4EJ..LG En cuanto a &a %iabilidad de los mo&imientos durante e& proyecto se (an rea&iado prue'as de e8a&uacin de &os resu&tados en &os pasos intermedios ta& como podemos encontrar en e& diagrama de %antt. .oncretamente se (an rea&iado &as siguientes prue'as para cada tarea: JImp&ementacin de un firm?are para e& contro& de &os actuadores: Para cada mo8imiento de cada Dynami9e& se &ea e& 8a&or de &a posicin o';eti8o= se &e manda'a como orden y &uego se &ea &a posicin actua&. JImp&ementacin de &a cinemtica in8ersa de &os 'raos: Se pro'aron casos simp&es Cen &os e;es H=Q=RD y casos no tri8ia&es de posiciones de &a mano. En estos casos se compro'a'a= primero 8isua&mente en e& simu&ador Ca grandes rasgos si tena sentidoD= &uego ana&iando &os resu&tados de &as coordenadas y ngu&os o'tenidos con un mode&o (ec(o a mano= si estos datos eran correctos. ", * +# Ilustracin 1#: !apturas de un 5ideo de uso de la aplicacin %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. JIncorporacin de &a &i'rera de S3e&eton <rac3ing: Se compro' Aue &os datos so're e& esAue&eto fueran un f&u;o constante contando e& nMmero de actua&iaciones de cada articu&acin por segundo. <am'in se compro' Aue &as coordenadas no sufrieran sa&tos 'ruscos de posicin ana&iando &as coordenadas de 8arias escenas manua&mente. JSimu&ador para e8a&uacin de &os datos de& esAue&eto: Se compro' Aue e& cam'io de sistema de coordenadas para &os puntos de& esAue&eto eran correctos= primero 8isua&mente en e& simu&ador Ca grandes rasgos para sa'er si tena sentidoD= &uego ana&iando &os resu&tados de &as coordenadas (aciendo &os c&cu&os manua&mente. JSimu&ador para simu&acin de &os mo8imientos de& ro'ot: La compro'acin se rea&i a& imp&ementar &a cinemtica in8ersa de &os 'raos. En cuanto a& tiem'o de res'uesta se (an ana&iado 8arios 8ideos so're e& uso de &a ap&icacin donde se (a o'ser8ado Co'ser8ando cuantos frames pasan desde Aue comiena un mo8imiento (asta Aue e& 'rao de& ro'ot empiea a mo8erse imitndo&oD Aue e& retraso es menor a $,ms en condiciones de reposo a mo8imiento. En caso de Aue e& ro'ot este mo8iendo e& 'rao y se &e fuerce a cam'iar de direccin= por &a dinmica de &os Dynami9e& este tiempo aumenta. Se (a rea&iado una peAue!a encuesta entre "# personas Aue (an pro'ado e& simu&ador. La prue'a (a consistido en ;ugar durante unos minutos con e& sistema e;ecutando mo8imientos senci&&os a& principio= para (a'ituarse= y &uego mo8erse con &i'ertad. En esta encuesta se &e peda a& usuario Aue puntuara de& $ a& , &as siguientes preguntas: $. A& mo8er so&o un 'rao= -en Aue grado te (a parecido Aue e& ro'ot responda 'ien/ ". A& mo8er &os dos 'raos= -en Aue grado te (a parecido Aue e& ro'ot responda 'ien/ 1. En genera&= -piensas Aue &a posicin de &as manos de& ro'ot son fie&es a &as de& usuario/ 5. En genera&= -piensas Aue e& ro'ot responde rpidamente a &os mo8imientos de& usuario/ De donde sacamos &as siguientes respuestas: La cua& nos da una media de 5=$. "+ * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. La cua& nos da una media de 1=5,. La cua& nos da una media de 5=1,. La cua& nos da una media de 5=5,. "0 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. "4 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. - .n*lisis econmico Cone'to (oras Preio hora Total Dise)o 5, 0#=## Z 1.$,#=## Z *e+nia $, ",=## Z 10,=## Z Programai"n "5# ",=## Z +.###=## Z Total 1## B.,",=## Z *aterial Preio Preio Final ,ioloid Premium Kit $."##=##[Y 4,#=## Z Kinet $,#=## Z $,#=## Z Estai"n de traba-o $.###=##ZYY $+0=## Z Total $.$+0=## Z Y .am'io actua& $Z S $=5$[ YY Amortiacin a "5 meses= uso para e& proyecto: 5 meses. Coste total del 'ro.eto# /0!1234005 4.1 *rgumentos econmicos del 'ro,ecto: -\ue aporta a& sensor )inect este proyecto/ Da promocin dado Aue se &e da uso para un producto Aue puede &&amar &a atencin. -\ue aporta a& ro'ot este proyecto/ Principa&mente es un proyecto reproduci'&e Aue a!ade inters didctico. A partir de & se pueden montar otras configuraciones de& 7io&oid y mane;ar&as a tra8s de& )inect. Se podra crear a&gMn tipo de ;uego de recreati8a donde &os 'raos podran coger una pe&ota y tirar&a a a&gMn o';eti8o. Podra construirse un peAue!o s(o? de promocin= a& pasar por de&ante de &a configuracin de& proyecto uno podra mo8er e& ro'ot. A& atraer &a atencin de& posi'&e consumidor*c&iente se afianara e& producto en promocin. "B * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 1# * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. / #onclusiones Para conseguir rea&iar este proyecto se (an tenido Aue integrar muc(os e&ementos. A& ser punta de &ana de este tema no (a'a demasiado materia& de& Aue partir con &o cua& nos (emos 8isto o'&igados a pro'ar diferentes opciones en cuanto a enfoAues de& pro'&ema y (erramientas uti&iadas. Dado e& carcter de in8estigacin y desarro&&o de& proyecto se encuentra fuera de nuestro a&cance &a e8a&uacin precisa de& sistema de guiado ya Aue esto sera origen de otro proyecto. E& o';eti8o de este proyecto (a sido posi'&e con re&ati8o poco esfuero gracias a Aue &a tecno&oga de )inect nos permite conseguir un esAue&eto de un usuario fci& y fie&mente. AMn as e& tratamiento de &os datos para Aue fuera Mti&es reAuiri un esfuero considera'&e por no tener tra'a;os anteriores en &os cua&es 'asarse. La resu&tado ser un e;ercicio muy interesante y una gran oportunidad para aprender conceptos importantes como cinemtica in8ersa= programacin con grficos en 1D y repasar conceptos ap&icando geometra y trigonometra. Pyt(on (a resu&tado ser un &engua;e muy senci&&o de aprender teniendo una 'ase de programacin y Aue permite o'tener grandes resu&tados en poco tiempo. E& 7io&oid Premium )it es un paAuete incre'&e para adentrarse en e& mundo de &a ro'tica. Lay 'astantes recursos en &a ?e' para conseguir comenar cua&Auier proyecto Aue uno se p&antee. 1$ * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 1" * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 0 1ineas %uturas de trabajo Sera muy posi'&e= y pro'a'&emente se rea&iar= &a o'tencin de& mo8imiento de& resto de& cuerpo Cespecia&mente &as piernasD con un mtodo simi&ar. En principio &o ms senci&&o sera simp&emente mo8er &as piernas= sin caminar. Esto es as ya Aue caminar imp&ica ser consciente de &a dinmica de& cuerpo para Aue este no caiga= para e&&o necesita de sensores para poder faci&itar esta tarea y un sistema Aue &os monitorice para actuar como sea de'ido en cada caso. 11 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 15 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 12 3iblio4ra%5a Especificaciones Dynami9e&s: (ttp:**???.ro'osa88y.com*6o'oSa88yPages*Support*7io&oid*AHJ$"]"4eng&is(]"B.pdf Documentacin :pen>I (ttp:**???.openni.org*documentation :S.e&eton= de Sense7&oom (ttps:**git(u'.com*Sense'&oom*:S.e&eton <rigonometra= Ei3ipedia: (ttp:**en.?i3ipedia.org*?i3i*In8erseVtrigonometricVfunctions Kectores en 61 CGoises Ki&&enaD (ttp:**es.scri'd.com*doc*4+4B5B+*KectoresJenJ 61^adVunitSDocVSide'oardVGedium6ectang&eV7<@V1##9",#_ur&S(ttp ]1A**es.scri'd.com*doc*4+4B5B+*KectoresJenJ61_attri'utesS\uantSegs]1DD]"+@our%en ]1D<rue]"+IA7Parent]1D<ec(no&ogy]","#]","+]","#.omputing]"+E9tension]1Dpdf ]"+%ender]1Dm]"+2ser]1D"+5,,$$+]"+AdLayout]1DJ$50"51+"$"]"+Doc2ser ]1D"1B++$$]"+2serState]1DIn]"+IA7.(i&d]1DKisua&]","#7asic]","..*. ]"+Document]1D4+4B5B+_s3ipS# Sistemas de coordenadas= ?i3ipedia: (ttp:**es.?i3ipedia.org*?i3i*SistemaVdeVcoordenadas .am'io sistema coordenadas (ttp:**???.te&efonica.net*?e'"*&asmatematicasdemario*%eometria*Ana&itica*.oordenadas*.oor6ec t.(tm 6epaso geometra y trigonometra (ttp:**t(a&es.cica.es*rd*6ecursos*rdBB*edBBJ#,51J#5*Distancia.(tm& @unciones de numpy para Pyt(on: (ttp:**mat(esaurus.sourceforge.net*mat&a'Jnumpy.(tm& Documentacin oficia& Pyt(on: (ttp:**???.pyt(on.org*doc* Documentacin oficia& Kpyt(on: (ttp:**???.8pyt(on.org*contents*doc.(tm& Documentacin pyseria&: (ttp:**pyseria&.sourceforge.net* Documentacin simp&e:S. Cpara pyt(onD: (ttp:**???.i9iJsoft?are.net*content*'odyV'ac3yardVosc.(tm& Lin3s so're cinemtica in8ersa: 1, * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. (ttp:**support.ro'otis.com*en*soft?are*ro'op&us*ro'op&usVmotion*motionedit*poseedit*poseuti&ity*ro 'op&usVmotionVi3.(tm (ttp:**apo&&o.upc.es*(umanoide*trac*?i3i*7io&oid)inematics (ttp:**???.fcet.staffs.ac.u3*so?$*ro'otmateria&*manipu&atorV3inematics.(tm (ttp:**eris.&ira&a'.it*?i3i*)DLJsimp&e (ttp:**es.?i3ipedia.org*?i3i*.inem].1]A$ticaVin8ersa (ttps:**sites.goog&e.com*site*proyectosro'oticos*cinematicaJin8ersaJi 1+ * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 11 .4radecimientos AESS: Ja8ier @rnande= Jonat(an %ona&e= GiAue& @arr= Pau 7e&tran= Li&ario <ome= L&uis 6o8ira= Andrs Pardo= etc. todos &os miem'ros Aue (an estado a( ec(ando una mano siempre Aue me (a (ec(o fa&ta y me (an ayudado a mantener e& nimo. ESAII: Joan Aranda= director de este P@. gracias a& cua& (e podido aprender muc(os conceptos Aue seguro me sern Mti&es en e& futuro. Josep 6uafa= Aue me ayud a encaminarme (acia un P@.. :tros: Jordi <ur Escande&&= amigo y consu&tor en cua&Auier duda Aue tu8iera matemtica= gracias por tu esfuero. Q en genera& a toda esa gente Aue estu8o ayudndome ya fuera con conocimientos o con su actitud. 10 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 14 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 12 .nexos: 12.1 0ocumentacin de la a'licacin$ gu%a instalacin$ gu%a de uso 12.1.1 3ioloid Eindo?s: >ecesitaremos insta&ar e& firm?are en e& 7io&oid. E& firm?are est compuesto por un arc(i8o .(e9. Para insta&ar&o podemos insta&ar 6o'oP&us de 6:7:<IS. CLin3 y gua de insta&acin: (ttp:**support.ro'otis.com*en*soft?are*ro'op&usVmain.(tm D. Este soft?are contiene un termina& &&amado 6o'oP&us <ermina&. .onectamos a& puerto asignado en nuestro ordenador como puerto .:G Ca ,0+## 'audiosD. 2na 8e conectado a& 7io&oid de'eremos mantener pu&sado ^ CA&t%rW1D (asta Aue nos sa&ga una conso&a. 7orramos &os caracteres F^N de ms Aue nos (an sa&ido y: JE;ecutamos e& comando FLDN Csin &as comi&&asD. JKamos a @i&es ` <ransmit @i&e y se&eccionamos e& .(e9 de nuestro firm?are. Para correr este nue8o firm?are podemos reiniciar e& 7io&oid o escri'ir F%:N. Linu9: >os (ar fa&ta a&gMn tipo de conso&a para interactuar con serie y repetir &as instrucciones anteriores. 1B * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 12.1.2 Ordenador 12.1.2.1 5nstalacin entorno &,t!on 6indo)s: >ecesitaremos insta&ar Pyt(on= en este proyecto se (a usado Pyt(on ".+: (ttp:**sourceforge.net*pro;ects*py?in1"*fi&es*py?in1"*7ui&d"$+*py?in1"J"$+.?in1"J py".+.e9e*do?n&oad Insta&amos PySeria& para e& soporte para serie: (ttp:**pyseria&.sourceforge.net* Descarga: (ttp:**pypi.pyt(on.org*pypi*pyseria& %ua de insta&acin: (ttp:**pyseria&.sourceforge.net*pyseria&.(tm&^insta&&ation Insta&amos Simp&e:S.: (ttp:**???.i9iJaudio.net*content*'odyV'ac3yardVpyt(on.(tm& Para e&&o insta&amos primero py:S.: (ttps:**trac.8".n&*?i3i*py:S. Insta&amos >umPy: (ttp:**numpy.scipy.org* Descarga: (ttp:**???.scipy.org*Do?n&oad %ua de insta&acin: (ttp:**???.scipy.org*Insta&&ingVSciPy Insta&amos Kpyt(on: (ttp:**???.8pyt(on.org*inde9.(tm& Descarga y gua: (ttp:**???.8pyt(on.org*contents*do?n&oadV?indo?s.(tm& Insta&amos ?9Pyt(on: (ttp:**???.?9pyt(on.org*do?n&oad.p(p 12.1.2.2 5nstalacin entorno ',t!on 7inu1: Lay Aue insta&ar &as mismas &i'reras Aue en Eindo?s. 5# * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 12.1.2.3 5nstalacin #SCeleton :';eti8o usar: (ttps:**git(u'.com*Sense'&oom*:S.e&eton^readme CE;emp&os a compi&ar (ttps:**git(u'.com*Sense'&oom*:S.e&etonJe9amp&es D \ue como dice (ay Aue insta&ar &o Aue nos diga: (ttps:**git(u'.com*a8in"*Sensor)inect Kideo muestra: (ttp:**ur'an(on3ing.com*ideasfordoens*"#$$*#"*$+*s3e&etonJtrac3ingJ?it(J3inectJ andJprocessing* Empeamos por Sensor)inect: Sensor)inect Cde su 6eadmeD: Insta&& notes: $D Insta&& unsta'&e :pen>I C(ttp:**???.openni.org*do?n&oadfi&es*openniJ'inaries*"#J&atestJ unsta'&eD C:pen>IJ7inJEin1"J8$.#.#.",.e9e en &a carpetaD :n Linu9*Gac p&ease do: .*sudo insta&&.s( "D Insta&& Sensor Ct(is 8ersion...DCa8in"JSensor)inectJ#$"5'd".ip en &a carpetaD :n Linu9*Gac p&ease do: .*sudo insta&&.s( 1D Insta&& unsta'&e >I<E C(ttp:**???.openni.org*do?n&oadfi&es*openniJcomp&iantJmidd&e?areJ 'inaries*11J&atestJunsta'&eD C>I<EJ7inJEin1"J8$.1.#.$4.e9e en &a carpetaD :n Linu9*Gac p&ease do: .*sudo insta&&.s( 2se t(is &icense ?(en as3ed during t(e insta&&ation: #):I3"JeI7Q.&PEKnGo6)n,cdQ5S 1.,D .onectar )inect y aceptar &as insta&aciones de dri8ers de Eindo?s. 5D <est ^$: 6un t(e >iKie?er samp&e to ma3e sure dept( _ image streams are ?or3ing. ,D <est ^": 6un t(e :pen>I*>i2ser<rac3er samp&e p&ay ?it( t(e s3e&eton. DonUt forget to start ?it( t(e ca&i'ration posea CE9p&ained in t(e PD@sD ,.BD Para Aue funcione e& M&timo test CQ otras cosas mas ade&anteD: >ote: A&& of t(e >I<E samp&es are using 1"#9"5# reso&ution. Qou need to c(ange it to +5#954# in t(e HGL fi&es inside t(e Data directory. I (a8e prepared preconfigured HGLs in t(e I>I<EbDataI dir. Just copy t(em to Ic:bProgram @i&esbPrime Senseb>I<EbDataI. +D <est ^1: <ry t(e >I<E*Samp&eJPointKie?er samp&e for t(e (and trac3ing demo. E insta&amos :S.e&eton: :S.e&etonJ$.#V?in1".ip E;ecutamos e& e;ecuta'&e. Este es e& ser8idor :S.e&eton= &os mensa;es sa&en en (ttps:**git(u'.com*Sense'&oom*:S.e&eton^readme Podemos pro'ar&o con animata: (ttp:**animata.3i'u.(u*do?n&oads.(tm&animataV?inJ##5.ip 5$ * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. Para e&&o tenemos Aue e;ecutar :S.e&eton.e9e asi: :S.e&eton.e9e J3 Jm9 +5# Jmy 54# Jo9 J$+# Si se Auiere pro'ar a&guna demo: (ttps:**git(u'.com*Sense'&oom*:S.e&etonJe9amp&es 12.1.2.4 Uso de la a'licacin Por un &ado de'emos e;ecutar :S.e&eton de &a siguiente manera: :S.e&eton.e9e J? Jr Donde J? sir8e para 8er e& 8isor de imagen de profundidad. Donde Jr sir8e para o'tener &os datos en modo FmirrorN Aue es como funciona e& cdigo en pyt(on. Para Aue :S.e&eton nos empiece a (acer trac3ing de'emos poner &a FPsiN pose: Por otro &ado tenemos Aue e;ecutar e& cdigo pyt(on: Simp&emente podemos e;ecutar 7io&oidArmsGain)inect:S..py. Para (acer Aue e& 7io&oid e;ecute &os mo8imientos (a'r Aue e&egir e& puerto serie Aue est usando y dar&e a& 'otn .onnect. 5" * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 12.2 *ne1o cdigo fuente firm)are "ioloid // Codigo para coger los mensajes por serie y ejecutar los movimientos 1. #include <avr/io.h> 2. #include <stdio.h> 3. #include <string.h> 4. #include <stdlib.h> 5. #include <avr/interrupt.h> 6. #include "serial.h" 7. #include "dna!i"el.h" 4. 9. /// Control table address 1#.#de$ine %&'()*&%(+,-,(.&* 3# 11.#de$ine %&'()*&%(+,-,(.&/ 31 12.#de$ine %&%01+1.-&%(+,-,(.&* 36 13.#de$ine %&%01+1.-&%(+,-,(.&/ 37 14.#de$ine %&2(3,.' 46 $,. 16.// Default setting 17.#de$ine 415)6*-&7)64.62 1 // 12bps 18.#de$ine 415)6*-&,4 1 $B. 2#.void %rint9o!!+tatus:int 9o!!+tatus;< 21.void %rint1rror9ode:void;< "". 23.int !ain:void; 24.= ",. int 3alue > #< "+. unsigned short 'oal%os?2@ > =#A 1#23B< "0. int inde" > #< "4. int id > 1< // id de motor "B. int !ovi!iento > #< 1#. int b2ovingA C%resent%os< 1$. int 9o!!+tatus< 1". 11. serial&initialiDe:576##;< // USA! "nitiali#e 15. d"l&initialiDe: #A 415)6*-&7)64.62 ;< // $ot using device inde% 1,. sei:;< 1+. 10. //printf& '(n(nSerial Comm. moving motor(n(n' )* 14. 1B. Chile :1; 5#. = 5$. char 0eceived4ata?2#@< 5". gets:0eceived4ata;< 51. i$:strlen:0eceived4ata; < 3; 55. print$:"1rror. 5or!ato ordenE ,d2otor 9ant2ov\n";< 5,. else= 51 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 5+. //+arsear mensaje 50. char F pch< 54. pch > strtoG :0eceived4ataA" ";< 5B. $or:int i>#< pch H> .6**< iII; ,#. = ,$. i$:i>>#; id>atoi:pch;< //coger id motor ,". i$:i>>1; !ovi!iento>atoi:pch;<// coger cantidad de movimiento ,1. pch > strtoG :.6**A " A.J";< ,5. B ,,. ,+. // ,jecutar orden ,0. d"l&Crite&Cord: idA %&'()*&%(+,-,(.&*A !ovi!iento;<
,4. %rint1rror9ode:;< //+or si -ay algun error ,B. B +#. B +$. +". return 1< 63.B +5. +,. ++. 6..// +rint communication result 68.void %rint9o!!+tatus:int 9o!!+tatus; 6K.= 0#. sCitch:9o!!+tatus; 0$. = 0". case 9(22&-L5),*E 01. print$:"9(22&-L5),*E 5ailed trans!it instruction pacGetH\n";< 05. break< 0,. 0+. case 9(22&-L100(0E 00. print$:"9(22&-L100(0E ,ncorrect instruction pacGetH\n";< 04. break< 0B. 4#. case 9(22&0L5),*E 4$. print$:"9(22&0L5),*E 5ailed get status pacGet $ro! deviceH\n";< 4". break< 41. 45. case 9(22&0LM),-,.'E 4,. print$:"9(22&0LM),-,.'E .oC recieving status pacGetH\n";< 4+. break< 40. 44. case 9(22&0L-,21(6-E 4B. print$:"9(22&0L-,21(6-E -here is no status pacGetH\n";< B#. break< B$. 55 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. B". case 9(22&0L9(006%-E B1. print$:"9(22&0L9(006%-E ,ncorrect status pacGetH\n";< B5. break< B,. B+. de$aultE B0. print$:"-his is unGnoCn error codeH\n";< B4. break< BB. B 1##.B $#$. 1/0.// +rint error bit of status pac1et 1#3.void %rint1rror9ode:; 1#4.= $#,. i$:d"l&get&r"pacGet&error:1007,-&3(*-)'1; >> 1; $#+. print$:",nput voltage errorH\n";< $#0. $#4. i$:d"l&get&r"pacGet&error:1007,-&).'*1; >> 1; $#B. print$:")ngle li!it errorH\n";< $$#. $$$. i$:d"l&get&r"pacGet&error:1007,-&(310/1)-; >> 1; $$". print$:"(verheat errorH\n";< $$1. $$5. i$:d"l&get&r"pacGet&error:1007,-&0).'1; >> 1; $$,. print$:"(ut o$ range errorH\n";< $$+. $$0. i$:d"l&get&r"pacGet&error:1007,-&9/19N+62; >> 1; $$4. print$:"9hecGsu! errorH\n";< $$B. $"#. i$:d"l&get&r"pacGet&error:1007,-&(310*()4; >> 1; $"$. print$:"(verload errorH\n";< $"". $"1. i$:d"l&get&r"pacGet&error:1007,-&,.+-069-,(.; >> 1; $"5. print$:",nstruction code errorH\n";< 125.B 5, * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 12.3 Cdigo fuente a'licacin ',t!on: from ar!graphics import F 1. import C" 2. from )r!'ui2 import F 2"mport t-e 3ui 3. import serial 4. import ti!e 5. import thread 6. from si!ple(+9 import F 7. import nu!p as np 4. B. $#. 11.24unciones utiles5 10.26odulo de un vector 13.def !odulus&vector:";E $5. return np.sOrt::"F";.su!:;; $,. 16.2Distancia entre dos puntos5 17.def dist:"A;E $4. return np.sOrt:np.su!::"J;FF2;; $B. 0/.2Cos&angulo) entre dos vectores 21.def cosangle:"A;E "". dot > np.dot:"A; "1. "&!odulus > np.sOrt::"F";.su!:;; "5. &!odulus > np.sOrt::F;.su!:;; ",. return dot / "&!odulus / &!odulus 06.2 np.rad0deg&angle) "0. 07.2Angulo entre dos vectores en grados 2K.def angle:"A;E 1#. dot > np.dot:"A; 1$. "&!odulus > np.sOrt::"F";.su!:;; 1". &!odulus > np.sOrt::F;.su!:;; 11. cosang > dot / :"&!odulus F &!odulus; 15. return cosang F 36# / 2 / np.pi 1,. 1+. 8..2Devuelve la solucion en la traslacion 87.2v% vy v# 9 vectors del plano del :inect 89.2point 9 punto a cambiar de un sistema de coordenadas al otro ;/.2s-oulderpoint 9 punto del -ombro 41.def solve&coords:pointA shoulderpointA v"A vA vD;E 5". 2vectores unitarios origen 51. vo" > np.arra::1A#A#;; 55. vo > np.arra::#A1A#;; 5+ * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 5,. voD > np.arra::#A#A1;; 5+. 50. " > np.arra::cosangle:v"Avo";Acosangle:v"Avo;Acosangle:v"AvoD;;; 54. > np.arra::cosangle:vAvo";Acosangle:vAvo;Acosangle:vAvoD;;; 5B. D > np.arra::cosangle:vDAvo";Acosangle:vDAvo;Acosangle:vDAvoD;;; ,#. ) > np.arra::"AAD;; ,$. return np.linalg.solve:)ApointJshoulderpoint; ,". ,1. 2%9 %/ < %=cosa < y=cosd < #=cosg ,5. 2y9 y/ < %=cosb < y=cose < #=cos- ,,. 2#9 #/ < %=cosc < y=cosf < #=cosi ,+. ,0. ,4. ,B. 6/.2 esolver la cinematica inversa> actuali#ar la animacion y mandar las ordenes 61.def do&,N:handA handcoords;E 2para mano i#? y para mano derec-a> -and 9 / i#?> -and 9 1 der +". global ser 2 serie +1. 4 > # +5. tryE +,. target.pos > handcoords?#@?#@A handcoords?#@?1@A handcoords?#@?2@ ++. exceptE +0. print ss.e"c&in$o:; +4. +B. if :target." > -orso.siDe."/2. or target." < J-orso.siDe."/2.;P 0#. or :target. > -orso.siDe./2 or target. < J-orso.siDe./2.;P 0$. or :target.D > -orso.siDe.D/2 or target.D < J-orso.siDe.D/2;E 0". 01. if hand >> #E 2 6ano i#?uierda 05. rvector.a"is > target.pos J 0&+houlder&Qoint.pos 0,. rvector.pos > 0&+houlder&Qoint.pos 0+. total&loCer&ar!&length > *oCer&)r!&*ength 00. 2 6irar si el punto esta en el dominio. C es una variable temporal 04. 2 igual a la diferencia enrte la e%tension ma%ima del bra#o y el punto deseado 0B. 9 > :!ag:rvector.a"is;FF2 J 6pper&)r!&*engthFF2 J total&loCer&ar!&lengthFF2;/:2F6pper&)r!&*engthFtotal&loCer&ar!&length; 4#. if 9FF2 <> 1E 2Computar cinematica inversa 4$. 4 > sOrt:1J9FF2; 4". elboC&angle > atan2:4A9; 41. if rvector.a"is." > #E 45. shoulder&angle > J :atan2:rvector.a"is."AsOrt:rvector.a"is.DFF2Irvector.a"is.FF2;;P 4,. Iatan2:total&loCer&ar!&lengthFsin:elboC∠A :6pper&)r!&*engthItotal&loCer&ar!&lengthFcos:elboC∠;;;Ipi/2 4+. elseE 50 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 40. shoulder&angle > :atan2:J rvector.a"is."AsOrt:rvector.a"is.DFF2Irvector.a"is.FF2;;P 44. Jatan2:total&loCer&ar!&lengthFsin:elboC∠A :6pper&)r!&*engthItotal&loCer&ar!&lengthFcos:elboC∠;;;Ipi/2 4B. 2 @ se vuelve A y B se vuelve @ asi ?ue A se vuelve B B#. shoulder&pivot&angle > Jatan2:rvector.a"is.Arvector.a"is.D; B$. B". shoulder&pivot&angle F> 18# / np.pi 2pasamos a grados B1. shoulder&angle F> 18# / np.pi B5. elboC&angle F> 18# / np.pi B,. B+. 24ormamos los mensajes para el bioloid> los <1;6 son debidos a la posicion inicial de los servos B0. 2para ?ue sean el / ?ue nosotros esperamos tenemos ?ue sumarle esa cantidad B4. spa&angle > int:3.5F: :shoulder&pivot&angle I 146; R 36#; ; BB. co!ando&spa > "Rd Rd\n" R :2A int:spa∠; 2 sinta%is comando bioloid 'Cd Cd(n' numDmotor cantidad $##. sa&angle > int:3.5F: :shoulder&angle I 146; R 36#;; $#$. co!ando&sa > "Rd Rd\n" R :4A int:sa∠; $#". e&angle > int:3.5F: :elboC&angle I 146; R 36# ; ; $#1. co!ando&e > "Rd Rd\n" R :6A int:e∠; $#5. $#,. tryE $#+. ser.Crite:co!ando&spa; 2 6andar comando por serie $#0. ser.Crite:co!ando&sa; $#4. ser.Crite:co!ando&e; $#B. exceptE $$#. print :" +erial %ort .ot 9onnected "; $$$. $$". 2 Actuali#ar animacion $$1. $ra!e&1.0ight&)r!&%ivot.+et3alue:shoulder&pivot∠ $$5. $ra!e&1.0ight&+houlder.+et3alue:shoulder∠ $$,. $ra!e&1.0ight&1lboC.+et3alue:elboC∠ $$+. update&-orso:shoulder&pivot&angleA$ra!e&1.*e$t&)r!&%ivot.'et3alue:;Ashoulder&angle AP $$0. $ra!e&1.*e$t&+houlder.'et3alue:;AelboC&angleA$ra!e&1.*e$t&1lboC.'et3alue:;; $$4. target.color > color.orange $$B. elseE $"#. print "4o!ain 1rror" $"$. target.color > color.red $"". 4 > # $"1. 2,l codigo para el bra#o i#?uierdo es casi lo mismo> cambia algun signo y algun pi $"5. elif hand >> 1E 54 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. $",. rvector.a"is > target.pos J *&+houlder&Qoint.pos $"+. rvector.pos > *&+houlder&Qoint.pos $"0. total&loCer&ar!&length > *oCer&)r!&*ength $"4. $"B. 9 > :!ag:rvector.a"is;FF2 J 6pper&)r!&*engthFF2 J total&loCer&ar!&lengthFF2;/:2F6pper&)r!&*engthFtotal&loCer&ar!&length; $1#. if 9FF2 <> 1E $1$. 4 > sOrt:1J9FF2; $1". elboC&angle > atan2:4A9; $11. if rvector.a"is." > #E $15. shoulder&angle > :atan2:rvector.a"is."AsOrt:rvector.a"is.DFF2Irvector.a"is.FF2;;P $1,. Jatan2:total&loCer&ar!&lengthFsin:elboC∠A :6pper&)r!&*engthItotal&loCer&ar!&lengthFcos:elboC∠;;;Ipi/2 $1+. elseE $10. shoulder&angle > J:atan2:J rvector.a"is."AsOrt:rvector.a"is.DFF2Irvector.a"is.FF2;;P $14. Iatan2:total&loCer&ar!&lengthFsin:elboC∠A :6pper&)r!&*engthItotal&loCer&ar!&lengthFcos:elboC∠;;;Ipi/2 $1B. shoulder&pivot&angle > Jatan2:rvector.a"is.Arvector.a"is.D; $5#. $5$. shoulder&pivot&angle F> 18# / np.pi 2pasamos a grados $5". shoulder&angle F> 18# / np.pi $51. elboC&angle F> 18# / np.pi $55. $5,. $5+. spa&angle > int:3.5F::Jshoulder&pivot&angle I 146 ; R 36#; ; $50. co!ando&spa > "Rd Rd\n" R :1A int:spa∠; $54. sa&angle > int:3.5F: :Jshoulder&angle I 146; R 36#;; $5B. co!ando&sa > "Rd Rd\n" R :3A int:sa∠; $,#. e&angle > int:3.5F::JelboC&angle I 146 ; R 36#; ; $,$. co!ando&e > "Rd Rd\n" R :5A int:e∠; $,". $,1. tryE $,5. ser.Crite:co!ando&spa; 2 6andamos comando por serie $,,. ser.Crite:co!ando&sa; $,+. ser.Crite:co!ando&e; $,0. exceptE $,4. print :" +erial %ort .ot 9onnected "; $,B. $+#. $+$. $ra!e&1.*e$t&)r!&%ivot.+et3alue:shoulder&pivot∠ $+". $ra!e&1.*e$t&+houlder.+et3alue:shoulder∠ $+1. $ra!e&1.*e$t&1lboC.+et3alue:elboC∠ $+5. update&-orso:$ra!e&1.0ight&)r!&%ivot.'et3alue:;Ashoulder&pivot&angleA$ra!e&1.0ight &+houlder.'et3alue:;AP 5B * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. $+,. shoulder&angleA$ra!e&1.0ight&1lboC.'et3alue:;AelboC∠ $++. target.color > color.orange $+0. elseE $+4. print "4o!ain 1rror" $+B. target.color > color.red $0#. 4 > # $0$. elseE $0". print "4o!ain 1rror" $01. target.color > color.red $05. 4 > # $0,. 176.def update&-orso:0&shoulder&pivotA*&shoulder&pivotA0&shoulderA*&shoulderA0&elboCA *&elboC;E 2Actuali#ar animacion $00. 2Conectamos bra#o a -ombro $04. 0&6pper&)r!.pos > 0&+houlder&Qoint.pos $0B. *&6pper&)r!.pos > *&+houlder&Qoint.pos $4#. $4$. 0&6pper&)r!.a"is >rotate:vector:#A#A6pper&)r!&*ength;Aangle>:$ra!e&1.0ight&)r!&%iv ot.'et3alue:;/18#.;FpiAP $4". a"is > vector:6pper&)r!&*engthA#A#;; 2 otamos bra#o $41. *&6pper&)r!.a"is >rotate:vector:#A#A6pper&)r!&*ength;Aangle>:$ra!e&1.*e$t&)r!&%ivo t.'et3alue:;/18#.;FpiAP $45. a"is > vector:6pper&)r!&*engthA#A#;; 2 otamos bra#o $4,. $4+. 0&6pper&)r!.a"is > rotate:0&6pper&)r!.a"isAangle>J :$ra!e&1.0ight&+houlder.'et3alue:;/18#.;FpiIpi/2AP $40. a"is > nor!:cross:0&6pper&)r!.a"isAvector:1A#A#;;;; 2otamos bra#o $44. *&6pper&)r!.a"is > rotate:*&6pper&)r!.a"isAangle>:$ra!e&1.*e$t&+houlder.'et3alue:; /18#.;FpiJpi/2AP $4B. a"is > nor!:cross:*&6pper&)r!.a"isAvector:1A#A#;;;; 2otatamos bra#o $B#. $B$. 0&1lboC.pos > 0&+houlder&Qoint.pos I 0&6pper&)r!.a"is 2Conectamos codo $B". *&1lboC.pos > *&+houlder&Qoint.pos I *&6pper&)r!.a"is $B1. $B5. 0&*oCer&)r!.pos > 0&1lboC.pos 2Conectamos antebra#o $B,. 0&*oCer&)r!.a"is > nor!:0&6pper&)r!.a"is;F*oCer&)r!&*ength $B+. $B0. if 0&shoulder <> # E 2+arc-e para ambiguedad de angulo $B4. 0te!p > J1 $BB. elseE "##. 0te!p > 1 "#$. 0&*oCer&)r!.a"is >rotate:0&*oCer&)r!.a"isAangle>I :$ra!e&1.0ight&1lboC.'et3alue:;/18#.;FpiF0te!pAa"is > J nor!:cross:0&*oCer&)r!.a"isAvector:1A#A#;;;; ,# * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. "#". *&*oCer&)r!.pos > *&1lboC.pos "#1. *&*oCer&)r!.a"is > nor!:*&6pper&)r!.a"is;F*oCer&)r!&*ength "#5. if *&shoulder <> # E 2+arc-e para ambiguedad de angulo "#,. *te!p > J1 "#+. elseE "#0. *te!p > 1 "#4. *&*oCer&)r!.a"is > rotate:*&*oCer&)r!.a"isAangle>I :$ra!e&1.*e$t&1lboC.'et3alue:;/18#.;FpiF*te!pAa"is> nor!:cross:*&*oCer&)r!.a"isAve ctor:1A#A#;;;; "#B. 0&/and.pos > 0&*oCer&)r!.pos I nor!:0&*oCer&)r!.a"is;F:/and&0adiusI*oCer&)r!&*ength; 2Conectar mano "$#. *&/and.pos > *&*oCer&)r!.pos I nor!:*&*oCer&)r!.a"is;F:/and&0adiusI*oCer&)r!&*ength; "$$. 010.2 Asociamos eventos a funciones 213.def bind9ontrols:;E "$5. $ra!e&1.9o!!&9onnect.7ind:C".13-&76--(.A serial9onnect; "$,. $ra!e&1.*e$t&)r!&%ivot.7ind:C".13-&+90(**Aon+croll; "$+. $ra!e&1.0ight&)r!&%ivot.7ind:C".13-&+90(**Aon+croll; "$0. $ra!e&1.*e$t&+houlder.7ind:C".13-&+90(**Aon+croll; "$4. $ra!e&1.0ight&+houlder.7ind:C".13-&+90(**Aon+croll; "$B. $ra!e&1.*e$t&1lboC.7ind:C".13-&+90(**Aon+croll; ""#. $ra!e&1.0ight&1lboC.7ind:C".13-&+90(**Aon+croll; ""$. """. 008.2 4uncion para atender eventos 224.def on+croll:event;E "",. Soint&angle > event.'et%osition:; ""+. Soint > event.'et,d:; ""0. update&-orso:$ra!e&1.0ight&)r!&%ivot.'et3alue:;A$ra!e&1.*e$t&)r!&%ivot.'et3alue:;A $ra!e&1.0ight&+houlder.'et3alue:;AP ""4. $ra!e&1.*e$t&+houlder.'et3alue:;A$ra!e&1.0ight&1lboC.'et3alue:;A$ra!e&1.*e$t&1lboC .'et3alue:;; ""B. 08/.2 4uncion para conectar puerto serie 231.def serial9onnect:event;E "1". global ser "11. tryE "15. ser > serial.+erial::int:$ra!e&1.9o!!&%ort.3alue;J1;A576##; "1,. print :" 9onnected to "Istr:ser.portstr;; "1+. exceptE "10. print :" ,nvalid 9o!! %ort "; "14. "1B. "5#. ,$ * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. "5$. 0;0.2Address pattern5 '/joint' 0;8.2!ype tag5 'sifff' 0;;.2s5 Eoint name> c-ec1 out t-e full list of joints beloF. 0;G.2i5 !-e "D of t-e user. 0;6.2f15 B coordinate of joint in interval H/./> 1./I 0;..2f05 A coordinate of joint in interval H/./> 1./I 0;7.2f85 @ coordinate of joint in interval H/./> ../I "5B. ",#. 0G1.2 define a messageJ-andler function for t-e server to call. 0G0.2 'manejador' de los mensajes KSC ?ue lleguen 253.def data&handler:addrA tagsA dataA source;E ",5. 2 Lariables para las coordenadas de las diferentes articulaciones ",,. global rs 2 ig-t s-oulder> -ombro derec-o ",+. global ls 2 Meft s-oulder> -ombro i#?uierdo ",0. global rh 2 ig-t -and> mano derec-a ",4. global lh 2 Meft -and> mano i#?uierda ",B. global rhi 2 ig-t -ip> cadera derec-a "+#. global lhi 2 Meft -ip> cadera i#?uierda "+$. global re 2 ig-t elboF> codo derec-o "+". global le 2 Meft elboF> codo i#?uierdo "+1. global rh&pG 2 cuenta de actuali#aciones de coordenadas de r- 'p1 9 pac1ets' "+5. global lh&pG "+,. global rs&pG "++. global ls&pG "+0. global rhi&pG "+4. global lhi&pG "+B. global re&pG "0#. global le&pG "0$. 2 3estion de mano derec-a... "0". if data?#@ >> "r&hand"E "01. rh&pGI>1 "05. rh > np.arra::data?2@A data?3@A data?4@;; "0,. 2print 'JJJ' "0+. 2print 'received neF osc msg from Cs' C getUrlStr&source) "00. 2print 'Fit- addr 5 Cs' C addr "04. 2print 'typetags 5 Cs' C tags "0B. 2print 't-e actual data is 5Cs' C data "4#. 2print 'JJJ' "4$. if data?#@ >> "l&hand"E "4". lh&pGI>1 "41. lh > np.arra::data?2@A data?3@A data?4@;; "45. elif data?#@ >> "r&shoulder"E "4,. rs&pGI>1 "4+. rs > np.arra::data?2@A data?3@A data?4@;; "40. elif data?#@ >> "l&shoulder"E ," * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. "44. ls&pGI>1 "4B. ls > np.arra::data?2@A data?3@A data?4@;; "B#. elif data?#@ >> "r&hip"E "B$. rhi&pGI>1 "B". rhi > np.arra::data?2@A data?3@A data?4@;; "B1. elif data?#@ >> "l&hip"E "B5. lhi&pGI>1 "B,. lhi > np.arra::data?2@A data?3@A data?4@;; "B+. elif data?#@ >> "r&elboC"E "B0. re&pGI>1 "B4. re > np.arra::data?2@A data?3@A data?4@;; "BB. elif data?#@ >> "l&elboC"E 1##. le&pGI>1 1#$. le > np.arra::data?2@A data?3@A data?4@;; 1#". 1#1. 8/;.2 !ransformacion de coordenadas de un sistema a otro 3#5.def coords-rans$or!:no!brethreadA du!!var;E 1#+. global rs 1#0. global rh 1#4. global lh 1#B. global ls 1$#. global rhi 1$$. global lhi 1$". global re 1$1. global le 1$5. global rh&pG 1$,. global lh&pG 1$+. global rs&pG 1$0. global ls&pG 1$4. global rhi&pG 1$B. global lhi&pG 1"#. global re&pG 1"$. global le&pG 1"". 1"1. starttracGing > 5alse 1"5. 2 bucle de actuali#acion de coordenadas tratadas 1",. while 1E 1"+. 1"0. if starttracGing >> 5alse and rh&pG > # and lh&pG > # and rs&pG > # and ls&pG > # and rhi&pG > #and lhi&pG > # and re&pG > # and le&pG > #E 1"4. starttracGing > -rue 1"B. elif starttracGing >> -rueE 11#. 2 nos copiamos las coordenadas 11$. hi > ls 11". hd > rs ,1 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 111. ci > lhi 115. cd > rhi 11,. !i > lh 11+. !d > rh 110. 114. 2 creamos los vectores iniciales del eje de coordenadas 11B. e1 > np.arra::1A#A#;; 15#. e2 > np.arra::#A1A#;; 15$. e3 > np.arra::#A#A1;; 15". 151. 2 sacamos los 8 vectores del nuevo eje de coordenadas 155. 2 el primer vector es directo> eje B 15,. v1 > hiJhd 15+. vte!p > hi J ci 150. v1nor!al > v1 / !odulus&vector:v1; 154. vte!pnor! > vte!p / !odulus&vector:vte!p; 15B. c& > ci I :$loat:np.dot:vte!pAv1;; / $loat:np.dot:v1Av1;;; F v1 1,#. 2 cD es el punto del codo en proyeccion a la paralela del eje B a la misma distancia 1,$. 2 de el eje B a la ?ue estaba el punto del codo original ¶ formar el eje A) 1,". v2 > hi J c& 1,1. 2 el eje @ se saca con la normal 1,5. v3 > np.cross:v1Av2; 1,,. 1,+. 1,0. 2 normali#o los vectores 1,4. v1 > v1 / !odulus&vector:v1; 1,B. v2 > v2 / !odulus&vector:v2; 1+#. v3 > v3 / !odulus&vector:v3; 1+$. 1+". 2 saco los cosenos para la matri# a resolver 1+1. a > cosangle:e1Av1; 1+5. b > cosangle:e2Av1; 1+,. c > cosangle:e3Av1; 1++. d > cosangle:e1Av2; 1+0. e > cosangle:e2Av2; 1+4. $ > cosangle:e3Av2; 1+B. g > cosangle:e1Av3; 10#. h > cosangle:e2Av3; 10$. i > cosangle:e3Av3; 10". 101. 2 creo la matri# 105. " > np.arra::aAdAg;; 10,. > np.arra::bAeAh;; 10+. D > np.arra::cA$Ai;; 100. ) > np.arra::"AAD;; ,5 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 104. 10B. 2esuelvo el sistema para los diferentes puntos ?ue pasar al nuevo eje de coordenadas 14#. tryE 14$. sol!i > np.linalg.solve:)A!iJhi; 2 solucion mano i#?uierda 14". sol!d > np.linalg.solve:)A!dJhi; 2 solucion mano derec-a 141. solcodoiDO > np.linalg.solve:)AleJhi; 2 solucion codo i#?uierdo 145. solcododer > np.linalg.solve:)AreJhi; 2 solucion codo derec-o 14,. solhd > np.linalg.solve:)AhdJhi; 2 solucion -ombro derec-o 14+. except np.linalg.*in)lg1rrorE 140. print "*in)lg1rrorH +ingular !atri"A cant co!pute" 144. 14B. 1B#. 2 !oca escalar los puntos a las coordenadas del sistema de la simulacion 1B$. 1B". 2 Sacamos las distancias del bra#o y antebra#o para ambos sistemas> 1inect y bioloid 1B1. d&braDo > dist:np.arra::#A#A#;;AsolcodoiDO; 1B5. d&antebraDo > dist:solcodoiDOAsol!i; 1B,. d&bioloid&braDo > #.#K 1B+. d&bioloid&antebraDo > #.#43 1B0. d&todo&Ginect > d&braDo I d&antebraDo 1B4. d&todo&bioloid > d&bioloid&braDo I d&bioloid&antebraDo 1BB. 5##. 5#$. 2 ,scalamos el punto 5#". 2 +artiendo de codo i#?uierdo> con lo cual / / /> faltaria restar para el otro codo el -ombro 5#1. v&hi&a&ci > :solcodoiDO / !odulus&vector:solcodoiDO; ; F d&bioloid&braDo 5#5. v&ci&a&!i > :sol!i J solcodoiDO; 5#,. v&ci&a&!i > :v&ci&a&!i /!odulus&vector:v&ci&a&!i; ; F d&bioloid&antebraDo 5#+. 2 !rasladamos teniendo en cuenta el centro del sistema de coordenadas &lo del < &/./...) ) 5#0. punto!anoiDO.pos > v&hi&a&ci I v&ci&a&!i I :#.#5A #.#5A #.#25; 5#4. 5#B. 2 Derec-a 5$#. v&hd&a&cd > :solcododer J solhd; 5$$. v&hd&a&cd > :v&hd&a&cd / !odulus&vector:v&hd&a&cd; ; F d&bioloid&braDo 5$". v&cd&a&!d > :sol!d J solcododer; 5$1. v&cd&a&!d > :v&cd&a&!d /!odulus&vector:v&cd&a&!d; ; F d&bioloid&antebraDo 5$5. punto!anoder.pos > v&hd&a&cd I v&cd&a&!d I :J#.#5A #.#5A #.#25; 5$,. 5$+. 2 Calcular cinematicas inversas para cada mano 5$0. do&,N:#A punto!anoiDO.pos; 5$4. do&,N:1A punto!anoder.pos; 5$B. 5"#. ,, * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. ;01.2 6ain de la aplicacion> parcialmente generado por F%+yt-on ;00.222222222222222222222222 ;08.2 Start t-e F% application -andler ;0;.222222222222222222222222 425.if &&na!e&& >> "&&!ain&&"E 5"+. 2 "niciar 3U" 5"0. app > C".%+i!ple)pp:#; 5"4. C".,nit)ll,!age/andlers:; 5"B. $ra!e&1 > 25ra!e:.oneA J1A ""; 51#. bind9ontrols:; 51$. 51". 2 Creamos variables globales ¬adas en dataD-andler) 511. rh&pG > # 515. lh&pG > # 51,. rs&pG > # 51+. ls&pG > # 510. rhi&pG > # 514. lhi&pG > # 51B. re&pG > # 55#. le&pG > # 55$. 55". rs > np.arra::#.#A #.#A #.#;; 551. rh > np.arra::#.#A #.#A #.#;; 555. lh > np.arra::#.#A #.#A #.#;; 55,. ls > np.arra::#.#A #.#A #.#;; 55+. rhi > np.arra::#.#A #.#A #.#;; 550. lhi > np.arra::#.#A #.#A #.#;; 554. re > np.arra::#.#A #.#A #.#;; 55B. le > np.arra::#.#A #.#A #.#;; 5,#. 5,$. 2 %y# vectores 5,". v" > np.arra::#.#A #.#A #.#;; 5,1. v > np.arra::#.#A #.#A #.#;; 5,5. vD > np.arra::#.#A #.#A #.#;; 5,,. 5,+. 5,0. 2 "niciamos el recolector de los mensajes KSC 5,4. init(+9+erver:T127.#.#.1TA 711#; 5,B. set(+9/andler:"/Soint"A data&handler; 2 anyadimos nuestra funcion como data -andler 5+#. print "(+9 recolector inicialiDado" 5+$. du!!var > # 5+". tryE 5+1. thread.start&neC&thread:coords-rans$or!A :"coords-rans$or! -hread"A du!!var;; 5+5. exceptE 5+,. print ss.e"c&in$o:; ,+ * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 5++. 5+0. print "9oords-rans$or! thread iniciado" 5+4. 2 +untos reales pintados en blanco 5+B. punto!anoiDO > points:pos>:#.1A #.1A #.1;A siDe > 4#A color>color.Chite; 50#. punto!anoder > points:pos>:J#.1A #.1A #.1;A siDe > 4#A color>color.Chite; 50$. ball > sphere:pos>*&+houlder&Qoint.posA radius>6pper&)r!&*engthI*oCer&)r!&*engthA opacit>#.1; 50". ball > sphere:pos>0&+houlder&Qoint.posA radius>6pper&)r!&*engthI*oCer&)r!&*engthA opacit>#.1; 501. 505. 2 Acabar de iniciar 3U" 50,. app.+et-opMindoC:$ra!e&1; 50+. $ra!e&1.+hoC:; 500. app.2ain*oop:; 504. 50B. 2 !erminar bien t-read 54#. tryE 54$. thread.Soin:; 54". exceptE 541. print ss.e"c&in$o:; 12.4 *ne1o cdigo declaracin estructura simulacin "ioloid from visual import F $. 0. 2 +arametros !orso 1. 4. 9 > # 5. 4 > # 6. drag > 5alse 7. 6pper&)r!&*ength > .#K 8. *oCer&)r!&*ength > .#43 K. /and&0adius > #.#275 1#.shoulder&pivot&angle > # 11.shoulder&angle > # 12.elboC&angle > # 13.ar!&radius > #.#2 $5. 15.torso&" > .1 16.torso& > .2 17.torso&D > .1 $4. ,0 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. 19.2 Crear graficos del torso 2#.-orso > bo":siDe > :torso&"Atorso&Atorso&D;Acolor > color.green; 21.0&+houlder&Qoint > sphere:pos > :-orso.siDe."/2A-orso.siDe./4A-orso.siDe.D/4;Arad ius > #.#3Acolor >color.red; 22.*&+houlder&Qoint > sphere:pos > :J -orso.siDe."/2A-orso.siDe./4A-orso.siDe.D/4;Aradius > #.#3Acolor >color.red; 23.0&6pper&)r! > clinder:pos > 0&+houlder&Qoint.posAa"is > :6pper&)r!&*engthA#A#;Ara dius >ar!&radiusAcolor > color.blue; 24.*&6pper&)r! > clinder:pos > *&+houlder&Qoint.posAa"is > :J 6pper&)r!&*engthA#A#;Aradius >ar!&radiusAcolor > color.blue; 25.0&1lboC > sphere:pos > 0&6pper&)r!.pos I 0&6pper&)r!.a"isAradius > ar!&radiusAcolor > color.red; 26.*&1lboC > sphere:pos > *&6pper&)r!.pos I *&6pper&)r!.a"isAradius > ar!&radiusAcolor > color.red; 27.0&*oCer&)r! > clinder:pos > 0&1lboC.posAa"is > :*oCer&)r!&*engthA#A#;Aradius > ar !&radiusAcolor >color.blue; 28.*&*oCer&)r! > clinder:pos > *&1lboC.posAa"is > :J*oCer&)r!&*engthA#A#;Aradius > a r!&radiusAcolor >color.blue; 2K.0&/and > sphere:pos > 0&1lboC.posI0&*oCer&)r!.a"isAradius > /and&0adiusAcolor > co lor.redA!aGe&trail>-rueA interval>1#A retain>1#; 3#.0&/and.trail&obSect.color > color.orange 31.*&/and > sphere:pos > *&1lboC.posI*&*oCer&)r!.a"isAradius > /and&0adiusAcolor > co lor.redA!aGe&trail>-rueA interval>1#A retain>1#; 32.*&/and.trail&obSect.color > color.orange 11. 8;.2 Crear esfera y vector para el error 35.rvector > arroC:pos > :#A#A#;Acolor>color.orangeA a"is>:#A#A#.2;; 36.target > sphere:pos > rvector.posAcolor > color.orangeAradius > #.#2; 12./ *ne1o cdigo declaracin del 8U5 2N/usr/bin/env pyt-on 1. 2 JOJ coding5 isoJ77G9J1G JOJ 0. 2 generated by F%3lade /.6.8 1. 4. import C" G. 2 begin F%3lade5 e%tracode 6. 2 end F%3lade 0. 4. B. 1#.class 25ra!e:C".5ra!e;E $$. def &&init&&:sel$A FargsA FFGCds;E ,4 * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. $". 2 begin F%3lade5 6y4rame.DDinitDD $1. $5. GCds?"stle"@ > C".415)6*-&50)21&+-U*1 $,. C".5ra!e.&&init&&:sel$A FargsA FFGCds; $+. sel$.9o!!&%ort > C".+pin9trl:sel$A J1A "4"A !in>#A !a">1##; $0. sel$.9o!!&9onnect > C".7utton:sel$A J1A "9onnect"; $4. sel$.*e$t&)r!&%ivot > C".+lider:sel$A 13A #A J 14#A 14#A stle>C".+*&/(0,V(.-)*WC".+*&*)71*+; $B. sel$.0ight&)r!&%ivot > C".+lider:sel$A 1#A #A J 14#A 14#A stle>C".+*&/(0,V(.-)*WC".+*&*)71*+; "#. sel$.label&1 > C".+tatic-e"t:sel$A J1A "+liders"; "$. sel$.*e$t&+houlder > C".+lider:sel$A 14A #A J2#A 12#A stle>C".+*&/(0,V(.-)*W C".+*&*)71*+; "". sel$.0ight&+houlder > C".+lider:sel$A 11A #A J2#A 12#A stle>C".+*&/(0,V(.-)*W C".+*&*)71*+; "1. sel$.label&2 > C".+tatic-e"t:sel$A J1A "+liders"; "5. sel$.*e$t&1lboC > C".+lider:sel$A 15A #A J2#A 1##A stle>C".+*&/(0,V(.-)*W C".+*&*)71*+; ",. sel$.0ight&1lboC > C".+lider:sel$A 12A#A J2#A 1##A stle>C".+*&/(0,V(.-)*W C".+*&*)71*+; "+. "0. sel$.&&set&properties:; "4. sel$.&&do&laout:; "B. 2 end F%3lade 1#. 1$. def &&set&properties:sel$;E 1". 2 begin F%3lade5 6y4rame.DDsetDproperties 11. sel$.+et-itle:"7ioloid )r!s"; 15. 2 end F%3lade 1,. 1+. def &&do&laout:sel$;E 10. 2 begin F%3lade5 6y4rame.DDdoDlayout 14. grid&siDer&1 > C".'rid+iDer:3A 3A 1A 3; 1B. siDer&2 > C".7o"+iDer:C"./(0,V(.-)*; 5#. siDer&2.)dd:sel$.9o!!&%ortA #A #A #; 5$. siDer&2.)dd:sel$.9o!!&9onnectA #A #A #; 5". grid&siDer&1.)dd:siDer&2A 1A C".1L%).4A #; 51. grid&siDer&1.)dd:sel$.*e$t&)r!&%ivotA #A C".1L%).4A #; 55. grid&siDer&1.)dd:sel$.0ight&)r!&%ivotA #A C".1L%).4A #; 5,. grid&siDer&1.)dd:sel$.label&1A #A C".)*,'.&91.-10&/(0,V(.-)*A #; 5+. grid&siDer&1.)dd:sel$.*e$t&+houlderA #A C".1L%).4A #; 50. grid&siDer&1.)dd:sel$.0ight&+houlderA #A C".1L%).4A #; 54. grid&siDer&1.)dd:sel$.label&2A #A C".)*,'.&91.-10&/(0,V(.-)*A #; 5B. grid&siDer&1.)dd:sel$.*e$t&1lboCA #A C".1L%).4A #; ,#. grid&siDer&1.)dd:sel$.0ight&1lboCA #A C".1L%).4A #; ,$. sel$.+et+iDer:grid&siDer&1; ,". grid&siDer&1.5it:sel$; ,B * +# %uiado gestua& de un ro'ot (umanoide mediante un sensor )inect. ,1. sel$.*aout:; ,5. 2 end F%3lade ,,. ,+. ,0. G7.2 end of class 6y4rame +# * +#