From 95dcbaf3e444e136cb739e4db6c8ec7fc6c05d2d Mon Sep 17 00:00:00 2001 From: James Devine Date: Wed, 18 Jul 2018 18:57:45 +0200 Subject: [PATCH] Clearing out the computer before it gets wiped. --- .../Send_Skeleton.pde | 266 ++++++++++++++++++ .../skelsend.pde~ | 262 +++++++++++++++++ the_baxter_mimic/baxter instructions.odt | Bin 0 -> 49110 bytes the_baxter_mimic/baxter_mimic_client.sh | 191 +++++++++++++ the_baxter_mimic/baxter_mimic_client.sh~ | 188 +++++++++++++ the_baxter_mimic/baxter_mimic_server.sh | 185 ++++++++++++ the_baxter_mimic/baxter_talk_client.sh | 199 +++++++++++++ the_baxter_mimic/baxter_talk_client.sh~ | 198 +++++++++++++ the_baxter_mimic/baxter_talk_server.sh | 192 +++++++++++++ the_baxter_mimic/baxter_talk_server.sh~ | 191 +++++++++++++ the_baxter_mimic/brazos/arm_server.py | 127 +++++++++ the_baxter_mimic/camara/deliver_speech.py | 20 ++ the_baxter_mimic/camara/face_client | 20 ++ the_baxter_mimic/camara/face_server.py | 72 +++++ the_baxter_mimic/speech.txt | 10 + 15 files changed, 2121 insertions(+) create mode 100644 the_baxter_mimic/Processing2.2.1_Sketch_Send_Skeleton/Send_Skeleton.pde create mode 100644 the_baxter_mimic/Processing2.2.1_Sketch_Send_Skeleton/skelsend.pde~ create mode 100644 the_baxter_mimic/baxter instructions.odt create mode 100644 the_baxter_mimic/baxter_mimic_client.sh create mode 100644 the_baxter_mimic/baxter_mimic_client.sh~ create mode 100644 the_baxter_mimic/baxter_mimic_server.sh create mode 100644 the_baxter_mimic/baxter_talk_client.sh create mode 100644 the_baxter_mimic/baxter_talk_client.sh~ create mode 100644 the_baxter_mimic/baxter_talk_server.sh create mode 100644 the_baxter_mimic/baxter_talk_server.sh~ create mode 100644 the_baxter_mimic/brazos/arm_server.py create mode 100644 the_baxter_mimic/camara/deliver_speech.py create mode 100644 the_baxter_mimic/camara/face_client create mode 100644 the_baxter_mimic/camara/face_server.py create mode 100644 the_baxter_mimic/speech.txt diff --git a/the_baxter_mimic/Processing2.2.1_Sketch_Send_Skeleton/Send_Skeleton.pde b/the_baxter_mimic/Processing2.2.1_Sketch_Send_Skeleton/Send_Skeleton.pde new file mode 100644 index 0000000..a97efc3 --- /dev/null +++ b/the_baxter_mimic/Processing2.2.1_Sketch_Send_Skeleton/Send_Skeleton.pde @@ -0,0 +1,266 @@ +/* -------------------------------------------------------------------------- + * Baxter arm position sender for Kinect V1 + * Modified from SimpleOpenNI User Test + * To run, send the output to the ROS listening port, e.g. + * ./processing > /dev/udp/localhost/15444 + * -------------------------------------------------------------------------- + * Processing Wrapper for the OpenNI/Kinect 2 library + * http://code.google.com/p/simple-openni + * -------------------------------------------------------------------------- + * Modified by J. Devine and Daniel Gonzalez Castro + * Original prog: Max Rheiner / Interaction Design / Zhdk / http://iad.zhdk.ch/ + * date: 12/12/2012 (m/d/y) + * ---------------------------------------------------------------------------- + */ + +import SimpleOpenNI.*; + +//import processing.net.*;//network lib + +//Client c; //comms output +String SendToServer; +SimpleOpenNI context; +color[] userClr = new color[]{ color(255,0,0), + color(0,255,0), + color(0,0,255), + color(255,255,0), + color(255,0,255), + color(0,255,255) + }; +PVector com = new PVector(); +PVector com2d = new PVector(); +PVector v1 = new PVector(); +PVector v2d = new PVector(); +float dontcare; +float Lhandx,Lhandy,Rhandx,Rhandy; +float Lelbowx,Lelbowy,Relbowx,Relbowy; +float Lshoulderx,Lshouldery,Rshoulderx,Rshouldery; +float Langle,Rangle,L2angle,R2angle; + +void setup() +{ + size(640,480); + + context = new SimpleOpenNI(this); + if(context.isInit() == false) + { + //println("Can't init SimpleOpenNI, maybe the camera is not connected!"); + exit(); + return; + } + + // enable depthMap generation + context.enableDepth(); + + // enable skeleton generation for all joints + context.enableUser(); + + background(200,0,0); + + stroke(0,0,255); + strokeWeight(3); + smooth(); +} + +void draw() +{ + // update the cam + context.update(); + + // draw depthImageMap + //image(context.depthImage(),0,0); + image(context.userImage(),0,0); + + // draw the skeleton if it's available + int[] userList = context.getUsers(); + for(int i=0;i%-q&y1Wi!O#9;$rWRC+te0Goh%u0LHQ`Ok`VBxaNG3+(aSPa}Ur_&i8N21@vdLleCXr~k-rJq=! zKGi%5M1K`jA_b&fDX8xyB5y>=ekd1mD~1Wkx=>QzibXw&kONZAV>6Pe1$dx`eQBLrtVodvq~`38X<9TC;wC4Y4LAx+o!!i}e3E!hyvhyX+2hviIlf zATc@KBs=q#{B(<5C^+u}Q3fz~5GtQdFg)Ju(s}>hNf-$(Gfg@LGOO-^r#i=gcnV>) zZ_a^)7gCnt!ii%DxtPRkxdV|7O-gb32S3CloiaWrLBUB)`lPa?9IE+yf0phf|8GxQ zYk>p7V_|g=D84c>Q;Sc3%iE|J*;106GAxQGNW~U|GuX0oaB*ht6h%~Mz)R=!d;Tt^ zS?7~vNfI(rH=dU|iq19VsN4mP$Cs4B$atB!Z-_HHKH0OU$ z4XpO5sBL;34<^!e=jG=1c$)Ew>iDvaPNz272n**qrme@m&A(lcK)T21=bt;&@c194 zK4kH;Hg~zrkvQ~x$+;};jI}*)_qaRzl5J_(zpdVWAI5DHFq)F*2Rvq|onGA7;QVuL zE%E~0L!>O9lYTh-r3;2-fGWGZp(McXS?)5r93MaS{Qegd_t9BO*1c}ds$&^!6dDt= z=shZGgc)VnAiDG0-y3e=H?jSTna+Es@=ZrZB!SG}H%ncLRfy|AbXy0{T6dm&r4 ztiW(SJ4d}eOmLWWaiP03C)j~r;`MgZ=j@6N_+rfP%nxPh^JgDXtdkHXAR&bdRc@mO zA*MtR{p9U_DYZ2=SwzDLBp(ZpDbw$fgoAK+esK@G)7>4=zvenxS-IXedy_d3ja+9& zBE&TXj~KfO@DTPTjy8G}2{~2+Oxz99)X!$YYm*MeDwt390;-cmaQ~h=rBJw`ksl2L zvfWb6G8U6xLyi>BzlR7E2N>5oymV$sgFN%bv^N8>hG2=qOrr2eq@bcI4OLLdfV9Ac zF0L++JoQsd3FZ3xgF`l*WKlglh`EYd9$;cN1WX(3QC&G;m*gb4gWl_26ul(uTs zX534nJW(&-%aH(9(vW`KnP&S^G>&^Et_>GZq~c@gYv^EPNdDNFJ(*Zw>K!Q@_#2G@ zncdy(hKi5yuB2SOl#uCay-r|lYgO!2LMpHm?b`lT$eBz0vmR-9l!=G)bK%g(*xiw! zsh>pXHRtzbDNz;sEFP^89c;y2(fJyFYwpFzVcbhJN z5^?jW#;&2}CqLj#+|H#w1IC1O#4@6^)U128H*4GwyEgVO2+bo@t&`6d1ojCtRm9@) zfvY_ZU#pneLaQN6r4Sm_yjG_m3?-tcS{tpX8_+jdq%@Es0#b;8v?t_SGLLMSC^%H5 zU+At8!$p9gcD(;SSSFKZcUPC8@@dOT2@5SIaGF_eDx1FM2`4axBcnNdEMr&^$lSRU z>Id|1YEFF8IJkGM6MvNe(Z$wWd@u6{mw1vh{CGpxpLCssDe$)fa9ucTiA1()0>*HaMj+{u)_a#gjo!XgW*9*$uEi~D< z(fxGwLo%b z@cAzA6W#amvip4;xp22~QwN75Zz@KgOKw@#HT^kyS>Ii4{d(Oe!03Hnijpqy6{!$3 zy6bs)_HZHW_WLg!l6@K>pNE&TrMvV+#^3`Y9L3adRI?RWvW~&`$DxhD)A;BlRRuO= z&c0qxUzi$yi|;p;f%k3Mq35BNA#x>-x!vA3YV(#w;5UT8@8NK6yuWQwn*ZQ=i8~LE z(SWFSq`R{5<6>qaC^tLp8&*8ZIqh8+;d*)*HQ#KEqAVR0DJ|W)s(Ma=tlFB|{4|j} z{ChHWiW0^`6JZFNZzu-dKqoKLjJ0c_8sp<+_%$> zSSX{M)@kLHQKf*?z)8-^VzWKB3H&+EPk1RX6vP@FjaWCE%?tT-J zmO<-*044-xH;Plec)$Vgu6YMFPGt$!c{U!|<;%DQ{}Wxf0#V@gl9s|M6F$4`cF+k~ zc3a@%sXWL%(CjZ^<9(q`eb38Dm>lH4re7wdKW%pS{Y+UOETyVHX>*+Qt7k# z)mGQc^Jkyrj;{hxwKD$wQA&tL({RgnN&$E?@qXRVN+{E$i6VxL(G zzSqV5$XR=Sc~fdb!{hLzp}g_;;5^x4E-weMT+7SWnrm6fYOXOnm=lfSW5cWkq-y$e z8CFS>OTx$KytIVLzq18@m$-p0dy|`wUqQ!(MS312{e%o^j1f$z-C;e#kQ9a{q_0a? zLXkU)l>b>GAW@ba3AK3*PLM;2s~Su!!MDthKTGnx`~fJ6c#`3L*b-`umh9wBZNd8q zHcCZ3+Q{3wt)?h=c%glNrpRH)xDC}T1Yl0{6Gi06o(xycl|2%()s~jcp=YvCAznV_ zQb(6KR|g@CP>x3r*85L{L%%2hqgJ9XVgk_j^QFP@>gIQS`P*{3)2m<4b7BA!hQb); z{$$r;{B=IX;SKRoZm(bbTo$^H6})0hnKJQ!&~4}Ly{NIt>iacPSh9~2@8I(jtD-0O zTuoD5q8~2g95!>&Iz2OhGus4{E3a|vOzLNIKhQYcz9 zec9!Is!fF7B>>oB@;@t#oLb#yRHILR~ zUtgk@wBjRSaXI_YTXnH=r4&VE&@PJpAZ8v+Uq-AeM8|dEX=T~HhFBnU{ z`-zx|^#$!)M-BV6H5-Oz5zPB}6ar$T%*D+kSxYDDwOWx^e#ZoUpU!HF5J15IEUzN7 z;;u^z{x76>HUj?(RKkm$-L>`f8)SY3Ek2_F8xmY7PIed0rg#6qb*)?#VvFKiqv$P} z_U=bc5tX=uK1VmrG(>EIlztEQ*3vGdOz^OoI!WZqtbCB%R7RK#Sl{oW4y3>vFgHQH ze$gvtEsX$9KNJ&>^W#Qlz=y?OQbHy3=Kr$n9?GFTf+R_DJO{k*GZzAsQwIO{%UwN9 zeS8C$pH&4vkSR52zjXUz(Ocx&sesARzTXfGKL8+Xp9z@cATfe;fKz@C3_E(bUx-r( zJiY9s+}uo(RcpH=L(VAyIDDB>P;B7{X0lE%qnpoxIvp&PhZ2KO69()vb)oB_S!&xv z!S@f`wxB@()1AtFG$og;bQ^NInU|2Ywe7##fsi7~@jtm$i%}wIbIFwB5L&<8-k-kjErZM2ozzNb z6*afc8BR}=HA`l4W2&SwFaFK#rEX@9p`r1wDFOU#?>!O7*L2Mz4YA8e1#{YeL8BMd zBFW#IkmwpGJ@nn;4zwIu>S^df=2&>y`cL7Dv<6E0iFxr^RHkG(f1!JdJ82mG^$IL= z7F9ob2HZWQO1De8+$nL~C(|{58h{JURH*byezyF51D8 z^_o?y^NIa^Me&AAIPGGlmZq)wRyA8m9BdIH=7RbN4= zi}ky5+6umk%q^bx8xa$-ySTYkHw+qmv1Q8i(a&EKDBdA2cMBv;0ehtwKecs(jl7;# zZchBMd*rxQ*SjQ+1Igv+Q?)Oth7q}18JIZsmX=uE-a9J0TzpQshHxPob%rq$CTwBC z1C5dE<#hVx_}tDX&R!~W9zW;NNh^7}nHl;}Qo8h&kLsMoC3T3Wy>DWjs%sk3GpWH2 z4BeV76*9 zJCGcc5rikX-`1-@HNdwc!u^8( zhN42`q|W~uiqeZV>};6V4C4yKuO#;&j$f+`LzpsE8{p8nCj)@RDYAod5r*s%u{+m4 zA@ko|*xb($1s*LbS!Han^cXj4F_G2aDb1NJO^g_7TCiq5bsY#J)~G^^ixVSdt$?YgStbwJ7aUl{ z2@ZJu?Ju>eO&n}Qj@}AdN&OwPh$9dnLdM3Eib%qYAM*pi#{!NS^S?GUejDpt3O4L= zb8t<-I|>^!W&R#kwh)eM;|*D|-p@~#4lHDKdBYb6b-*E_aKj`ziD>A2PnbB!$Hjbz zeI#yY*KK3kUtf)cu9Xf%hJ9Fzmj_&T8z3gveYV-PWU(5&ZT(txTLf76VeO&C6vVus#K$!HYFZ zpUcn7lhfo4>-(7MW6C;5Ij!gWehc{-Sul~%k8c!i9pOjsO402Q%Ch0+(J}bhZ;wYg z&;|O)4|vXW@I7}ax35!G?P3lZ5%^C2l|~kI(*t~+DT=OmQDa|TP|NS={_`j}_A&Tv z!n}{K35&%fjh_+I2%b^t6oiOYVbAi>b6sc$p2!tYJ1YdiFIr>;Mb_ops0a`feOpsT~HBDQ%e5l|*E*KGASP~Z~8gr7g zz}$>Jc`cw-lrQGd`>(zyX(Q-|zrd#Lb|-t+l&t)L4#A;wGe{{WuJD>(;U>ly55ZFI z%1T~J%6K(wW>OkH6jZU2Eu%lcAX7mvYib`c+_`DwsJ22~!K%VRP^vbq(6s&Vlo&#b zo&l4ottqRFc>GT7`zf1xL7}v}j-UkL?P3u`o@GH%(4lEaki0|_D-2gYeZsic^9c~$ ze1DqfO`9F{y|=l`tlGNUS1f=DRl-t3I0Z;W+x=SnWoLERZ7-z%6Q`k(_I;WDE3VOJ zrQ^d^#UyBpyEjIgy@FY*=z1gb`*FDYJ0zf)i*E$CVoMI3j5;vZl$k<#2L|7fpskxB z?;!TAa`qlmKmUZUlea#g3XjxIK6eIk- zxQfaLV6owj`CYvVh`iVP-dqaAG$&0B_IzwRh>}z0jR2zS{eCWY+qwLbG6Y2P~`$6d37r}ji!u#;+1rd z5eQ-*ZXo)-73)%4H+Qkyt*g?W6@E|%yie>JG-JeMO)F1_EB~9In^!M)3*z5k(h^ zT#>uH4-lM;%L9?VY`0&hq^?YM3_?uM9S~wNu%w@3ldj~d=%=ABk0@GRt4k?H6$K7k z256I2sllUb^L#svcDS*0NYBz$-KBw{VZtlrmhUCCC)GT#ZO9NGK!WLPbeLDTR^&D!pS$rRwa6JYDD8pgdPthKmr z)|9W~@84HZeu_qbtjO-1e%QPsv}_QRLDl-UFJ!@==m-j2#LL$BzGT= zJ{_!>59dQeLjy||x5qm(b%8ma@5&$!Mp;EAQ>nTX37^{T=qaz%t#-Fa)ILXbQ(*C1 z*)Z`fSC@`&79!|WW~*2CGr|~#2R>aG9Qst;M5yzIHJM%NoHH*N8glure*4Ytgptjh zw$H|dNOGwPIhKQ$8k)hij*9we>F+jbqprA>R@b~aXB%EV-wk_O=VE*sZ> z4$g%WY(r^>8OC$F?vU-z0&^}GC{yilG|x##o9>3n`G8G#pfpmYYodo)v}%L=0Jur> zX2S@n(z|GFZeV5Wd~|z-&h~sbWcBv>v`0-*A&ogYM3Rt#&&RN@SNcJE32g7^F#;MAI}3 zM$s@QZHYsxG*DR#IB;lfM1*Ksg}lDbr@Qa&HP@tL(RmSVi(%52;fZ8i^B#|}(Le#i zcI@A435FNj4XYwkec=&XYD|Uyf|ro38F{z^xoAgisg<{B1``i1y9+Nmkrf`X+32W+BM4p(*J8VwMClYV0t9Ap zrosp^mi&4Rq9bq+xO%#guE~l`a%IW(wOpNipXbw8ncU_SURYwHl!sR5M1hW0mIxHx z8E69>p;Q9UZ{$}eOSz+tS8@ne9>U90>m`=8uWQUAww!ozTH!90TQmJnpc&G>V+4=O z*Nkg0%h^3w04fPlrWpo?NIdT+&d%H7BSQ~TEW{)=^}8%FW?Wh-fMHs;ta&};v%T-@ z+adK8-*Hb_OHc3X!lpP{syq=lw`ZmGzVM=}D;h(ebuGK)@6*hwfvYwxM00!DD7S#y zb-cm1zSvkAsLm#XKAzLMD@!x%;h_seH5tA_cMdv#c1C{oZsTv`(Zvjh{O*;V4Oo2Q zJT+HdA|SKg_mHQqDXOWd%Q^q&V>lQc(bw+6n=tEVFPt9=<)OXrqf-<8=G+#G;Ga}V zYd}-o#pmw>B2(hVKd-~HV_2GdSCQ2)JsfNU-(#})ZTp5d>z=Oa5EGjHx5X{Z-!wd$ zrD6$k;o9rkXp|uh@}0G|UnKbMyScf(jh$wtA+pgSCqAK{w-JrJ&ofB<@1J(w+-_Ip zy=j0_yor-_?J)tIma$U1aHgyzdhgoWx*csftE;)vH67)Bf~63I!tn$Jri0 zCY?c#jk`yl1O-mQn5wO@%znL(I`}ntxD@sjf`Y>Tv$Nd5|J_T}r2Z*wH{iE-o~Oic zB{`o?reRyzij~LMNFd6}+Io`e8YBZw5R;vCoWDHu;Al3k&5%)Xb$N0$m^heh5UIOX z#$u)UoU@W8BbJqJQ(e5wSIv)SN;F(*3Ugaq78kc?6tfEAgMG8sR6>O%!`Qrg)qWA6 z#*xz5)Aj(7K4p@l-^9rq41^<#5H(yB3764S>DpD=2~Vcv;itnH`ts^<$1poP&0v6+ zX;V#Ya|e<@+Q3KT4&ZdM(tK5$*(PqESjWL<= zlrnqa_(mB5sAALX($*e`f&6aNq6%NKfAoZdC?H)z`tqX1v`tb9e3|xVyA_p;9ZPpI;Q>)`87t~c>ljiwZ0aEw03IJD+^hR@sIst^ zn3)pd&p`|QPk-k3E1&Bn4yL`GO}8DI#>>^(z7A-TDI0}!D!&5%<3i5UW7?|wwsL|O z7)g6u+f=8r(x%5%FbqeROS#B9UwP?m=PCZ(zp}0ucTgS!8K@riHrJpRoQn%~n4Bb~ zP$NX%C(Xuo$QuDgU(db0y1XCb_FjF06wpDsZBRO{j^+7zUKYMn>Uy9t+ucssSq%5E z8=o_x))eHowS~S?l2z^3vRdi}a64SjJtDN}@pg8uVEllOA?HGf-YB}1d?K$$^J8Q9 zXE$pOgsaD@_Fl8oI^EUbmAKic4G4IIsrD$-?LlEYK0fM%-4?sKEGKV^noKvqY52Y? zH8^>D(*k!Ch;8g?)G)9mT4Wd-ce1>Q9=A)dm}{@z%$^L~P|%93DKiahvsKWQt-~MD zNVyR*Fi46dpoA#m7-AsDAlN-jm>V5MX-XB`Y$P%=6p*n$X=X}>1W@k@x~`ZLQ_Iq9$7G$&wZ`+6S#75*}Co5D9xVN#TtChLQHW4cMZm+M6^b z^g5q=+v$`C4LHAVCJ~MU(KnyF(pQ5F83sCVDs*ZfH%rNrIx<7Pn+l~#Y4W;X{8!`n z_l9L)cBTDw#gqG&Jf`4ftwXK1f~z=F3Ju~)HPO=#+QG-=%SXh5CkF^7)aCNYX;W)k z)+l4ankSY*-n)}ztulfG3%lbDF8~uVw2t~?cwbglhHIPpC|fBDQ`x}Rki*bZwic-T zPuemsatFBm+50M8)$@G#U8p)zOACH>j$scwY_7@sze4yv_P>Ufo?mF&gUQgTAs`O= zS^2wlQicilaGl9fjbJNSDg8btv)3Izlk|9ncNO%on@!)jSQiN`+3JC#<4|xdoBiTy zZ;!(tx!5s<{BY8|bVl~vh~Xv91}8<-{lyjl9wMzIrPacsZCbtk&F11JD-#blPkRAd zrt!}^r}1~L1%Y-Py@hh(szE?(YN4w5{K8+MIaxV*6mF78q7?OdjM8-fJ3R}v?X;UR z2mixMT3PNZ^=<%me3)Y}ba)7syeL>uDrv1aC@NSf2O}z0oMSl_Y(xkW{&PNE8&fOwYniB$;_m zYHH*?65srm`J*o-ye2*wt9`c_G36N+tzg20Co8ht^0PM;$V3Cs7qc#N2w}&%ZOHoY z%)6mUD-AOAIF!^ORNca+ttn*#YNU5Huh{|^h10obQmZ;ss-d)w$<&vVWqt}G3)$y98@G|=* z?Si1>*q$In;JLjsC$Mvp5u6|~V*)8eeN9*mI_%iJ8GsEIc51;hs`30dM+Lm6i0iZM zELrzZWunu}Igvxm08h8#q=FIiBl*kT4&p;qXSF1aKuyj!Z;Ec*m+ijOlF<7udtn=h1H>DvxRece#c;m7G%4GsFBcYqpdejX#Zr^-!U$u z`AtZ~$Ng44g%u>ZwTsLh9ns~~*odzGHa@tHU)&+;%9*TB4qc`=BH2=?$%3db*hQuGW zU(|V5u6UG^{~8y%+oJm2N)M%}CA`Mpa3i2-OW+wz@2-kaznS zePjvD0stJ>JG~Mk=6eejt(^nK&D^>dv_dZSE;V~u`q{ZMHmoofEYgSrB$sE~Q20#g z@`5FC;)RZ+_Uu@uW)v`%Rz~_3PS~v_HEECfhtMPQgE*z9UVkH~c&0^wz?Z0@Kt)1` zWty8?Cd?Q20#6--!R7*i!(?V1U=e8Ikl&!^*n|_n&d{L!g;PpQx#}kqeP`}Cef5=gV4&A7ox#;E6+3#Diw5}kCX~_#;DJ0j?w1#f&MrC>fwVm_rt7Y( zxUpr-*hvRyTQKCG<>hwjHlA*ojj6Z0o$sUXEF{g*9pV})=iFXLPyZwYSXsR8 zza*FYuwS@pZOKz*%MZ^})-6$iQ;K7BI9zpkedGi8M?$%B0j)k`ZTHz4CXuL~2Z@T3 zMLrr^fFKt;fbC1o>ENL`f9JA?whTYFxR?BSXn%;w&bdpmQ;^5 z;Yi!yTn##1(JBTdY4apSnRABcNok;PIPCDcy~)Xw-t6}A_jTm@^9%_Bj|VCr_PJ0kK_t7myTr@Ev)Sjhc@!%Hjj*EhFhR45 zU4{MZ4T02L4ZXkcd25DJT|SEkz@av`AdfM((eQx`t#@Gvd0q}DvZ4zqUN8;ozjGvX zwR5~9ne#J!8&z}Y2JE-Y^xhRsT&FHJ?w^y@*XN)#`m~+X=ipXZS^kHy=MyX(-MFguX9xjv0USGN=6>ogQ_!=Z~yNU%bv5F_K~XLzJ)d}@Fo zXLmGo9DxO{oUvlNj?L%n)K4feS7gW?TdO-?Saql zF?s3s;>K!4`17@=8al_s&y9Yl)H^amA8VLam57rbhuf>AuE8hJC!ACg;N@**%?fJO zojr9rR+g5gk)DQ5PJS|ImDxzEb4e@cpxyd3Q7pj~vja9&9aIrR6!fl!3ZRvRi%OZO zBMGL(m7;-&Q+M#-k*jPF$P8kCAsk_g@<!8T{ zam!gLHD0I-va_>;Z?yaZ5-VZWB0RFv?)I76sfkccNrlxxgRe4U-QX~2RdwTkkC-8l zImd!$2z*CW!KTA3@Po_;qD0p8Lk$8CF>2Od+U!d{E~Ep+K_im=gU3f3XfN0R3Km#E z8YxBaHNMmm20U75j9{{y*ZaAY1N6~lgGf*1vjQ|wP5Us9ni)YMsjad!k1!9EE#2QC zUQI^uy?40B8mk^IBwt-ky}E2K6b7B-f45M6Fo7z@1mqP6+2C`lt|b1%z1^0}GXRVU zavVt5W48nWq-BW;EwLdL1<_F5+U?`LGY5-Y*~VYiVMA<;t4qjISWFY0(Z zyYho4h=TR)7^o+~wmP15rFy=5T&AAO~z_JHLpCw-%3t8o0HmKP^6# zX7`$ankm)XKr2ky0OJ{0e3%HtI2!v>)yreqyVJqSWA~s+LlV9P(soN6Fb=+&G;1ix zlA~TtwC2i)``od8(F)4c*;yJ%>R3I32?gP#Y_fa_%*zaPdDs>_IUf{`KNX}=A?rX* z{|}aT>_OQ}tn`B^Q`U2G3JSIK>gFp6f9hD8q3@fYhPvf_)TIkcQ_Y+XTCt!@d&Hb8 zt8BTsMH|oaxJirg)-8rS_gGT;&~?GF4ux*2`tu@TdpKi{y5f#sMqybWp zo+H_V7ZcvS{D9Q<;!0`WxXvqNp@9AJ(Ml|6&M{bBq_KZ%>4Gh$u45ecu3mOdvQnz1O22-6-JgOQ6*B5%lw=P?$Im zJ%-!b+-l^y0rJbgyL{4SH5Lw@g0pk+auP<^(2739n&)ydJe_2Vk`eJ1-8j2$m}EGTQq#tN#`dQvZ)UVo2t*_3^tsbtkg0gvm% z#*&3uQ%;0sv|JvKFX$4k_BvOQy9HNjlP+vxUrE%46?ssHf&tI-hzTzxOAmU9bl{OU z#+Xw~<6~>-(4@cLEcxD$HEtiwP_KDgtZ?z_iS@9;@(zUaDhq1ilUm< zzb-}-M|IWD92pgnv9Oc2S638mztS;&fj-Q*znHz?>79zfb`Caqm|dCZqS6-Dwe>x| z_eC+t+F@mscra!tR`McBxcTs*Ci?ByXNkpZx!LS)>^u5h_j(8MIZO0SyiP9{j14?} z@3{eh1J78t&tiuF2cl>;cEI`D^0agV9p;L*Qqlq@)pa9Dy(1IV1ckNE#<$F2I(_L- z;gt!2J*vtN!PlLairUoT*?dj@qq?S|;hjt7lm&w+BXU`dB6kA1;_vj8fIhFa31i-`#Xxv+gPSFhr{3dCMXEWDU? zm75ZJJb_d;PNK=K&V{GGpO5-jHN0H+gH(*&x8B`P%xRY~1zj&+gRw@AzS4FsMt(k4 zoC@nJa-x^5QX3t1H-TS<-8d6-mOYOMR>f6a`>9eF3wFK-CI%Fc3@d;7wdDm-p{tqf zA##IQISWaO;z+|_)~ulW#3x9toF;3=Z{g7*B!jOV*c3nrHMwWlasqBbevCmZ|eXp=Z?2kl4k zZ}^1L&gwSRA*-PlT&T)mo1VhNdpI#;6uJ#z6H&q=4Px^uir)A&SJ02 zf7>PaITpfLn-T&qILvj0N|EjuV%(IM-S=~ z_8Yw_Hf@O&Is0VE`j91(dUCxJM)8nkK)-&bulliJ6J>`$!tio*sjcleY?@(cmX6?H zW-3z9BSCz@OWshUA8mH*T6UaKZ|Uf@dCs!tTEJyateQ8B+`5_b2M-6flnvD5wVboA ztSy_dSvOpY9#ycRMN&=kh)cmeb_DUnIC>ee% z$ScvKqFHBon9^>$>)dz4dNw1@e*CGiHo^J8?PhnR!q#FLKJh(HN6cDG!uM(oRW(pS z9Z~3aw?NUJm=Yq)^W7#jJ|?XA?kSt)9QyY9B2SeG%aZ2y)rwV1OK}a!8)mH75_JPL zz2u0$oLG$+vFo&mip?K1)x~)g_GS+aqsPu%)>%bnsc4+Ez!)>94rpXVsj^tKb@a{6p5A^UF8tWc7}%(>qSe_O^Mm3X z+`0OE)7EY^@FJ?Uk#N~$R4`f?oS`e70jTMnp6AFEMCQrRvP{`aUf)-ZKr*f^E9$E& zQ@((*)K&F){9Tha9#5>Xa`M>I?sRg02NSEZss^glpUruKl3M}C zDkz6JgoBJpvcpof$WzHkDRKK{JX>gr#VLNc~T zM@zH}CtE2IY2u?48hrMbg~bwX-Z*h0TJnrRr^P9&$#m}Zk!cLNSi@AYQ}*FR zPDUg7a&Pf^xcm(s8tlpYER88O>szZ%$5%L~;u<&WJ-sUycv!iHtgg(dFk{GgdVDU$ zt6;JY0HpuIlFiu_h-64QQPLs+pgJ8BfBy#;=FO@WnAb}x$vCkA$Or-DdnM5&Uf{bX zsEf__zYL>dxE#e|R(JJ07G;QmdMBvFx{{xjK< zwlbKEXqx6?T;hRX*Sko>X$FQVDChI##EHMp6Fxffc>XTd2Sp1?X65_uhFjN+{?{`3 z^>&w0^bCScY0O$rS+=B9#tojwTN4i7o9`cOUFiW|hfz@ws_5b5K+W$)TY*FSqSV>a zu;$$^4_lF!$SSz6kmiwkfx*s)=%%L1$fAZ7JKraheQ8SLu*rBccL;jpO<7-R{^Bx zbO^yNWOzti?jy!5-fZ-O4@JQD(lLi+w%h9K>DN`&-goFt!7jNs7j~8H=;`H4i9U-j zO%Hd>nURVb@9OJu;W`=uEWprq8znbsSH5NV z=zu{nF{-L3v?IXvgIreHI4P-b7fEbpn{<*2*Ho>YQa>^jA zuBuiH!pqL7tFyVf3LF);U&JojQbI|t7|Z)HHS&x#Lk9}8W=V$ z9RZa^%&v95RZpI&anjyUdEjKYgA~{U;5@mfrv?K@5J|y6L2(b28KqR+aiwX1V#2Yx zzaF&A8ZNtJw(J<{X60X7lE`|~DPDs7i9h;)g{X%NC?MTl+~{H_96!7l=DJrqdHk=@ z>SIN|d7W~Kp0YgC#l3yx<^kOag0Of3M4!g`BAWI;dH+wq^3jd4XoE3#tE-)2yuOteJQ}nZ9Qo3LvNmYVuk8jwTz3uv zd-B4C9O<;&G@TY5dX_mQ2s|Wcp(jir8zEhhP(TXWMivg4k|)mMY`xUUe^4!(J==%) z_k?--=>^x+{Phn(#~*(B$b$_@`@7f?Yl!mGV26k6icXLb6@YeM=-}=obJfA52$Nw- zMQBdqSCl1xy3uu{%?6b_Y5l9161BUNTzjesD_7f8a#pM2mbOCdJJs-{h|SI83LpAP zrWzUXRQvNj#(J4C-={_y%6_v(z0s+>gjPk_G+KNZ4mSre)vr!@T^6SF5t(v5EQAKD zd3Yp|$UWnr8Opt;-)bCWTkF5Ciz)u{WTp4q<7^3}9|5HRQ#8ASXmmJ$}vc(SwDz?l26t*YuF z+{2fQFi;c~6fnSLegxO9S~N7gh4(84jA>rimb50USpKRYOEdS{*)c}p)Y>OcYyg%> z`a3E#%l}1HO^UKI^0F`KY7{o~A)ghf6H`xrw}(z0YjGTJXxVqcvtJ@DwhDK z_D>dP`wz7&w~|uaA1)H%tAB=}*jaHV`Z=+~SAPDh>mCnxIwa~(^#Ut@$?^0Y%wg9V zuA-$?`ZR1-TNARZXMTK8aPrZ{eq^;7x1E3;12^%y{VT~YBRK;fd{L;QfT&*N;lk4U zW*R+3+_~#;EtN`e_mu|}br)nWHgvQT$i*Nn$a#9Abz^caLUEXY4Av+wlmb(~LdmQ4sHov@r$>zCMi zk4ue$N*oBIr-mPi{fGXzNPRVz@;_Ioc$#v+TW>K-4-16O$;ijg)sC`TU#4i#is=W> zn|shIsFi|)>^&3FDM5_eZ0Z}CaH3S}pz;tGOYDn5D1CxJ zVC8Ud^RdDO1%f?`g|(muw7D^I#w42ZHn^IZ{^Zf&0MP)610^7gIXTi`R*8P(@Ost# z>un!2nWL78l&(-xhn5^-sRWBj!p;gKds(}O?agkpbR>i)N<0OFDw8sHGWRv6>M}E7 zI71Qtb2;Uui4j1kNZI%`DZ?O{@zNi+qoFTAOOmxeAY(ZF-=DlnzyhoULmajhF^MBH zP&VhGJC|l$ZH>*XO{M>JDSo!=Tro#>OoUM$lvYVYkIny^ zxsb-eAs&~<9VQ7}e~`J-GYh5Pv8z`teAkx`Q(Fv^g{;{L{kp;(F;-3(wK52)R_fLu z1F`Jg@0Bm2Bn={*Tz$}~eH%H3f-WYmK#CqqE6yxX9e}-!DBw#la3-rR9yar}HND#R zp(Z)K(|qdB)#hns*)?d##o@VqoYgft&zZvK;&P+#`=-J|5>nsi=J`1LEzkUTvG3xY zgW1D`3EunQ$qL5L&Mv^l(rR(L)BhCP5@E5l@P7b)K!Lx&YQUe!>TrpqbYp|pu3btk z1wx*(N+})3NP~so-#UA>vf778vO&)*E@w7ugIA^p51qbgx9KxH*4x?e<2Me85IubT zq70+=-v3CY+p1!ncb7kMsv9CDg3vI$0821#GUzl$+sw#y(pqLVFv~Jxv)L&jv$`B@ zsILX~4VaagMC|hUGtCXvm0rh8Sk~)_0EV;SXf%FWb}GIn~26UeI0JSUdOSqMAoqP-o2O4ox}77jMf3^!e-*j{$QE4 z7R)0sk99gGn@nQ_t;2*Qg6MSgjq6v!8Q$ZeS3*HoWkWEyoXSc*ry;iDXN)=^yG;gT zmSw4&21%r{IK?a}2ILMfRWuqR90_r}eg=+Nk>-fR!At^i@|wP|L@2Q`dd5_p@_3vnp|WzU?s z-q&R3v+;O}AW1DrYmH!B^j0t~w7tS=Qhf01K&b1=k3#839)40)^g!xA^zftL+2MP3 z3W9_qa9i)j)?T=1tRbj^{=t|>V=*Y3!Zenxt@Szr?dX9NQx-u93^&@!fPTSoOiexq z|16F&AQJD{ww-5Lgdk)=*{U6IfQmFhgTMZX{~{@h8N2`Chb2Mc1!aFzQ55<&ZUK51 z$miX=cEg}i3`O#Rx)M$hWnTNu@ww)TuBr_LgT4ip=M!~xGzxWZ+R0{l0>^tcNH~s)Ig~DDQ+l(R zFxWa;nlMCBaq^Y{WzQsDM3h~`p>#Tt;UtaT^7OOMfu}0SGEI^XK6p^c4pYWOBz`&i zMTJh_#=!Mdh!hL@V;QN;=LB~`lGx1jq}lF~xwJ-aB-9n8oJJx@)NWVS02*7{lmV8d z>8Y8r%Ie&J$XcCNZCEirbGAF9)q-IT`2#9BNm_3)YmjT#$Bh>T}r? zgEkkz4HL$m-kz+0P$Uk{nwuI6C$rVHb-LW@pyC5Gn)R}3wCCVi4sio9qS^!s+ZV!` z-d+As0Xfem&Yi!A6Lc^f7Faf&$PSk|+FCo7CI(Mk95w^(qSx^v4@4^o#zp7Y+Ex4d z;bR&t1MprVouPH6p3c?_Cyx$}&)3*>E1?hx6hS=7quRc<+P99L@OnIq-d0y`ed~?4 zWR1n=(7Ak7q4~+hP@;EWvzZd!I&uOcD4j;z-qw2Z*jtRrj-z;gfB)#^GdHFd3}C9E z5X)v`D?x+Zp)+V)E)SmwoxU2q1{g8RD=Qk4YyYk-i{rx=t`CE`Z?l=lhsHPW zxz9g0no6^$&tI*otubiGbSBMc^)e7Iybz5i?%BEL`uUS7)QZCX>bmYDum5O1xa24s z__ZewyzsrRyPLLJbi~U?PxNiSKN6U~GP_h$Q}gDVuktWKQKVkWh$1&Pvuw0kDUGJ1 zsp`Vzs|Kw$5Q+Ib?#YosM?>G%R^MB%zu`}cElpMFWHOb>QY59->ogcN=MNuz=)vg1 z(4mWC2L_t{`)B{#rfv5EH74=w;_^~uV|QD9Wznan@`9Rhx<1d?diW#nAB%?pdXy!Y zgQ?K+a%+3*)Xkxu4fhBfOK500lfFJVZFYOInK-~)13T_V2qxuUTJe)+Eip7Q0W;Q$ zib{vmeq;3J;JHX^Tc>|@BAJR2#xjbcBEeOG%bM*X4aK4WJ#hR~DhNO>7md!(Olj@D z4j*~u+ppe# z$f!T7(`atYPTMTZ$dunzh9y~U@ap*^$A??HTCQEW?5n87pzO7qL$xg(POI_!sWS~t z)#D?h4b5#R#9ugfO6O?=`lG$O|Hz3`Q8wlFvUNj@fzy$ z%4Q|vqUdB(S)^!P=f8Qk{ikaFr@>x+;QohzmghKtBSkK$?3ZrQpmgU3S4D!RNnl~o zj5eDJAA0K$3JGAmz17W49i3b{zHP_eNF?g88jU>zP3`}ez4ri;^UCkUzMQ(h&T+bD zdU76M0>U5zgFp}<7??&8e%5`>?t6b$foz6PTcd~Ul?Mm86 zkX({r4gitEUB)uzg2gXPeV* zciSE=^E{5zR+c{V+_$Z7zuCHNlv|q?Ey1Do09b#3zYC%aemV`9mn1VL8gy^$I4Y`v zN!alIV?DdaXqrNx6JXE-!Jx`rwhHK$>#0j8d{a z`oz;B;2(v`Ku;epRKR}DN%H9aAReJk}SgUPo6!2NnM~#Jv9H(H4)8z&S3OOdw zV$SEXKv8IFQhN#H>Jlf|1I^#~_6wTHQ5xC3Q;jxbRE}u1TETnJ6j{5gz5z0t8BxEd zq8ZRyTH9)dD}r#^z^wqS(T*Sd{*UxaxJsEeTdg=|xWU}s$Deu@Y_LL$SCtWAiNQz{ zO@ap$%O#pN)rwo{|CCDwlilT^$m-=9x3)T18(cMPs@*f0S@4%(Ou9MC<@IVmur80D z{z=74TQv_(L$FbQqxNN(UkL=i?nz1(Wv#BQqn?g0T zbB#MlR;w=%LNt+%bvUh66PfyGt3HPM`CB7{k8PhgKb_hIKKJ6Ue%{ovouyIQVl5+A#FrI_0+dBfhf(e<()!F2Co_j1FSxy!Ohs6|GU1jVZpn}iL&bu6rR5}H8TYsp- z%c56r-SPPwgmSUOiGiS>s|a3?eRU<8$s{G1^t$ZXbbK+IIDY*2!sN|D38>B4ox8U! zEG~Nkfn0nYC>IEh*)672uH4^Ty?pz_AD?~q(I=mF zQc_ta11|IA)V#~%p1X5%H7lPQ+n39v78aM<`ggQ8IDuNQVKcq!-K#D!{eYIV!hpKT zn{D2*r2VvEDOWZ`Lp_g~)?iImsB`IQH_@%e#zPG&JB*;!Cqjk{zwxWlG3Yaj*{^R~ z(QknQ#j@tY+RF7v%HndN*+?XRzNw`(8ykP~^|K>`eO#HROx}V3f&Jo7|LvbM4qv5^ z*m3AFJ~=m+kP#vG|Nh5c(H{T62sF~+zVPAYY%xFB-?1<^A4{f=KKiZZp#6>4UMiua zT;^a7b%g>Yu>z)TW_EUAVTmSfufG(D#k20#rf#q8!qpkvM6JhG{O$d_Mg~7T_ouUI z=+UtQlQ*wpE?+sGygoiBWm07kyLI8C#g&PX1E&ble(~~+#s=%H+Y_!p%YXi>zYH~p z-um#;^G!W1K08_kL4NEAZ2qbKTkR(;Smti_U*GB)N5T4@pI_S675et?y@241#Fs6u z1_uK{v&$%foO545K51oI0^KH)kxIo^w=B@ zN#qGwDwaz7j-NIuT&}{m1DV5YYY8|ptIJ_!-ahwQp^z(!(34;PRwBncY^>Ae(d86pvd@-@1A z>dn1gpJ7f`w|46hU$E9aAWN8S`s)}A*XQ$Xe$6j*4!+Fo)8xm!f2-kBjAV~G`>jGI zRPGL`nQjcsOU=Pv#b)R%Svw7qb#JWxNCbAe9FnYBC&39;r&GJu$ct)XE&8OY2edR) zwH_MC8p&|W8%5w1sCG_GZqNZfpVDCPPpoaRz8Gw@dLhoxZ8q=|`WHPDd$rvUhI60$ z>!;O{N=oKuvvm;5vQJ(C^{Ra{Gh!5d< zJ=@Z$R3aH?Si9X~=E|jfp-7on3P%XaL{s+(EPK$tv~6qnAQ;B@ciwsfMoaDgWI8pldu;D;&jb4S3bjv6ABbun zlMw;4*=!iBNE{zlCR2&wonWE5=h_ah$M(Z?m>w^XkYfWHT`9yEb?!5y79dh`SXB8zA9~t_A$NbHnN%z z@#8Fyo2g2-naXfAYOLzrHev(yNFX)fylUyH(IQ-nVX8BF)*fp7y{GEC-T~FdraM%P zXdA5?l2SF}ZrnsxD+U>nGsvT6jHKBl#R!CI(~abIO4 zmem+I&BU&siBt`yI#n4~c}aq61>RLtxjuPNwHO&>z>@Ve)7ocA^SNt%MT{s*ExWU< z=u}~BZyK~%hN{+Beaox2)#@-=xta?f^h~!A%LXt&uPzVO1$05OmeNj1S}dSejSV(pF^!Rw^-@>$ae<%zPQ0c1ViJGl+7$(7`+9q60##Rong&He z5v;oAb;-3Z&d zg4EmBOQ@;T!5WefH6yti7Nt4EHFvyp=B<J87%k&YIMyJ`J>N zcKPgPt?rY4S8dev1lfqOX5`t~`Nq~ZQbXB)F>Lx1^B1iWpK#^cJ9*v?%aF{K1c}cV zirG@pj$dgN?;XE)ianaU3QPx62z}kM11Zd*kA}lk@SW&@=(_t$m}7Y~jM? z_tA?VSX;KA8fyLVkN-+hh~tkuMI+^NZ@tG!Fpgn_$sF)F)>q>tu8316ugks`i)opO zI22Wr(Gw&gOL8Wilxh3dA3bTa+phfW-z_$F2Hdu6K97>jz_!7axjWb2zVy_I16Mx! zP-NJafNybbwr6NhV&TTjTA{PGb$EDi=H|uM-n!B|IAA8R=JuWjuj5O%e?Ufjl!Ty` z)}ZI&g*OGB?r8VknO`xR@K|)UT#`nuE`?vYc;OO3k>TaJiU>Qc)TL`zxA&Zp1qj7y zJ544N36ssgeW>}vk1mB;THOSE?eYg|RRhA@+T`On-s|z6f8!kKZ8~}!VXQW($c;}d zjqDznxOKIJS}_bu#FoaV=3MJ0zdw*q$3)c3bLrT6+{_nZk!A5Fy=Pl%bY(#)=OohU z4Vmst%%H5RuolgiD}cr?MV8Y!uBkDYiOi=&xT`HUwUF3<=t!|xvb&tilefazLg(NC zMTP}lVObl6K*@Bbv9-^JaMKHmR0Wxuoj0>i@KbvEj?=z3y%vrXc`#?GwTOh#(Uld8 z%kLnO3m4Cij*Y>B7!F4XhZ2n?{a)ulPvf0f)<(*AZcpY#jCC|vY!+yG?cBN766;x% zCM^^;H8t6@^RQ4U&d$z&HPG47Ix{;f3B~#OSu4#nw)cJx#BiUsrT8e!^zeyC0O8{Z zq$aF2n}&Ck)x5=80t1GnXuR{er%f0|F|?Y99ae)@P(^~C{`&V&6cc!n7r2urPnAo> z=R!^Esk|-N{OuQhfFh76AugxwkyEE-7(aS=za&E}LvJ71E6UK$Ju+Y$1ATpJP>?K+ z9yv3xy8`$=t{LqoZd{yC2s^j;4HylIk%}w=5=S)u)Ui{?ahw24N)RQH2Rn)? z&h!l*?n6mgikvw27k0ZG8h~yRFfFvbBFVMYDFB_3+rq zp*r}YJxVzZ(Z7hoK8Ii)KEms zCK_C2cdDtC)l_#{1IIo7Kn)%Y{s$-2D+@+fNU*P4Y7svJBYOrkxzTL1vsGw;%jt&n zUSUjAQ{#P+ne}RdiuHA>WmjrC8BCd+BvU6zD<&g<5ax8bY61A*4m9oC(Bq++$Wcu{ zuvyQtIo!3AEf!WgNHgY|Dx@B_J6-BOlqnD}QpZ>vE~^o;zww+;G<{oWTdRMo$W^#a z?LBMB1@tLY5kS?FzWPYjx%)SCMWyb}`iGiAdlw$Kb}dw=+}18P%HBdyT`gp#{^VLI z;k(~R>sIa2`qlL_T7B+DXXC-=y6SV0`xt?tKt^&sASW{pBBS)ft8K#5FqY*Vde#4NTL3 z3?o%t;;))zYZGz&#!rMdeSgqCqxKooN6m35qf?!u2SM9NKI(Jv5QtW z7|ocZWkQmRr6R+ax18_yLHlgmXG|ZE1}a8i@zob!+dsB%a%y_)$l>Y9+fHBLqqkpm zw(n?jz&B@Bo12>?zQWjCL9c6dc?qRWd@hwP%YHW-iDibi_tzNhgZA5PpFMqOG8m}{ zGD%U1O8kR&-ztg7^1|eenaFn!dfqwv*KZ1VTzR3__ArJCa(%QLQ8@`@C*lZTv*?>4WyUw$FjTsMXQAx88h{U>zQp zv$wY!2%hh}`U}$Ex3ed-y0%W47_m}J7b+f)yHY9=1Z`%SJ2x+`WS}$04=Qzrg$M1o z-adQ!0JBS~Ra97iQ^WbI?+04D?Ub0w<`*Z=PTz1UqLj+!0)ap@yv*9H;nnqLzxkbO zAHIHdY6*df?(V*hMyDPZ|Cx8}LEA$6tm#98$s{AQ(~HqiORJS}OQlRWUhp?IH+2oB zqKoO0(B9RJVX)n5qD;2oks%c3T%JIuLN)~aR#r_4@_?~?dD>@fAJYIJ4u9KszujKQ zruOXKb)ZmG?y<=+bVv&TCck< zcNSz|FgL1UYy?!p)h(pvFsXg5zj^I$^)9!Xw^ynnhvkn20~?3#g4b{I5gO^5keU}! zQEDLCDmBAur4_iEz}9#{?H{9uI)YlmgzB$ZtJMPQ86qIV!)q*zY6gGZ?+;gNKh&H} zM(5?~<@bW0;rkwkkWU`({)yUF;`hN{#K?VXposORf_c>x`qDrraw z>mPK5Wy6)f0nIfK?}&Dens82$^|T_gByZFwsE?rltP0lBKx`xmgY=pl225UuPwQY{ zZCnuzC#yeB(z5NUuvQI3ENP^mKS)2rIH9^d!bY+a9nr4Nu8yNds#z`cg@kM%kYz}z zg08hYXwFL`kurj+FJhph^)b_isQ%j8BxrY#_19P5R8MrD{k?KNGX6NRcTH6tcPo#7(@J0kf4HK+oQAX+@&2YW842F&8%eidH z>2~T15FE+GBXi4Z9+wlw=wQGjiV}vQ6XVyNfex=-E!$o$<^=^)xO|R-8yi&2k&2*B z6xy4E@p#hZc7eMu&ECoLu$d$*F0aFClEAb{LNc9mfqrUP4Hg$>t?r=ROzBiLe(f@0 zad)(Zkm|mXPbJn8S%08`HPLs078V!gtnL7~w(6Erf31`XWnQ-1EJ_tsU&UT*itYG9 z=>t+rTqzi1d+X)DU0#b9qD$^Tvm)eHV##2r`|;CbZ@+prBa;jcV+6r-g3amjI4mnG zs{+rNZ0z*R($1mnf+*+HabDzSSK@#4$NwTVKR&UXJ+P<$?8`qpulhtA~WmCy`CO>xa(fG{GiG^Io z8qJr5n=H{kINIcMOwU|hy>zR;y%j?c3d8cnQZbuYh-Uk?^$c{iy#Ctj>luFcuHne+ zq}ktb;_$9(7e7F(O-LaJ(-g+g2M!-)AmQy_zs%v(!Lf%JKJxGW{eRlNb6-!$z8Wu# z?H{>%`Jyk>JwH7OX3}D!(gL!pv+?qK=Y64uT&X~k1dgEsFYVa9FFbqoy^9l0Z=k;; zFh4g7;bs#qo7|z^Cg*$aUvxBt_KyzVy!uf*nN8;kti{Y%xZynq11_r`5AlW4hqh}2 zhJrqM>cmf8zXIk`La0PKd-B-M|Ma)7KmW|5>(TIdB2g z0be@*enC=f_Dm`kcZIreZv4h%w6(isesbI%Y*?M27jVn+a>UMBDLkJ{X5y(efn?nN z7C;|}C@0o4VQLLhN)oSRlL@EKyEt>h>JJR}VWkRZx3cq7^O@Lcem!?^{|=kenJJbE z#bR`6+U9GTnO)r8-7q&bg}55StFcZugy0y$SKc`Hrn{vd^w8>Z787f$d3mtMcj?OI zK)0F*mE%iuGxLPmbp6U3d&W+P>F~`duN{Ffl0^9On{T~Mkd)bmuBVqmmVj6(Ct}gn zRJO0TJ-o6wzYyjzTk*yf+!@$?K%G`K;71FRs1;b-!jAHZ`3s^UY`5({**SU~5ygri zss^#}(ht7>J#hT_-~U4drzBCJFy-I;pa15eXMV7!w;>!&m`pTdwzU7(|1yy;`@C*R z5M(WhnZxZNP;djlkHoPf#~72jSjeIn1-Lmlx?|^l)?!m}%QE!rw_eERN)*jlEat-x zpH@)J!dfNU?jJS{_Pm8IhN>4%S^7>Pg2aJ_9Gr3$5%z-WuuFlUatgTZx6>Mp5Yz*qW*5&c)Fv3_O&zK!R z;PChwYK&Rpi?=6c1_lR1Ep6`RzJSY8C~;tp>fJivG`>=*2#Q55lN)Xf_@b+^P)n1x z%2X-Fgw_o|_%HEx$#YhxlZa936eQo~9sYNr5r*p;Ra#%!&ndxy+mLkjR2Om0p=lc61 zWu+iFl}uu+ozEo|+_IU#pu%9Q^vm)9U@MJLA!))!Vea zJNVA|3ju#)A(H_+Od*@2Nwb;7uT9% z|Hkzjg1|!b!`XJQk)@u6P2iI|qAFs5~8AYe11pHz!(r ztjXQn9b|4!-Gs{NWWm^u`}ot>I=dpvfhlaNun%jqx?FTeQmz}_(+@@66{<+89mHRJXL zD`IJNb#8uf>6vf!q}C(Li;Dy*d0Gd+CJYADPGVCNGZ@UzMb?If`-^LbvSyF)fap=r95Ft0axNNu3*<7Sp z;8D_4SdXlhM88FuT37+99fpc|yNdx_###pRZnxPmCGKx*m|Hym()Ev?eEx@O$gd!m z1oG);pJs4qYr@A?=tFJfqwRx#{eB4 zQzWoJ!Cf&#t)p(YFk@pUo_OLZUXrbLiyFj*V8@Q^2eOgP?mTt+G%q7(9ytS)PK$*_ z5w#*E&kH&qRAAJ`hPswlovlM%9j#s`D=H|UU`pW;+Wy!RJI%O+;0#yHKj%eje)mO8yCReqqzJ?&raX?rF%Sx{e_3dweTblx#y;g$)f>?_ce9jjtF1Jgq zzXqv0Jdjdx+SK4MYA35&DoGEgdboS?xJ0KKK7B@~&TjU=-aNs5x#+Sy%7 z#gdtvT05O00gD7A3p6XMiI%kzp_ydt&irb7YpV>yp`d?uX0~r=CtOUV}yA^aEF_YNz%ruOfz`FqP#BMPs zGKIlyeG@mY6*<}0(10mIu27O>1#EZ?q1IGnZZVQ^J8T?Z!NG29qBO%Z*4fcEGkG(f zDFBJsYNE3Ff|)hF_s$!RrvBYMjp6l7cW2AR_urQp`=NcipiSKdO!N`Lm=g+QkhawkYOScOM2|g z^wQi=UngU6nJD-dzxw+Iw--Y}N0?ZmNSe%CA%6DkOMp{cpP1^|b1V~CP9?KmzbkoX z;gy%(^#?qVAf`$JOxQgh$J@U?`_WWsbhL4HG4g`fbMeCY`#x^CuajUseeK>mw9wXef-4Hg_(KE{M_WNJK+?E2)9e+LQ7j`u@D0s zC9yR5=kLF0Z|d)CYns1(O9=EFfoc(qTeqcdrM|k|8``yF7$VGO3hVFf1FYS|5b1Ot zDBMoBC*U#@Bt1I1H=Ze-IB__!9>Yl!*va`~^4uG5!?^itU;AcDYqQ`rTb#jtI02Y{ znHN27`}5DV2K)`fLqlLUYFA{Eq&Ofe6v{yO*i+aY3Wd^%m;|FujV*v}!9rx#79(wqQT168D z5)0JT-s^C=idmqUhst)s#Mp6yQbVytaaU6(FIQOXiCW9(N+? zZfa@F=88whj_?q;ir#hP7)+VLj;nbmwni9Rq7Q=%5o~Z|mm&2Sk*+{Ws4_W^Q;`*O zb91`SSTK^*FcW2%pt!jrj;1$&|ni_9A54GR@Km=?AWtkXT?BL`9~h-u!EZi8XEK$ z_j}z#yE%*1iZ{61H(z3H>uzeh|A^hy`I^tz>s1R*SXr~Zr}r))32IP{CzQLv;R!$n zl;0R-m&2ikx!WwY0Np}1?F|HNRyJ63>OxT8_CeiD_3523pK$-EzF&MT0%3%r6@8^m z^!TNVq{X?oFn{dy8K{z-p18G|hmP;xSt^(LN=Zft5><+v$eK(hmeF%}vMwzIF6|b&!6O zmr*t&MQYCU>MhiJ!_`>(YDBp4th)lWf5XSYbx8p3EieU+{i8Rj-AaFGZAL$~T-C?l zRR5*gD;*4j)caTJ-|U56`?ZBln5b2$^P1f#D+ThJw=RHGEWrLe*Jbe1cef$$Y z*{z_>A^cmrTeVk)kM=Y1=HJ`4V*kKs>!Cx3z=!s>j{4*JhkXas7#6s@r}mS?SDKpJ zP?`n%N)^HI07UrJXj`oBQInW9yhfX{S;AVXM&lr(h zB?GMiHtU(O`WLM#8V2Xq5`EqUR{d<=;6eL5+g9wSD*RK+JzCv3Hu6Uq)KUFVOU+b= z6|LT6}?Y1 zzxTGS>>nC#7S)P1s8ysk)H&Fo7`UcfREHWi(gmr&ZMY^-=~STQvW9fE12I0r8+39X zsZhsl8_FVVG$TcIon8a!C<-Ir99%DE)>B6P%{5)o7;IGs)={-JRJNve8rf~C-G(-( zN}n#Iro`&%x2z>tt{tuB?!HIV)#*gb?Ogjw|AbTva3R$$8M9!}0bGqMgH*5J2IYOC zxxIhelK(|0zVX3%48}acmY()zputO`2&vdDTn#}`F{-NBA9Pp}B@{#TSK+yepvWXn zih_U>gsi&XVUi>Yxr~euW||U3UNUkq3yFBv*WiWJG=;?E^{b4#DHL!?0-wnjD2g^Q zbUeJUlBf(1_UMlm1RlX~0)Z}FxZn(RwKlkUjuRvS!%5W#p_VIFBuODjQjx@o@#`FB z9q#Mk1p$18!G#!BDwPP56nP#a2t|~^p>nB+-~_6|ss(}~VbDKOR1;LHsA-tzd7wv9 z;Qop%iXwucl}ZH%=OZf91rGx{=B4wO+WLna7E0s=Sx?f9s-?9F0*@?CNAmKHfo^aW zSYwcebSKo&NXszz9VIDB;5kWwz!!nzfD9)TQR8r%Kjzxf*&H*u9xps7(2_@$*q5yrpu-S3aT|Ju1Lv%`Iz z6;77;a#@f_1SJTn#O3{=E<0Aaes$VnyD{H0d~mSoPyh5^_w{Y-=o@afDC6hPFV5VC zX%kmS$J2SA+vWAT*TXAsel+pJ7ruG^jTe^_Wklp`9*>nKmzI|@x%@+qKWBr}ufKZ< zMTul&CAK^tFO;|K+~42Ce(=$C6hV^NT&0vZI|HZ2_PzS*uW6HYJ-TYPIe^k$EEQHG zYr*C&C&pdAJ!iFBL;*Va*pp3O%j>WFD#yttnu@Q-P_un-cz3f|dg+bx7Mz%znL!Aw zxw%8hC$3J+wRN_xg;x$e{51I79REFD>kfwc&>aGJzn(mvSLFmY$Gkjqal z#D4Gjui=|Yi++Lhp>A!mLdqoLv7tEL)Yy3O)}o`)wpJ=}nN%v9?+w`#(TKx2z*n+q zj@mogb?w%4wpg*+93;&y&(Dgof+~>9;}#*p!cumJ18g~NufI?zW006D@_a6n&E-4| zo^p15J)JCxQj^<}Osv6VkK1k$w1^uF$5*0@9<0rdAhCGT?(#vBkjh#L_Xe4U4*#r?1B&0nUT3=gB<%E%uL9jnzv?-TP1=`x8YbgoB zE9ES0wb3$Msz_EE-6CS_)6<87n;t#$6cB|-5?_o|j-NgqaM~)O2=1jIV6|XB{K5B8 z3_}hb1TP6T|L&gcfN?(d#1mT8juT+Q2!a6YQIsScf(CYtbqyW>`?gUVwJIKJ$ZHsI zD9siQVHgh1_`#3<05Aobroo{<`5*rW1Xbf(L|Mi#a6QVE%Q6h_+fM)n5cHl9 z>Jc#SgiIfWLrU`}C<(KqHq+srL5vv9UuiV26Nf zN@WH-lyU6cJtFNM(NaySvPwLe22vPGJ05v#4~;;h`w#^@1>8q&>Kxps-Wf(l_Z$K* zwQFc_VP=}NdjcM(CaTC!JoS{$u|a1L25MM0&zr&mi%3(mifVfu@pkDAR6Fj}3%g*v)*kTDQG zYN8+DomH6*uZe4znr2!(m8J~qFQMh*24|AhY|%AYy!IE68*CImQ5&W;Em9332vQ|h zR7Kb5azDv1wfw3I3IpN+pV8{$fY77glLW%VJ+X>_=G4bkE092D$BD6ns%VK~TD=79 zz>(v+$czvhm;1b4@V94RVB>BWrk)0)D(!00siI5f2;A1yV~D8WfAwd>L87I-RY3Q& zAJzBL^%xXY5qJ7+QSC25Qo8sL8HOiAl>uX*tvEny*nOq%Ew?Sk-`0XsHJ{8~3LOL) z$xO95mTT&qe2>0ar(5beo?<9%5VXNQHCIw8MtGYomKQ zAVR4cacj!C{%h^Fdaq=;YVoW3*J@gFgeY~mEPfJEb4{m|F<|1+^bZZUq}(6V%WZX?vWW{245SX~$I>g|2c*?8gm zo(kXhDj2GJ#>Opbb9UER_o}t^557n9ypMll^g}Fb3j%G8is{ID;V3` z=)7|4j@iVhF@hLMl4K^6QB7fjXtr1@rCd5!G?{1|XS%vOb&UIi_9bsyq7Sf3V6ev* z3}1cYcC=_Q!P!D#=)lQbHg#ueG8#_wZttaF{?^TLwxQK$vvK7@HjyE%cCfbyg>0%) zGCMu34bD2r@j?5Nwyo4x=PH8J(I|4M5`?(jR-2V!vN)my?q3MRTD4J z)MZKJdE1k1eQKDwAfk#dius{!7{9lFkN%a@?FQGaV zLeQs9H28o%zWnWz>Mw>?QkMYEux3FUitIl^H;RTX{_5+ub;iOfn&h|gI`#ed%)7BA z`LqhqfDOZ<{tH|;QujmXRNq4b-rr@rtTP%yP|YBF7orEMLL#cBPrY(*&0bl3mSWg+ zVd&nQR88^Kp{(BXE&$F3%BS|Ys`o%oc3116@sn<=H9|LP$e<1LXw@>X8HHI}M)jil zU2k1K<$6E$a1Ce^$Vjf5l~tpyQLwB2!CP%xt6vHJL8{hh{grC{shXqVjhTb$=M}2L zf@%W{SIb*Mo5-z3WSZ?w2ioYS74?u&_q=MehpP}7V|iJp@@8u6BwE%Nm9*)1?h+^S&|`~z%;atqNZoimK`SuK#bM=kdo?<1yT-< zgMm;>AxDNqc|j&{_}t6CaD@6t20Fkw5?3mVklkV$zkXSwosCYj z1Q9^L19VfW@H8&HbnfjV$4^rb&xGU=w=03kp%(J3xTQb$Cddzu@bzazYBEi>c#gddt+~Rizo05ehbCvrKLrZHY+l^vT%ETA$;QT=iNx`Km7FE$Uy(j zy$9BpCT`EImJ4}Q5ha5C);FGg^=Ci6y%=k6YnCO*X0sGC$@P-#FcZmi(dTishWt0K zUrnTPBL_}xYoKRu-lR?Ra*cHIiv^rd1EJR*V5IhiQbh#W>i8s@P8b1i5B!;ZV*8N_`)SZcKqbCRy zCTO$6$u~4Mry}#QWZK0ta5fQ*roD}AGzlwUOF+qAaYTV66ylawq87Ug z+}vU|g9XT?Bbg!`@Of6Vs~(RJ;|hsl3Guo-E|-S-6RobM29vO!NTgVPX(h~fn@Lp2 zmCC*l!I&*Ji`nILgRO|MI$bt)lH)Sj)M|9i?hUv-KDm%xU5^j#Xj+SebIH>D)UDXl2* z&;S@E24;YIPqS8-QqvNl2n5DaQ6v;2-EOa#OXVwq&+F&%`FyDo2!_C0M59rQ)d}dt z?{?0_MT-eb;3St!CDWO zQ9YfsGBOMf0{%kcxSE?5#{iQNM5(vCAN;C?3Mx;3^I1egbAaPuF#y&Bc4;*es|xc` zIi7RJp57rz%ib*OfEs}pP_@B|mbe)(i9h=9{(Drbd0sA8Pz)zMm10hS@W#R2tzFx}#ivxd2ZA>G@MF(Zk;~A| z(L;hD5(NI-GtZ!y;XuGpB^2w2798R5ff>!}t8$m}zK}BN`>Hw;7$FMF6 zeZl+%v~n(Sd5wJobY{!aXly4F+csxnO){}<+qP}nw#|uc+qN@FUgrPbdFPya&%Nta z*8bMc+PkW|tE;Q4x@%Y4UUwf!iXsqysSO**Lqs_PcZ5DdRH7i8b*ZK~h0K-_93KfT zrBL14FECgUl#m=ZUu7`OyPm%qb7yX|vJaBpCjVr%F_0gnQ3(txSZ*M3i3p84365qo zF%X#z4Dz!rdn^PC8_+g=#;7a`a2~x-v@bq@>wZ9JK54D*gjVa!{4$(>(m9a;WvMbE zoksH!aIW7ZBm`o3b)+qj9lj{9{!UMWVJt`osJuuiWQe>juomF`F1c=FvBHeEzTk8{ z>BtFRHA0EXM|SB0Krk?NRS>>Ul|b8r0=U%RV|Q&LpZa&wQ&{&hC1n%^Fr_G>V9Fo7 zU!g?fT0&ZpW>AF6T&x?s)w^IA;?+5ywolBI*ZgTl+9iu|p zJ>8Pk=0Y<#KE9wRdXW9u$8(kv}3c9}vFr>6P(b_)?A#@^e5Vux)zXj1#_6W9oaRh@^#y;f#< zJ)S>S4^E`JKlf)L8j?w*I$oZ6?Vp9k_oql2VfjU<(<1MO);W>p=UVT-1Z2EMB`q59 zU~1)9N%+2h)1YNJr>3k#OBj^I^?X~b@_iP`m$j72TeJwFrn3XVvR^$cBEx~T$N+qp zX-Mm@wcm-Ux^Do#Lpl3AHV;vPoGL98*0{|lFs{V(&;he4r-Z`6R6PRCc=2e8vbZz2 zLv}n5)&hH$x9(~n2lnko?h@N|^@lra;4Fa^Ff}Bvt8eIWf58`{@5sW8#89{F2890R zw3k+QgP%Jbs6;}sj24Kd9(82P`Rqps|zw%f(ov$<(3JlcL? zQN!+CG0x^ArwX&XHaEzw;mS~zDy)6?20tQwu9v4hwC!gEW5yE_-wOroqD!PGF_TC{ zNWXh_*FG^UB7^8%n?gZ=PHD#%fH=5yiCb%(HEGxxc^cc9nC__AU*4a;mwtqZjwpv? zQ<`XUus1-e5yxdpkysWa4Iz|l3eq9JT7Wr)0V)25%%;K0bW~a>yFj0*P=Qy<1hqg7 zIAwV5JgdC$GxP#;R|0RV%?fz)a4*V7#Utk>tWzt7^tB|8i~wIwXX)3S#o^jW_fVx= z)H2BMmdnY41VYKuNIw-GbgdfbT4}OObp!Xq(jp3ePdYngaVQ~F zq4jFz8*O5-y!R1+OZtLwYpvA>H<+K&0)E`K_fYbs2HQTeU#JG51Dw}Ak zy@WLjgrlFp;&fOIEkQ9i5xY7|h|;a_QBAOFJ*~XNn_W|m+pgX@GR$Vy`a(vv&9jCj zO)=?>f?EmE$|V)y+#S%9ro88T;k%TdccUuL5321v`P1(d^H&B_b0Qh7Q?U{A?ZZWC zaYy$%>arf(8KqYJ$v|(2CmE-=HYW0h@jI1lz&*m^d^G6*zA%J}rSAg9MAn`}Upi4S zD`qQWHpB+Cu~MMw%XM7`!#xTPo_w}T2XxwNH*~lz=an*~8|8UIsR9;}xU1Ua4{#j0 z>}qiz;Eb3s0vnE&1236qvB&|4c7$*|MZt7^TU~rx>j2}z;WW?Z=*tj6Szk?jdJR5Tr3fY=G+IRXe{80pl;#Lw@$X8HgvNO-z{bU^NkK3+c@pQekThn3yF zCv_Vn<%JYVFKT<8o*H@awfa(rXoFB#e+g{>Uu(QN!9@SASv*D~6xe71{^L9A7jPy! zH`i^o&F7AWWwkO4oyjA(lK7`Op4YI;kE5>UUoWH8H1;Ps({@#z^+b&RmV;86(p&lmo;zo7#n0+4LzUYYejfga9*1(5V4eZs;U-n{W z->lSU(1a$Q@;pOBnxhL_;;VUKK>*43>gA9mE%)PjWHLNWt&}~Pw%Dl9aJD_e+-q|q zr>;%C*Yy=1d8bBlessH??uV?7yI9d7skKZB=$*#*t*p1_k2fW+>nb$EfvT?i$^?3) zW_}szuc_)lQTcJx%CfH8pWjO#^xrDcrU%(T3qV~r!06gI-lwC5wFtISUv4n4b?NH_ zKk{%+<~q0Z+Nj%*V%w>9cs+Z)sjVHq9{OzEt+lIiQ)=aiH!oU7ki-?#YTwrDpWlel zX_;PJlIr*C^V_x`S##Y_RB62!m(qV-VQxcz)}g-&%X%~Ndd$?dr%e}0Q(=nSS?A(v zn$TiYN#AALynRw_S1eTq!@|SPOzUio7osRE>LSC@c)B+`Y;|=jBB514!CGxo#{9UK z`sji&KR2=8&h_P_1M0?fud4;6OsZ&R2%C?rkVj2EwTEzJa27_|S3x zwk6|r5F4fxbA{n<<@=>Xm7(MLQBlGSvesiOr=`3i>@ASAJz}$&vym~vXBtH8u|0Ro z$Dc--1Y>Z{*>)CO6D#V9U}ADEyY9FL# zU~H9AlDy*_uE1Gubzeb%IYx?J)RNFw_#y-EIuA3kFoD})wRKL-ie|>NF}Ul9cH@HH zKTaxq`8C=q9ToY9G_jAxOdyQ$bYS#51=(@a5_ironKWAETZECoovoV}mV4f5VCwtp ztLORcg|Ze(h4aVCYv1jNlNHza23>#dvSe}>0Ua4Bo3A*g5~_LawC08tsX_va+1U|- zij>XcBH`^6QjGZm@ND7~X`147wMUSN4vpUExXq?H>OypdGHueJSPX`BAp)yb{ z2Utw>GY(P3G+NEHB{zklD^s3q*`D`_DiRtUWeeX_9~WF34Ew4POqaX2OdE`!GVQ0d z9Co}Lv9l_QDi#`nhq^g1J@xfa4GK(2r0s!E3u9!1WH(J<Guu@!uR^V(F6|0iU6-y;9{bgF!io9EyVO#kotAo+|=W|qX0ntlfhm;^+vS9f*l~9SZsp+F@l+dA7e}ZD9EJeejJHe)#m&=KksrkuUlwyg3JG9b|t^DXP z=rFCFgZ^QOp8_jZw83-!t5pMhS_tr*`<{#WhwMp`8K+F1(;KR48DIjzI9Tx9LpWv7 zTRrf{7ZbJKtkC|h=W8v8hYPctW$Tr_Mzu=K7yP2+j9_nN&YbMkK6SyRC87!!xG^n7(N36do1usKI- z5vx=IazRc-vlx(I>k2!^<&(PPFN2GR$O+a5m53xYc35b9nB`brMy`xtm~;RYc9A>Ll9WAZrMfGANzsF##);X;3r z+Q&fl(@PF9@Trs^GGK>vG#%*ns&(ssTS+_u7N~tjH(}`bSiph=Tt&6b@_4Ig^yv(l zPY$Oj{`qm1g534%xk~@bB=IX27xFHfPFNe;kpyYovU^Y8N}v>))X)h&0j3SA~r5 zsScC4K$zWq6J3}{#R1mf+Sje@%{$jPCl|VRdWZ*Y>B4(lBCi%(HsA1(q!O6*F%19A zXJ|+^UaWEilmpj0EsQM9T$?J6=E_e)>?3ckDT7*JsYQs1I$FRL1Seza$rO+FWY`py zpWG;2t^9+gPj^GwXbJ?96fJT$V*Gry=@4_}g#dz)eOgJ2;Td){aZhgT?kP^I3YW>B zM`eRqKWK0Ozc_Tbe6(GoLt^}`#2yyLLFvn(&-;1W#MDZS-k=%yerYx|H=13FGUxI_ z2dp`k!eW_h(2}X;Vk9hF#9Z5z{0E{IWK|^+>1vK&hP1|A+J*wYDfPr8qhgZu5C@j; z7Ju4LyS*g==?v$aZ~WL(sJnUoJ7IKP{!EqLo0ov&6{u_K=^10g;&ERz!V?0)+ek!F z=J4@Th)q;b*gL7IAfkEbvEx7h`@3uVZdzc%V-1mMAlk`GT_K|Ry5&Q10T!48bFh^R z(Qj|o_EZr!8YtpgJl55IlA_^l)cwx4N{%4aN&KwtJ=~4K*^k zqUVzr1zb}>9l6ZxYB$>i#C*j;;%|)4l0<|;YHFH)b@KX{O_DXQ11K&pOevdS*`bkh{LFsp;l)-1AjLnH*v$uYUZsn)s*i(a7AwiP1 zF#+(j>fuJwIWhqQtbkDOCQTLlbb@_^YE5z)Q;m%4BnyZQ( zM;A^Uy^p6U>+EdM>UO>>Okbv?u(C)R%ZJ{)zID*9>XkDpO#UL?v2~rK;AI7tuwA zMk=Tn00xE+m*bW^5YhYg$Qu^rGou)+%rNm{l}6VEwEue<&y#>8g0XM$6{pW`Z6LE^ zekGqwFa3Nop(vxa1?Qj%MSRT7$L7XzIWvNQ40{Mu$}xU(4ZdYLR=Wo_p)l|_`lgVFu2V>)hgR7@u9iT3*?oS)#Rh3o=Ov4w- z4GOA@vYcu6?>ptI?Nt|17D1?Fqd)Uz>D)3*Z(g9}wDo`0n;7-rmA~~K`~Xe5q|U#5 zbcwO+-7B>4TP(Dd3V|%Zic8eKYlcz;cen_*98M6B0$dJ#NF)gurQEJXUd{Wk^+d2= zXu)q16FdJ=<{X7^HaNpEEo40CBx>L0HhLR2#dZ9G(N+BLB|@Ifi3*Q0Lyi)Ps!CN( z#Pcgzbjbi&_D>8RKG8Qv|7 zB}7FJw9Syt_9TUhIbX(BQc9b3(LH77K%^eL|mU+IE0KgpqTl3<1 z1HS-ZPl0cFa|3|i0kZ#>N1g!oQ8>Dt9Eg$tpCBqEDOky`?JF$?41xjx0RaK9lXxTk z`^g^w^Lb;g<6`AtPot-!XKbLSudPpx@VQeAv8AuAJsrs4>jMKIEd~yOUsJsE<@05% z&+9*vgZ_M~XJu(`U};b5Y+-(mvue9KaNnU-^V5;>A(>btw3dWKk*sD{Sniu7O`&KO zvzRuYC8&0chBwMB;G4InZdd-{*-kBjs5QlKZNXDNlFw(}S8xKa+r=_=LTJ)2Xv3ou z)jUTCiBE)E!)FGEhr?+bGKW<~UN6G_1dq$2_`f&}MHg;`Vtb^3ijW<2FFMcm7&#E- zZ5(2!l1t*ocn~SXM&!s???MU|b=FJHa`h@73e zKCMmvFlGepx(wAB9^r+V3f%%*;Ak;2u0>E|$kUNNaRG6@vM>v-VOf8()x z<-Y22BlFb`brv)E671qy(15vwg=iW=jfCrtSS( z9A7me$`Z#F{vE-UEA&L7*99}9OPc_;mK{U}suRvMuj7U}7d^H!gj@havq;9?etD@t z&JZ#Jkf~A*uVVt^@HJ}0T}>Pq*y<^f4RE~Bc`ZFN(pMvy6b8x|)?CC~G%9O+2$Yyi z<)XBEz5yl6BYJj01kFKb8kwgbIQnV7bZ&Znx^YoQNdrLrP*kHoNl)bR9>yCfqxGMH zzT-cs)9n5wlHsXm>*A1-JUR3@I)OF3#33qPvUUS16dP)8ip3Ck8n^KI|V2T1!Dae%qggp+!DAb?d zsh$h-8l$gd5=p~lJjCmea(BD5DEl0wU5tQ$Er3}zG4$R9I>+J541U}cXRYRRCKcj! zb{&TPFz}g^G?f~@J0j!}L<9Hzr9rBXx-*aqn6uxB>lxlG@T(-v0}Fb6Ou-H6ThxWb z#}u5l$49QG+8emm+-33m^z>0M?8>}WcXOH7FZQ{tVE^^BQCx1)3_ziCN3j7TyQB9) zLMY2)565$6V>kM~seHjsPprY)V2v*T7m3dA*3>d5EwY{ACiNsZpZlI}&8-%Ic`3cz z5|!#O#*s=7tC3rUq@LIPeXl9bUvcobsgdzK7_NsMZn+qd@w^ypG(^AWX*<{F#iG)~ z5B2@*LBm>P#SPrOj-=n1qVafO?d&q>2d=&z|GG1|F#vB&U~9xmE9IHn=nCBZ?nuk~ zP<;oy(&0{<*lBTkA42`+y}c%Ist&5c?1GeTig-vU}$M$N(+v1-~q+B=kV z792&Lh{uku0`S(F=*>=J6?Ga_yEC>{<~oxe8a*g3cHNCEYguV7%5Ye-!QI^Z?Q7rr zy*ntt0J+wJc07eF{8r)M$k)k|s(6^!lXm!yqK>&y9;xuu1nl5LUrCND;Kvrp6Y1p2 zyO?Fxl0&r>Jb1qfb`_^l86OEk$RCH_7sgJDfr<~O1Il6Y*KFD*&RH3iYcVGSRn7!g zx)M&>r=iz?hI#KtwpgH8qY6!Bq$*iT2dfdJ#aqR$!9ingHHv7aDMdACG@8+{d>5ya z?r61rS#Ro+?EK)J@Z|i=_4Yi!clH)_2%1>Gzg4X3db=*08(P4s51ujWwYSza=jRXn zD<|OHV+4sGP-K8JM<$EYh2{C`VY$hQY?4%J-MRxR80AE_WUc#kBVH4*Lq=r>d0019+P9pUflF0*WX?|3_TB(Vj(Mtd-&NhrggGqz+O19~WEDz$tp0FD5k zfBiVLOG!NlG3T^D3O1O8z8C>rn{(omaf~{tAUXs^A>nDmmXkPyY(OH#dMA@<;> z^7s|&n?2aX(lH9Wg>F^L-qj&MDe2Gwrun%?!;}n#LU~Y*3g$Szeu*H4Rzxk{PbK7= zZ&jKUF=-6DRK+3G|32CzL;@9HtB35Gx8)Iz@}&@=J6=Xgc|E86a*!RK1w7dAAZQ zQ#!*lYRD9xFl0%1c~Qys#TK^KWI$YyXHP+;B+_Y(w0V+keeapLR>I#W~S0fnZhl*WTL9Its}Z6_t3S_mjHvHVX^8dpzluMU{Yxy z`hg(SOpwcR=x)f#oi8qrK_=BQw1aIdK^A08ij#0~gp~wu1<_#J0kMtUz9bCjYhdyn zD=M(-W;v|uS@mqm9NtAZrui1irMc9r86yaSMTdLqMPru{Im6ZmZe=D7l<3AlmelVz zMD^&1wj~m!)mke)eo@7dL(Q!$G#`k|k4Y7S48S3hPaOh6_)WeVzX<98fp-(-k{SfAj^UPiA{!Ct7e?ylXw z2&U3SL$lI&JnmRZwPG^iXmE7xk^^vai<}Fu_vjt{H~}B^(ki4^@#XE7{ri zs%#ES00vIq)`y8>5HVsT1&(PgRXb#k0DwjQyE^F!UtyU5-rGVHyS=mF#e4-(w5n}& zv@YUA<=1AWJ_TPhOfpf0uJ@W|I@XY8(b_r!K)%8v z0F2$ytBNWlBLY1+F59$?@z7`vc;1TNUMWeu$VSs(R_0B~uX8PwNf~>iX1k59v`aMI zmIV@Z!-V{hy|kZTEPmdK>Dph5QY7UcIR^)m&)N45A}Cw$gemJKxezYYN-k*()J43C zs7Nw-9ciIW;2fqU_Z@k*KsWM0)EmplK6wTnAut4?P>lAM(&#%`_&ODF;$ zPi5ny0agE^gDW&;N1vs;sYMwn)1Tv%&8ID#L8yT81K2-c2f$BMnMKbM=T*|+>!DS- zpHo~{7~eV-E5?tP%$fkDUtC?5T!phEZ~-(PUk$nzSz0q+7!q~^Yq(Ppew8I3?KTsW zPvoI{^w&Zk6=%X^s$R8& zg4|n6+B%OM9~}qpB@lON9?C*{_ml70M2p52H2H!ei}-7WjCDma(b!9pmD9c!q!g)ZLnA;c7m9+S@@ z>zP5j+_}tN6622%Vb@{tCIAe-9hxy5X830E#^wt9o{Wi5BQkvb-4bl}AAxe+GrfhS z1X^Ll82aJ(kFc{pc))AF1L_xVB7oI}^A#bAr+8k;n1h+mDR2bmc#lEe2Socc1PCM| zPU1YP>yVp8(yT!zbZWgu96>EE`BpZYwa$=)Y3u5`)fYE~XA@z^GbN{+w88=ye>`-(fXe< zv!$+fP4va!Pc|7bKW)<|tqlaIIKWOQC~2cGGndN6Z(`z{I#L5(=e8ef)_^isf;?<6 zY~%l)H{jQ7NVCB6aK7MpR=T>((fH9xzfsAPa@muRRrz6sRrCS=+iA}++R$`|2LPzl z`)^MB?==8B1ABWDOC!7AUVDeCn%&A*1kcY1=bvssdvJ02dLkw!CfeT2b}yu7p!U%X zxT0`Zmu;~=h3c}VQ^R7UjqOzD`>R$;EwA)p{liq`<1!m)BSrq)-^ycklJWAMikGz_rnnKfsqZ zt>Gvvj3kWMch$ucbA`3BtsmQ{7xN1Mn}6s?660{%oZ~`3zzoI=#ob$aNer?=G+aCd zHMY>=6|()PP302#!X%&nQP}ASF(B?Yp2-T|>D|1O$qz&^&HkqL%S+jro}IonwLODBN0L0AD?cl4GcOq7>eFO{w=NEhve7-bOg#dC z<%@+ts$3GO(f<`uA_}Z9CXSai;|xH%5mnVN31+b~nQz%w0RD_;aw=n0c`W1?+ZVK* z4yD!WRgmEj!7`txD+jJUsPsS$E|^6YKJqwn$bCnh&W*y(v2v+^syKIYY?B3@CaecwiAwD`2$Z&Lg}_RtQjuUo|zDKF+sK@y-ve5k*PNd!PC1p zifI-I^_efabxSn6ghZ~-ix-qJ-xX>)EVrPP;2^T;DOk6R-KY4cKpZ63C)eJat#ZW+S}eb+znZ{ws0 zCHN!^P~-J?;2T&!C@_Ii7$R|X&(PbVv`-605I0B`*!d6h2#-;*yq(q8z@C5(XqR3A zmzG)a)a9_$P4tkNMpFy#Fbt`P@oD)x?7>-@0#>6Kjd+5xI}L%d%csvW5L9T>X3o(K zqn?f3e=x%fnZlMZH>5TvZ%q-fvR#EJtzPyKv%5s*>QBxkOz z)u|7f;&XzCb2dj@hI}CDJlKn72^jP$~*?Co%)_GNt{xVYJP`qDZwcW-n- zub3B_fl|`>wzOZ?aWJ%EnzKhR@-~Te7XwqJj6_|*=6va+YNDU$H6L5%T&Or>+*#+@ zn9JK`qY*er<^?1T&j+z}x1vT4mw0CKvWuC<+S6n8PNi46+Y{vP`Jw<7O#T5B0Kk>( zzs(mApYw%by;O3(g*3y(FwOtVFd0qoi%9hO3WeX(*Y% z<26-nM8EdP7xeH0?(m8K+S$bPQXyH=wBb<(!b6I@utk1;!;9M;&i13`m-JB*+Azp= z>V1SXtFeDUW?gCISYF2_mJsu~{&y4$!SB>WtzS$VqG==wvsGH=WZyPkjm*@5y6IuI z5dv1^0nQ!2(Mu@B*HJA#6lRi7co+94PXVG3R@dtN{Gef}UHzeYYBm)-Sy03dqXTpB zm{19Gc;5la&I(jX(7^1Rp!;;>HhRN`75QenzFs4&B5sh3IQNy%+E7L}_y(X5a03T{ zn4ZW6(~w@&I^D1szzG}FNMCOpC?1cVSd?EI`vCoWikmf{qPgT3bycS;z{~Nwiknx0 zci&E7p2Tpc+a}hBp!r-X#MT}(k3gy%e>*cd?%_DZ&B6jd_C6iloglK3m(gpZOx)R} zRe-^TBQ0MQ1ihv1AgPXW7w@EWudH;U%BK3dN<$-(ThjFzIU1lsH-pE{Z)c+MuoW92 zFU*1KrRRa+m8m%iIp;1o#LJ8r_1k61{cS=9Mn>9-$qp!F*C)~!cY$^FpWpr2i8dL> z@6Lf60B)?ISzm5ae*pa!1dgEzhgm=XfMwwSCJ0c!4F`J{bA$ge8_re5qIOx4Ixnl} zQS_~9sk_d_rQlRxSi8khmr~M!RdcB=<#KstJ;$n~Vo*p%64z2MLJ-kcgTTgKlofs{ zE4Ux8PZoto!X-oZ-jLB@OSL0T5TVAof9$=z@B4K_%|_xjldkvpxubq zpz|H7n@3y?Q@L~+hv(B<~PID~^cV1py(P_-K zRtwhFp%)n`@QsSv`ovLcX=;Lu@6G=iaTJPpH~@|8$IT%bT|(^=SkJXHHlC5*z$0Jt zvN;e<1x}=?x{Ph9j17u*XaWPG|1N#?5{wx098Z9Q#>l97(6hE_w4hQQCERNdqRrBy zG;%>Od?YNarPL)gE_X-W(s>#|%EQ?3*C!DEx69c%Vt~@sm*;qx_X;>|hi$)s09&q46_-EU~;Wjo3F>a_Ir0)Ll^|BaY*C{<1Vo zL}o0K+nK8RPD*M+A3N|gdN1SVwn4pD_2TCO_-igNqIvtTc$=Gql2YBN?O&)b*#oE! z+ByyB<&RLS1r51rz1ER}g`LY2q`^>RiBNqphMoOws1)r{KZfHGA?T6x46}n#DQdy$ z@xDbOnt#!$6(Oz=tXLdr3GbiEu+_Ry-4?n*FB6ircwL`XCaZ|5-s1(S;V*tVb!rQw z>Z%f!gMwk+Gqr8FrZgv}vl%Vv)#AcDYtoLK zRK=9ASun=0fN9m#Sh2c>qs7g3LnyTd9g&{m!?iYyc6#vR77?4uqRAriNFVp}Fj}y9 z{d`9+?Qk>$+~FB=`F;>#$lbtUcMeGNs}}|z(`YK9xNCPN4Q7g!i8!Do^PAg`o?mQm zhHMMf6{<;qLpFgT7i9w35xvJ>iphms0bK+Nlet>uxG5aVsG(hfV!kI!zAx20t?e&}vCs%$L%~Ta91dcw>m*F<))R+yt$*KY|~9-vsvPs!sIcVHsL-(<-`)Hq%5! zqMblZ{`H$ElWo71=&+KJnpLia;%rVxAsYk*>8pGxi_y)lbt-r7z&6WnmyAuZEC>Fe z8X^Y{O3bzsjHp`yLwJ!^H21Z~pfsQ^`^&(HdD&$eWu2!4z0>-OKJf|?j`#zm`;1nF zTcb;%#Jx8x9X8!I0=M%FtXV>R-ff1j?vm%kb#tN;H+*EN*0#IrOC*C(ePL%ykY?4->MGDl|NUNI+zhl3))lqa*Q#@er-Xl)0C^hIRenI3a z6V!_3bn%?k{DKyWY_bjeGvgj*h1pHu{WhC3< zmh+o5c2EXPkjAgTM{TED<+Dh)Cmbgx&Q9pT?Y$n6%!g>sb5fTV;n-Eeq~~-|>MiON zGJP#YrJ;uID!6$_J=wR5RR3zsGM6wOeAQC2=F(|Ll!>i-;PlnO^oDupj2WXYI@w*E z3xbJVZg9~iKgAB+{Ojyd@kbH1ouXaXB=ugv3BFmWG7zJ;X&k+fs{+Tg2dn z1^3q+TpM08?6-<;P1`e_)@h8wCWqb+dHtM4z}Dv8nOLHbd8eq;Yx|bQkV??|3{!SZ z%fhq`K1D@u!DA-LIVJ6RdnQ^A!kMe4xuFKF_z8A}y<~(cR2=!vXth4-T7Zv4DdgU%a?3DIS+9m8l&+ z$EHU9u0@d_0*}m6m?7Y)Bq@Q$!@8Jx;Fb~ce!FJ%wUw|Nj=f)mOX&p9XViDrxuQ5^ z{&cGx1Ourdaz%B%n0ejZ#@@rxcV##R`kwFc@#69W zPL`A$TAz6x*vGARQ*Sw?+6jB+*=`$|! zT^{kd!q&f*WY7HQhdZFj)Fx!8IR8pAk|BbItSFb@{%gvdp;pbYviu?)W46yjs z5}$96FF~l4)~YGDLIS1Y?7I7=+ZaIE_;lNjH^VY-f^*DdE-zzFsDSL&em zC9Tr5GxcS_OR5}8AN5{bGiZ`W97Ukk2^C<@_!8iGTO{f#haUq(&@A77I%d5^cDLp~ z>5oLNU}2UAq0T2~_3vcEr-%U?MmeQh8bRvvMD>E~*ns>jwWJUKDWm6#YRP}F&0P=# z?56MBu6lvRq&Ky_6<91DdHuNm9&tK>mc$r= zq~AEBP87aJb-$aY;`Kj1RNAIf1NG-H%mMi=y?{U{04M-|bd=@*Bh2sN@ca7hPX8S& zOg`Of7i)um#d4xUW=2W?0Qi0V7N$Qz;`3JC*ug^AQpd#Hj?Vs%TUu*Nqd%zpF(m&Q z$@N=@{s{@6bpIL*_OFGdb|GKX5_aajY{=WA7ub6*zME}mH z;j%whA^sKXuM@~`C-qO5srakQ`mcC@)trB?r*z}rC!0So|LD*^O8@})J@Wp9sHT5c zPk+_3e;15D@c;mRYuZ0y@E_>>UGM%cr9Zm)H|8J8^S7A&34qQ2UZek@hyPnM|1N>b z|3LIlE&QJw`CAYF36cLm<=?dOeAv- zziRRSUpiL*KX)Lf`-zyJF` D*&zY~ literal 0 HcmV?d00001 diff --git a/the_baxter_mimic/baxter_mimic_client.sh b/the_baxter_mimic/baxter_mimic_client.sh new file mode 100644 index 0000000..4d6b9df --- /dev/null +++ b/the_baxter_mimic/baxter_mimic_client.sh @@ -0,0 +1,191 @@ +#!/bin/bash +#Make sure you are running the server and the Processing sketch if you actually want the robot to move. Needs a Kinect V1. +#We had it up and running on an ubuntu machine. +#The processing sketch throws NaN/Div0 errors every so often, hence the infinite loop. +# based on the original from Rethink Robotics + + +# This file is to be used in the *root* of your Catkin workspace. + +# This is a convenient script which will set up your ROS environment and +# should be executed with every new instance of a shell in which you plan on +# working with Baxter. + +# Clear any previously set your_ip/your_hostname +unset your_ip +unset your_hostname +#-----------------------------------------------------------------------------# +# USER CONFIGURABLE ROS ENVIRONMENT VARIABLES # +#-----------------------------------------------------------------------------# +# Note: If ROS_MASTER_URI, ROS_IP, or ROS_HOSTNAME environment variables were +# previously set (typically in your .bashrc or .bash_profile), those settings +# will be overwritten by any variables set here. + +# Specify Baxter's hostname +baxter_hostname="baxter.local" + +# Set *Either* your computers ip address or hostname. Please note if using +# your_hostname that this must be resolvable to Baxter. +your_ip="192.168.1.3" +#your_hostname="my_computer.local" + +# Specify ROS distribution (e.g. indigo, hydro, etc.) +ros_version="indigo" +#-----------------------------------------------------------------------------# + +tf=$(mktemp) +trap "rm -f -- '${tf}'" EXIT + +# If this file specifies an ip address or hostname - unset any previously set +# ROS_IP and/or ROS_HOSTNAME. +# If this file does not specify an ip address or hostname - use the +# previously specified ROS_IP/ROS_HOSTNAME environment variables. +if [ -n "${your_ip}" ] || [ -n "${your_hostname}" ]; then + unset ROS_IP && unset ROS_HOSTNAME +else + your_ip="${ROS_IP}" && your_hostname="${ROS_HOSTNAME}" +fi + +# If argument provided, set baxter_hostname to argument +# If argument is sim or local, set baxter_hostname to localhost +if [ -n "${1}" ]; then + if [[ "${1}" == "sim" ]] || [[ "${1}" == "local" ]]; then + baxter_hostname="localhost" + if [[ -z ${your_ip} || "${your_ip}" == "192.168.XXX.XXX" ]] && \ + [[ -z ${your_hostname} || "${your_hostname}" == "my_computer.local" ]]; then + your_hostname="localhost" + your_ip="" + fi + else + baxter_hostname="${1}" + fi +fi + +topdir=$(basename $(readlink -f $(dirname ${BASH_SOURCE[0]}))) + +cat <<-EOF > ${tf} + [ -s "\${HOME}"/.bashrc ] && source "\${HOME}"/.bashrc + [ -s "\${HOME}"/.bash_profile ] && source "\${HOME}"/.bash_profile + + # verify this script is moved out of baxter folder + if [[ -e "${topdir}/baxter_sdk/package.xml" ]]; then + echo -ne "EXITING - This script must be moved from the baxter folder \ +to the root of your catkin workspace.\n" + exit 1 + fi + + # verify ros_version lowercase + ros_version="$(tr [A-Z] [a-z] <<< "${ros_version}")" + + # check for ros installation + if [ ! -d "/opt/ros" ] || [ ! "$(ls -A /opt/ros)" ]; then + echo "EXITING - No ROS installation found in /opt/ros." + echo "Is ROS installed?" + exit 1 + fi + + # if set, verify user has modified the baxter_hostname + if [ -n ${baxter_hostname} ] && \ + [[ "${baxter_hostname}" == "baxter_hostname.local" ]]; then + echo -ne "EXITING - Please edit this file, modifying the \ +'baxter_hostname' variable to reflect Baxter's current hostname.\n" + exit 1 + fi + + # if set, verify user has modified their ip address (your_ip) + if [ -n ${your_ip} ] && [[ "${your_ip}" == "192.168.XXX.XXX" ]]; then + echo -ne "EXITING - Please edit this file, modifying the 'your_ip' \ +variable to reflect your current IP address.\n" + exit 1 + fi + + # if set, verify user has modified their computer hostname (your_hostname) + if [ -n ${your_hostname} ] && \ + [[ "${your_hostname}" == "my_computer.local" ]]; then + echo -ne "EXITING - Please edit this file, modifying the \ +'your_hostname' variable to reflect your current PC hostname.\n" + exit 1 + fi + + # verify user does not have both their ip *and* hostname set + if [ -n "${your_ip}" ] && [ -n "${your_hostname}" ]; then + echo -ne "EXITING - Please edit this file, modifying to specify \ +*EITHER* your_ip or your_hostname.\n" + exit 1 + fi + + # verify that one of your_ip, your_hostname, ROS_IP, or ROS_HOSTNAME is set + if [ -z "${your_ip}" ] && [ -z "${your_hostname}" ]; then + echo -ne "EXITING - Please edit this file, modifying to specify \ +your_ip or your_hostname.\n" + exit 1 + fi + + # verify specified ros version is installed + ros_setup="/opt/ros/\${ros_version}" + if [ ! -d "\${ros_setup}" ]; then + echo -ne "EXITING - Failed to find ROS \${ros_version} installation \ +in \${ros_setup}.\n" + exit 1 + fi + + # verify the ros setup.sh file exists + if [ ! -s "\${ros_setup}"/setup.sh ]; then + echo -ne "EXITING - Failed to find the ROS environment script: \ +"\${ros_setup}"/setup.sh.\n" + exit 1 + fi + + # verify the user is running this script in the root of the catkin + # workspace and that the workspace has been compiled. + if [ ! -s "devel/setup.bash" ]; then + echo -ne "EXITING - \n1) Please verify that this script is being run \ +in the root of your catkin workspace.\n2) Please verify that your workspace \ +has been built (source /opt/ros/\${ros_version}/setup.sh; catkin_make).\n\ +3) Run this script again upon completion of your workspace build.\n" + exit 1 + fi + + [ -n "${your_ip}" ] && export ROS_IP="${your_ip}" + [ -n "${your_hostname}" ] && export ROS_HOSTNAME="${your_hostname}" + [ -n "${baxter_hostname}" ] && \ + export ROS_MASTER_URI="http://${baxter_hostname}:11311" + + # source the catkin setup bash script + source devel/setup.bash + + # setup the bash prompt + export __ROS_PROMPT=\${__ROS_PROMPT:-0} + [ \${__ROS_PROMPT} -eq 0 -a -n "\${PROMPT_COMMAND}" ] && \ + export __ORIG_PROMPT_COMMAND=\${PROMPT_COMMAND} + + __ros_prompt () { + if [ -n "\${__ORIG_PROMPT_COMMAND}" ]; then + eval \${__ORIG_PROMPT_COMMAND} + fi + if ! echo \${PS1} | grep '\[baxter' &>/dev/null; then + export PS1="\[\033[00;33m\][baxter - \ +\${ROS_MASTER_URI}]\[\033[00m\] \${PS1}" + fi + } + + if [ "\${TERM}" != "dumb" ]; then + export PROMPT_COMMAND=__ros_prompt + __ROS_PROMPT=1 + elif ! echo \${PS1} | grep '\[baxter' &>/dev/null; then + export PS1="[baxter - \${ROS_MASTER_URI}] \${PS1}" + fi +while true; +do rosrun brazos brazo_control.py +done + +EOF + +${SHELL} --rcfile ${tf} +rm -f -- "${tf}" +trap - EXIT + + + +# vim: noet + diff --git a/the_baxter_mimic/baxter_mimic_client.sh~ b/the_baxter_mimic/baxter_mimic_client.sh~ new file mode 100644 index 0000000..23ad712 --- /dev/null +++ b/the_baxter_mimic/baxter_mimic_client.sh~ @@ -0,0 +1,188 @@ +#!/bin/bash +# Copyright (c) 2013-2015, Rethink Robotics +# All rights reserved. + +# This file is to be used in the *root* of your Catkin workspace. + +# This is a convenient script which will set up your ROS environment and +# should be executed with every new instance of a shell in which you plan on +# working with Baxter. + +# Clear any previously set your_ip/your_hostname +unset your_ip +unset your_hostname +#-----------------------------------------------------------------------------# +# USER CONFIGURABLE ROS ENVIRONMENT VARIABLES # +#-----------------------------------------------------------------------------# +# Note: If ROS_MASTER_URI, ROS_IP, or ROS_HOSTNAME environment variables were +# previously set (typically in your .bashrc or .bash_profile), those settings +# will be overwritten by any variables set here. + +# Specify Baxter's hostname +baxter_hostname="baxter.local" + +# Set *Either* your computers ip address or hostname. Please note if using +# your_hostname that this must be resolvable to Baxter. +your_ip="192.168.1.3" +#your_hostname="my_computer.local" + +# Specify ROS distribution (e.g. indigo, hydro, etc.) +ros_version="indigo" +#-----------------------------------------------------------------------------# + +tf=$(mktemp) +trap "rm -f -- '${tf}'" EXIT + +# If this file specifies an ip address or hostname - unset any previously set +# ROS_IP and/or ROS_HOSTNAME. +# If this file does not specify an ip address or hostname - use the +# previously specified ROS_IP/ROS_HOSTNAME environment variables. +if [ -n "${your_ip}" ] || [ -n "${your_hostname}" ]; then + unset ROS_IP && unset ROS_HOSTNAME +else + your_ip="${ROS_IP}" && your_hostname="${ROS_HOSTNAME}" +fi + +# If argument provided, set baxter_hostname to argument +# If argument is sim or local, set baxter_hostname to localhost +if [ -n "${1}" ]; then + if [[ "${1}" == "sim" ]] || [[ "${1}" == "local" ]]; then + baxter_hostname="localhost" + if [[ -z ${your_ip} || "${your_ip}" == "192.168.XXX.XXX" ]] && \ + [[ -z ${your_hostname} || "${your_hostname}" == "my_computer.local" ]]; then + your_hostname="localhost" + your_ip="" + fi + else + baxter_hostname="${1}" + fi +fi + +topdir=$(basename $(readlink -f $(dirname ${BASH_SOURCE[0]}))) + +cat <<-EOF > ${tf} + [ -s "\${HOME}"/.bashrc ] && source "\${HOME}"/.bashrc + [ -s "\${HOME}"/.bash_profile ] && source "\${HOME}"/.bash_profile + + # verify this script is moved out of baxter folder + if [[ -e "${topdir}/baxter_sdk/package.xml" ]]; then + echo -ne "EXITING - This script must be moved from the baxter folder \ +to the root of your catkin workspace.\n" + exit 1 + fi + + # verify ros_version lowercase + ros_version="$(tr [A-Z] [a-z] <<< "${ros_version}")" + + # check for ros installation + if [ ! -d "/opt/ros" ] || [ ! "$(ls -A /opt/ros)" ]; then + echo "EXITING - No ROS installation found in /opt/ros." + echo "Is ROS installed?" + exit 1 + fi + + # if set, verify user has modified the baxter_hostname + if [ -n ${baxter_hostname} ] && \ + [[ "${baxter_hostname}" == "baxter_hostname.local" ]]; then + echo -ne "EXITING - Please edit this file, modifying the \ +'baxter_hostname' variable to reflect Baxter's current hostname.\n" + exit 1 + fi + + # if set, verify user has modified their ip address (your_ip) + if [ -n ${your_ip} ] && [[ "${your_ip}" == "192.168.XXX.XXX" ]]; then + echo -ne "EXITING - Please edit this file, modifying the 'your_ip' \ +variable to reflect your current IP address.\n" + exit 1 + fi + + # if set, verify user has modified their computer hostname (your_hostname) + if [ -n ${your_hostname} ] && \ + [[ "${your_hostname}" == "my_computer.local" ]]; then + echo -ne "EXITING - Please edit this file, modifying the \ +'your_hostname' variable to reflect your current PC hostname.\n" + exit 1 + fi + + # verify user does not have both their ip *and* hostname set + if [ -n "${your_ip}" ] && [ -n "${your_hostname}" ]; then + echo -ne "EXITING - Please edit this file, modifying to specify \ +*EITHER* your_ip or your_hostname.\n" + exit 1 + fi + + # verify that one of your_ip, your_hostname, ROS_IP, or ROS_HOSTNAME is set + if [ -z "${your_ip}" ] && [ -z "${your_hostname}" ]; then + echo -ne "EXITING - Please edit this file, modifying to specify \ +your_ip or your_hostname.\n" + exit 1 + fi + + # verify specified ros version is installed + ros_setup="/opt/ros/\${ros_version}" + if [ ! -d "\${ros_setup}" ]; then + echo -ne "EXITING - Failed to find ROS \${ros_version} installation \ +in \${ros_setup}.\n" + exit 1 + fi + + # verify the ros setup.sh file exists + if [ ! -s "\${ros_setup}"/setup.sh ]; then + echo -ne "EXITING - Failed to find the ROS environment script: \ +"\${ros_setup}"/setup.sh.\n" + exit 1 + fi + + # verify the user is running this script in the root of the catkin + # workspace and that the workspace has been compiled. + if [ ! -s "devel/setup.bash" ]; then + echo -ne "EXITING - \n1) Please verify that this script is being run \ +in the root of your catkin workspace.\n2) Please verify that your workspace \ +has been built (source /opt/ros/\${ros_version}/setup.sh; catkin_make).\n\ +3) Run this script again upon completion of your workspace build.\n" + exit 1 + fi + + [ -n "${your_ip}" ] && export ROS_IP="${your_ip}" + [ -n "${your_hostname}" ] && export ROS_HOSTNAME="${your_hostname}" + [ -n "${baxter_hostname}" ] && \ + export ROS_MASTER_URI="http://${baxter_hostname}:11311" + + # source the catkin setup bash script + source devel/setup.bash + + # setup the bash prompt + export __ROS_PROMPT=\${__ROS_PROMPT:-0} + [ \${__ROS_PROMPT} -eq 0 -a -n "\${PROMPT_COMMAND}" ] && \ + export __ORIG_PROMPT_COMMAND=\${PROMPT_COMMAND} + + __ros_prompt () { + if [ -n "\${__ORIG_PROMPT_COMMAND}" ]; then + eval \${__ORIG_PROMPT_COMMAND} + fi + if ! echo \${PS1} | grep '\[baxter' &>/dev/null; then + export PS1="\[\033[00;33m\][baxter - \ +\${ROS_MASTER_URI}]\[\033[00m\] \${PS1}" + fi + } + + if [ "\${TERM}" != "dumb" ]; then + export PROMPT_COMMAND=__ros_prompt + __ROS_PROMPT=1 + elif ! echo \${PS1} | grep '\[baxter' &>/dev/null; then + export PS1="[baxter - \${ROS_MASTER_URI}] \${PS1}" + fi +while true; +do rosrun brazos brazo_control.py +done + +EOF + +${SHELL} --rcfile ${tf} +rm -f -- "${tf}" +trap - EXIT + + + +# vim: noet + diff --git a/the_baxter_mimic/baxter_mimic_server.sh b/the_baxter_mimic/baxter_mimic_server.sh new file mode 100644 index 0000000..d83f1dd --- /dev/null +++ b/the_baxter_mimic/baxter_mimic_server.sh @@ -0,0 +1,185 @@ +#!/bin/bash +# Modified from the original by Rethink Robotics +# Run this first to get baxter going. Then run ./baxtermimic.sh in a new terminal. + +# Clear any previously set your_ip/your_hostname +unset your_ip +unset your_hostname +#-----------------------------------------------------------------------------# +# USER CONFIGURABLE ROS ENVIRONMENT VARIABLES # +#-----------------------------------------------------------------------------# +# Note: If ROS_MASTER_URI, ROS_IP, or ROS_HOSTNAME environment variables were +# previously set (typically in your .bashrc or .bash_profile), those settings +# will be overwritten by any variables set here. + +# Specify Baxter's hostname +baxter_hostname="baxter.local" + +# Set *Either* your computers ip address or hostname. Please note if using +# your_hostname that this must be resolvable to Baxter. +your_ip="192.168.1.3" +#your_hostname="my_computer.local" + +# Specify ROS distribution (e.g. indigo, hydro, etc.) +ros_version="indigo" +#-----------------------------------------------------------------------------# + +tf=$(mktemp) +trap "rm -f -- '${tf}'" EXIT + +# If this file specifies an ip address or hostname - unset any previously set +# ROS_IP and/or ROS_HOSTNAME. +# If this file does not specify an ip address or hostname - use the +# previously specified ROS_IP/ROS_HOSTNAME environment variables. +if [ -n "${your_ip}" ] || [ -n "${your_hostname}" ]; then + unset ROS_IP && unset ROS_HOSTNAME +else + your_ip="${ROS_IP}" && your_hostname="${ROS_HOSTNAME}" +fi + +# If argument provided, set baxter_hostname to argument +# If argument is sim or local, set baxter_hostname to localhost +if [ -n "${1}" ]; then + if [[ "${1}" == "sim" ]] || [[ "${1}" == "local" ]]; then + baxter_hostname="localhost" + if [[ -z ${your_ip} || "${your_ip}" == "192.168.XXX.XXX" ]] && \ + [[ -z ${your_hostname} || "${your_hostname}" == "my_computer.local" ]]; then + your_hostname="localhost" + your_ip="" + fi + else + baxter_hostname="${1}" + fi +fi + +topdir=$(basename $(readlink -f $(dirname ${BASH_SOURCE[0]}))) + +cat <<-EOF > ${tf} + [ -s "\${HOME}"/.bashrc ] && source "\${HOME}"/.bashrc + [ -s "\${HOME}"/.bash_profile ] && source "\${HOME}"/.bash_profile + + # verify this script is moved out of baxter folder + if [[ -e "${topdir}/baxter_sdk/package.xml" ]]; then + echo -ne "EXITING - This script must be moved from the baxter folder \ +to the root of your catkin workspace.\n" + exit 1 + fi + + # verify ros_version lowercase + ros_version="$(tr [A-Z] [a-z] <<< "${ros_version}")" + + # check for ros installation + if [ ! -d "/opt/ros" ] || [ ! "$(ls -A /opt/ros)" ]; then + echo "EXITING - No ROS installation found in /opt/ros." + echo "Is ROS installed?" + exit 1 + fi + + # if set, verify user has modified the baxter_hostname + if [ -n ${baxter_hostname} ] && \ + [[ "${baxter_hostname}" == "baxter_hostname.local" ]]; then + echo -ne "EXITING - Please edit this file, modifying the \ +'baxter_hostname' variable to reflect Baxter's current hostname.\n" + exit 1 + fi + + # if set, verify user has modified their ip address (your_ip) + if [ -n ${your_ip} ] && [[ "${your_ip}" == "192.168.XXX.XXX" ]]; then + echo -ne "EXITING - Please edit this file, modifying the 'your_ip' \ +variable to reflect your current IP address.\n" + exit 1 + fi + + # if set, verify user has modified their computer hostname (your_hostname) + if [ -n ${your_hostname} ] && \ + [[ "${your_hostname}" == "my_computer.local" ]]; then + echo -ne "EXITING - Please edit this file, modifying the \ +'your_hostname' variable to reflect your current PC hostname.\n" + exit 1 + fi + + # verify user does not have both their ip *and* hostname set + if [ -n "${your_ip}" ] && [ -n "${your_hostname}" ]; then + echo -ne "EXITING - Please edit this file, modifying to specify \ +*EITHER* your_ip or your_hostname.\n" + exit 1 + fi + + # verify that one of your_ip, your_hostname, ROS_IP, or ROS_HOSTNAME is set + if [ -z "${your_ip}" ] && [ -z "${your_hostname}" ]; then + echo -ne "EXITING - Please edit this file, modifying to specify \ +your_ip or your_hostname.\n" + exit 1 + fi + + # verify specified ros version is installed + ros_setup="/opt/ros/\${ros_version}" + if [ ! -d "\${ros_setup}" ]; then + echo -ne "EXITING - Failed to find ROS \${ros_version} installation \ +in \${ros_setup}.\n" + exit 1 + fi + + # verify the ros setup.sh file exists + if [ ! -s "\${ros_setup}"/setup.sh ]; then + echo -ne "EXITING - Failed to find the ROS environment script: \ +"\${ros_setup}"/setup.sh.\n" + exit 1 + fi + + # verify the user is running this script in the root of the catkin + # workspace and that the workspace has been compiled. + if [ ! -s "devel/setup.bash" ]; then + echo -ne "EXITING - \n1) Please verify that this script is being run \ +in the root of your catkin workspace.\n2) Please verify that your workspace \ +has been built (source /opt/ros/\${ros_version}/setup.sh; catkin_make).\n\ +3) Run this script again upon completion of your workspace build.\n" + exit 1 + fi + + [ -n "${your_ip}" ] && export ROS_IP="${your_ip}" + [ -n "${your_hostname}" ] && export ROS_HOSTNAME="${your_hostname}" + [ -n "${baxter_hostname}" ] && \ + export ROS_MASTER_URI="http://${baxter_hostname}:11311" + + # source the catkin setup bash script + source devel/setup.bash + + # setup the bash prompt + export __ROS_PROMPT=\${__ROS_PROMPT:-0} + [ \${__ROS_PROMPT} -eq 0 -a -n "\${PROMPT_COMMAND}" ] && \ + export __ORIG_PROMPT_COMMAND=\${PROMPT_COMMAND} + + __ros_prompt () { + if [ -n "\${__ORIG_PROMPT_COMMAND}" ]; then + eval \${__ORIG_PROMPT_COMMAND} + fi + if ! echo \${PS1} | grep '\[baxter' &>/dev/null; then + export PS1="\[\033[00;33m\][baxter - \ +\${ROS_MASTER_URI}]\[\033[00m\] \${PS1}" + fi + } + + if [ "\${TERM}" != "dumb" ]; then + export PROMPT_COMMAND=__ros_prompt + __ROS_PROMPT=1 + elif ! echo \${PS1} | grep '\[baxter' &>/dev/null; then + export PS1="[baxter - \${ROS_MASTER_URI}] \${PS1}" + fi +rosrun baxter_tools enable_robot.py -e +rosrun baxter_tools camera_control.py -l +rosrun baxter_tools camera_control.py -c right_hand_camera +rosrun baxter_tools camera_control.py -o head_camera 640x480 +rosrun brazos arm_server.py &disown +rosrun camara face_server.py + +EOF + +${SHELL} --rcfile ${tf} +rm -f -- "${tf}" +trap - EXIT + + + +# vim: noet + diff --git a/the_baxter_mimic/baxter_talk_client.sh b/the_baxter_mimic/baxter_talk_client.sh new file mode 100644 index 0000000..0ea19ff --- /dev/null +++ b/the_baxter_mimic/baxter_talk_client.sh @@ -0,0 +1,199 @@ +#!/bin/bash +#This script converts the speech.txt file to a wav and then sends it along with some movements to the Baxter. +#Make sure you are running the server! +pico2wave -w speech.wav "$(cat speech.txt)" + + +# Copyright (c) 2013-2015, Rethink Robotics +# All rights reserved. + +# This file is to be used in the *root* of your Catkin workspace. + +# This is a convenient script which will set up your ROS environment and +# should be executed with every new instance of a shell in which you plan on +# working with Baxter. + +# Clear any previously set your_ip/your_hostname +unset your_ip +unset your_hostname +#-----------------------------------------------------------------------------# +# USER CONFIGURABLE ROS ENVIRONMENT VARIABLES # +#-----------------------------------------------------------------------------# +# Note: If ROS_MASTER_URI, ROS_IP, or ROS_HOSTNAME environment variables were +# previously set (typically in your .bashrc or .bash_profile), those settings +# will be overwritten by any variables set here. + +# Specify Baxter's hostname +baxter_hostname="baxter.local" + +# Set *Either* your computers ip address or hostname. Please note if using +# your_hostname that this must be resolvable to Baxter. +your_ip="192.168.1.3" +#your_hostname="my_computer.local" + +# Specify ROS distribution (e.g. indigo, hydro, etc.) +ros_version="indigo" +#-----------------------------------------------------------------------------# + +tf=$(mktemp) +trap "rm -f -- '${tf}'" EXIT + +# If this file specifies an ip address or hostname - unset any previously set +# ROS_IP and/or ROS_HOSTNAME. +# If this file does not specify an ip address or hostname - use the +# previously specified ROS_IP/ROS_HOSTNAME environment variables. +if [ -n "${your_ip}" ] || [ -n "${your_hostname}" ]; then + unset ROS_IP && unset ROS_HOSTNAME +else + your_ip="${ROS_IP}" && your_hostname="${ROS_HOSTNAME}" +fi + +# If argument provided, set baxter_hostname to argument +# If argument is sim or local, set baxter_hostname to localhost +if [ -n "${1}" ]; then + if [[ "${1}" == "sim" ]] || [[ "${1}" == "local" ]]; then + baxter_hostname="localhost" + if [[ -z ${your_ip} || "${your_ip}" == "192.168.XXX.XXX" ]] && \ + [[ -z ${your_hostname} || "${your_hostname}" == "my_computer.local" ]]; then + your_hostname="localhost" + your_ip="" + fi + else + baxter_hostname="${1}" + fi +fi + +topdir=$(basename $(readlink -f $(dirname ${BASH_SOURCE[0]}))) + +cat <<-EOF > ${tf} + [ -s "\${HOME}"/.bashrc ] && source "\${HOME}"/.bashrc + [ -s "\${HOME}"/.bash_profile ] && source "\${HOME}"/.bash_profile + + # verify this script is moved out of baxter folder + if [[ -e "${topdir}/baxter_sdk/package.xml" ]]; then + echo -ne "EXITING - This script must be moved from the baxter folder \ +to the root of your catkin workspace.\n" + exit 1 + fi + + # verify ros_version lowercase + ros_version="$(tr [A-Z] [a-z] <<< "${ros_version}")" + + # check for ros installation + if [ ! -d "/opt/ros" ] || [ ! "$(ls -A /opt/ros)" ]; then + echo "EXITING - No ROS installation found in /opt/ros." + echo "Is ROS installed?" + exit 1 + fi + + # if set, verify user has modified the baxter_hostname + if [ -n ${baxter_hostname} ] && \ + [[ "${baxter_hostname}" == "baxter_hostname.local" ]]; then + echo -ne "EXITING - Please edit this file, modifying the \ +'baxter_hostname' variable to reflect Baxter's current hostname.\n" + exit 1 + fi + + # if set, verify user has modified their ip address (your_ip) + if [ -n ${your_ip} ] && [[ "${your_ip}" == "192.168.XXX.XXX" ]]; then + echo -ne "EXITING - Please edit this file, modifying the 'your_ip' \ +variable to reflect your current IP address.\n" + exit 1 + fi + + # if set, verify user has modified their computer hostname (your_hostname) + if [ -n ${your_hostname} ] && \ + [[ "${your_hostname}" == "my_computer.local" ]]; then + echo -ne "EXITING - Please edit this file, modifying the \ +'your_hostname' variable to reflect your current PC hostname.\n" + exit 1 + fi + + # verify user does not have both their ip *and* hostname set + if [ -n "${your_ip}" ] && [ -n "${your_hostname}" ]; then + echo -ne "EXITING - Please edit this file, modifying to specify \ +*EITHER* your_ip or your_hostname.\n" + exit 1 + fi + + # verify that one of your_ip, your_hostname, ROS_IP, or ROS_HOSTNAME is set + if [ -z "${your_ip}" ] && [ -z "${your_hostname}" ]; then + echo -ne "EXITING - Please edit this file, modifying to specify \ +your_ip or your_hostname.\n" + exit 1 + fi + + # verify specified ros version is installed + ros_setup="/opt/ros/\${ros_version}" + if [ ! -d "\${ros_setup}" ]; then + echo -ne "EXITING - Failed to find ROS \${ros_version} installation \ +in \${ros_setup}.\n" + exit 1 + fi + + # verify the ros setup.sh file exists + if [ ! -s "\${ros_setup}"/setup.sh ]; then + echo -ne "EXITING - Failed to find the ROS environment script: \ +"\${ros_setup}"/setup.sh.\n" + exit 1 + fi + + # verify the user is running this script in the root of the catkin + # workspace and that the workspace has been compiled. + if [ ! -s "devel/setup.bash" ]; then + echo -ne "EXITING - \n1) Please verify that this script is being run \ +in the root of your catkin workspace.\n2) Please verify that your workspace \ +has been built (source /opt/ros/\${ros_version}/setup.sh; catkin_make).\n\ +3) Run this script again upon completion of your workspace build.\n" + exit 1 + fi + + [ -n "${your_ip}" ] && export ROS_IP="${your_ip}" + [ -n "${your_hostname}" ] && export ROS_HOSTNAME="${your_hostname}" + [ -n "${baxter_hostname}" ] && \ + export ROS_MASTER_URI="http://${baxter_hostname}:11311" + + # source the catkin setup bash script + source devel/setup.bash + + # setup the bash prompt + export __ROS_PROMPT=\${__ROS_PROMPT:-0} + [ \${__ROS_PROMPT} -eq 0 -a -n "\${PROMPT_COMMAND}" ] && \ + export __ORIG_PROMPT_COMMAND=\${PROMPT_COMMAND} + + __ros_prompt () { + if [ -n "\${__ORIG_PROMPT_COMMAND}" ]; then + eval \${__ORIG_PROMPT_COMMAND} + fi + if ! echo \${PS1} | grep '\[baxter' &>/dev/null; then + export PS1="\[\033[00;33m\][baxter - \ +\${ROS_MASTER_URI}]\[\033[00m\] \${PS1}" + fi + } + + if [ "\${TERM}" != "dumb" ]; then + export PROMPT_COMMAND=__ros_prompt + __ROS_PROMPT=1 + elif ! echo \${PS1} | grep '\[baxter' &>/dev/null; then + export PS1="[baxter - \${ROS_MASTER_URI}] \${PS1}" + fi +rosrun brazos arm_client.py "afraid" +sleep 5 +rosrun camara deliver_speech.py +sleep 44 +#nake this sleep longer to suit the length of the text being read. +rosrun brazos arm_client.py "up-down" +sleep 5 +rosrun brazos arm_client.py "stop" + + +EOF + +${SHELL} --rcfile ${tf} +rm -f -- "${tf}" +trap - EXIT + + + +# vim: noet + diff --git a/the_baxter_mimic/baxter_talk_client.sh~ b/the_baxter_mimic/baxter_talk_client.sh~ new file mode 100644 index 0000000..37a8fd6 --- /dev/null +++ b/the_baxter_mimic/baxter_talk_client.sh~ @@ -0,0 +1,198 @@ +#!/bin/bash +#This script converts the speech.txt file to a wav and then sends it along with some movements to the Baxter. +pico2wave -w speech.wav "$(cat speech.txt)" + + +# Copyright (c) 2013-2015, Rethink Robotics +# All rights reserved. + +# This file is to be used in the *root* of your Catkin workspace. + +# This is a convenient script which will set up your ROS environment and +# should be executed with every new instance of a shell in which you plan on +# working with Baxter. + +# Clear any previously set your_ip/your_hostname +unset your_ip +unset your_hostname +#-----------------------------------------------------------------------------# +# USER CONFIGURABLE ROS ENVIRONMENT VARIABLES # +#-----------------------------------------------------------------------------# +# Note: If ROS_MASTER_URI, ROS_IP, or ROS_HOSTNAME environment variables were +# previously set (typically in your .bashrc or .bash_profile), those settings +# will be overwritten by any variables set here. + +# Specify Baxter's hostname +baxter_hostname="baxter.local" + +# Set *Either* your computers ip address or hostname. Please note if using +# your_hostname that this must be resolvable to Baxter. +your_ip="192.168.1.3" +#your_hostname="my_computer.local" + +# Specify ROS distribution (e.g. indigo, hydro, etc.) +ros_version="indigo" +#-----------------------------------------------------------------------------# + +tf=$(mktemp) +trap "rm -f -- '${tf}'" EXIT + +# If this file specifies an ip address or hostname - unset any previously set +# ROS_IP and/or ROS_HOSTNAME. +# If this file does not specify an ip address or hostname - use the +# previously specified ROS_IP/ROS_HOSTNAME environment variables. +if [ -n "${your_ip}" ] || [ -n "${your_hostname}" ]; then + unset ROS_IP && unset ROS_HOSTNAME +else + your_ip="${ROS_IP}" && your_hostname="${ROS_HOSTNAME}" +fi + +# If argument provided, set baxter_hostname to argument +# If argument is sim or local, set baxter_hostname to localhost +if [ -n "${1}" ]; then + if [[ "${1}" == "sim" ]] || [[ "${1}" == "local" ]]; then + baxter_hostname="localhost" + if [[ -z ${your_ip} || "${your_ip}" == "192.168.XXX.XXX" ]] && \ + [[ -z ${your_hostname} || "${your_hostname}" == "my_computer.local" ]]; then + your_hostname="localhost" + your_ip="" + fi + else + baxter_hostname="${1}" + fi +fi + +topdir=$(basename $(readlink -f $(dirname ${BASH_SOURCE[0]}))) + +cat <<-EOF > ${tf} + [ -s "\${HOME}"/.bashrc ] && source "\${HOME}"/.bashrc + [ -s "\${HOME}"/.bash_profile ] && source "\${HOME}"/.bash_profile + + # verify this script is moved out of baxter folder + if [[ -e "${topdir}/baxter_sdk/package.xml" ]]; then + echo -ne "EXITING - This script must be moved from the baxter folder \ +to the root of your catkin workspace.\n" + exit 1 + fi + + # verify ros_version lowercase + ros_version="$(tr [A-Z] [a-z] <<< "${ros_version}")" + + # check for ros installation + if [ ! -d "/opt/ros" ] || [ ! "$(ls -A /opt/ros)" ]; then + echo "EXITING - No ROS installation found in /opt/ros." + echo "Is ROS installed?" + exit 1 + fi + + # if set, verify user has modified the baxter_hostname + if [ -n ${baxter_hostname} ] && \ + [[ "${baxter_hostname}" == "baxter_hostname.local" ]]; then + echo -ne "EXITING - Please edit this file, modifying the \ +'baxter_hostname' variable to reflect Baxter's current hostname.\n" + exit 1 + fi + + # if set, verify user has modified their ip address (your_ip) + if [ -n ${your_ip} ] && [[ "${your_ip}" == "192.168.XXX.XXX" ]]; then + echo -ne "EXITING - Please edit this file, modifying the 'your_ip' \ +variable to reflect your current IP address.\n" + exit 1 + fi + + # if set, verify user has modified their computer hostname (your_hostname) + if [ -n ${your_hostname} ] && \ + [[ "${your_hostname}" == "my_computer.local" ]]; then + echo -ne "EXITING - Please edit this file, modifying the \ +'your_hostname' variable to reflect your current PC hostname.\n" + exit 1 + fi + + # verify user does not have both their ip *and* hostname set + if [ -n "${your_ip}" ] && [ -n "${your_hostname}" ]; then + echo -ne "EXITING - Please edit this file, modifying to specify \ +*EITHER* your_ip or your_hostname.\n" + exit 1 + fi + + # verify that one of your_ip, your_hostname, ROS_IP, or ROS_HOSTNAME is set + if [ -z "${your_ip}" ] && [ -z "${your_hostname}" ]; then + echo -ne "EXITING - Please edit this file, modifying to specify \ +your_ip or your_hostname.\n" + exit 1 + fi + + # verify specified ros version is installed + ros_setup="/opt/ros/\${ros_version}" + if [ ! -d "\${ros_setup}" ]; then + echo -ne "EXITING - Failed to find ROS \${ros_version} installation \ +in \${ros_setup}.\n" + exit 1 + fi + + # verify the ros setup.sh file exists + if [ ! -s "\${ros_setup}"/setup.sh ]; then + echo -ne "EXITING - Failed to find the ROS environment script: \ +"\${ros_setup}"/setup.sh.\n" + exit 1 + fi + + # verify the user is running this script in the root of the catkin + # workspace and that the workspace has been compiled. + if [ ! -s "devel/setup.bash" ]; then + echo -ne "EXITING - \n1) Please verify that this script is being run \ +in the root of your catkin workspace.\n2) Please verify that your workspace \ +has been built (source /opt/ros/\${ros_version}/setup.sh; catkin_make).\n\ +3) Run this script again upon completion of your workspace build.\n" + exit 1 + fi + + [ -n "${your_ip}" ] && export ROS_IP="${your_ip}" + [ -n "${your_hostname}" ] && export ROS_HOSTNAME="${your_hostname}" + [ -n "${baxter_hostname}" ] && \ + export ROS_MASTER_URI="http://${baxter_hostname}:11311" + + # source the catkin setup bash script + source devel/setup.bash + + # setup the bash prompt + export __ROS_PROMPT=\${__ROS_PROMPT:-0} + [ \${__ROS_PROMPT} -eq 0 -a -n "\${PROMPT_COMMAND}" ] && \ + export __ORIG_PROMPT_COMMAND=\${PROMPT_COMMAND} + + __ros_prompt () { + if [ -n "\${__ORIG_PROMPT_COMMAND}" ]; then + eval \${__ORIG_PROMPT_COMMAND} + fi + if ! echo \${PS1} | grep '\[baxter' &>/dev/null; then + export PS1="\[\033[00;33m\][baxter - \ +\${ROS_MASTER_URI}]\[\033[00m\] \${PS1}" + fi + } + + if [ "\${TERM}" != "dumb" ]; then + export PROMPT_COMMAND=__ros_prompt + __ROS_PROMPT=1 + elif ! echo \${PS1} | grep '\[baxter' &>/dev/null; then + export PS1="[baxter - \${ROS_MASTER_URI}] \${PS1}" + fi +rosrun brazos arm_client.py "afraid" +sleep 5 +rosrun camara deliver_speech.py +sleep 44 +#nake this sleep longer to suit the length of the text being read. +rosrun brazos arm_client.py "up-down" +sleep 5 +rosrun brazos arm_client.py "stop" + + +EOF + +${SHELL} --rcfile ${tf} +rm -f -- "${tf}" +trap - EXIT + + + +# vim: noet + diff --git a/the_baxter_mimic/baxter_talk_server.sh b/the_baxter_mimic/baxter_talk_server.sh new file mode 100644 index 0000000..2ab0f77 --- /dev/null +++ b/the_baxter_mimic/baxter_talk_server.sh @@ -0,0 +1,192 @@ +#!/bin/bash +#This script accepts connections from the talk client. +# Modified from the original by Rethink Robotics + + +# This file is to be used in the *root* of your Catkin workspace. + +# This is a convenient script which will set up your ROS environment and +# should be executed with every new instance of a shell in which you plan on +# working with Baxter. + +# Clear any previously set your_ip/your_hostname +unset your_ip +unset your_hostname +#-----------------------------------------------------------------------------# +# USER CONFIGURABLE ROS ENVIRONMENT VARIABLES # +#-----------------------------------------------------------------------------# +# Note: If ROS_MASTER_URI, ROS_IP, or ROS_HOSTNAME environment variables were +# previously set (typically in your .bashrc or .bash_profile), those settings +# will be overwritten by any variables set here. + +# Specify Baxter's hostname +baxter_hostname="baxter.local" + +# Set *Either* your computers ip address or hostname. Please note if using +# your_hostname that this must be resolvable to Baxter. +your_ip="192.168.1.3" +#your_hostname="my_computer.local" + +# Specify ROS distribution (e.g. indigo, hydro, etc.) +ros_version="indigo" +#-----------------------------------------------------------------------------# + +tf=$(mktemp) +trap "rm -f -- '${tf}'" EXIT + +# If this file specifies an ip address or hostname - unset any previously set +# ROS_IP and/or ROS_HOSTNAME. +# If this file does not specify an ip address or hostname - use the +# previously specified ROS_IP/ROS_HOSTNAME environment variables. +if [ -n "${your_ip}" ] || [ -n "${your_hostname}" ]; then + unset ROS_IP && unset ROS_HOSTNAME +else + your_ip="${ROS_IP}" && your_hostname="${ROS_HOSTNAME}" +fi + +# If argument provided, set baxter_hostname to argument +# If argument is sim or local, set baxter_hostname to localhost +if [ -n "${1}" ]; then + if [[ "${1}" == "sim" ]] || [[ "${1}" == "local" ]]; then + baxter_hostname="localhost" + if [[ -z ${your_ip} || "${your_ip}" == "192.168.XXX.XXX" ]] && \ + [[ -z ${your_hostname} || "${your_hostname}" == "my_computer.local" ]]; then + your_hostname="localhost" + your_ip="" + fi + else + baxter_hostname="${1}" + fi +fi + +topdir=$(basename $(readlink -f $(dirname ${BASH_SOURCE[0]}))) + +cat <<-EOF > ${tf} + [ -s "\${HOME}"/.bashrc ] && source "\${HOME}"/.bashrc + [ -s "\${HOME}"/.bash_profile ] && source "\${HOME}"/.bash_profile + + # verify this script is moved out of baxter folder + if [[ -e "${topdir}/baxter_sdk/package.xml" ]]; then + echo -ne "EXITING - This script must be moved from the baxter folder \ +to the root of your catkin workspace.\n" + exit 1 + fi + + # verify ros_version lowercase + ros_version="$(tr [A-Z] [a-z] <<< "${ros_version}")" + + # check for ros installation + if [ ! -d "/opt/ros" ] || [ ! "$(ls -A /opt/ros)" ]; then + echo "EXITING - No ROS installation found in /opt/ros." + echo "Is ROS installed?" + exit 1 + fi + + # if set, verify user has modified the baxter_hostname + if [ -n ${baxter_hostname} ] && \ + [[ "${baxter_hostname}" == "baxter_hostname.local" ]]; then + echo -ne "EXITING - Please edit this file, modifying the \ +'baxter_hostname' variable to reflect Baxter's current hostname.\n" + exit 1 + fi + + # if set, verify user has modified their ip address (your_ip) + if [ -n ${your_ip} ] && [[ "${your_ip}" == "192.168.XXX.XXX" ]]; then + echo -ne "EXITING - Please edit this file, modifying the 'your_ip' \ +variable to reflect your current IP address.\n" + exit 1 + fi + + # if set, verify user has modified their computer hostname (your_hostname) + if [ -n ${your_hostname} ] && \ + [[ "${your_hostname}" == "my_computer.local" ]]; then + echo -ne "EXITING - Please edit this file, modifying the \ +'your_hostname' variable to reflect your current PC hostname.\n" + exit 1 + fi + + # verify user does not have both their ip *and* hostname set + if [ -n "${your_ip}" ] && [ -n "${your_hostname}" ]; then + echo -ne "EXITING - Please edit this file, modifying to specify \ +*EITHER* your_ip or your_hostname.\n" + exit 1 + fi + + # verify that one of your_ip, your_hostname, ROS_IP, or ROS_HOSTNAME is set + if [ -z "${your_ip}" ] && [ -z "${your_hostname}" ]; then + echo -ne "EXITING - Please edit this file, modifying to specify \ +your_ip or your_hostname.\n" + exit 1 + fi + + # verify specified ros version is installed + ros_setup="/opt/ros/\${ros_version}" + if [ ! -d "\${ros_setup}" ]; then + echo -ne "EXITING - Failed to find ROS \${ros_version} installation \ +in \${ros_setup}.\n" + exit 1 + fi + + # verify the ros setup.sh file exists + if [ ! -s "\${ros_setup}"/setup.sh ]; then + echo -ne "EXITING - Failed to find the ROS environment script: \ +"\${ros_setup}"/setup.sh.\n" + exit 1 + fi + + # verify the user is running this script in the root of the catkin + # workspace and that the workspace has been compiled. + if [ ! -s "devel/setup.bash" ]; then + echo -ne "EXITING - \n1) Please verify that this script is being run \ +in the root of your catkin workspace.\n2) Please verify that your workspace \ +has been built (source /opt/ros/\${ros_version}/setup.sh; catkin_make).\n\ +3) Run this script again upon completion of your workspace build.\n" + exit 1 + fi + + [ -n "${your_ip}" ] && export ROS_IP="${your_ip}" + [ -n "${your_hostname}" ] && export ROS_HOSTNAME="${your_hostname}" + [ -n "${baxter_hostname}" ] && \ + export ROS_MASTER_URI="http://${baxter_hostname}:11311" + + # source the catkin setup bash script + source devel/setup.bash + + # setup the bash prompt + export __ROS_PROMPT=\${__ROS_PROMPT:-0} + [ \${__ROS_PROMPT} -eq 0 -a -n "\${PROMPT_COMMAND}" ] && \ + export __ORIG_PROMPT_COMMAND=\${PROMPT_COMMAND} + + __ros_prompt () { + if [ -n "\${__ORIG_PROMPT_COMMAND}" ]; then + eval \${__ORIG_PROMPT_COMMAND} + fi + if ! echo \${PS1} | grep '\[baxter' &>/dev/null; then + export PS1="\[\033[00;33m\][baxter - \ +\${ROS_MASTER_URI}]\[\033[00m\] \${PS1}" + fi + } + + if [ "\${TERM}" != "dumb" ]; then + export PROMPT_COMMAND=__ros_prompt + __ROS_PROMPT=1 + elif ! echo \${PS1} | grep '\[baxter' &>/dev/null; then + export PS1="[baxter - \${ROS_MASTER_URI}] \${PS1}" + fi +rosrun baxter_tools enable_robot.py -e +rosrun baxter_tools camera_control.py -l +rosrun baxter_tools camera_control.py -c right_hand_camera +rosrun baxter_tools camera_control.py -o head_camera 640x480 +rosrun brazos arm_server.py &disown +rosrun camara face_server.py + +EOF + +${SHELL} --rcfile ${tf} +rm -f -- "${tf}" +trap - EXIT + + + +# vim: noet + diff --git a/the_baxter_mimic/baxter_talk_server.sh~ b/the_baxter_mimic/baxter_talk_server.sh~ new file mode 100644 index 0000000..6a20f48 --- /dev/null +++ b/the_baxter_mimic/baxter_talk_server.sh~ @@ -0,0 +1,191 @@ +#!/bin/bash +# Copyright (c) 2013-2015, Rethink Robotics +# All rights reserved. + +# This file is to be used in the *root* of your Catkin workspace. + +# This is a convenient script which will set up your ROS environment and +# should be executed with every new instance of a shell in which you plan on +# working with Baxter. + +# Clear any previously set your_ip/your_hostname +unset your_ip +unset your_hostname +#-----------------------------------------------------------------------------# +# USER CONFIGURABLE ROS ENVIRONMENT VARIABLES # +#-----------------------------------------------------------------------------# +# Note: If ROS_MASTER_URI, ROS_IP, or ROS_HOSTNAME environment variables were +# previously set (typically in your .bashrc or .bash_profile), those settings +# will be overwritten by any variables set here. + +# Specify Baxter's hostname +baxter_hostname="baxter.local" + +# Set *Either* your computers ip address or hostname. Please note if using +# your_hostname that this must be resolvable to Baxter. +your_ip="192.168.1.3" +#your_hostname="my_computer.local" + +# Specify ROS distribution (e.g. indigo, hydro, etc.) +ros_version="indigo" +#-----------------------------------------------------------------------------# + +tf=$(mktemp) +trap "rm -f -- '${tf}'" EXIT + +# If this file specifies an ip address or hostname - unset any previously set +# ROS_IP and/or ROS_HOSTNAME. +# If this file does not specify an ip address or hostname - use the +# previously specified ROS_IP/ROS_HOSTNAME environment variables. +if [ -n "${your_ip}" ] || [ -n "${your_hostname}" ]; then + unset ROS_IP && unset ROS_HOSTNAME +else + your_ip="${ROS_IP}" && your_hostname="${ROS_HOSTNAME}" +fi + +# If argument provided, set baxter_hostname to argument +# If argument is sim or local, set baxter_hostname to localhost +if [ -n "${1}" ]; then + if [[ "${1}" == "sim" ]] || [[ "${1}" == "local" ]]; then + baxter_hostname="localhost" + if [[ -z ${your_ip} || "${your_ip}" == "192.168.XXX.XXX" ]] && \ + [[ -z ${your_hostname} || "${your_hostname}" == "my_computer.local" ]]; then + your_hostname="localhost" + your_ip="" + fi + else + baxter_hostname="${1}" + fi +fi + +topdir=$(basename $(readlink -f $(dirname ${BASH_SOURCE[0]}))) + +cat <<-EOF > ${tf} + [ -s "\${HOME}"/.bashrc ] && source "\${HOME}"/.bashrc + [ -s "\${HOME}"/.bash_profile ] && source "\${HOME}"/.bash_profile + + # verify this script is moved out of baxter folder + if [[ -e "${topdir}/baxter_sdk/package.xml" ]]; then + echo -ne "EXITING - This script must be moved from the baxter folder \ +to the root of your catkin workspace.\n" + exit 1 + fi + + # verify ros_version lowercase + ros_version="$(tr [A-Z] [a-z] <<< "${ros_version}")" + + # check for ros installation + if [ ! -d "/opt/ros" ] || [ ! "$(ls -A /opt/ros)" ]; then + echo "EXITING - No ROS installation found in /opt/ros." + echo "Is ROS installed?" + exit 1 + fi + + # if set, verify user has modified the baxter_hostname + if [ -n ${baxter_hostname} ] && \ + [[ "${baxter_hostname}" == "baxter_hostname.local" ]]; then + echo -ne "EXITING - Please edit this file, modifying the \ +'baxter_hostname' variable to reflect Baxter's current hostname.\n" + exit 1 + fi + + # if set, verify user has modified their ip address (your_ip) + if [ -n ${your_ip} ] && [[ "${your_ip}" == "192.168.XXX.XXX" ]]; then + echo -ne "EXITING - Please edit this file, modifying the 'your_ip' \ +variable to reflect your current IP address.\n" + exit 1 + fi + + # if set, verify user has modified their computer hostname (your_hostname) + if [ -n ${your_hostname} ] && \ + [[ "${your_hostname}" == "my_computer.local" ]]; then + echo -ne "EXITING - Please edit this file, modifying the \ +'your_hostname' variable to reflect your current PC hostname.\n" + exit 1 + fi + + # verify user does not have both their ip *and* hostname set + if [ -n "${your_ip}" ] && [ -n "${your_hostname}" ]; then + echo -ne "EXITING - Please edit this file, modifying to specify \ +*EITHER* your_ip or your_hostname.\n" + exit 1 + fi + + # verify that one of your_ip, your_hostname, ROS_IP, or ROS_HOSTNAME is set + if [ -z "${your_ip}" ] && [ -z "${your_hostname}" ]; then + echo -ne "EXITING - Please edit this file, modifying to specify \ +your_ip or your_hostname.\n" + exit 1 + fi + + # verify specified ros version is installed + ros_setup="/opt/ros/\${ros_version}" + if [ ! -d "\${ros_setup}" ]; then + echo -ne "EXITING - Failed to find ROS \${ros_version} installation \ +in \${ros_setup}.\n" + exit 1 + fi + + # verify the ros setup.sh file exists + if [ ! -s "\${ros_setup}"/setup.sh ]; then + echo -ne "EXITING - Failed to find the ROS environment script: \ +"\${ros_setup}"/setup.sh.\n" + exit 1 + fi + + # verify the user is running this script in the root of the catkin + # workspace and that the workspace has been compiled. + if [ ! -s "devel/setup.bash" ]; then + echo -ne "EXITING - \n1) Please verify that this script is being run \ +in the root of your catkin workspace.\n2) Please verify that your workspace \ +has been built (source /opt/ros/\${ros_version}/setup.sh; catkin_make).\n\ +3) Run this script again upon completion of your workspace build.\n" + exit 1 + fi + + [ -n "${your_ip}" ] && export ROS_IP="${your_ip}" + [ -n "${your_hostname}" ] && export ROS_HOSTNAME="${your_hostname}" + [ -n "${baxter_hostname}" ] && \ + export ROS_MASTER_URI="http://${baxter_hostname}:11311" + + # source the catkin setup bash script + source devel/setup.bash + + # setup the bash prompt + export __ROS_PROMPT=\${__ROS_PROMPT:-0} + [ \${__ROS_PROMPT} -eq 0 -a -n "\${PROMPT_COMMAND}" ] && \ + export __ORIG_PROMPT_COMMAND=\${PROMPT_COMMAND} + + __ros_prompt () { + if [ -n "\${__ORIG_PROMPT_COMMAND}" ]; then + eval \${__ORIG_PROMPT_COMMAND} + fi + if ! echo \${PS1} | grep '\[baxter' &>/dev/null; then + export PS1="\[\033[00;33m\][baxter - \ +\${ROS_MASTER_URI}]\[\033[00m\] \${PS1}" + fi + } + + if [ "\${TERM}" != "dumb" ]; then + export PROMPT_COMMAND=__ros_prompt + __ROS_PROMPT=1 + elif ! echo \${PS1} | grep '\[baxter' &>/dev/null; then + export PS1="[baxter - \${ROS_MASTER_URI}] \${PS1}" + fi +rosrun baxter_tools enable_robot.py -e +rosrun baxter_tools camera_control.py -l +rosrun baxter_tools camera_control.py -c right_hand_camera +rosrun baxter_tools camera_control.py -o head_camera 640x480 +rosrun brazos arm_server.py &disown +rosrun camara face_server.py + +EOF + +${SHELL} --rcfile ${tf} +rm -f -- "${tf}" +trap - EXIT + + + +# vim: noet + diff --git a/the_baxter_mimic/brazos/arm_server.py b/the_baxter_mimic/brazos/arm_server.py new file mode 100644 index 0000000..6d54a5f --- /dev/null +++ b/the_baxter_mimic/brazos/arm_server.py @@ -0,0 +1,127 @@ +#!/usr/bin/python2 + +# Copyright (c) 2013-2015, Rethink Robotics +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the Rethink Robotics nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +import os +import sys +import argparse + +import rospy + +from baxter_core_msgs.msg import JointCommand +import baxter_interface +from std_msgs.msg import String + +state="stop" +def state_machine(data): + global state + state=data.data + print state + +def talker(): + + print ("hola") + global state + state="stop" + rospy.Subscriber('arm_move', String, state_machine) + + pub_left = rospy.Publisher('robot/limb/left/joint_command', JointCommand, queue_size=1) + pub_right = rospy.Publisher('robot/limb/right/joint_command', JointCommand, queue_size=1) + rospy.init_node("brazo_control") + rate=rospy.Rate(15) + contador=0 + contador_afraid=0 + + while not rospy.is_shutdown(): + + if (state=="stop"): + + pub_left.publish(mode=1,command=[-0.48, -0.505, 0.041, 1.77, 0.018, 0.266, 3.048],names=['left_s0','left_s1','left_e0','left_e1','left_w0','left_w1','left_w2']) + pub_right.publish(mode=1,command=[0.477, -0.4, 0.2, 1.45, 2.75, -0.45, 3.05],names=['right_s0','right_s1','right_e0','right_e1','right_w0','right_w1','right_w2']) + if (state=="up-down"): + print contador + if contador<30: + pub_left.publish(mode=1,command=[0.004, 0.265, 3.045, 0.005, 1.787, -0.49, -1.03],names=['left_w0', 'left_w1', 'left_w2', 'left_e0', 'left_e1', 'left_s0', 'left_s1']) + pub_right.publish(mode=1,command=[0.34, -0.08, 3.035, -0.066, 3.035, 0.133, 1.55],names=['right_s0', 'right_s1' , 'right_w0', 'right_w1', 'right_w2', 'right_e0', 'right_e1']) + contador=contador+1 + if contador>=30: + pub_left.publish(mode=1,command=[0.004, -0.0939, 3.044, 0.0038, 1.699, -0.518, -0.151],names=['left_w0', 'left_w1' , 'left_w2', 'left_e0', 'left_e1', 'left_s0', 'left_s1']) + pub_right.publish(mode=1,command=[0.36, -0.82, 2.91, -0.934, 3.05, 0.225, 1.402],names=['right_s0', 'right_s1', 'right_w0', 'right_w1', 'right_w2', 'right_e0', 'right_e1']) + contador=contador+1 + if contador==60: + contador=0 + if (state=="two_hands"): + if contador<100: + pub_left.publish(mode=1,command=[0.018, -0.204, 3.046, 0.225, -0.044, -0.507, -0.60],names=['left_w0', 'left_w1', 'left_w2', 'left_e0', 'left_e1', 'left_s0', 'left_s1']) + pub_right.publish(mode=1,command=[0.5, -0.85, 2.8, 0.22, 3.05, 0.007, 0.406],names=['right_s0', 'right_s1', 'right_w0', 'right_w1', 'right_w2', 'right_e0', 'right_e1']) + if contador==100: + contador=0 + state="stop" + if (state=="left_hand"): + if contador<100: + pub_left.publish(mode=1,command=[-1.45, 0.182, 3.018, 0.041, -0.039, -0.777, -0.011],names=['left_w0', 'left_w1', 'left_w2', 'left_e0', 'left_e1', 'left_s0', 'left_s1']) + pub_right.publish(mode=1,command=[0.477, -0.4, 0.2, 1.45, 2.75, -0.45, 3.05],names=['right_s0','right_s1','right_e0','right_e1','right_w0','right_w1','right_w2']) + if contador==100: + contador=0 + state="stop" + if (state=="right_hand"): + if contador<100: + pub_left.publish(mode=1,command=[-0.48, -0.505, 0.041, 1.77, 0.018, 0.266, 3.048],names=['left_s0','left_s1','left_e0','left_e1','left_w0','left_w1','left_w2']) + pub_right.publish(mode=1,command=[0.21, -0.194, 3.059, -0.268, 3.054, 0.923, 0.356],names=['right_s0', 'right_s1', 'right_w0', 'right_w1', 'right_w2', 'right_e0', 'right_e1']) + if contador==100: + contador=0 + state="stop" + if (state=="afraid"): + if contador<50: + pub_left.publish(mode=1,command=[-0.238, -0.0329, 3.044, 0.270, -0.0498, -0.49, -1.157],names=['left_w0', 'left_w1', 'left_w2', 'left_e0', 'left_e1', 'left_s0', 'left_s1']) + pub_right.publish(mode=1,command=[0.58, -1.1635,3.0579, -0.156, 3.053, -0.0145, -0.0498],names=['right_s0', 'right_s1', 'right_w0', 'right_w1', 'right_w2', 'right_e0', 'right_e1']) + contador=contador+1 + if contador>=50: + pub_left.publish(mode=1,command=[-0.711, 0.009, 3.04, 0.287, 0.262, -0.437, -1.0787],names=['left_w0', 'left_w1', 'left_w2', 'left_e0', 'left_e1', 'left_s0', 'left_s1']) + pub_right.publish(mode=1,command=[0.091, -1.160, 3.059,-0.333,3.053, 0.1096, 0.365],names=['right_s0', 'right_s1', 'right_w0', 'right_w1', 'right_w2', 'right_e0', 'right_e1']) + contador=contador+1 + if contador==100: + contador=0 + contador_afraid=contador_afraid+1 + if contador_afraid==2: + state="stop" + ontador_afraid=0 + + + rate.sleep() + +if __name__ == '__main__': + try: + + talker() + except rospy.ROSInterruptException: + pass + + + + diff --git a/the_baxter_mimic/camara/deliver_speech.py b/the_baxter_mimic/camara/deliver_speech.py new file mode 100644 index 0000000..5d32304 --- /dev/null +++ b/the_baxter_mimic/camara/deliver_speech.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python +# license removed for brevity +import rospy +from std_msgs.msg import String +import sys + +def talker(): + pub = rospy.Publisher('face_type', String, queue_size=10) + rospy.init_node('face_client', anonymous=True) + rate = rospy.Rate(10) # 10hz + audio="speech.wav" + + pub.publish(audio) + + +if __name__ == '__main__': + try: + talker() + except rospy.ROSInterruptException: + pass diff --git a/the_baxter_mimic/camara/face_client b/the_baxter_mimic/camara/face_client new file mode 100644 index 0000000..12d5f50 --- /dev/null +++ b/the_baxter_mimic/camara/face_client @@ -0,0 +1,20 @@ +#!/usr/bin/env python +# license removed for brevity +import rospy +from std_msgs.msg import String +import sys + +def talker(): + pub = rospy.Publisher('face_type', String, queue_size=10) + rospy.init_node('face_client', anonymous=True) + rate = rospy.Rate(10) # 10hz + audio="src/camara/scripts/"+sys.argv[1] + + pub.publish(audio) + + +if __name__ == '__main__': + try: + talker() + except rospy.ROSInterruptException: + pass \ No newline at end of file diff --git a/the_baxter_mimic/camara/face_server.py b/the_baxter_mimic/camara/face_server.py new file mode 100644 index 0000000..fec1f47 --- /dev/null +++ b/the_baxter_mimic/camara/face_server.py @@ -0,0 +1,72 @@ +#!/usr/bin/python2 + +import os +import sys +import argparse +import threading +import rospy +import cv2 +import cv_bridge +import pyaudio +import wave +import sys +import math +import matplotlib.pyplot as plt +import numpy as np +CHUNK = 1024 +from std_msgs.msg import String + +from sensor_msgs.msg import ( + Image, +) +audio_path="src/camara/scripts/audio.wav" +def callback(data): + arg1="src/camara/scripts/conversacion/saludo3.png" + arg2="src/camara/scripts/conversacion/saludo10.png" + img1 = cv2.imread(arg1) + img2 = cv2.imread(arg2) + msg1 = cv_bridge.CvBridge().cv2_to_imgmsg(img1, encoding="bgr8") + msg2 = cv_bridge.CvBridge().cv2_to_imgmsg(img2, encoding="bgr8") + pub = rospy.Publisher('/robot/xdisplay', Image, latch=True, queue_size=1) + pub.publish(msg1) + global audio_path + audio_path=data.data + wf = wave.open(audio_path, 'rb') + # instantiate PyAudio (1) + p = pyaudio.PyAudio() + # open stream (2) + stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), + channels=wf.getnchannels(), + rate=wf.getframerate(), + output=True) + + data = wf.readframes(CHUNK) + # play stream (3) + frames=[] + while len(data) > 0: + stream.write(data) + data = wf.readframes(CHUNK) + signal = np.fromstring(data, 'Int16') + if (math.fabs(np.average(signal))<5): + pub.publish(msg1) + else: + pub.publish(msg2) + + + +def manage_audio(): + rospy.init_node("estado2") + rate=rospy.Rate(10) + contador=1 + + rospy.Subscriber('face_type', String, callback) + print ("callback") + + rospy.spin() + +if __name__ == '__main__': + try: + + manage_audio() + except rospy.ROSInterruptException: + pass diff --git a/the_baxter_mimic/speech.txt b/the_baxter_mimic/speech.txt new file mode 100644 index 0000000..bffd5c4 --- /dev/null +++ b/the_baxter_mimic/speech.txt @@ -0,0 +1,10 @@ +Hi. I'm Baxter. +I very much enjoyed being on the CineGlobe jury. +I can tell you, that I, really enjoyed session six. +Or I should say you, enjoyed session six. +However, I found it very, difficult to make a decision. +I don't know how you humans do it. +I guess, judging art just isn't, yet, for machines. +But I will let, Mohanty, explain to you how I was going to decide my favorite film. +Mohanty, would, you, like to come up here? +Everyone, Mohanty, Sharada, from the Artificial Intelligence, lab at the, Ecole, Polytechnique, Federale, de Lausanne.