From 0fbaa33c4a7d1758fe4e4b6e72c114a5747b9867 Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Fri, 21 Aug 2020 18:50:54 -0700 Subject: [PATCH 01/13] add SPIK3R README --- robots/SPIK3R/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 robots/SPIK3R/README.md diff --git a/robots/SPIK3R/README.md b/robots/SPIK3R/README.md new file mode 100644 index 0000000..f44178e --- /dev/null +++ b/robots/SPIK3R/README.md @@ -0,0 +1,10 @@ +# SPIK3R + +> This six-legged creature doesn’t just look like a scorpion, it also acts like one. It turns sharply, snaps with it’s crushing claw, and it’s lightning tail is ready to fire at anyone or anything that gets in its way. + +Control SPIK3R with as follows: + +- Make SPIK3R move straight forward by pressing the IR Remote Control's two Up buttons at the same time +- Make SPIK3R turn right by pressing the IR Remote Control's Right Up button +- Make SPIK3R sting by pressing the IR Remote Control's Beacon button +- Make SPIKER pinch by pressing the Touch Sensor (please do connect one to enable this) From 5bdbd889157e57395cc05e6f30c4e87592319b96 Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Fri, 21 Aug 2020 18:52:07 -0700 Subject: [PATCH 02/13] update SPIK3R README --- robots/SPIK3R/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/robots/SPIK3R/README.md b/robots/SPIK3R/README.md index f44178e..e505f41 100644 --- a/robots/SPIK3R/README.md +++ b/robots/SPIK3R/README.md @@ -8,3 +8,5 @@ Control SPIK3R with as follows: - Make SPIK3R turn right by pressing the IR Remote Control's Right Up button - Make SPIK3R sting by pressing the IR Remote Control's Beacon button - Make SPIKER pinch by pressing the Touch Sensor (please do connect one to enable this) + +The build instructions may be found at the official LEGO MINDSTROMS site [here](https://www.lego.com/cdn/cs/set/assets/blt7dca5180ea66ea5e/31313_SPIK3R_2016.pdf). From 472851cf3abb2e51fce91574626a0b2202359192 Mon Sep 17 00:00:00 2001 From: Vinh Luong Date: Fri, 21 Aug 2020 20:35:08 -0700 Subject: [PATCH 03/13] fix SPIK3R README --- robots/SPIK3R/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robots/SPIK3R/README.md b/robots/SPIK3R/README.md index e505f41..a71134e 100644 --- a/robots/SPIK3R/README.md +++ b/robots/SPIK3R/README.md @@ -2,7 +2,7 @@ > This six-legged creature doesn’t just look like a scorpion, it also acts like one. It turns sharply, snaps with it’s crushing claw, and it’s lightning tail is ready to fire at anyone or anything that gets in its way. -Control SPIK3R with as follows: +Control SPIK3R as follows: - Make SPIK3R move straight forward by pressing the IR Remote Control's two Up buttons at the same time - Make SPIK3R turn right by pressing the IR Remote Control's Right Up button From d96abe1e6afdb460fefad2d96befef2613d691d3 Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Fri, 21 Aug 2020 20:53:01 -0700 Subject: [PATCH 04/13] update SPIK3R README --- robots/SPIK3R/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robots/SPIK3R/README.md b/robots/SPIK3R/README.md index a71134e..9cacf38 100644 --- a/robots/SPIK3R/README.md +++ b/robots/SPIK3R/README.md @@ -7,6 +7,6 @@ Control SPIK3R as follows: - Make SPIK3R move straight forward by pressing the IR Remote Control's two Up buttons at the same time - Make SPIK3R turn right by pressing the IR Remote Control's Right Up button - Make SPIK3R sting by pressing the IR Remote Control's Beacon button -- Make SPIKER pinch by pressing the Touch Sensor (please do connect one to enable this) +- Make SPIKER snap its claw by pressing the Touch Sensor (please do connect one to enable this) The build instructions may be found at the official LEGO MINDSTROMS site [here](https://www.lego.com/cdn/cs/set/assets/blt7dca5180ea66ea5e/31313_SPIK3R_2016.pdf). From 56a908d1de752f182a331bf84ec02d883df547c7 Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Fri, 21 Aug 2020 20:56:43 -0700 Subject: [PATCH 05/13] add Spik3r program --- robots/SPIK3R/spik3r.py | 102 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 robots/SPIK3R/spik3r.py diff --git a/robots/SPIK3R/spik3r.py b/robots/SPIK3R/spik3r.py new file mode 100644 index 0000000..f1aa299 --- /dev/null +++ b/robots/SPIK3R/spik3r.py @@ -0,0 +1,102 @@ +#!/usr/bin/env micropython + + +from ev3dev2.motor import LargeMotor, MediumMotor, OUTPUT_A, OUTPUT_B, OUTPUT_D +from ev3dev2.sensor import INPUT_1, INPUT_4 +from ev3dev2.sensor.lego import TouchSensor, InfraredSensor +from ev3dev2.sound import Sound + + +class Spik3r: + def __init__( + self, + claw_motor_port: str = OUTPUT_A, + move_motor_port: str = OUTPUT_B, + sting_motor_port: str = OUTPUT_D, + touch_sensor_port: str = INPUT_1, + ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): + self.claw_motor = MediumMotor(address=claw_motor_port) + self.move_motor = LargeMotor(address=move_motor_port) + self.sting_motor = LargeMotor(address=sting_motor_port) + + self.ir_sensor = InfraredSensor(address=ir_sensor_port) + self.ir_beacon_channel = ir_beacon_channel + + self.touch_sensor = TouchSensor(address=touch_sensor_port) + + self.speaker = Sound() + + + def snap_claw_if_touched(self): + if self.touch_sensor.is_pressed: + self.claw_motor.on_for_seconds( + speed=50, + seconds=1, + brake=True, + block=True) + + self.claw_motor.on_for_seconds( + speed=-50, + seconds=0.3, + brake=True, + block=True) + + + def move_by_ir_beacon(self): + if self.ir_sensor.top_left(channel=self.ir_beacon_channel) and \ + self.ir_sensor.top_right(channel=self.ir_beacon_channel): + self.move_motor.on( + speed=100, + block=False, + brake=False) + + elif self.ir_sensor.top_right(channel=self.ir_beacon_channel): + self.move_motor.on( + speed=-100, + brake=False, + block=False) + + else: + self.move_motor.off(brake=False) + + + def sting_by_ir_beacon(self): + if self.ir_sensor.beacon(channel=self.ir_beacon_channel): + self.sting_motor.on_for_degrees( + speed=-75, + degrees=220, + brake=True, + block=False) + + self.speaker.play_file( + wav_file='/home/robot/sound/Blip 3.wav', + volume=100, + play_type=Sound.PLAY_WAIT_FOR_COMPLETE) + + self.sting_motor.on_for_seconds( + speed=-100, + seconds=1, + brake=True, + block=True) + + self.sting_motor.on_for_seconds( + speed=40, + seconds=1, + brake=True, + block=True) + + while self.ir_sensor.beacon(channel=self.ir_beacon_channel): + pass + + + def main(self): + while True: + self.snap_claw_if_touched() + self.move_by_ir_beacon() + self.sting_by_ir_beacon() + + +if __name__ == '__main__': + SPIK3R = Spik3r() + + SPIK3R.main() From 20dd20d8cc3023666adef0e6216946f753652a1c Mon Sep 17 00:00:00 2001 From: Vinh Luong Date: Sun, 23 Aug 2020 10:34:21 -0700 Subject: [PATCH 06/13] add SPIK3R sound file --- robots/SPIK3R/Blip 3.wav | Bin 0 -> 13292 bytes robots/SPIK3R/spik3r.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 robots/SPIK3R/Blip 3.wav diff --git a/robots/SPIK3R/Blip 3.wav b/robots/SPIK3R/Blip 3.wav new file mode 100644 index 0000000000000000000000000000000000000000..2678a34e697ca856b9963a7753a45d5c2a1d81a8 GIT binary patch literal 13292 zcmZv?1ymeK7dG57K8!FpgWKTl79qq4v5nit-F@S3n`GnJWQhxAfM}U%GI}cLoc}f);>`p z&zIyC1?EY!s?8~lmLD85Vk-UAw3htA#G2x(a5+EI$sqPlaInFY;`4V`{8$P6W0mN* zWL#_bE{m0(zMn@mv<=2JWMLx^5fAQDYlSfyNmYdYHjJv<@{VwHO z3k&=CQ7JJ7mgl-oJ*Y~hNM&YH+b!Ykv4mAw|KQ_GuSN+&O;6b>LUJdF?50XOo?Ux( zwP(MvyX~{Ug_9zjep4DG$3FSk9%)!(v)Yd}+0->r_acq{kkqt=-EULjy=?MnkK-B;!6a0f$ zFb)*HNEn+x6?|wt!I?VVA^az+woH;>`@IN@vTAhH#jK2aVOUqQ_s+MB`N%!Kfy44K z0i%`1+NP8D&V5*=vbM~&+Y}uV<83~>14+zHvy!=+|6x}f;S)=5=&)(9 ztuA!Q1clA=!AVceUoiWg7)xz3f~XU79m?dy%b2J4I@5UjYzzE1Pl|Q9qzO;`?a}O( zCme?DJ)dKf?hAg?BB|#RPqdsjl?&Yb8e%>;JkveS0G=$V{e%9>A;srPRI1b8`rNG2 zCyq5!$jj{3`ZY|=4{ap{e$icd`ExzJ$nmj##Dr&|^Efw4&fX*C&qA#&kJ-G~w zcp2wgqDaUir>pl@J4E=6>yl10-R`;j-e798R|Yh<>HLhon13q6n5&4nH{I%e=e`$@ zCzzAx8J9qeLZ8C-Jt|tZQHkAa-yQrg{A{r-o7*!$H!!NR6ZuTGod7tO+GcolZKU#e zm+X53J?*9f!L=xP-7U}Ml9mUS8|yD4*7e+YwVIaxptyw3Lp2frcjFZ81Zt{h*FmXK8A z9riwN3hv6O|3FlYK59XHm%f>?Ule^~ZjrN(fT;miF02j=Z0c!#T5&ct66=eOVUui= zX5OW5PhOJO)TgOmVmW8rJnQRrLhr;1pFdwn?m~J!E?|c?g??llXuketUEX2sfLXC^ zPT;NJue|E^>(BS*RcT%t-m*%JbO?RGP4C~CJn@U2vd1LRk`;P6!ocK#Ff5h*VUhHx zNs}28^d{QCe6LvYDgM>B!8!I@$OnBqXPI)@ee=pHQl^(CIB;ADUO+4m7SXviwY*r< zcu{fRe`BDT1L8H4Tk&k)%N_bE&0R)etY1_CJ<{}UdHlt^&e3-7fdVVHWhs`Y6!WT+ z-i|5zfNgNvW!o5H77)T*l7IZAUrjUKY`(?0FrvUamNmVy_u0IXYHWeYItNh{%a_Im zn*(3o$oYiMF*CL44<8Ksi`~&&n=H=eYa)#&I5rBnQ@2@XWC_18E1uT3a`Ga{&L*y7 z0@y;+tIow@V5Rz-we9rZ-K%J!EZ*x$cRc`i>l^sbaEn*jif2hLs|mL(i)m(4 zr@itrYuub=_v2x?n(@)v&v#~Yqy2T@z?UB{7PNV=y37*YH;%P-@gw}cFMHwA6iZ3B z*y=TAOtRBPa#7){$NOt0&@PzYbJ{-E+ba~dD)W00Smgp3@B)=wY3LLY-F4~{b-OT>u{k-mVv`o`Zx6P4J zHZH`0pR^QJOC@cAgU)1X$ib)ys;6HTqo$o(hrMn6O{B5m=h zodB8lQwDmo9~WlbHjK8>FyBQ-j$va&u|*DEMD5i%`1|HKNI^=&PfXvG4a#rxr(3QL+U)DgM|*Gv!C)p&0RVe+y5i>d6)dlC|N z6aT26IN~p}IPuI+6FzqK9^-mjiM;Y7j@V4oZ2a8yeo=n`{gBBj$GxuBHV-(Eu&8`| z!|A>x8N^DmnQW@G4B*T38wb~^pn)Yl|DbI0MKF^!hnoknK?~SOZ>VE}Mqo0w4a$Ze zqpjFcpd2knSAp+9Jw6fif<{5}@U_@6I0H1-*MsGhIxQQ`rCviDH4rr$I<9gcw>ZmTOI?|>CLHsM4YrC)MGC#zKM z;Tj1OwdHlpmxg;bi}O3?+izij<@3zXS_&JikmEi(I)CqNagW3=*9Er-;uEzed}GU8 zt9Y%I=8@64`kCQv4}7IoRkhPDAZJ48$c2=@#0$}{6F2pNb0c5dwT`Zi9({?yx1Que zNm|skQOutn)E6DkXn*v@q4BkIu9F)`a%%k8!o6iSp)&uV0_I}#ovCosJh<6r<7b?^vp_Vn^jzgZU}0w zHy)fMxa3VQ^LwRt5?OzytquBui$m@= zIkoeBGjYp8NU+CzUj7^AH{aLQi127|fbd0aiBBo>ae>-=nZwu8S%l0tyzN=nUcU{R zY1NOM)*7!XnZ()W5?-GsOY~ab!>fyTIAvAF5mMz%VQG7q=^>8%&AeRw!|#4S{QZ@J z*~T~M=R}mWE?LvqI`an36|A&2{Oxm>nPF$R80`-!nlVs)C5~)&iG2hA+C{tyV75(O zXfPT0TtYW{%sNtK&s-!>H*b?>crF(=v>bNZM!j2h!E6N|tT_*y_fodo_nmat=+9L@ zw$m8rR_!He1Qo3rvPCXQnnR7F?dH*u=G%-+er@Mdz0$3=vx(7CKhU>^8#-&O;zH*h z+_zv2RB8KSn(SK@m#A4IEI=yb`gou7Uzw!lFQf&d?yI%m`|%#>Mq#oX@G>8r`nuX; zRh=O{yX)hEI|{Jmm3eiYr>(oL0YGV~wCsUA#zeSO{R!Sm7s`*I#vCuz7OaikuU|7T z#YjO$`=8K2V~)sHd)F*mwNn~lu0a`nX1oaYw$3J+$fBonul%yz6zzhV>%Q}CboH}2 ztNLPpoHFN6OeH3WJ~74>b~jgtJ_~8<2nX0o!>m!1QE|z<#?EkxpyXt2k$3+1jbfFw zL2>VgiPm_cR6y&@Kx=A(D?eMmoVX7z?YFOPA}{cHP;8=xLcd90RfYNbQQ!Y~W%1GV zdhrf@V4$w)@3xds5T9Kz+vOsEUjamN4J@uF_m>3uDicfIc>XZzFUa8-dcG;!Anl59 z6V0v1y>R23xs*zoBj)c9uJT$~7xc9PWR4VP2Q}@+jNF4^mJ<4FUX>f|ITjWd`Mbks)Ep7Qv4`jwQ^%>Nhr7U zioo9YOIKfg6&f3`s{WGttzfqvDLW*nVreQ@uweItHKr2OZ-?|kL!!WdRZ#TQMB&V? z6snE}I`uOeZGGBk#|lF%mpZ>G{(}4r!aKU^Hw3alS$VHXoKJa8kMK5UN9%Rl$(|u7 zP^~|ft5BT0&0J9(Ok0~%}r3Uv)t)n z&2m}~SyJ;SceK+PQFn*Xynu4oeMdo1?O%@3suiuby*3y<&Atx3vo-9ph4zKR($zvw zzs;tR_1~Qsz>%6(=0U0&2GuUQ$=b16fjo#=X?q1YEL)@cFtDAmnSZ5wZ|4TvyZj?E zOZ6#jTwl2A1otla2AWS_No?+&pkB@RrnJ<)HCst*l+A$VaJ(pI=m`dAh^yEnZmXdw zHI(HK3H#F|cW5~zcTx)709W=#h;zY@*clCtw%O5x9p7%>3K}1AWDTq-%#`rFZ`q}l z?x_%P2+foU2}WZ=E>3mzI14&!s!`gFLL^ZqFR_J^zHm-xd@u7kk+~XCMw}=k%~I+eSO? zq%M}JD`VzGg;u= z%_oe4Yx*;*WPQG3$8lXHjStuf6Wv&+KT&h^EM`cq$#dOp^)Z^>D83=$y*uhVdwo=D z=ib6tS&j1s!|uwzN`ALV8I`YWEZh#n#i#jiEE@lqIhYXq%wKC!j!tV?P}eJ+!D2aO zdnec^wAu>EccZe&$^pYO?ps4v3N}&J_d8Vg7mM2KG<@y}-y4xV4hz8Gu9~8$72`!y zD0dt^L(V#t5bX`C^5+-)CC{D=E_wpbeV3kI1Z^8-%x|e#skIyL%ymnSNVKNwmtOL= zuJy^hZuDuaKXEQ&X~R4pT4+Yk(!9Uy8<)6PE&sCi6$M!ndB^2L-yG$NPy^4k1=iPU zvX>j!jR~I?7IJ~itMJG)%*|=|3>Spno7xky*|55IYVOI5DU~bLOh>y3ym5J!U&K=j zO5aS*^+c0=QpV%smpGw=@*fYsN(=0}e$ehYwFX7{>@t4cw(O^nmKgFoD1K$1@x{4z zh8IIuw0S@q6cMeP1#-9 z#o4*^?VHzS%Z+nPj^B!#JWx9IyBk_B~CWQoi0j zJK`MOyly~o++T0YX(1OMpzgNEdJlgrlq({~#oToF2X43UibINKHH}fPGCk~*9Te~K z2KrII=f}B56_n$+HL^K4jlHYm;kQ%C__xK%9H)U8^LTmCLeAQri+SqIhgGHMO3x*+ zYlG}KHl5tucW+M%TgN;_WFJIY4^ePP5V!;+?YqfzlsjW)k-zimo0 zm>Xk{7bWGNar-h2(Sd1+O)CQ*IeO)*vc?4#uEmTlq&vQ`qh&__U>a5Z-gS#6a}Nql zx1XasR@V2iHZ!kU_zNxTl?)RDxtfI}DCMWkuZ3xNyp>$les_bIRPfdhT znzN~3gK-FA*d5*0BAkvXIXM5m6j7z6f6PmVtdgi0F#sonGzIq9`=0b&DUAr8q^FQgnt8-fEf4j)I?u~@US05I`9%WhrL5V z!VR_~C&G2WS*#F!i)|r}f;ZuCQZjU#NWnJ&uc32L8_}y5>MW2w$Wt^F=R=94wUo!S zAi6KL6&Q`oR@-YN$Y;Wqw1?_JJ2J%hNBpZ^rQ;)Qx;MyD)QwO=22>^8lr|lTdkCFwvL;uJ zY57<#aE)?{(ZEzO3dp}>d8%yXMD-SAF1VJ`L)}T;OFj<|0`2HhgsGd11Y)}YcTfd% z0$ZSZxP-KxGzLBZOhh)RXQ~e)Nx)r_C;1KR1HK2jkUO-TNEpJ#Lq6f*Fq1r$a2PR@)TG`NnkcJRFrhs2Z+*t zR$o@7YjNxWa1<(pSCc{N8j2F$O3c&ARDGI-m;lB|n@OvnVlW@_ffK=2d;qD}Ek0%xK83GqC|`haE{zpxHnj5dxgYPowjZZHPT~2}CKi^e);$k}Yvc z|F$7oIDL`Y2Z>r=HQ>c_f61eqK_1<7-Od-|#R9y}O6MoI)sk)v8u zeJYUvk0;fGtwbi!0#*TcuvPkaJ&tc1+GXaXOele1p@oV$C-c9yA!#g;SIlM`M9gEjMBN$Xynvb;Xl^yhBH?D!oy)RN8_W0lSY zD@NClKc_tMz2))z<#dxfVKv{6Xbs~fKNnVyndUH%@U6p-8G~dD!&qEtuT@pk+)1pef9r5)=e=RL(T>b2?LCqcs>aOBs~)-t2m4P{Zmn2k#4x^4!&; z@uO@=%d%S73qyCdZ!df9UT0%cwxu^WGFCdRE8A~&{XJ2++it~=emncq!1czdj&Fd= zT}AxMq`;0_hM@7(((Trlcq>ZEIp+ixa);Vd6QPwsk44`-dtX*mOAPAmG*@5Ne3{*B z=Q1GbdS>0ut!^EV4*KMGtd+Ssr}U=jpYeR?>zXqSuNqG(`eeVKbGsr!U`&m!BQyMX zd-^q+F>d?XG9+(2_9~Ti9jr@kUk2cg7)v+H+s#t(B$uD`wrUrs#dERjOZ9yVhI3%u zgWgiXe49%-1H`Ss_FP*d#BWc=N@h}!=<_sVkMQ*5IGYNOLvPl*ud)wF{^4I|@!%cT z_nPhVLQBPxphRL#Nr4IE^1k(3+gWca?ZHng>RjKQz0)g&jx4@&`5JYq{{!Sl$$FFJ z4rQ&O&@Jn`4F!m^TSR*jI?GMexJvonYjX1x`6!?Ht+yncAWDmys3=(1a6wk;AKo#y zCC@9HS5^+|E_i>C&M42f^>p}DBODC(iUhWl8yoF+ac_(1``huPQC#^M9?R-d)p*xvyKZfUm>1^(>?MuovqMfpU2ut%JL&<1jed zp{T!KwavU7xvN`3j3WMKPu124qpTdLZ#(6zK{i*oS}!pFL*q2i&h+DQ#RpUo{JA>c z-X$hZ%%5GYxP{pXMYqt+IKv=9C{hzfFX0}ot8x|e+WJCoduP0Vx<0B%?&HLMQQBkn z%+RrC8{L8kMICvC1F^dOPBpseRnf)?_RAYdV%Vb{2(G@)^Kou!uog4CLv*H9$yV!a z>*_xZmU`6yK>k-Jz_hx?h9}Zu_;v4lHNG9QytvA9@Ev+UMYo-qJ*hN@vYWn10r{Wo zDacAx=|FG;UN@yCFf%fU5vw|(E7qV#U zF-Q;$U5;&g}pYUsLK} zV7RN;gOlK$SeYyO85ScvQ98l@oXN^>K}M(i=9F~|Opm#3NKCv8XJrp8pvBss2s|t^sPy~Nw8^TLta;wtH7f(6_?9AwLkF|UK#euyf zd|ly;?llv}_m|}@3*TkFB>l7HCZCW@7SEYqTC>b4O?jg))stMWqVF@?-Du4BN6z;% zU6ICvbRVm*x<~d97S-{X?+=}6J>on=cfIYE{aV)K+MCQdHdVC_@B)V`Jrv1yFL7Vy zz)lArthjZV?Rf5-;>WgCW|2iK%T)&2dc;0mwLo@;A5+gYW*citVq9mUcbdm~8FWNp z7oDPumb=|z-~~I~kMlm}dvd*9@`|2=0Y1KM`@4c7IRhu__5=kJd$P}XhuQ!9RBIF$ zzVWLHNsW(6jpcL9c4zQLeU}G!EwW8i*lR60qp(=bZc-LF0GJ@LlnvCsl~vxa`7A$>A2n!HRu zSzkcwCakn4;Kh_XI*RTT-55?%ULw02)T&}|zCnfliZ+ByhGt?9K@M@02pRg0wiFAZ z&c}WrMr0CTqIZYY;8Wx{+yG|j7Li}V&Z=Pe4I@r-L0iRKiA&YnDFVo>zXVlHlt?%{puIRVcw z$nL%Cy{tTi(Zu`E^dc~(=`6O%SlaWq`<2?yq%CFxRq4Sg?Ln$LX7js!ZNBOb_a8BP zrYzN08#gKYUjX5@jW!iPu4ErG zTe{TDSb0yo*!1^?e#;Dus{6@0*IsV8g04|~L1u#mp8HpigU{uy&&YMj; zs4%AXY1iqqICSESdNTWn-c_>B_#FIBWNYY8yc@j2{Y1`H9iyfIZNgMu0jWhzaxdN=LMB_$4TBc36Hq?Ob;s`ub$QV{YHrqM1dF-%Ner%xhp z0uE|>7|jZd_JEzy@sGiuKs@@CzD&7?+y=_@TX|a~&eT@C4VN%Yg^QWN6umNl{)5Vw z+@;pS8ci%%M>?W4$3KB%hn^eMq*idh%9-rNIDoy>t$=9Y4KP@=(##nAr{}8KK|Dm$ z1()fHsg3%zL_RbNTf>m6pWrt+4Wi3b1^t}Xg%YmFB?rM1@J`JQ$_g|Q^{1`GGmv1w z3fe*#z&>a`;Y4o7KIp6rdT|$BG^G}a+pPx^Ds6)1~j zDSmF$3tm)wAa6(BF~ZO}YA$mhbYC}~auqtDTu8FSUlL)g@#+gmIE$qDpuNvJrr)L8 zOfEsKh(c1XzJ|C3>5xY4BF<>+imC@P1J=^@gU*Zus;TI$;W;#2bDn9hyg)xqRx84& zzoV}yLWF`)7;eY|_8;kKuy;6Xd`HUgI!uO982p4 zNJZEmG$*#83_5MBrM8)uFdjoo2&|G32+@1ib~J)>fh_ z`k%NhzMj&nbwp=T>xiZL)no(BSz?4x<&^g~COK*_xHe9>YBvZ&b|*A2fyvIlW3t&i=t|SqO%D8C_)`B=`?%&&;6~$eg$usgfUCZNhqGhkC#h-FpJIWw-R!vN z4`>f-wYo^cGI2t;AQ?v0{TB2LgNB|0n*wpK^oY&#o`vSN@;YRxVcuXQuN%MIf5!G$ zlZCyzDz~T7p}YSB1Exx}TNM*nyCqxMcL+<34s4^A%Ww07ur1;yx`Grd-^$Kq%143rt}as149$bF%m;I!K$WS^*ugNa$q3&sh_DwIf5;9xSa$+5QB#paR1foj4JDf6-Q)<5ee``v3gLv8>cC&2_fa;MHYJLcxk^0G}w&iJACZ9IzSOXBIiM^XXyYe(Rtkf$XHMq}L1(S(tL#7kqe0bwC*X3+KM31xdoQaOavG~x zseJ3u(Z5`gYlNV++8$<=Vl^$3@I!ZCf#gIy1+^nrpdN4|a*b3^m#V)jNQ@Rd2;Gev zb9RDmx=$nv#RkxyX@`Gh%u`y)tLV_1?Ous&=$unVEwx%tis&$sd*A@{6iT3End0wSvOrdJ{r z^ogY8wd18FN2!FB3CJSz6b+1gWRRaVul9Pvq=Y^M=)Ey=jV318o)gA$q?X z6HQ@U9eVOh=1H{6Tg(P~DVelJ=4QreP6`fn-IqVm??Wp&%S>UaLSwHg%_ew4;&-AJBRP8KpcS2Vx2MC@%CVCrjlo&HcfzICRKZMNI!5cM5WA)lu{ zEy=;o85K}^Xg`^LfVJ$q&_Ue5xMRAN_MBm^T_N&UWZ>oSKJp~WIhH?#stne8XdJ|g zp;M;boOE_1VA)#R?)A3-6a7!KQh3_@r2tqiI#5S|@EisAJ8vZ0D{p zm;!W&T)IBAIRJ6|4b~UTDjrPm*Q{03H}l}Y)P9l~9Cl;U9#7AXg6AtfcuHotq)nzr4V~;8$RF|iN!W_O z!l@oUybd(EBK^~Vdr;i(=VNm4WtrK}9e?;jkA3IFKoK^qyG>KSE&6WJDdN2u9TWZ5 zDir7{eVW==riJHuMNCB|?xcpkHMl>y%%55k5x-!sZ=WzPFYVpT#!@T0nEJ?t%%7t?^N3*?}CqX%av!kzh? z3EyS&UGlDiTJ)w{WRULG=>Ly-pY~|Wf^w%W0l3H9P*7$^Wh9Bl)w?&3lc?$Q?CQPt z*>`Cr6&d*!?Yo%X0>q=#+*rlw+9gTRvY@qGn7tV3?OE4D#>ghkt`l97z@GLKRhye? zFh|ShwtSmuj4(w{+wM*i*>WPzBFX8rMHX?geR^%kKs9>6)H86IGXpQ~e4XoG^#gRY zX8Lt{JfhxjZ>tFHJw^I%J(LZ?u@PvTApC5a9Tnxx0}5+oKi5`AX|_39M4s_E$jIyr z{63{%uY8Why^!4zPt8Jl!*jRhT<&PKSU2ijREKS+aBEi0r>xp1?7Ly^6JEIj>Pz`m zAG+GOPE~Pf-YXT{oa}dw9pORtvkM~FSYgJT7mXE8JT&4-{8RsjlDIF6)7O^2W+sI- z#j^s{x(7v@(k^BGj)sL!`|bNEHb^P;d*kv+uJ-l&5G#wC&3jf?nD#w;5Wg51H@(%_ zp$$$>`q+vfkz?jx2^$z#@a(tePkUqCS4`$kz>GBI*FT)h`%7N#m>#7LY~z`BhZS7< zvAZkH^lea1XrGf<8kF-U_j$93zTB@mc!qN@9#lLwr>}J{M;0}I%u}{Q#i!KO1v1Xz z2^G^0Sw&TPJwK66Av0o*Pw=;v4jlS%`sW=P$Kr_H4f|?~W$Gg>1>H;gjZu|phW#H_ z%juW<>+0ogwW?a9r}l_t7*n8ZtP{8HM&DW8cJVSFREg_4D>LMO*m=2;9iP$jDsSW- z5Q1iZgpgFFVkx19K?4}ME>1~0(iIL=vRxe^xfL$ zm>s79X^{E>98{-hXXUX5@#Fe+`csr@`A?iM8ai>}FGQd4&-``zr(zXc$+@keBI(Q- z2!@|A*rnVkT}?|j_6N6iJl8gvKY=@y$6+P37Q}S|=@-&Es%)stozzLPJ;(}<6a5e& z1}OS!`8CZwXeCc!_(ZY``%Hs14Z1vd4;-!7K?yTns(FR_8W^fo$_MBUnk5ZYl#tc5 z4*4O>k7)odC)&{8kar-N{1eIqVbC9CBB^*f<_Iq*w}V%yrf9r+Jm^4i0nG97`Z#?q zNV4yD?`3y@?z8)AYMU?yRMZ-K89=XIK)|LFsfL-gIG{|^j8`l Date: Mon, 31 Aug 2020 20:11:33 -0700 Subject: [PATCH 07/13] remove blank spaces warned by linters in Spik3r program --- robots/SPIK3R/spik3r.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/robots/SPIK3R/spik3r.py b/robots/SPIK3R/spik3r.py index c2d2027..d8ab5b7 100644 --- a/robots/SPIK3R/spik3r.py +++ b/robots/SPIK3R/spik3r.py @@ -25,7 +25,6 @@ def __init__( self.touch_sensor = TouchSensor(address=touch_sensor_port) self.speaker = Sound() - def snap_claw_if_touched(self): if self.touch_sensor.is_pressed: @@ -41,7 +40,6 @@ def snap_claw_if_touched(self): brake=True, block=True) - def move_by_ir_beacon(self): if self.ir_sensor.top_left(channel=self.ir_beacon_channel) and \ self.ir_sensor.top_right(channel=self.ir_beacon_channel): @@ -59,7 +57,6 @@ def move_by_ir_beacon(self): else: self.move_motor.off(brake=False) - def sting_by_ir_beacon(self): if self.ir_sensor.beacon(channel=self.ir_beacon_channel): self.sting_motor.on_for_degrees( @@ -88,7 +85,6 @@ def sting_by_ir_beacon(self): while self.ir_sensor.beacon(channel=self.ir_beacon_channel): pass - def main(self): while True: self.snap_claw_if_touched() @@ -98,5 +94,4 @@ def main(self): if __name__ == '__main__': SPIK3R = Spik3r() - SPIK3R.main() From b2f4bb5a44474446c7495e7f80cd5e639eb8da2a Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Sat, 17 Oct 2020 13:47:49 -0700 Subject: [PATCH 08/13] fix minor typo to SPIK3R README --- robots/SPIK3R/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robots/SPIK3R/README.md b/robots/SPIK3R/README.md index 9cacf38..6393e9b 100644 --- a/robots/SPIK3R/README.md +++ b/robots/SPIK3R/README.md @@ -7,6 +7,6 @@ Control SPIK3R as follows: - Make SPIK3R move straight forward by pressing the IR Remote Control's two Up buttons at the same time - Make SPIK3R turn right by pressing the IR Remote Control's Right Up button - Make SPIK3R sting by pressing the IR Remote Control's Beacon button -- Make SPIKER snap its claw by pressing the Touch Sensor (please do connect one to enable this) +- Make SPIK3R snap its claw by pressing the Touch Sensor (please do connect one to enable this) The build instructions may be found at the official LEGO MINDSTROMS site [here](https://www.lego.com/cdn/cs/set/assets/blt7dca5180ea66ea5e/31313_SPIK3R_2016.pdf). From 2601e7fc9abb3b5659815167be4963f7e0640ece Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Sat, 17 Oct 2020 13:58:42 -0700 Subject: [PATCH 09/13] add Dinor3x program --- robots/DINOR3X/README.md | 24 ++++ robots/DINOR3X/T-rex roar.wav | Bin 0 -> 31724 bytes robots/DINOR3X/dinor3x.py | 247 ++++++++++++++++++++++++++++++++++ 3 files changed, 271 insertions(+) create mode 100644 robots/DINOR3X/README.md create mode 100644 robots/DINOR3X/T-rex roar.wav create mode 100644 robots/DINOR3X/dinor3x.py diff --git a/robots/DINOR3X/README.md b/robots/DINOR3X/README.md new file mode 100644 index 0000000..6237870 --- /dev/null +++ b/robots/DINOR3X/README.md @@ -0,0 +1,24 @@ +# DINOR3X + +> Designed by Lasse Stenbæk Lauesen +> +> This charming robotic triceratops dinosaur is capable of walking and turning on all fours. + +The build instructions may be found at the official LEGO MINDSTROMS site [here](https://www.lego.com/cdn/cs/set/assets/bltad10c02978864265/DINOR3X.pdf). + +Please add a Color Sensor to Dinor3x's back or tail. Control DINOR3X as follows: + +- Make DINOR3X roar by pressing the IR Remote Control's Beacon button + +- Make DINOR3X walk or turn according to instructions from the IR Beacon + - 2 top/up buttons together: walk forward + - 2 bottom/down buttons together: walk backward + - Top Left / Red Up: turn left on the spot + - Top Right / Blue Up: turn right on the spot + - Bottom Left / Red Down: stop + - Bottom Right / Blue Down: calibrate to make the legs straight + +- Make DINOR3X change its speed when detecting some colors + - Red: walk fast + - Green: walk normally + - White: walk slowly diff --git a/robots/DINOR3X/T-rex roar.wav b/robots/DINOR3X/T-rex roar.wav new file mode 100644 index 0000000000000000000000000000000000000000..5a0346a74945e199d1f1e995e016cda424b534a3 GIT binary patch literal 31724 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 QeAtCl56Q%SX|Ox>e^F8t`~Uy| literal 0 HcmV?d00001 diff --git a/robots/DINOR3X/dinor3x.py b/robots/DINOR3X/dinor3x.py new file mode 100644 index 0000000..c27dfdf --- /dev/null +++ b/robots/DINOR3X/dinor3x.py @@ -0,0 +1,247 @@ +#!/usr/bin/env micropython + + +from ev3dev2.motor import ( + LargeMotor, MediumMotor, MoveTank, MoveSteering, + OUTPUT_A, OUTPUT_B, OUTPUT_C +) +from ev3dev2.sensor import INPUT_1, INPUT_3, INPUT_4 +from ev3dev2.sensor.lego import TouchSensor, ColorSensor, InfraredSensor +from ev3dev2.sound import Sound + + +class Dinor3x: + FAST_WALK_SPEED = 80 + NORMAL_WALK_SPEED = 40 + SLOW_WALK_SPEED = 20 + + def __init__( + self, + jaw_motor_port: str = OUTPUT_A, + left_motor_port: str = OUTPUT_B, right_motor_port: str = OUTPUT_C, + touch_sensor_port: str = INPUT_1, color_sensor_port: str = INPUT_3, + ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): + self.jaw_motor = MediumMotor(address=jaw_motor_port) + + self.left_motor = LargeMotor(address=left_motor_port) + self.right_motor = LargeMotor(address=right_motor_port) + self.tank_driver = MoveTank(left_motor_port=left_motor_port, + right_motor_port=right_motor_port, + motor_class=LargeMotor) + self.steer_driver = MoveSteering(left_motor_port=left_motor_port, + right_motor_port=right_motor_port, + motor_class=LargeMotor) + + self.touch_sensor = TouchSensor(address=touch_sensor_port) + self.color_sensor = ColorSensor(address=color_sensor_port) + + self.ir_sensor = InfraredSensor(address=ir_sensor_port) + self.ir_beacon_channel = ir_beacon_channel + + self.speaker = Sound() + + self.roaring = False + self.walk_speed = self.NORMAL_WALK_SPEED + + def roar_by_ir_beacon(self): + """ + Dinor3x roars when the Beacon button is pressed + """ + if self.ir_sensor.beacon(channel=self.ir_beacon_channel): + self.roaring = True + self.open_mouth() + self.roar() + + elif self.roaring: + self.roaring = False + self.close_mouth() + + def change_speed_by_color(self): + """ + Dinor3x changes its speed when detecting some colors + - Red: walk fast + - Green: walk normally + - White: walk slowly + """ + if self.color_sensor.color == ColorSensor.COLOR_RED: + self.speaker.speak( + text='RUN!', + volume=100, + play_type=Sound.PLAY_WAIT_FOR_COMPLETE) + self.walk_speed = self.FAST_WALK_SPEED + self.walk(speed=self.walk_speed) + + elif self.color_sensor.color == ColorSensor.COLOR_GREEN: + self.speaker.speak( + text='Normal', + volume=100, + play_type=Sound.PLAY_WAIT_FOR_COMPLETE) + self.walk_speed = self.NORMAL_WALK_SPEED + self.walk(speed=self.walk_speed) + + elif self.color_sensor.color == ColorSensor.COLOR_WHITE: + self.speaker.speak( + text='slow...', + volume=100, + play_type=Sound.PLAY_WAIT_FOR_COMPLETE) + self.walk_speed = self.SLOW_WALK_SPEED + self.walk(speed=self.walk_speed) + + def walk_by_ir_beacon(self): + """ + Dinor3x walks or turns according to instructions from the IR Beacon + - 2 top/up buttons together: walk forward + - 2 bottom/down buttons together: walk backward + - Top Left / Red Up: turn left on the spot + - Top Right / Blue Up: turn right on the spot + - Bottom Left / Red Down: stop + - Bottom Right / Blue Down: calibrate to make the legs straight + """ + + # forward + if self.ir_sensor.top_left(channel=self.ir_beacon_channel) and \ + self.ir_sensor.top_right: + self.walk(speed=self.walk_speed) + + # backward + elif self.ir_sensor.bottom_left(channel=self.ir_beacon_channel) and \ + self.ir_sensor.bottom_right(channel=self.ir_beacon_channel): + self.walk(speed=-self.walk_speed) + + # turn left on the spot + elif self.ir_sensor.top_left(channel=self.ir_beacon_channel): + self.turn(speed=self.walk_speed) + + # turn right on the spot + elif self.ir_sensor.top_right(channel=self.ir_beacon_channel): + self.turn(speed=-self.walk_speed) + + # stop + elif self.ir_sensor.bottom_left(channel=self.ir_beacon_channel): + self.tank_driver.off(brake=True) + + # calibrate legs + elif self.ir_sensor.bottom_right(channel=self.ir_beacon_channel): + self.calibrate_legs() + + def calibrate_legs(self): + self.tank_driver.on( + left_speed=10, + right_speed=20) + + self.touch_sensor.wait_for_released() + + self.tank_driver.off(brake=True) + + self.left_motor.on(speed=40) + + self.touch_sensor.wait_for_pressed() + + self.left_motor.off(brake=True) + + self.left_motor.on_for_rotations( + rotations=-0.2, + speed=50, + brake=True, + block=True) + + self.right_motor.on(speed=40) + + self.touch_sensor.wait_for_pressed() + + self.right_motor.off(brake=True) + + self.right_motor.on_for_rotations( + rotations=-0.2, + speed=50, + brake=True, + block=True) + + self.left_motor.reset() + self.right_motor.reset() + + def walk(self, speed: float = 100): + self.calibrate_legs() + + self.steer_driver.on( + steering=0, + speed=-speed) + + def turn(self, speed: float = 100): + self.calibrate_legs() + + if speed >= 0: + self.left_motor.on_for_degrees( + degrees=180, + speed=speed, + brake=True, + block=True) + + else: + self.right_motor.on_for_degrees( + degrees=180, + speed=-speed, + brake=True, + block=True) + + self.tank_driver.on( + left_speed=speed, + right_speed=-speed) + + def close_mouth(self): + self.jaw_motor.on_for_seconds( + speed=-20, + seconds=1, + brake=False, + block=False) + + def open_mouth(self): + self.jaw_motor.on_for_seconds( + speed=20, + seconds=1, + block=False, + brake=False) + + def roar(self): + self.speaker.play_file( + wav_file='T-rex roar.wav', + volume=100, + play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) + + self.jaw_motor.on_for_degrees( + speed=40, + degrees=-60, + block=True, + brake=True) + + for i in range(12): + self.jaw_motor.on_for_seconds( + speed=-40, + seconds=0.05, + block=True, + brake=True) + + self.jaw_motor.on_for_seconds( + speed=40, + seconds=0.05, + block=True, + brake=True) + + self.jaw_motor.on_for_seconds( + speed=20, + seconds=0.5, + brake=False, + block=True) + + def main(self): + self.close_mouth() + + while True: + self.roar_by_ir_beacon() + self.change_speed_by_color() + self.walk_by_ir_beacon() + + +if __name__ == '__main__': + DINOR3X = Dinor3x() + DINOR3X.main() From 75bd6b98f225d2b6748a851d38adfe71c6c39672 Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Sat, 17 Oct 2020 14:23:50 -0700 Subject: [PATCH 10/13] minor change to Dinor3x.change_speed_by_color() --- robots/DINOR3X/dinor3x.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/robots/DINOR3X/dinor3x.py b/robots/DINOR3X/dinor3x.py index c27dfdf..c959621 100644 --- a/robots/DINOR3X/dinor3x.py +++ b/robots/DINOR3X/dinor3x.py @@ -67,7 +67,7 @@ def change_speed_by_color(self): self.speaker.speak( text='RUN!', volume=100, - play_type=Sound.PLAY_WAIT_FOR_COMPLETE) + play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.walk_speed = self.FAST_WALK_SPEED self.walk(speed=self.walk_speed) @@ -75,7 +75,7 @@ def change_speed_by_color(self): self.speaker.speak( text='Normal', volume=100, - play_type=Sound.PLAY_WAIT_FOR_COMPLETE) + play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.walk_speed = self.NORMAL_WALK_SPEED self.walk(speed=self.walk_speed) @@ -83,7 +83,7 @@ def change_speed_by_color(self): self.speaker.speak( text='slow...', volume=100, - play_type=Sound.PLAY_WAIT_FOR_COMPLETE) + play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.walk_speed = self.SLOW_WALK_SPEED self.walk(speed=self.walk_speed) From 5925e4af8996a58205d36945c0d73f50f681b32d Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Sat, 17 Oct 2020 15:04:22 -0700 Subject: [PATCH 11/13] update .GitIgnore to ignore VSCode files --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 15c993e..1cf2ae4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ __pycache__ *.pyc *.swp + +# Visual Studio Code files +.vscode/ From 9f72cd8d72782eb87b21b44a644218394db0c613 Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Sun, 29 Nov 2020 16:05:59 -0800 Subject: [PATCH 12/13] add RoboDoz3r program --- robots/ROBODOZ3R/README.md | 27 +++++ robots/ROBODOZ3R/media/Airbrake.wav | Bin 0 -> 14444 bytes robots/ROBODOZ3R/media/Motor idle.wav | Bin 0 -> 15020 bytes robots/ROBODOZ3R/media/Motor start.wav | Bin 0 -> 23660 bytes robots/ROBODOZ3R/media/Motor stop.wav | Bin 0 -> 16172 bytes robots/ROBODOZ3R/media/Start up.wav | Bin 0 -> 17900 bytes robots/ROBODOZ3R/rc_tank_util.py | 105 +++++++++++++++++++ robots/ROBODOZ3R/robodoz3r.py | 139 +++++++++++++++++++++++++ 8 files changed, 271 insertions(+) create mode 100644 robots/ROBODOZ3R/README.md create mode 100644 robots/ROBODOZ3R/media/Airbrake.wav create mode 100644 robots/ROBODOZ3R/media/Motor idle.wav create mode 100644 robots/ROBODOZ3R/media/Motor start.wav create mode 100644 robots/ROBODOZ3R/media/Motor stop.wav create mode 100644 robots/ROBODOZ3R/media/Start up.wav create mode 100644 robots/ROBODOZ3R/rc_tank_util.py create mode 100644 robots/ROBODOZ3R/robodoz3r.py diff --git a/robots/ROBODOZ3R/README.md b/robots/ROBODOZ3R/README.md new file mode 100644 index 0000000..3ca24f4 --- /dev/null +++ b/robots/ROBODOZ3R/README.md @@ -0,0 +1,27 @@ +# ROBODOZ3R + +> Designed by Mark Crosbie. +> +> This robot bulldozer can be controlled using the IR Beacon or it can drive on it’s own, avoiding obstacles while clearing and pushing things with its bulldozer bucket. + +The build instructions may be found at the official LEGO MINDSTROMS site [here](https://www.lego.com/cdn/cs/set/assets/bltfef825595f55768c/ROBODOZ3R.pdf) + +Control ROBODOZ3R as follows: + +- ROBODOZ3R starts with the User-Controlled Mode. You can switch between the User-Controlled Mode and the Autonomous Mode by pressing the Touch Sensor. + +- User-Controlled Mode: + + - Drive ROBODOZ3R around according to instructions from Channel 1 of the IR Remote Control: + - 2 Top/Up Buttons together: drive forward + - 2 Bottom/Down Buttons together: drive backward + - Top-Left/Red-Up and Bottom-Right/Blue-Down together: turn left on the spot + - Top-Right/Blue-Up and Bottom-Left/Red-Down together: turn right on the spot + - Top-Left/Red-Up: turn left forward + - Top-Right/Blue-Up: turn right forward + - Bottom-Left/Red-Down: turn left backward + - Bottom-Right/Blue-Down: turn right backward + + - Use Channel 4 of the IR Remote Control to make ROBODOZ3R raise the shovel by pressing either Up button, or lower the shovel by pressing either Down button + +- Autonomous Mode: ROBODOZ3R drives around on his own to clean up small things but avoids big obstacles by reversing and turning diff --git a/robots/ROBODOZ3R/media/Airbrake.wav b/robots/ROBODOZ3R/media/Airbrake.wav new file mode 100644 index 0000000000000000000000000000000000000000..9558ef22f870c975585a4db9eb26c0b5ec9070aa GIT binary patch literal 14444 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 literal 0 HcmV?d00001 diff --git a/robots/ROBODOZ3R/media/Motor idle.wav b/robots/ROBODOZ3R/media/Motor idle.wav new file mode 100644 index 0000000000000000000000000000000000000000..26c21f5e2ee758883f79d2d41bdec66aa0887444 GIT binary patch literal 15020 zcmYjY1z20l){VOpg#-e@-6@n(N};9hF1POP?(Sad?sjjLQibB~!9$#cxO;why!*XB z=R2I4J!|c~_MS;{&H$4~jTrGb1pt^aY0_I?ETzl!>M!2fE3_M!jf z4B-C7_Iv4X4`}MY4n+C)I*{rAbPq)6uf)JP!2X}lfmVNZ{WWm*<>%Uvk(}11ED`y`q1`1o1-rVtdH&f z52C-afWE%1uLtR~TKkUvcMZ1B2c$1DxNo$d=jgM8`*0utyw7)kP5Qm}bNiLM`n22n zSWY*hj|1(?v_Hi|I8`F1U0ZKOxpmI|Hy>2gn%l*J|GqN-AaRoc z`aTAvuc}l)ojV@z**yX9(7hgT(0vH7#hn9K?!E_D<$efQD9GbsdN{1TXMW z!F3brX!dQ-5#)4lm!Tb7dpBAp!zOY92T85#TmWSf#FrA0Fej-U+N*i13Fv(AA-X)$ zayTf`^B6XYvX!u?$fIQhVFPPI`j#j$V z-&FmzqTRYxz;1@quf!YV@PDZ}i?|@|j){i{nM2Zsnvns-MR8dnIdrL4IP6vD@e?-zJ+zUlV!JICHE)gWczowExdV)CgxqMEml&7$~ zgWK8L*c;Wqq<(E(N;iwjp^~>C&dGs1O-oZxDSRX(5_SpoOTPq74dcXv(tZb<^zQ1b z+)3PgZa4Q6TpBka%Fd)puT{xwm{o!BtYq}~gt#jAXZvt?2gs+pPO9OLY)@)C*uGcO zj3IE=jZPizk9#OY)^BZntz8l!NS!nMJrvzcc^~rO*Prr^GalpopNFvVO&-s1Y{F4Y z9>&un*zXD?*I@yb8qO&r>%O-OyI-|Y9OH1;P_KOBh>7f{^iF1{F9rKk@m}^6aYR-k zdDp$kuodp*vI*CA7ucaHr6$LxDQn?q&y>QD5Jh11&)VKLvM5P96ST*25tMFF00NZR zdKg(n92Jqw`hae5~r1r zi=ZfSn}fLXVfWb3=uiqlQzqCX9jaYoDhd}2DS^>O5}#c% z1tyug8WICHBPPme!YFB^^QeBm#ovD$POg4jzgDO+9f2QU{0!0i{`SUW2)%WHy%vQW z;QkwhL7`zQ0g+OmmDRqeE7G)EiE`ezVjH-2qmM%7ivaGGa<7$)UtT3_pYiS`Jq{mGAZ(l9)eY z+@No|J(4{|UgBO?z1I*=1@H>?r}!MNsP`Aig2VEy{P|2wRit)90qQ1oG5*f}nzDoqIb9LA4-_o}o?a z-lNQQtU~_r7@o%~<~4-Bev5pw zssl)-#?XEcGQo6}rS@K4SI5u*PBJCyS73|#SmTVE82fGaTk_b54EEUeuayhywl$Is zLwr=Bi4aW3oLUF)YUmFiH|8K*MLvX?4+YVrxS^_@*3AK*ZC`5PU*|Ok^I!GQ*vHdg zW7bD2K}Ie`d_(XIKnbSA4uWss>gylK8kpy-^0iWv4_Ixe+P!rh5%+-k3f!V z_SLpDSs@5(0F&YKf$9$*zGd$4};yev5h6?)QfwCAmAi2z#P)TEc#Iue&advcVDM-pp89IMQo7uo^fCzRv91aixi^n~tAnT-HVejzxcm6L5>f0jlpiNu`x9- zd-I_XR2t+X{4xn?T-0DLohf?^UI}{XSx8#o)$8*;ctg~9aGvE#M|9q+(xbIUO*~Jc z|GB_vY$fJzlNxXi`we!}e#SB1a#`JCk%5n4AHbiQ$CXhk4(QK#51q)G6*B6e>uA-9 zABUPg+qb!MKy&o(H%*8ku{x!-7 zJBJjwr0QpmhX7IcIe|{F-89i-Dxuovg|C_>(sNXQH~)`G}|Kw#y%Q( z2TryPmP~73QqPmNnN5%}o{aD}B$%TOYapEpI7Oslcfii8I(XHhQIZj|B*z@v1;=qv z73=|GEy^ES!aCu?!uLim_b&uL6gAZ{%Kk39(3u%Fh{Yl1Bj4$3>`j^#3|1l^e!d$A zJM9yxcqtK!uPAOq>HuTV{=n1f&$7?xcw&}mw5*gNal`;UCaB|!gl=nbC~CGF z)`$yrP|yR+U1qpl%PJjG5R*Yjr2j3$S8F<6bdtLujxBy2!M6$jScWtN{)rSGAM8I( z88-}nL9wMV^=k~IfY2Nvg2(C}>Xr*fc9!-`CM>kSb-|2FQ;U6XIEx~6lwQYN;5VTS zs233HI;7fvcC@<#CWQvrXi6YtG>J|*m5>s7tYaEv zQ7|`L>G~4L4FwFm61E=EXsprZLc!*xY7fk69|$(Vao>Ek(%o>1*mnn$_SeO z8^T`1JV-o-L7wh01|mWEsa?8__(hD(_VI$hi!urxcZTVt%qR{r_TrG)foot-TSz6B zB_)V|!Y8D*P)NL0xu?D*s>G&wu2k$Yq{!!q-#dCJ?g!S5d&wkvz0>UNh;7^0zEb*G z@Z7+FOQp(+oTjTT#E^OGZ_dAv@s07kS0~c9R#$Tx%WYGU5?iCKkoUEeARgq(VlpQl zOx;0t(Eb2z#$)JOdm(}gU!$$8J^pfE)k0nlDl+sE^+Vtqe>L(mdM{=TdJlRpdbsE~ z@0?z!*kE=`usuNjWy1t)3*MiU6B0D&6k#Re4h3SJ+CE#lx2L`H6h9la&2z9@<*Yz? z!M3?B*oD?cZ8F0gzl0=XmZM{wEA?-9^EwjiA9wzx;{}U}dtn4*7Oo=rG1!BY1Gh9x z?W^ut!4zZ)q6XMj1gaptS}3@GJx;+V^Td zE6-R$%CqX$+6;o^g3s!~EW^YQGGwNP9HlpvqunC`pM87D#l{Z5j-Aw_0Ab`pLv;F9_t5=huZcw>1hVs*!T z{7`vT@rPBIem;H#XDt@=|R z0NU_1bUh;nrv9^|N1=r>4!};ild&fd2VIj@zLZqKwb zF%o1q?Gjw-+TFDva3wgU>WN)I!fB4_h7q3z<#WU+xl3XhW;cVgn-&+=nIL8t!js$* zvKaWdmG=W$l4qNoeqiR|@yyiUj#x>y;A<<#w4KOs1@dQ!Bt80Sv|54)U{gJQvpz~n z^=1C=!gdFL?+7>Z-q<3{CZ3f#}QY&T$<2;fttamV zziDOG4)5~9eBfkIGobojez%}E*7VfK@L5LRnQ<|6h$2^J*SLGR{MpU|$6B+_Cbi$z zVeH?L-UKto0ZyRva6?G5pcAwb#g}@D1Y>}a-9b3YXoAyRWY>(Aw{`ef_}TF&LPmIw0yU}bTFtl);=~gRb_`QEj~g1~GnFNn#lE>dE6_0Q@urP`HvK)U zWH9n-P)UL>ONnX(J_hlL;{pSd+9=Dh3E*u_yFYKvpV&GIanT#3-6qj>-l%vFxJ2!x zEzP#iIyNNRXA60gc6S?E(kAFpEwB+Hc1FZ?5A%;nDiP$D|8a+sfnK}Ian4At|4i^sUB2ak=!TjC z4#Gq@TX846@_{D}?cboa2i0V(JnU-fP}W_@I?NZ>PTL-Bi>ueML-j>{F8qjlR22q! zp4Dn^lHcaeFaILjh;sNJV3!8(jtBehQ~s7!)a~h_n?ea!W6}&2-Ej5gmRxQPZ-H)U z>dB}s&cdVuRE9Z?n5NB=@00BkAJ8{BcWIOPe8*8uDCHZihLM1~irfh+LoV^yhIpcx}0kE1?^uEBXb{1k)DO!`I!0MST8 zqV9FnD$h~4K(MRa>>V;YQ_dt|=Ep$kdEy2&5MBfPN+thKs?V`wp@XN^Au6pgE+WpnX8qqS2 zWU#zFI%d-8jBdXzj0?~o_EScleGY|!YIGhIl!*(v(Ir#sFs2*$QS8z{A~qaw-ZL-a zFnSSK1>6Fe0o|&~HlvJ&x`PeRq!Sg}G~1B@aTdRP)(3Wqe}ZXu^>MUvso({lq` zeXtblsGu9fTwfCOf#wiwkA(>Njai6R=pL~k$RAxKQLCY?=L1qj-w*yoXsUc;TEf)y zypITr>*76cO>JRX{^^gF@?_N zsStZvwdxn%gmM#~4KGPg_ss*ADi=4r`4IjgMGNt<4YfwUR6i+|HtnkrX*a}Ih6uxW zu?vU2g>Nm+s@#Cyi2fTN<%aiC_;ZWLfX*}TIyNe&D?Ejv3~v&Z2KN*th6cRhTnu|$ z(Nli1{Tb;P5M>I3S+Q+g=Dnj00Hi%IDYXnjsEoh_tpWbv0RJc-R zG=3EU^4itkBbJ7a;;@EAhAnG-_dBI0!kOkv9`azga9A@B{;uV&_-m`0?f*~EO_s>F z5c5m@4wPq6X@Jx+t2fyNB>_U@HAwc)ZE-|ENR-gSzf1FfdNO8J|SZn!Mu)W1`c{jLuCoVg@v zqYL#%c`9!U*#!meyDnV3+vqL(u%{e55uQ?~x|V5RYlkT0CTi*LB_5 zx70h^zBecmQ-)2umzYSOZ)KEZSD1yZNNV`?%w5^5w26PVygTxD3=ouD88Zhl&Dbal z;v1k3;z%h#$_L765~3B5H>r#uhk2(&h)K6Bt=**`Cciq~EF%oxSh!>5m@AYiid(I@ z9akZbP$A&5-Ue|@+lG&S)u;H2Mh3^+z~QY@`TbrYY%C|i?^K+B0$UmO`%|gA@@rkN z?hp+hq9KekNFX^dIbtLE2KX%gCy4=V$1gN+1ro_MEpC}=6=T|Uwi`@Wwt8JtA^1uQnoqp4* z>G>m>*fv9T&nqAx*KZcqXE7P@$C|6EO6hyqdwsq$6A1+0R2rlr-i=yF>nQlo*tO%kM$~(+>)O=m z;|hVs<4}%j{fTyY?Iy_>&3mndxH~dB2ufy1q#f%FzOYl&{V_nM+s<&Abs2_j%Ii9- z!%s8UU_mIbLZ1;VG4da9AY_SdF+WqLR0l!Q?E4_U=!0;79HH)q$dJDK2a|HXYm#=5 z`jU099UUQL@5U72GEo=Ne&%H1P&I@)oIr-M6{mSgJ-IcI&R!Rik{v)soPY>?-}oN3 zi`B1OSahZL1kMZQB(S%fTfr}!-(01MgHR9*WGtZ2<7@mH%16Up)IpyBIKlo3TyG9j z&Tdx=K|LkCvCvbvcj~w35s_;tH@tVUZZkGGMsySlb4;^KpoP&WphsjPocRXIf;f3O zKpSknbE5<%k~3~a-)8J|AuLC=Nv0Ijd3A(^4(f(9AuDC$t%Ve`)gfDLb7Mn6d%&-> z>4YynIhI>JgIyeL31W~xz?-0#2#2?kbzdMio#CwT@ULhce3q#k{1f@o z=;wY)aJgO3bG?FwdF@XORBVy&Wv`P?zL~GN;Bz2q5vJO0GVQJ2)OxZPVOWA|4Ppj2 zVYi$AQKzX!@Q8g+H7deC zcQw9_Z!H@A2T~Av7T_>$ckge07$C({;k7%YE9fl_Ll5NLH=L3!Rb$*Yt#bM#fJr1S zxX}F+U+g)GQODwV-gT_APBi2zChPp%XkWPXzHLAByK|fE8RUAwJW z9#-rkdM+lC=Fn@Jzo|b9bsiLSR_KvftQvoxUjSJi|sw z?K;zCaScUpqE$xC9dsJ8AQw<@y&ce{v3r8yX=?gj;045B(=p^|y95=*t|ng6VpMZW z)#V3Wn^=eZGD!abFh)^ZO;er1>dTB|^Wh7r7Jh?lVQmK0D5&X@Te z8r^7r^NR~N2VoCzvV-hSrgUM?24}K&X7G=pO0QF>Z{3T#vf9UWp}JdzQ2sA|6z&l6 zxbHWluO=B(!R!nX_-!Km#7x%-T<=Uv9DbN2z&yA!Z%jU>E!TK6@KvTbJrPNBZm~R8 zOomT`SGgiV?@?X0zdAPXj+7>JM_4CW{vkdJBFAQicm_s?4hB}3_jw;c#dhuZU6mi% z8eh9qhymAGo&ZM!<}-XaCQru5f3io=Y)BmZr|OLXDd5ZhDv$Y|DA}S@>y0kv2ztUE zQmrZyUQe9w^(FEQUIdyh+^-~;hIGE|yJLzI&F3XUJtES5s<59~T=!E99a9YcWPGp6 zu@)FB0bWQSH?C`4m964UD~cGE7%);l;;`pX+ZNa4W?n-pV3ZZCS=Ms4X99I)Knim* z>AF$r-cJ~A^}1 zw#M^(3ag%zlW;Aj#p*AFReddbDtXmS1uUT}%DegOEGsxncAp0Z}$v?I~Ae8xQgUQxaExlbsIwO#u zd?pU92;+EJ@IJET-4lCXP@{ZHkT;8OKmA=X+pyc?PE_*fYq5*)>!}Bb33_+WsM-T< zOAOBxEPInmWWH|p)P8UY2sd}KaKBsZv`h88kpO*d-bS(B9HvW0K zGPv9p+k8@hbYLMXC|PVeonslL{6~Wp^oqPJMm(1N!mAOyoH!D*%UQsmW!gb{1%3)x zV&*88D{vr?b{BLw)q`4OpXHW<5GtqMLzZe7BYt6Ajy})UCOAXyK%mlU6GpX8cL;IP z&wqyLWF1Y!Q4FVH$Qh5r8g(9)o=LEQwC@m02$-QP3aO-SX)6mo}~T zbFIZaA9_kV1AdYT3K-{g0vln^1FWGQM$ZA{DOI{tAa(tPw#B+$p~Q)&fAt;B9*&K} zY)a@cPvfp~bht)1A2c0qT?6pJtinxUzQ!D5f5IK)b?^?gj#5kovzhjwk1-7D2YzWQ zO$0=}Bg!QAAfdQWd9rP+BM6dj80(}`0y}b`Q-VHV7h-p6TTu6$)|#E>#mJ8!4kZeE zDd48pCiU@VSjBS%)+B-wgLZn2CD~k8`1h<-FG#>MQaNshx<(-7{;EByIj#sNH79%q zh+K5aeF9I-N`y^`TmLzA_&OSZ)iN7_0rTX zKT;c2^A|NP@zv}-z3ImG*j{yG?Yj{u0S>;_URC^%#NMy-y{u)Mn-guA7iv#3mmUFZCA_VAtP{) zDPF!HlUuURd6&E3heR(jKQ$Ls95??G+#PZi+4vr9hCKH57Vq* zq|?fE{vv+*`7z$GdHmAJ=-BI!rE;mXS^Nm!K=26lppACwHEESkULJXwW;8@v{kjsi z$IT!fMK>#z^fC$%CdI!8&?OgM1$-pgM@8_4d?gA6-bK#WHI*|^k4CMZymao)glKCP zpQhZQqey&hC&73UQg*#UQUn!#@pQxzQwP%``gZRtmBZD!&_jW#iNd6mo&&{_Pp0Bv zVK#7f3}Q&epzAQT;6(GAmV-UJ2^*426B2w6V>6m|{QC73A)JHv!q$1sN9Dp_VX$Na z^gMHOSTyo#Tm09(WiJFx()rG3Lq>8QvP#HlvYqI|@RNWz%vSVzXp_G2+b3Zfai{hc z9gD4Z-?yBXgKecmH59}?mwqg6XZ(v!?MwM9bWty)DVZ~R-tc|StNHs%9_P)go<;bW zF=>z_45wSswwRyZTH^O8^Ka&3O;z8H$X8vtJr!BXeCCQaCn8YI%ekJQ(g5gCY4jMM zB*nC{*~NQ#w{c(n9(u4CUHYENPfekL%!5~MkrL!?1l|8Rg zUvDp*si9K;_WkJd%qNVU6OiD)H|PvN+Iv}l&d?)wwAMBIHcf6by3=t6)&u`L)Eqn- zJcHm#Jj{`igL;3rP=7@h{S*#IUZu__hZE8eJkWMPq{miN3M>olAg198Oq;AH`|gM? zE1$~zq(5|X5Z@TPuq@wEto@Finjpzt`&Rg+faR22?HxW{I#Kmoam&iZTLK1AHyU=d z03{ITdt0I1#=6VefC#cqbj@|$Rg^2<(bALm(E=H#tcPl^*1Z<+(KArBig&6&CrW=; zx80@%9S9HY`}}?Bjm8TZE1;Wt_RGkkWWy!3`1iO5y{i>H+pjC=7QGcP)jmW^x6=Ke z#S9;Wr;Kb~`SsN&SbdOcuFFmv7xkBS9J&H|75*4?*1DUNh`MFoqI^^LqN=Bx%Un*~ z%`!$j_IxV?2+ru3GB$iTy9?ck2-j?F2Y`0cBSPX3i;(F(yb@;Pb3#YzQ{qcE*U|De z>^9m4@!60ue*BS)WpF_r@kh6Gj_sy@%iv#A$9b9R$Ck+69{6q$QyAFvGg%tX7D&f; zN8<;^LiPdw_(6n#FXm%Eysrk|+bU@eug>~0+$UJ=HCHqhN0PV5^TBN}ynaWG2EVWHfS6sCpr=N}eD>B-blzoh~ws&+s{7+eTnrasF zg!_fOw=`8tRBg5uMl^=eA}u&EO3&9iFp%4%n z6J4`K=XxiGCq%QE4^Uy~9jYqLbkSG<%}H;a)|OY^X5UEGdE`adB8mxd;DfL-Lx*Ob z^@bzQ_QAdlFb;hMozuFtZd3_glID}_Z-@gVB*ewyG^#_Lm$)fqNwTGmEkHrk@L(z4 zQYWb>lfA%VA!U{qA;nYbhfE_3rafxi|EZ~Es7?sF;&sHj$aU5EkEmL6NxcSw58s)2 z0RO4)ch${xi+ggNXx3onFtxAxAHl1VTz#R3->AQ5-u4yS5~S@#DP`l!6Y+e;UG*<8 zSyQRK+!IO8q7C)A95seD*y|j;Q6%Jsna0ze`A%|sx)!&$7PJ*a_k6~`4uy>V74PTo zM^%CF^08&^yf_iS00&<7+~VI7GOcfSJk#^toO zjFleH&M}Rr8WRN3@G{JN0yv`1nqHKj*VY(sZDhP3?VM&}WjocRZDvhxGH@y@4!KcG zYVfFGe_d5Oj`$Z{9+HQvmvogc}#s5dhyIhV?Qm zT+cD|U6kE?rpsr-EKUER_iy0xC`-*$W>yLUAC)q3L&PWQ*LuiB8yY+Obj0$AG#if z6||Lu+dnCfm{!5hV3=-)0WJtATUQ}+ceDAV`%#A?Iyid`d4jzJ8IDTX=R9d`;19~f z)IkihK_#96m?s7!smRSXmWP>-lMbb00DSrtrW0@O|~3q!Y_ zPtpu)-N@fgc;jHhmVqBSmzcMx%JHb6am1r|E@i04G}?Jhp145Sx7}QQMzWTX6SRaq z)bqSyp^~6ZHkl+8R|1vIoJ4Cv3E&9hS6gZCOzTa@Eyoyig&|(|l!0(QP&>ej`gWp! zS&gXW?w=4hBp#^*?2$f4J>}>dj(0Yio1Ldrbn^#h8!16D3!Ciw$0Z9400!d90H?vL zv9ozEO73^AZeHB?=oIa7F0c~z4L#F)wZ|=Ea16$rA_3_pitz<+CF5J?cPZ!@u$#kUQE*{%xL)ccy(g7*8%MtgV@Or zxrzJWYKCC-Q1xB2IUosVL37(fRAKywa$?CaQB}ZNLaFZ36KT+Y0U+EeD^A=4UM$jETSo|=*9y7kXI0;zT16Rftm0P%0%f%<2tw8r6%8Z zQ^gi76|mXhp|OMg86wR_ z*F^71=v&oy=tI~AiwiN=)v9`74b(lx1bD|GC)sYuD!X@fjCT!!fA)>eNTf`Vt<|0F zCKb;CN5n1;*o^N5zVC{wz1lOA7iF1N6~j;@yCw zq6M!u69oAM8Q+~6{c_qI(?KVz2wxV zw!-h4H?#$|-F7_{1Dj{Lhi?xr3Ze7{w@>T&+&n@f1`Uavk`kYAhF}pTNRBs6sS)&| zV1F1bAycC;7Ei%vO_JtZNL84WHVB6yht3{t!mxrGmab|G5qM@6jPlUtC9_UMchybY&R&1$Yw}v1l(dqvAbg=$$ zkJ&yQu#$brXD}HFx+OfSs#aaF9JXu$>VcchU}LStE}YlQL{uhD7?C?@9c{Hy$30SU zwRyLy0vCz(v~u;qJgiYhyT;B{B^)ADq4HL*DW$gc(TVPo<(L*s2@6#ZE>)lthqt+0tx7S zeLH`3rd-L_p55Z#2qNy3t4cnvT3#!t3&a+uR;ElFbeSSjKheEXrov`B)09U84iazi z_O#w@pV*mR@<;t4urlCEfH`7ua2@AFd|TW$^cnj`4I@A0lR1ys@kHj^a~pGxQsata z?H_k0HI)<$%f$Rd5d>lU$B0pi8^V1BqorxYBaL6QUVby#^Zeg>U7)EsYk@JYwaWVH zXKj=DlY6$iXq4Rwr}>$e&f_urE`6oB!ur?|3GE7d=@V#M-SN7nzNOp*?Arz1V$UES z^rASO!81WWL}u-3*m>qX;!};E@x5(pt+;2g{vIWZlZ~71>Xh%W+W?{Nb0|O1eRZ|8 zP5c9}-Gf6z;dgqzVoay(!qJVZH0yge$`5Ma8;QnM%0wQw`=ISQG>+nz!VFA~Sni(* z8;$;|8lw^j0m}sBJLIez_RU3NY@=o)wWr}zbC-4#4mpu~>Pz_Sr z@JDrX?6auFo-4?GPxIQ`KR4Pe+#L`h_AgFKRBp=A#=w>mW13%6WP`)UKfi6~uRHmt z<&)ZgQ_gpIms*e)u=61m-lz3hRy=&fgVrW& z_->!_)Tx93ubP(k1rvKVqmTP8VcPwdg? zl-6ppFvr=$!ow2w1)NneB&%Fn;rP0#{68o+Z9TaKUvGTNXX)DHo8aNB20t9FHgJE` zeI1W5+48dF*6+#S!w?k(5m5)IQyt1fHBG=D_8x8C5^H6o@CDXfm(gQA=Z^l8p%eDI z;ih^sY`N_x1Cah0@R~5GOI-8~4CPX}gF^CIv9^ognf#wUmL4_?96?Iwcrm;o=;U5* z=U6wvGMLmHK=1qe6|mtW2ujn750& z#%WJpxPIAKpUkG1R{8nHCmwI{x8XMw6O2J_vu~&){AAcT+5~Wv{u_vnSph0Hr1Suk!!M%r}c>v%Rk#Nq&}{F zzL)_U2^)+5=7pf7vQvVQ?0W1Tb8T<8V6ORndoa(cEKop&V>C+rlg+Lms=2&Fr(sr+dn zX1jQl0Mrx3`_c_fkMSJe(}9)|J3?xhFyti&OTMDr*}I{>qk|*+09l1-KpaEpvE`6z zB^@`%>o4Scl-e(g@L04*&$We!Diyc2S9oLXo~S42#-s_}AwZ3Lt!tP@r~N3&5<9KO zT>+FOFcsZ^PtA9`QOZ zKy!oZ4?hHpB7>t+aDhX@7ouHKre+2_6t~2=0v{P zI9Hv9vMCZh&Xsa~+`*K`pzf}%xsF?DU$SJqz;z4{-}I10v8}XGD4ydb(B)o^L^~_3 z(?O>(o3Uxq1I#}k=7FE8 zV{|@{3Q4K#aOb5ul4UY+zxOBfO88bq68t6(<~+;7d2I_i#Z2}0fgEVzR+<#6#WPjQ z16|mB{aWF)o;cof1B{XCTgc`{ETFEI`11;M66sy%P|s>w2I7_mtU9Yi8oxL-L@qSV z_YwJ+hTfJ5KTB^iy$Aeo{;`g;WFlv~SJ=iYW@;u#uE7&vPD?f6AelsxAQOqrqSGBy G!T$$!ztb}S literal 0 HcmV?d00001 diff --git a/robots/ROBODOZ3R/media/Motor start.wav b/robots/ROBODOZ3R/media/Motor start.wav new file mode 100644 index 0000000000000000000000000000000000000000..d9df5a5fdf20b9caab5a9b22df52da5a1038e357 GIT binary patch literal 23660 zcmZs?1$5ik)&?rcvTT_#c9@xyHc6Y5Qf^ab#wlgW%*@O*ooT1coN}8sNg>S4iJ2KB z+poEOefR!rJ$czWXP*t{`}RIsmVGpK=%7LKrvt#GeiH{SSh~iK1pol}^VQcE0Cw~S z00>|K^XIIY)Ay&2%S8Y%7ZJdJo}DfTaQx>C{

