diff --git a/lib/camera.py b/lib/camera.py index d9a6e1d94c0650ae5fd680291b756834c61f1882..22bb9216d35292ad0d67425638420c893d836b6f 100644 --- a/lib/camera.py +++ b/lib/camera.py @@ -8,7 +8,7 @@ TXT_M_USB_1_camera.set_width(320) TXT_M_USB_1_camera.set_fps(15) TXT_M_USB_1_camera.start() -ball_detector = txt_factory.camera_factory.create_ball_detector(0, 0, 320, 240, 5, 80, -100, 100, [225,146,124], 20) +ball_detector = txt_factory.camera_factory.create_ball_detector(0, 0, 320, 240, 5, 80, -100, 100, [255,134,62], 20) TXT_M_USB_1_camera.add_detector(ball_detector) blocked_area_right = txt_factory.camera_factory.create_blocked_area(240, 190, 80, 50) @@ -17,9 +17,9 @@ TXT_M_USB_1_camera.add_blocked_area(blocked_area_right) blocked_area_left = txt_factory.camera_factory.create_blocked_area(0, 190, 80, 50) TXT_M_USB_1_camera.add_blocked_area(blocked_area_left) -ball_detector_goal_right = txt_factory.camera_factory.create_ball_detector(0, 70, 320, 120, 10, 120, -100, 100, [214,169,52], 25) +ball_detector_goal_right = txt_factory.camera_factory.create_ball_detector(0, 70, 320, 120, 10, 120, -100, 100, [214,169,52], 20) TXT_M_USB_1_camera.add_detector(ball_detector_goal_right) -ball_detector_goal_left = txt_factory.camera_factory.create_ball_detector(0, 70, 320, 120, 10, 120, -100, 100, [90,156,81], 25) +ball_detector_goal_left = txt_factory.camera_factory.create_ball_detector(0, 70, 320, 120, 10, 120, -100, 100, [90,156,81], 20) TXT_M_USB_1_camera.add_detector(ball_detector_goal_left) diff --git a/lib/camera.xml b/lib/camera.xml index 5614dd9d81f01635d668663e6e786db83d10b84d..484a3a87a5fd5214662d43111f5acd0b4dbd93d8 100644 --- a/lib/camera.xml +++ b/lib/camera.xml @@ -1 +1 @@ -<xml type="camera" verion="1" version="2" rotate="0" height="240" width="320" fps="15"><item id="2" class="BallDetector"><name>ball_detector</name><color>#e1927c</color><tolerance>20</tolerance><min_ball_diameter>5</min_ball_diameter><max_ball_diameter>80</max_ball_diameter><start_range_value>-100</start_range_value><end_range_value>100</end_range_value><geometry><x>0</x><y>0</y><width>320</width><height>240</height></geometry></item><item id="4" class="BlockedArea"><name>blocked_area_right</name><geometry><x>240</x><y>190</y><width>80</width><height>50</height></geometry></item><item id="5" class="BlockedArea"><name>blocked_area_left</name><geometry><x>0</x><y>190</y><width>80</width><height>50</height></geometry></item><item id="12" class="BallDetector"><name>ball_detector_goal_right</name><color>#d6a934</color><tolerance>25</tolerance><min_ball_diameter>10</min_ball_diameter><max_ball_diameter>120</max_ball_diameter><start_range_value>-100</start_range_value><end_range_value>100</end_range_value><geometry><x>0</x><y>70</y><width>320</width><height>120</height></geometry></item><item id="11" class="BallDetector"><name>ball_detector_goal_left</name><color>#5a9c51</color><tolerance>25</tolerance><min_ball_diameter>10</min_ball_diameter><max_ball_diameter>120</max_ball_diameter><start_range_value>-100</start_range_value><end_range_value>100</end_range_value><geometry><x>0</x><y>70</y><width>320</width><height>120</height></geometry></item></xml> \ No newline at end of file +<xml type="camera" verion="1" version="2" rotate="0" height="240" width="320" fps="15"><item id="2" class="BallDetector"><name>ball_detector</name><color>#ff863e</color><tolerance>20</tolerance><min_ball_diameter>5</min_ball_diameter><max_ball_diameter>80</max_ball_diameter><start_range_value>-100</start_range_value><end_range_value>100</end_range_value><geometry><x>0</x><y>0</y><width>320</width><height>240</height></geometry></item><item id="4" class="BlockedArea"><name>blocked_area_right</name><geometry><x>240</x><y>190</y><width>80</width><height>50</height></geometry></item><item id="5" class="BlockedArea"><name>blocked_area_left</name><geometry><x>0</x><y>190</y><width>80</width><height>50</height></geometry></item><item id="12" class="BallDetector"><name>ball_detector_goal_right</name><color>#d6a934</color><tolerance>20</tolerance><min_ball_diameter>10</min_ball_diameter><max_ball_diameter>120</max_ball_diameter><start_range_value>-100</start_range_value><end_range_value>100</end_range_value><geometry><x>0</x><y>70</y><width>320</width><height>120</height></geometry></item><item id="11" class="BallDetector"><name>ball_detector_goal_left</name><color>#5a9c51</color><tolerance>20</tolerance><min_ball_diameter>10</min_ball_diameter><max_ball_diameter>120</max_ball_diameter><start_range_value>-100</start_range_value><end_range_value>100</end_range_value><geometry><x>0</x><y>70</y><width>320</width><height>120</height></geometry></item></xml> \ No newline at end of file diff --git a/omniwheels_x4_soccer_goal.blockly b/omniwheels_x4_soccer_goal.blockly index 12161d82ba6693bb4cff1353942800e79165e4fe..99627ca3926ecd569fe0f024b1036b1478420b64 100644 --- a/omniwheels_x4_soccer_goal.blockly +++ b/omniwheels_x4_soccer_goal.blockly @@ -15,7 +15,6 @@ <variable id="rOE96qIEVvA5gBu*K^?x">factor_ball_rot</variable> <variable id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</variable> <variable id="2Lkg^#Z.uZy(%Nr[26)6">search_dir_left</variable> - <variable id=")rK_fR,m=]b(j[{.CtBj">v_slow</variable> <variable id="Ym/+Qo0YZe25;%N1d!*f">x_min</variable> <variable id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</variable> <variable id="2G]XEQ3Lhl$dG]=:]8Ge">x_max</variable> @@ -23,6 +22,7 @@ <variable id="}*jl@)UA_Hjh5rc,Gt)c">y_ball_far</variable> <variable id="09n]XF2CKURQs)nHOfam">y_ball_near</variable> <variable id="xjf5O*w9;IZf$n55ytVF">y_ball_touch</variable> + <variable id=")rK_fR,m=]b(j[{.CtBj">v_slow</variable> <variable id="1idj3sw*{G$j`2:II{^5">v_fast</variable> <variable id="v0BvP7[91TGaMpQG$r0f">goal_width</variable> <variable id="{]]L-TSC^#XtGnVinxf[">pos_goal_both</variable> @@ -397,15 +397,21 @@ </block> </value> <statement name="DO0"> - <block type="procedures_callnoreturn" id="n=@SEs?8o@WHm;Ad7A2k" inline="true"> - <mutation name="fwd_v"> + <block type="procedures_callnoreturn" id="D$_8aQ2X|h{SIewjUD_R"> + <mutation name="fwd"> <arg name="v"/> + <arg name="ticks"/> </mutation> <value name="ARG0"> - <block type="variables_get" id="fZlf#E.-0%/`U+X#~UvW"> + <block type="variables_get" id="Y]2FiJdrWo42L$WHl,($"> <field name="VAR" id="1idj3sw*{G$j`2:II{^5">v_fast</field> </block> </value> + <value name="ARG1"> + <block type="math_number" id="K``m#vm=PeC;2HJxr=Jx"> + <field name="NUM">10</field> + </block> + </value> </block> </statement> <value name="IF1"> @@ -444,15 +450,21 @@ </block> </value> <statement name="DO1"> - <block type="procedures_callnoreturn" id="1[SBSPn+FQ.[P7YtUwNZ" inline="true"> - <mutation name="fwd_v"> + <block type="procedures_callnoreturn" id="~M+5pWsaHLkyCq)rYO$k"> + <mutation name="fwd"> <arg name="v"/> + <arg name="ticks"/> </mutation> <value name="ARG0"> - <block type="variables_get" id="~7B*FKz:f^U{s6BN1TJ9"> + <block type="variables_get" id="iXjkVkHFgqS:.%6Q=Z_f"> <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> </block> </value> + <value name="ARG1"> + <block type="math_number" id="m]yorgh~PALhYi-x%]93"> + <field name="NUM">10</field> + </block> + </value> </block> </statement> <value name="IF2"> @@ -492,7 +504,20 @@ </value> <statement name="DO2"> <block type="procedures_callnoreturn" id="5?xr%Un4{ZZP/*kbTrS4"> - <mutation name="turnSideLeft"/> + <mutation name="turnSideLeft"> + <arg name="v"/> + <arg name="ticks"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="zX7$-2rcp(Tan$g?Z%[U"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> + <value name="ARG1"> + <block type="math_number" id="2xa_b^blTx3j,Xt)H#5}"> + <field name="NUM">20</field> + </block> + </value> </block> </statement> <value name="IF3"> @@ -511,15 +536,21 @@ </block> </value> <statement name="DO3"> - <block type="procedures_callnoreturn" id=";$*URO!$mNp;(}~rEzSA" inline="true"> - <mutation name="bwd_v"> + <block type="procedures_callnoreturn" id="iE.eGjQ64)ne8c#zdVbM"> + <mutation name="bwd"> <arg name="v"/> + <arg name="ticks"/> </mutation> <value name="ARG0"> <block type="variables_get" id="[3C}+lMgr=zfSwjcYdsJ"> <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> </block> </value> + <value name="ARG1"> + <block type="math_number" id="CWASv61O4meIid@gp|5P"> + <field name="NUM">10</field> + </block> + </value> </block> </statement> <statement name="ELSE"> @@ -791,8 +822,21 @@ </block> </value> <statement name="DO0"> - <block type="procedures_callnoreturn" id="),QhMk?KFwaoqgIh6A~w"> - <mutation name="turnSideRight"/> + <block type="procedures_callnoreturn" id="8_rFe%[Ngs/W)u{[wK-/"> + <mutation name="turnSideRight"> + <arg name="v"/> + <arg name="ticks"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="%jZ0j@6g~afS~;)?{MXB"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> + <value name="ARG1"> + <block type="math_number" id="cJ`!Y,Vi0EX0|.|y6Nc|"> + <field name="NUM">20</field> + </block> + </value> </block> </statement> <value name="IF1"> @@ -800,7 +844,7 @@ <field name="OP">GT</field> <value name="A"> <block type="variables_get" id="tchE8Qc)Kp|9?UE;Fpe%"> - <field name="VAR" id="7Tp~7_.qfmJN0SR]5p}F">posx_goal_right</field> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal_left</field> </block> </value> <value name="B"> @@ -812,7 +856,20 @@ </value> <statement name="DO1"> <block type="procedures_callnoreturn" id="_q6X5`*YO|;FU%~(RZ2?"> - <mutation name="turnSideLeft"/> + <mutation name="turnSideLeft"> + <arg name="v"/> + <arg name="ticks"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="|w.R`6dQM5dRkA(EE+yC"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> + <value name="ARG1"> + <block type="math_number" id="E](Zlbs1};rS=bm)zpcI"> + <field name="NUM">20</field> + </block> + </value> </block> </statement> <statement name="ELSE"> @@ -998,7 +1055,20 @@ </value> <statement name="DO0"> <block type="procedures_callnoreturn" id="@$;_yG?U8opM|/]Of75$"> - <mutation name="turnSideRight"/> + <mutation name="turnSideRight"> + <arg name="v"/> + <arg name="ticks"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="pL8o,[Ydi/Wp^J{smt$3"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> + <value name="ARG1"> + <block type="math_number" id="l-M{#v:Q6XmgnnE+3,Rf"> + <field name="NUM">20</field> + </block> + </value> </block> </statement> <value name="IF1"> @@ -1018,7 +1088,20 @@ </value> <statement name="DO1"> <block type="procedures_callnoreturn" id="0il^Cdoc`7I6eVmi6htz"> - <mutation name="turnSideLeft"/> + <mutation name="turnSideLeft"> + <arg name="v"/> + <arg name="ticks"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="%2]eKO_ysvhOPwk$a6Qx"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> + <value name="ARG1"> + <block type="math_number" id="AW2n8Mg#t@e6)x-)NCI]"> + <field name="NUM">20</field> + </block> + </value> </block> </statement> <statement name="ELSE"> @@ -1270,8 +1353,21 @@ </block> </value> <statement name="DO1"> - <block type="procedures_callnoreturn" id="|6(M2ayv;Mt,H:l*)L@e"> - <mutation name="turnSideLeft"/> + <block type="procedures_callnoreturn" id="@n*^wewk`x?NX#m2}EQE"> + <mutation name="turnSideLeft"> + <arg name="v"/> + <arg name="ticks"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="+m}1a:ZW]JoRW2QP.n06"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> + <value name="ARG1"> + <block type="math_number" id="_;2gj%#h1g[wnD|7oXuo"> + <field name="NUM">20</field> + </block> + </value> </block> </statement> <value name="IF2"> @@ -1311,7 +1407,20 @@ </value> <statement name="DO2"> <block type="procedures_callnoreturn" id="R590b9iY$aQ~B7!m8f2l"> - <mutation name="turnSideRight"/> + <mutation name="turnSideRight"> + <arg name="v"/> + <arg name="ticks"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="vk%)2O)R9Ft/FMn)2yr7"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> + <value name="ARG1"> + <block type="math_number" id="N.3ER1#5:PMk;ocu-#q("> + <field name="NUM">20</field> + </block> + </value> </block> </statement> <statement name="ELSE"> @@ -2056,7 +2165,7 @@ <field name="format">ms</field> <value name="value"> <shadow type="math_number" id="E9K@*OZ(Ftp5CGt}.9cT"> - <field name="NUM">50</field> + <field name="NUM">80</field> </shadow> </value> </block> @@ -2128,7 +2237,7 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="N2EC5uK:$~0ERXAdK0!y" x="0" y="6321"> + <block type="procedures_defnoreturn" id="N2EC5uK:$~0ERXAdK0!y" x="0" y="6851"> <field name="NAME">checkTimeouts</field> <statement name="STACK"> <block type="controls_if" id="o.;j7*F0}TW}ju0E18(_"> @@ -2250,7 +2359,7 @@ </block> </statement> </block> - <block type="camera_on_ball_detected" id="dgC*A|KHMC_R5S#ZRk}d" x="0" y="6754"> + <block type="camera_on_ball_detected" id="dgC*A|KHMC_R5S#ZRk}d" x="0" y="7284"> <field name="instance_name">ball_detector</field> <statement name="statement"> <block type="variables_set" id="=2/,IQfcLO{_5PNd3UK~"> @@ -2451,7 +2560,7 @@ </block> </statement> </block> - <block type="camera_on_ball_detected" id="Rg2Gt(0WT:J2|Us~[j.3" x="0" y="7421"> + <block type="camera_on_ball_detected" id="Rg2Gt(0WT:J2|Us~[j.3" x="0" y="7951"> <field name="instance_name">ball_detector_goal_left</field> <statement name="statement"> <block type="variables_set" id="kvK,D4e%04[?+!jq*Lch"> @@ -2519,7 +2628,7 @@ </block> </statement> </block> - <block type="camera_on_ball_detected" id="(?slhGsN^:d1`vP{j9#|" x="0" y="7714"> + <block type="camera_on_ball_detected" id="(?slhGsN^:d1`vP{j9#|" x="0" y="8244"> <field name="instance_name">ball_detector_goal_right</field> <statement name="statement"> <block type="variables_set" id="0!1?#@4|tcM8+U6E[$Tl"> @@ -2587,7 +2696,7 @@ </block> </statement> </block> - <block type="counter_event" id="T^aHOKaV|bU#ZeZfn[GJ" x="0" y="8007"> + <block type="counter_event" id="T^aHOKaV|bU#ZeZfn[GJ" x="0" y="8537"> <value name="condition"> <shadow type="counter_if_value" id="9`P*eh,|:Wnytp?G[|;{"> <field name="instance_name">TXT_M_C1_motor_step_counter</field> @@ -2635,7 +2744,7 @@ </block> </statement> </block> - <block type="counter_event" id="7wA~J+BkZ5~nV6aI|fLZ" x="0" y="8154"> + <block type="counter_event" id="7wA~J+BkZ5~nV6aI|fLZ" x="0" y="8684"> <value name="condition"> <shadow type="counter_if_value" id="RDF|2PoXWvG^_k{FB37U"> <field name="instance_name">TXT_M_C2_motor_step_counter</field> @@ -2683,7 +2792,7 @@ </block> </statement> </block> - <block type="counter_event" id="Nv;e.HwUkTK/=(qEs~82" x="0" y="8301"> + <block type="counter_event" id="Nv;e.HwUkTK/=(qEs~82" x="0" y="8831"> <value name="condition"> <shadow type="counter_if_value" id="05ihu;VYh*tmqA78pJQL"> <field name="instance_name">TXT_M_C3_motor_step_counter</field> @@ -2731,7 +2840,7 @@ </block> </statement> </block> - <block type="counter_event" id="j|Pz^uHewb7]si9}3az3" x="0" y="8448"> + <block type="counter_event" id="j|Pz^uHewb7]si9}3az3" x="0" y="8978"> <value name="condition"> <shadow type="counter_if_value" id="N9]b*Kn_Nxk}[I9e!^Z."> <field name="instance_name">TXT_M_C4_motor_step_counter</field> @@ -2779,7 +2888,7 @@ </block> </statement> </block> - <block type="input_event" id="j(TuhJ0G}{^qGSq:26FY" x="0" y="8595"> + <block type="input_event" id="j(TuhJ0G}{^qGSq:26FY" x="0" y="9125"> <value name="condition"> <block type="input_photo_transistor_if_state" id="dX]-jf`=2/tNnEnHfKvx"> <field name="instance_name">TXT_M_I8_photo_transistor</field> @@ -2802,7 +2911,7 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="RyK*td9aN5aR;@gw4f)+" x="0" y="8732"> + <block type="procedures_defnoreturn" id="RyK*td9aN5aR;@gw4f)+" x="0" y="9262"> <field name="NAME">shotBall</field> <statement name="STACK"> <block type="variables_set" id="l,2u2WF|]I#%kDS#5O7-"> @@ -2937,7 +3046,7 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="+FKt%DE[[q%Zp0T.Fn}d" x="0" y="9346"> + <block type="procedures_defnoreturn" id="+FKt%DE[[q%Zp0T.Fn}d" x="0" y="9876"> <field name="NAME">stop</field> <statement name="STACK"> <block type="variables_set" id="0lb+=KDkMxl8Q(.f(!U4"> @@ -2959,7 +3068,7 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="/pGK)WReTLfX`L_7oAMD" x="0" y="9567"> + <block type="procedures_defnoreturn" id="/pGK)WReTLfX`L_7oAMD" x="0" y="10097"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="{M*n_!I)eN0.4..0Bzo#"/> </mutation> @@ -2997,7 +3106,7 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="qX~e_RBh^tj];fOb=cq6" x="0" y="9816"> + <block type="procedures_defnoreturn" id="qX~e_RBh^tj];fOb=cq6" x="0" y="10346"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="{M*n_!I)eN0.4..0Bzo#"/> </mutation> @@ -3035,7 +3144,7 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="!zD7YDZ.5n?En8cYle4R" x="0" y="10065"> + <block type="procedures_defnoreturn" id="!zD7YDZ.5n?En8cYle4R" x="0" y="10595"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid=",q%qjDTJ~Z@[BoMwORuq"/> </mutation> @@ -3073,7 +3182,7 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="}KXL0=RKLgCT~yQ];aw:" x="0" y="10314"> + <block type="procedures_defnoreturn" id="}KXL0=RKLgCT~yQ];aw:" x="0" y="10844"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid=",q%qjDTJ~Z@[BoMwORuq"/> </mutation> @@ -3111,7 +3220,7 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="0R.p||vBpkt08x[mI=z[" x="0" y="10563"> + <block type="procedures_defnoreturn" id="0R.p||vBpkt08x[mI=z[" x="0" y="11093"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid=",q%qjDTJ~Z@[BoMwORuq"/> </mutation> @@ -3162,8 +3271,14 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="UFM0X7|X:*ja#f+^7kz;" x="0" y="10832"> + <block type="procedures_defnoreturn" id="UFM0X7|X:*ja#f+^7kz;" x="0" y="11362"> + <mutation> + <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="-fFb#6a:h}yA(|L+pf*l"/> + <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="h?@dWX*~x|BDzo:O{is["/> + </mutation> <field name="NAME">turnSideLeft</field> + <field name="-fFb#6a:h}yA(|L+pf*l">v</field> + <field name="h?@dWX*~x|BDzo:O{is[">ticks</field> <statement name="STACK"> <block type="variables_set" id="nf?K,a/5MLaj.5?J/IGs"> <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> @@ -3173,44 +3288,91 @@ </block> </value> <next> - <block type="encodermotor_set_speed" id="I[S{vjf1EdjHVhk32Irr"> - <mutation syncBlocks="1"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CCW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CW</field> - <value name="speed"> - <shadow type="motor_number" id="KbM1XwSZ`0p4OfObK%2d"> - <field name="MOTOR_NUM">100</field> - </shadow> - <block type="variables_get" id="lwr0*WN{do?Zo1A69t):"> - <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + <block type="controls_if" id="JOOQt^L_atJdkcD2Z^d~"> + <value name="IF0"> + <block type="logic_compare" id="@Ue2[vwxrp{x8JaQQlC7"> + <field name="OP">GTE</field> + <value name="A"> + <block type="variables_get" id="-YKN/Ie5h0W`A.zxXRs:"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + </block> + </value> + <value name="B"> + <block type="math_number" id="g.7*iuM3mec+us@!mG8x"> + <field name="NUM">1</field> + </block> + </value> </block> </value> - <next> - <block type="encodermotor_set_speed" id="?-}PDl2[=K?(SrBgJg-U"> + <statement name="DO0"> + <block type="encodermotor_set_values" id="}/ZV$w#6]=CleLLuQYM]"> <mutation syncBlocks="1"/> - <field name="instance_name_0">TXT_M_M3_encodermotor</field> - <field name="direction_0">Motor.CW</field> - <field name="instance_name_1">TXT_M_M4_encodermotor</field> - <field name="direction_1">Motor.CCW</field> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CCW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CW</field> <value name="speed"> - <shadow type="motor_number" id="=efoF`lj-~A7g]Ka]qr."> - <field name="MOTOR_NUM">512</field> + <shadow type="motor_number" id="I[z`|1U#HYI4M/h36r|N"> + <field name="MOTOR_NUM">0</field> </shadow> - <block type="variables_get" id="Oj^O^)OdFOvbsTw`%^dM"> - <field name="VAR" id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</field> + </value> + <value name="distance"> + <shadow type="math_number" id="yW`$]d5/Gd91|S#+;LJg"> + <field name="NUM">100</field> + </shadow> + <block type="variables_get" id="DaoMtk#*[#M?hcxBGYvk"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> </block> </value> + <next> + <block type="encodermotor_set_values" id="fIT*w|!*|R]ib(CsGKqf"> + <mutation syncBlocks="1"/> + <field name="instance_name_0">TXT_M_M3_encodermotor</field> + <field name="direction_0">Motor.CW</field> + <field name="instance_name_1">TXT_M_M4_encodermotor</field> + <field name="direction_1">Motor.CCW</field> + <value name="speed"> + <shadow type="motor_number" id=",9h-fYcB@0W3C+Z|#b1g"> + <field name="MOTOR_NUM">0</field> + </shadow> + <block type="variables_get" id="$|_Sq:n@cSo+fhGL~52Q"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + </block> + </value> + <value name="distance"> + <shadow type="math_number"> + <field name="NUM">100</field> + </shadow> + <block type="variables_get" id="+-nzXImGZi}qG=-5gxLl"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + </block> + </value> + <next> + <block type="util_wait_until" id=",o9Ot53)bgkRZ,O{~wrF"> + <value name="value"> + <block type="encodermotor_position_read" id="R!Vo),Vz}kY#s{2:|HA["> + <field name="instance_name">TXT_M_M3_encodermotor</field> + </block> + </value> + </block> + </next> + </block> + </next> </block> - </next> + </statement> </block> </next> </block> </statement> </block> - <block type="procedures_defnoreturn" id="*i[s2YTWD*g9HS4dxkPq" x="0" y="11053"> + <block type="procedures_defnoreturn" id="*i[s2YTWD*g9HS4dxkPq" x="0" y="11775"> + <mutation> + <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="k6At@e}Qga_x|SmVlf6C"/> + <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="~VyZflQ+9HCPP`ynQ/=Y"/> + </mutation> <field name="NAME">turnSideRight</field> + <field name="k6At@e}Qga_x|SmVlf6C">v</field> + <field name="~VyZflQ+9HCPP`ynQ/=Y">ticks</field> <statement name="STACK"> <block type="variables_set" id="$K=E,g/}k}au~ZyqB!+S"> <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> @@ -3220,119 +3382,84 @@ </block> </value> <next> - <block type="encodermotor_set_speed" id="c8~SXys:o35ETKj;GX?m"> - <mutation syncBlocks="1"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CCW</field> - <value name="speed"> - <shadow type="motor_number" id="dD.1u9Pwx-^rnKZyWQx/"> - <field name="MOTOR_NUM">100</field> - </shadow> - <block type="variables_get" id="C-Nw|[v}V:YO:/o4e*z4"> - <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + <block type="controls_if" id="XbYoj,JMQCC1C!-)0+ZR"> + <value name="IF0"> + <block type="logic_compare" id="i3Xq9y4.N$7.TxNR;|+7"> + <field name="OP">GTE</field> + <value name="A"> + <block type="variables_get" id=":*~lLANBe1~V(:l)dU/w"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + </block> + </value> + <value name="B"> + <block type="math_number" id="M,rYpbKkYW0iEz]=%ROD"> + <field name="NUM">1</field> + </block> + </value> </block> </value> - <next> - <block type="encodermotor_set_speed" id="b:w42I;ulm2~l(S-#ER("> + <statement name="DO0"> + <block type="encodermotor_set_values" id="D+vuMqgLNY5qs]Uu7{]g"> <mutation syncBlocks="1"/> - <field name="instance_name_0">TXT_M_M3_encodermotor</field> - <field name="direction_0">Motor.CCW</field> - <field name="instance_name_1">TXT_M_M4_encodermotor</field> - <field name="direction_1">Motor.CW</field> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CCW</field> <value name="speed"> - <shadow type="motor_number" id=";zG8,Fnh@=jNAT#Br68/"> - <field name="MOTOR_NUM">512</field> + <shadow type="motor_number" id="Fe^Kn2-*_?@V=YxQ`_d#"> + <field name="MOTOR_NUM">0</field> </shadow> - <block type="variables_get" id="pyJ,6!X~/k?JFRr+Yg{E"> - <field name="VAR" id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</field> + </value> + <value name="distance"> + <shadow type="math_number"> + <field name="NUM">100</field> + </shadow> + <block type="variables_get" id="-O1^pgTixJVeZdU+fF~!"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> </block> </value> + <next> + <block type="encodermotor_set_values" id="$z/xEW=3p14GU4SWZ]~K"> + <mutation syncBlocks="1"/> + <field name="instance_name_0">TXT_M_M3_encodermotor</field> + <field name="direction_0">Motor.CCW</field> + <field name="instance_name_1">TXT_M_M4_encodermotor</field> + <field name="direction_1">Motor.CW</field> + <value name="speed"> + <shadow type="motor_number" id="{}+IU8w75@CTkY!dlorF"> + <field name="MOTOR_NUM">0</field> + </shadow> + <block type="variables_get" id="][iNR3/wU.Kuf^T14BhG"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + </block> + </value> + <value name="distance"> + <shadow type="math_number"> + <field name="NUM">100</field> + </shadow> + <block type="variables_get" id="i@Ph|tnfpQRXb7QCBPS_"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + </block> + </value> + <next> + <block type="util_wait_until" id="vw+wqB3kPz,F/ZyvW,=+"> + <value name="value"> + <block type="encodermotor_position_read" id="ka#wP1(W-PxxZYe4B+J0"> + <field name="instance_name">TXT_M_M3_encodermotor</field> + </block> + </value> + </block> + </next> + </block> + </next> </block> - </next> - </block> - </next> - </block> - </statement> - </block> - <block type="procedures_defnoreturn" id="dhS+rZWE[`RZz:fU3A)e" x="0" y="11274"> - <mutation> - <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid=",q%qjDTJ~Z@[BoMwORuq"/> - </mutation> - <field name="NAME">sideleft_v</field> - <field name=",q%qjDTJ~Z@[BoMwORuq">v</field> - <statement name="STACK"> - <block type="variables_set" id="Z|I9(D/4o;Yt|2OG8_^J"> - <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> - <value name="VALUE"> - <block type="text" id="%iArgA`4D!~E(#KoW3aD"> - <field name="TEXT">sideleft_v</field> - </block> - </value> - <next> - <block type="encodermotor_set_speed" id="pLk^0]/}JZa5O5XBdTkw"> - <mutation syncBlocks="3"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CCW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CW</field> - <field name="instance_name_2">TXT_M_M3_encodermotor</field> - <field name="direction_2">Motor.CW</field> - <field name="instance_name_3">TXT_M_M4_encodermotor</field> - <field name="direction_3">Motor.CCW</field> - <value name="speed"> - <shadow type="motor_number"> - <field name="MOTOR_NUM">512</field> - </shadow> - <block type="variables_get" id="+]RiX%o.`5?mErIL~B$V"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> - </block> - </value> - </block> - </next> - </block> - </statement> - </block> - <block type="procedures_defnoreturn" id=")G33?J{l2sdl+nL3hpBp" x="0" y="11523"> - <mutation> - <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid=",q%qjDTJ~Z@[BoMwORuq"/> - </mutation> - <field name="NAME">sideright_v</field> - <field name=",q%qjDTJ~Z@[BoMwORuq">v</field> - <statement name="STACK"> - <block type="variables_set" id="/SeF0|Du}.hszV$AbihP"> - <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> - <value name="VALUE"> - <block type="text" id="-6KPTh{PdFj4P7D[u2z`"> - <field name="TEXT">sideright_v</field> - </block> - </value> - <next> - <block type="encodermotor_set_speed" id=".Q|g7PUDAM--?pT[,-S?"> - <mutation syncBlocks="3"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CCW</field> - <field name="instance_name_2">TXT_M_M3_encodermotor</field> - <field name="direction_2">Motor.CCW</field> - <field name="instance_name_3">TXT_M_M4_encodermotor</field> - <field name="direction_3">Motor.CW</field> - <value name="speed"> - <shadow type="motor_number"> - <field name="MOTOR_NUM">512</field> - </shadow> - <block type="variables_get" id="sT@qtvgDFZk]Mn$EU:M1"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> - </block> - </value> + </statement> </block> </next> </block> </statement> </block> - <block type="procedures_defnoreturn" id="oSa9Ly*^-c^M{$gkMZt1" x="0" y="11772"> + <block type="procedures_defnoreturn" id="oSa9Ly*^-c^M{$gkMZt1" x="0" y="12188"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="K)Z,8|d5@gck+Q]pnW01"/> <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="(Id`t]O(jxfZJay}20X{"/> @@ -3408,7 +3535,7 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="G@]xamrhDPW$7uQ6oPo#" x="0" y="12157"> + <block type="procedures_defnoreturn" id="G@]xamrhDPW$7uQ6oPo#" x="0" y="12573"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="_mFFsmoZwL{(llRvf-eW"/> <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="aNHXtqe[T`=Y[mqp`ZDN"/> @@ -3484,7 +3611,7 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="5Hv=PFtVvPQA=IZrkJfU" x="0" y="12542"> + <block type="procedures_defnoreturn" id="5Hv=PFtVvPQA=IZrkJfU" x="0" y="12958"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="~d8Z+AHZ!wz|G]JHW0lQ"/> <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="jRMx@L,Ya|zd@/bBb#1T"/> @@ -3575,7 +3702,7 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="[S@[MO!Z/cNt:Jsg4dd}" x="0" y="12983"> + <block type="procedures_defnoreturn" id="[S@[MO!Z/cNt:Jsg4dd}" x="0" y="13399"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="8Z2n_ZVA.)85]V7j%3;7"/> <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="J(gJ~*9ZJJa,[V1)[xn#"/> @@ -3666,7 +3793,7 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="0yb4y~)e=F^~rds6/HYd" x="0" y="13424"> + <block type="procedures_defnoreturn" id="0yb4y~)e=F^~rds6/HYd" x="0" y="13840"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="~d8Z+AHZ!wz|G]JHW0lQ"/> <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="jRMx@L,Ya|zd@/bBb#1T"/> @@ -3738,7 +3865,7 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="qiCJ8lc,P.U`J8k0us:C" x="0" y="13753"> + <block type="procedures_defnoreturn" id="qiCJ8lc,P.U`J8k0us:C" x="0" y="14169"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="8Z2n_ZVA.)85]V7j%3;7"/> <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="J(gJ~*9ZJJa,[V1)[xn#"/> diff --git a/omniwheels_x4_soccer_goal.py b/omniwheels_x4_soccer_goal.py index d6a5d50093f7ffc31a0b751e6fb775fda6dad81d..8fd87527631e25424fcbc428f3d564f448b98f31 100644 --- a/omniwheels_x4_soccer_goal.py +++ b/omniwheels_x4_soccer_goal.py @@ -22,7 +22,6 @@ counters = None factor_ball_rot = None posy_ball = None search_dir_left = None -v_slow = None x_min = None v_var_ball_xpos = None x_max = None @@ -30,12 +29,13 @@ v_var_ball_ypos = None y_ball_far = None y_ball_near = None y_ball_touch = None +v_slow = None v_fast = None goal_width = None pos_goal_both = None state = None def checkTimeouts(): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state if (time.time() * 1000) - ts_ball > 500: posx_ball = None posy_ball = None @@ -47,7 +47,7 @@ def checkTimeouts(): def ball_callback(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state ts_ball = (time.time() * 1000) posx_ball = event.value.x posy_ball = event.value.y @@ -60,7 +60,7 @@ ball_detector.add_detection_listener(ball_callback) def ball_callback2(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state ts_goal_left = (time.time() * 1000) posx_goal_left = event.value.x if False: @@ -70,7 +70,7 @@ ball_detector_goal_left.add_detection_listener(ball_callback2) def ball_callback23(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state ts_goal_right = (time.time() * 1000) posx_goal_right = event.value.x if False: @@ -80,7 +80,7 @@ ball_detector_goal_right.add_detection_listener(ball_callback23) def callback(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state if TXT_M_C1_motor_step_counter.get_count() >= 0: counters[0] = TXT_M_C1_motor_step_counter.get_count() display.set_attr("txt_label_counters.text", str(counters)) @@ -90,7 +90,7 @@ TXT_M_C1_motor_step_counter.add_change_listener("count", callback) def callback2(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state if TXT_M_C2_motor_step_counter.get_count() >= 0: counters[1] = TXT_M_C2_motor_step_counter.get_count() display.set_attr("txt_label_counters.text", str(counters)) @@ -100,7 +100,7 @@ TXT_M_C2_motor_step_counter.add_change_listener("count", callback2) def callback3(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state if TXT_M_C3_motor_step_counter.get_count() >= 0: counters[2] = TXT_M_C3_motor_step_counter.get_count() display.set_attr("txt_label_counters.text", str(counters)) @@ -110,7 +110,7 @@ TXT_M_C3_motor_step_counter.add_change_listener("count", callback3) def callback4(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state if TXT_M_C4_motor_step_counter.get_count() >= 0: counters[3] = TXT_M_C4_motor_step_counter.get_count() display.set_attr("txt_label_counters.text", str(counters)) @@ -120,7 +120,7 @@ TXT_M_C4_motor_step_counter.add_change_listener("count", callback4) def callback5(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state if TXT_M_I8_photo_transistor.is_dark(): shotBall() time.sleep(5) @@ -130,7 +130,7 @@ TXT_M_I8_photo_transistor.add_change_listener("dark", callback5) def shotBall(): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'shotBall' TXT_M_S1_servomotor.set_position(int(400)) TXT_M_M1_encodermotor.set_speed(int(512), Motor.CCW) @@ -162,13 +162,13 @@ def shotBall(): def stop(): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'stop' TXT_M_M1_encodermotor.stop_sync(TXT_M_M2_encodermotor, TXT_M_M3_encodermotor, TXT_M_M4_encodermotor) def fwd_v(v): - global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'fwd_v' TXT_M_M1_encodermotor.set_speed(int(v), Motor.CCW) TXT_M_M2_encodermotor.set_speed(int(v), Motor.CCW) @@ -178,7 +178,7 @@ def fwd_v(v): def bwd_v(v): - global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'bwd_v' TXT_M_M1_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M2_encodermotor.set_speed(int(v), Motor.CW) @@ -188,7 +188,7 @@ def bwd_v(v): def left_v(v): - global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'left_v' TXT_M_M1_encodermotor.set_speed(int(v), Motor.CCW) TXT_M_M2_encodermotor.set_speed(int(v), Motor.CW) @@ -198,7 +198,7 @@ def left_v(v): def right_v(v): - global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'right_v' TXT_M_M1_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M2_encodermotor.set_speed(int(v), Motor.CCW) @@ -208,7 +208,7 @@ def right_v(v): def search_ball_rot(v): - global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'search_ball_rot' if search_dir_left: left_v(v) @@ -216,50 +216,40 @@ def search_ball_rot(v): right_v(v) -def turnSideLeft(): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state +def turnSideLeft(v, ticks): + global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'turnSideLeft' - TXT_M_M1_encodermotor.set_speed(int(v_slow), Motor.CCW) - TXT_M_M2_encodermotor.set_speed(int(v_slow), Motor.CW) - TXT_M_M1_encodermotor.start_sync(TXT_M_M2_encodermotor) - TXT_M_M3_encodermotor.set_speed(int(v_var_ball_xpos), Motor.CW) - TXT_M_M4_encodermotor.set_speed(int(v_var_ball_xpos), Motor.CCW) - TXT_M_M3_encodermotor.start_sync(TXT_M_M4_encodermotor) + if ticks >= 1: + TXT_M_M1_encodermotor.set_speed(int(0), Motor.CCW) + TXT_M_M2_encodermotor.set_speed(int(0), Motor.CW) + TXT_M_M1_encodermotor.set_distance(int(ticks), TXT_M_M2_encodermotor) + TXT_M_M3_encodermotor.set_speed(int(v), Motor.CW) + TXT_M_M4_encodermotor.set_speed(int(v), Motor.CCW) + TXT_M_M3_encodermotor.set_distance(int(ticks), TXT_M_M4_encodermotor) + while True: + if (not TXT_M_M3_encodermotor.is_running()): + break + time.sleep(0.010) -def turnSideRight(): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state +def turnSideRight(v, ticks): + global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'turnSideRight' - TXT_M_M1_encodermotor.set_speed(int(v_slow), Motor.CW) - TXT_M_M2_encodermotor.set_speed(int(v_slow), Motor.CCW) - TXT_M_M1_encodermotor.start_sync(TXT_M_M2_encodermotor) - TXT_M_M3_encodermotor.set_speed(int(v_var_ball_xpos), Motor.CCW) - TXT_M_M4_encodermotor.set_speed(int(v_var_ball_xpos), Motor.CW) - TXT_M_M3_encodermotor.start_sync(TXT_M_M4_encodermotor) - - -def sideleft_v(v): - global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state - cmd = 'sideleft_v' - TXT_M_M1_encodermotor.set_speed(int(v), Motor.CCW) - TXT_M_M2_encodermotor.set_speed(int(v), Motor.CW) - TXT_M_M3_encodermotor.set_speed(int(v), Motor.CW) - TXT_M_M4_encodermotor.set_speed(int(v), Motor.CCW) - TXT_M_M1_encodermotor.start_sync(TXT_M_M2_encodermotor, TXT_M_M3_encodermotor, TXT_M_M4_encodermotor) - - -def sideright_v(v): - global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state - cmd = 'sideright_v' - TXT_M_M1_encodermotor.set_speed(int(v), Motor.CW) - TXT_M_M2_encodermotor.set_speed(int(v), Motor.CCW) - TXT_M_M3_encodermotor.set_speed(int(v), Motor.CCW) - TXT_M_M4_encodermotor.set_speed(int(v), Motor.CW) - TXT_M_M1_encodermotor.start_sync(TXT_M_M2_encodermotor, TXT_M_M3_encodermotor, TXT_M_M4_encodermotor) + if ticks >= 1: + TXT_M_M1_encodermotor.set_speed(int(0), Motor.CW) + TXT_M_M2_encodermotor.set_speed(int(0), Motor.CCW) + TXT_M_M1_encodermotor.set_distance(int(ticks), TXT_M_M2_encodermotor) + TXT_M_M3_encodermotor.set_speed(int(v), Motor.CCW) + TXT_M_M4_encodermotor.set_speed(int(v), Motor.CW) + TXT_M_M3_encodermotor.set_distance(int(ticks), TXT_M_M4_encodermotor) + while True: + if (not TXT_M_M3_encodermotor.is_running()): + break + time.sleep(0.010) def fwd(v, ticks): - global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'fwd' if ticks >= 1: TXT_M_M1_encodermotor.set_speed(int(v), Motor.CCW) @@ -274,7 +264,7 @@ def fwd(v, ticks): def bwd(v, ticks): - global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'bwd' if ticks >= 1: TXT_M_M1_encodermotor.set_speed(int(v), Motor.CW) @@ -289,7 +279,7 @@ def bwd(v, ticks): def left(v, ticks): - global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'left ({}, {})'.format(v, ticks) if ticks >= 1: TXT_M_M1_encodermotor.set_speed(int(v), Motor.CCW) @@ -304,7 +294,7 @@ def left(v, ticks): def right(v, ticks): - global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'right ({}, {})'.format(v, ticks) if ticks >= 1: TXT_M_M1_encodermotor.set_speed(int(v), Motor.CW) @@ -319,7 +309,7 @@ def right(v, ticks): def left2(v, ticks): - global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'left2' if ticks >= 1: TXT_M_M2_encodermotor.set_speed(int(v), Motor.CW) @@ -332,7 +322,7 @@ def left2(v, ticks): def right2(v, ticks): - global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, goal_width, pos_goal_both, state + global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, posx_goal_left, posx_goal_right, counters, factor_ball_rot, posy_ball, search_dir_left, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_slow, v_fast, goal_width, pos_goal_both, state cmd = 'right2' if ticks >= 1: TXT_M_M1_encodermotor.set_speed(int(v), Motor.CW) @@ -377,13 +367,13 @@ while True: state = 'BALL_NO_GOAL' if posx_ball >= x_min and posx_ball <= x_max: if posy_ball <= y_ball_far: - fwd_v(v_fast) + fwd(v_fast, 10) elif posy_ball > y_ball_far and posy_ball <= y_ball_near: - fwd_v(v_slow) + fwd(v_slow, 10) elif posy_ball > y_ball_near and posy_ball <= y_ball_touch: - turnSideLeft() + turnSideLeft(v_slow, 20) elif posy_ball <= y_ball_touch: - bwd_v(v_slow) + bwd(v_slow, 10) else: stop() elif posx_ball > x_max: @@ -398,9 +388,9 @@ while True: fwd_v(v_slow) elif posy_ball <= y_ball_near: if posx_goal_left < posx_ball: - turnSideRight() - elif posx_goal_right > posx_ball: - turnSideLeft() + turnSideRight(v_slow, 20) + elif posx_goal_left > posx_ball: + turnSideLeft(v_slow, 20) else: stop() elif posy_ball <= y_ball_touch: @@ -413,9 +403,9 @@ while True: fwd_v(v_slow) elif posy_ball <= y_ball_near: if posx_goal_right < posx_ball: - turnSideRight() + turnSideRight(v_slow, 20) elif posx_goal_right > posx_ball: - turnSideLeft() + turnSideLeft(v_slow, 20) else: stop() elif posy_ball <= y_ball_touch: @@ -430,9 +420,9 @@ while True: if posx_ball > posx_goal_left and posx_ball < posx_goal_right: fwd_v(v_slow) elif posx_ball < posx_goal_left and posx_ball < posx_goal_right: - turnSideLeft() + turnSideLeft(v_slow, 20) elif posx_ball > posx_goal_left and posx_ball > posx_goal_right: - turnSideRight() + turnSideRight(v_slow, 20) else: stop() elif posy_ball <= y_ball_touch: @@ -467,6 +457,6 @@ while True: display.set_attr("txt_label_goal.text", str('x:{}, {}, p:{}, w:{}'.format(posx_goal_left, posx_goal_right, pos_goal_both, goal_width))) display.set_attr("txt_label_counters.text", str('{}'.format(counters))) print('{}:{} GOAL_x: {}, {}, p:{}, w:{} BALL_pos:{},{} v_x:{} v_y:{}'.format(state, cmd, posx_goal_left, posx_goal_right, pos_goal_both, goal_width, posx_ball, posy_ball, v_var_ball_xpos, v_var_ball_ypos)) - time.sleep(0.05) + time.sleep(0.08)