C``z!d!GCIDF8Dthj-MkgSC`jc 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

  • McEY`Q`uDO$8Abd>ZS;(&)fS_Cy zikK7ILKqQ*LC1i>hU*=~0SECe<6M-L9_M_WybL$r+GDs>_d#@6IUW0Q?kX3^nlFnV s%eDg`p7BNZZJ(&%68}AjuQozBgjk^X;J7h-qvtqc4`BjhD&dv*|4q`Bwg3PC literal 0 HcmV?d00001 diff --git a/robots/ROBODOZ3R/media/Motor stop.wav b/robots/ROBODOZ3R/media/Motor stop.wav new file mode 100644 index 0000000000000000000000000000000000000000..2021cb4a9a3e8d3ab1c1e2a060ffba6b5730af0d GIT binary patch literal 16172 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 H|NgcA6w?%U literal 0 HcmV?d00001 diff --git a/robots/ROBODOZ3R/rc_tank_util.py b/robots/ROBODOZ3R/rc_tank_util.py new file mode 100644 index 0000000..900f500 --- /dev/null +++ b/robots/ROBODOZ3R/rc_tank_util.py @@ -0,0 +1,105 @@ +from ev3dev2.motor import \ + Motor, LargeMotor, MoveSteering, MoveTank, \ + OUTPUT_B, OUTPUT_C +from ev3dev2.sensor import INPUT_4 +from ev3dev2.sensor.lego import InfraredSensor + + +class RemoteControlledTank: + """ + This reusable mixin provides the capability of driving a robot + with a Driving Base by the IR beacon + """ + def __init__( + self, + left_motor_port: str = OUTPUT_B, right_motor_port: str = OUTPUT_C, + motor_class=LargeMotor, polarity: str = Motor.POLARITY_NORMAL, + ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): + self.tank_driver = \ + MoveTank( + left_motor_port=left_motor_port, + right_motor_port=right_motor_port, + motor_class=motor_class) + + self.steer_driver = \ + MoveSteering( + left_motor_port=left_motor_port, + right_motor_port=right_motor_port, + motor_class=motor_class) + + self.tank_driver.left_motor.polarity = \ + self.tank_driver.right_motor.polarity = \ + self.steer_driver.left_motor.polarity = \ + self.steer_driver.right_motor.polarity = polarity + + self.ir_sensor = InfraredSensor(address=ir_sensor_port) + self.tank_drive_ir_beacon_channel = ir_beacon_channel + + def drive_by_ir_beacon(self, speed: float = 100): + # forward + if self.ir_sensor.top_left( + channel=self.tank_drive_ir_beacon_channel) and \ + self.ir_sensor.top_right( + channel=self.tank_drive_ir_beacon_channel): + self.tank_driver.on( + left_speed=speed, + right_speed=speed) + + # backward + elif self.ir_sensor.bottom_left( + channel=self.tank_drive_ir_beacon_channel) and \ + self.ir_sensor.bottom_right( + channel=self.tank_drive_ir_beacon_channel): + self.tank_driver.on( + left_speed=-speed, + right_speed=-speed) + + # turn left on the spot + elif self.ir_sensor.top_left( + channel=self.tank_drive_ir_beacon_channel) and \ + self.ir_sensor.bottom_right( + channel=self.tank_drive_ir_beacon_channel): + self.steer_driver.on( + steering=-100, + speed=speed) + + # turn right on the spot + elif self.ir_sensor.top_right( + channel=self.tank_drive_ir_beacon_channel) and \ + self.ir_sensor.bottom_left( + channel=self.tank_drive_ir_beacon_channel): + self.steer_driver.on( + steering=100, + speed=speed) + + # turn left forward + elif self.ir_sensor.top_left( + channel=self.tank_drive_ir_beacon_channel): + self.steer_driver.on( + steering=-50, + speed=speed) + + # turn right forward + elif self.ir_sensor.top_right( + channel=self.tank_drive_ir_beacon_channel): + self.steer_driver.on( + steering=50, + speed=speed) + + # turn left backward + elif self.ir_sensor.bottom_left( + channel=self.tank_drive_ir_beacon_channel): + self.tank_driver.on( + left_speed=0, + right_speed=-speed) + + # turn right backward + elif self.ir_sensor.bottom_right( + channel=self.tank_drive_ir_beacon_channel): + self.tank_driver.on( + left_speed=-speed, + right_speed=0) + + # otherwise stop + else: + self.tank_driver.off(brake=False) diff --git a/robots/ROBODOZ3R/robodoz3r.py b/robots/ROBODOZ3R/robodoz3r.py new file mode 100644 index 0000000..6387df3 --- /dev/null +++ b/robots/ROBODOZ3R/robodoz3r.py @@ -0,0 +1,139 @@ +#!/usr/bin/env micropython + + +from ev3dev2.motor import \ + Motor, LargeMotor, MediumMotor, \ + OUTPUT_A, OUTPUT_B, OUTPUT_C +from ev3dev2.sensor import INPUT_1, INPUT_4 +from ev3dev2.sensor.lego import TouchSensor +from ev3dev2.console import Console +from ev3dev2.sound import Sound + +from time import sleep, time + +from rc_tank_util import RemoteControlledTank + + +class RoboDoz3r(RemoteControlledTank): + def __init__( + self, + left_motor_port: str = OUTPUT_C, right_motor_port: str = OUTPUT_B, + shovel_motor_port: str = OUTPUT_A, + touch_sensor_port: str = INPUT_1, + ir_sensor_port: str = INPUT_4, + tank_drive_ir_beacon_channel: int = 1, + shovel_control_ir_beacon_channel: int = 4): + super().__init__( + left_motor_port=left_motor_port, right_motor_port=right_motor_port, + motor_class=LargeMotor, polarity=Motor.POLARITY_INVERSED, + ir_sensor_port=ir_sensor_port, + ir_beacon_channel=tank_drive_ir_beacon_channel) + + self.shovel_motor = MediumMotor(address=shovel_motor_port) + + self.touch_sensor = TouchSensor(address=touch_sensor_port) + + self.shovel_control_ir_beacon_channel = \ + shovel_control_ir_beacon_channel + + self.console = Console() + self.speaker = Sound() + + def raise_or_lower_shovel_once_by_ir_beacon(self): + """ + If the channel 4 is selected on the IR remote + then you can control raising and lowering the shovel on the RoboDoz3r + - Raise the shovel by either Up button + - Raise the shovel by either Down button + """ + # raise the shovel + if self.ir_sensor.top_left( + channel=self.shovel_control_ir_beacon_channel) or \ + self.ir_sensor.top_right( + channel=self.shovel_control_ir_beacon_channel): + self.shovel_motor.on( + speed=10, + brake=False, + block=False) + + # lower the shovel + elif self.ir_sensor.bottom_left( + channel=self.shovel_control_ir_beacon_channel) or \ + self.ir_sensor.bottom_right( + channel=self.shovel_control_ir_beacon_channel): + self.shovel_motor.on( + speed=-10, + brake=False, + block=False) + + else: + self.shovel_motor.off(brake=True) + + def main(self, driving_speed: float = 100): + self.console.text_at( + text='ROBODOZ3R', + column=2, + row=2, + reset_console=False, + inverse=False, + alignment='L') + + self.speaker.play_file( + wav_file='media/Motor start.wav', + volume=56, + play_type=Sound.PLAY_WAIT_FOR_COMPLETE) + + motor_idle_start_time = time() + while time() - motor_idle_start_time <= 2: + self.speaker.play_file( + wav_file='media/Motor idle.wav', + volume=51, + play_type=Sound.PLAY_WAIT_FOR_COMPLETE) + + while True: + while self.touch_sensor.is_released: + self.raise_or_lower_shovel_once_by_ir_beacon() + self.drive_by_ir_beacon(speed=driving_speed) + sleep(0.01) + + self.speaker.play_file( + wav_file='media/Airbrake.wav', + volume=100, + play_type=Sound.PLAY_WAIT_FOR_COMPLETE) + + while self.touch_sensor.is_released: + if self.ir_sensor.proximity < 50: + self.tank_driver.off(brake=True) + + sleep(1) + + self.tank_driver.on_for_seconds( + left_speed=-30, + right_speed=-30, + seconds=1, + brake=True, + block=True) + + self.tank_driver.on_for_seconds( + left_speed=50, + right_speed=-50, + seconds=1, + brake=True, + block=True) + + else: + self.tank_driver.on( + left_speed=50, + right_speed=50) + + sleep(0.01) + + self.speaker.play_file( + wav_file='media/Airbrake.wav', + volume=100, + play_type=Sound.PLAY_WAIT_FOR_COMPLETE) + + +if __name__ == '__main__': + ROBODOZ3R = RoboDoz3r() + ROBODOZ3R.main() From 1ca7aa2e9803c4b63adeeaf6066035d13e360c5f Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Sun, 13 Dec 2020 00:48:52 -0800 Subject: [PATCH 13/13] edit ROBODOZ3R program --- robots/ROBODOZ3R/robodoz3r.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robots/ROBODOZ3R/robodoz3r.py b/robots/ROBODOZ3R/robodoz3r.py index 6387df3..1323f08 100644 --- a/robots/ROBODOZ3R/robodoz3r.py +++ b/robots/ROBODOZ3R/robodoz3r.py @@ -131,7 +131,7 @@ def main(self, driving_speed: float = 100): self.speaker.play_file( wav_file='media/Airbrake.wav', volume=100, - play_type=Sound.PLAY_WAIT_FOR_COMPLETE) + play_type=Sound.PLAY_WAIT_FOR_COMPLETE) if __name__ == '__main__':