Skip to content

Instantly share code, notes, and snippets.

@WestsideRobotics
Created November 30, 2023 23:57
Show Gist options
  • Save WestsideRobotics/5e42fd30aa8ba737fa7e76309fbe5160 to your computer and use it in GitHub Desktop.
Save WestsideRobotics/5e42fd30aa8ba737fa7e76309fbe5160 to your computer and use it in GitHub Desktop.
This FTC Blocks OpMode demonstrates MultiPortalView with 3 webcams.
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="kn(}Qq/F(%5o98c-^9RV">myPortalsList</variable>
<variable id="l)/,LjA`jR!1Nc@Z:`l!">myAprilTagDetections_1</variable>
<variable id="#-fO4*%%y)1L#4aoBjaQ">myAprilTagDetections_2</variable>
<variable id="gKb]O2H[9HgH6GB,LAf8">myAprilTagDetections_3</variable>
<variable id="KU}sO+c6etmmKt$BH;l9">Portal 1 View ID</variable>
<variable id="3.)/eLHm(iRl1^Qsq;Hb">USE_WEBCAM_1</variable>
<variable type="AprilTagProcessor.Builder" id="NYqOu)Ei(Q{C!f;y!a^O">myAprilTagProcessorBuilder</variable>
<variable type="VisionPortal.Builder" id="wx@xgbnS_]b0DQL.08Qg">myVisionPortalBuilder</variable>
<variable id="C8uw7?2|6A@3Qmz_@NWv">Portal 2 View ID</variable>
<variable id="dP0MCE~zG8MZ2;t(?.f[">USE_WEBCAM_2</variable>
<variable id="?.?jAjDXaP~!^(jq/Ls_">myAprilTagProcessor_1</variable>
<variable id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</variable>
<variable id="R845[Ju$~:kO{$^,NIfo">myAprilTagProcessor_2</variable>
<variable id="=(^@|Tz:xjvrbiC~Y964">myAprilTagProcessor_3</variable>
<variable id="s8utLt2j=?bZT+FGQPpk">Portal 3 View ID</variable>
<variable id="@KC#O?,#5lKLUS5$uZs=">USE_WEBCAM_3</variable>
<variable id="Xk!_{IPng0#/P|7dx?3N">myVisionPortal_1</variable>
<variable id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</variable>
<variable id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</variable>
<variable id=".a=1R-U9w)m)V6CRWoD}">myVisionPortal_2</variable>
<variable id="ytNpDf^72tW_b6:(p~5*">myVisionPortal_3</variable>
</variables>
<block type="procedures_defnoreturn" id="hTRENc6W!`^FC-(Wey@," x="552" y="-65">
<field name="NAME">initMultiPortals</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="variables_set" id="T0z+-eY(gM#ldBd^C+GD">
<field name="VAR" id="kn(}Qq/F(%5o98c-^9RV">myPortalsList</field>
<value name="VALUE">
<block type="visionPortal_makeMultiPortalView" id="Df@Kn17::s{c/DvQ$V6$">
<value name="NUM_PORTALS">
<shadow type="math_number" id="c}B|!~eCj!ci08}1OQ%D">
<field name="NUM">3</field>
</shadow>
</value>
<value name="MULTI_PORTAL_LAYOUT">
<shadow type="visionPortal_typedEnum_multiPortalLayout" id="dTmsi_8L}Mi[I!Xfnl@y">
<field name="MULTI_PORTAL_LAYOUT">HORIZONTAL</field>
</shadow>
</value>
</block>
</value>
<next>
<block type="variables_set" id="bY3N_KHzc4gRP9N7i3yd">
<field name="VAR" id="KU}sO+c6etmmKt$BH;l9">Portal 1 View ID</field>
<value name="VALUE">
<block type="lists_getIndex" id="a%n$f3#i^_FL{#c+(KPJ">
<mutation statement="false" at="true"/>
<field name="MODE">GET</field>
<field name="WHERE">FROM_START</field>
<value name="VALUE">
<block type="variables_get" id="|[kJq@*(~MRE@CDRA]Z8">
<field name="VAR" id="kn(}Qq/F(%5o98c-^9RV">myPortalsList</field>
</block>
</value>
<value name="AT">
<block type="math_number" id="6^[:B~uMAuWyhb^K4o_q">
<field name="NUM">1</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="el~3{v|omZYFi~-fVZQ!">
<field name="VAR" id="C8uw7?2|6A@3Qmz_@NWv">Portal 2 View ID</field>
<value name="VALUE">
<block type="lists_getIndex" id="Km.nz9w[+nCgyKdNK!^3">
<mutation statement="false" at="true"/>
<field name="MODE">GET</field>
<field name="WHERE">FROM_START</field>
<value name="VALUE">
<block type="variables_get" id="!!_zLh?AGLxoxedzVMuJ">
<field name="VAR" id="kn(}Qq/F(%5o98c-^9RV">myPortalsList</field>
</block>
</value>
<value name="AT">
<block type="math_number" id="e@]hGg/.b|u%x+myW2A.">
<field name="NUM">2</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id=")qixBFs?#Qvrdj4MV!^F">
<field name="VAR" id="s8utLt2j=?bZT+FGQPpk">Portal 3 View ID</field>
<value name="VALUE">
<block type="lists_getIndex" id="JHz=H6.qlQE6o}b8OT3n">
<mutation statement="false" at="true"/>
<field name="MODE">GET</field>
<field name="WHERE">FROM_START</field>
<value name="VALUE">
<block type="variables_get" id="[7Pm9X},woH`9ENKi/w}">
<field name="VAR" id="kn(}Qq/F(%5o98c-^9RV">myPortalsList</field>
</block>
</value>
<value name="AT">
<block type="math_number" id="Ea6!G[!dFo94DKTs]3Ai">
<field name="NUM">3</field>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addNumericData_Number" id="n;8v_@A`fO14?S$@`|V9">
<value name="KEY">
<shadow type="text" id="F/8b`~6W^gN`mgiXkkE)">
<field name="TEXT">Portal 1 View ID (index 0 of myPortalsList)</field>
</shadow>
</value>
<value name="NUMBER">
<shadow type="math_number" id="k+KUHj?;`,Y,.(?5}7Tj">
<field name="NUM">123</field>
</shadow>
<block type="variables_get" id="n}yrXqBs}VC7lIx.B?r.">
<field name="VAR" id="KU}sO+c6etmmKt$BH;l9">Portal 1 View ID</field>
</block>
</value>
<next>
<block type="telemetry_addNumericData_Number" id="#NfArg4K%H4g+D?YoKQ?">
<value name="KEY">
<shadow type="text" id="S}kY*7si5g_7A}q]/[Sp">
<field name="TEXT">Portal 2 View ID (index 1 of myPortalsList)</field>
</shadow>
</value>
<value name="NUMBER">
<shadow type="math_number" id="r1SWTft0}tv=3rq::Ix^">
<field name="NUM">123</field>
</shadow>
<block type="variables_get" id="Os@FTR*5t6dD~`NS43?%">
<field name="VAR" id="C8uw7?2|6A@3Qmz_@NWv">Portal 2 View ID</field>
</block>
</value>
<next>
<block type="telemetry_addNumericData_Number" id="[io(f6FsH,*(Fg!c/a+Y">
<value name="KEY">
<shadow type="text" id="r(7~FmO{@27oIu?ymDwl">
<field name="TEXT">Portal 3 View ID (index 2 of myPortalsList)</field>
</shadow>
</value>
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">123</field>
</shadow>
<block type="variables_get" id="W`]C1ux0LklJ#OO/p6l#">
<field name="VAR" id="s8utLt2j=?bZT+FGQPpk">Portal 3 View ID</field>
</block>
</value>
<next>
<block type="telemetry_addLine" id="/+Zg^8O!kspc[Ppwe7Ig">
<value name="TEXT">
<shadow type="text" id="e#uNl7i5F+wQRpk;zCu1">
<field name="TEXT"/>
</shadow>
</value>
<next>
<block type="telemetry_addLine" id="hn8iarbkz7B-9?9j0H]y">
<value name="TEXT">
<shadow type="text" id="(=}ejM$(oYo^Z~Q1PiZs">
<field name="TEXT">Press Y to continue</field>
</shadow>
</value>
<next>
<block type="telemetry_update" id="p9d+V=bFULgb*Ie:q,6z">
<next>
<block type="controls_whileUntil" id="/6dK~.1AfQoC.lwdAA@Z">
<field name="MODE">WHILE</field>
<value name="BOOL">
<block type="logic_operation" id="#;sUgsw%mu%~!%tm!h$[" inline="false">
<field name="OP">AND</field>
<value name="A">
<block type="logic_negate" id="xsQ-hp:FxFWH2}QA`-=K">
<value name="BOOL">
<block type="gamepad_getProperty_Boolean" id="OsntEXqp#T,!@A%*s@.R">
<field name="IDENTIFIER">gamepad1</field>
<field name="PROP">Y</field>
<data>{"IDENTIFIER":"gamepad1"}</data>
</block>
</value>
</block>
</value>
<value name="B">
<block type="linearOpMode_opModeInInit" id="3FO?`[I~UA_eL0W}ey_+"/>
</value>
</block>
</value>
<statement name="DO">
<block type="comment" id="3Db}D;GtbzjxU;*66unO">
<field name="COMMENT">Loop until gamepad Y button is pressed.</field>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="WtpyD@tEu+EoY=P9iY,D" deletable="false" x="10" y="151">
<field name="NAME">runOpMode</field>
<comment pinned="true" h="125" w="417.66668701171875">This Op Mode demonstrates MultiPortalView with 3 webcams.
The Dpad buttons can turn each camera stream on and off.
USB bandwidth is more restricted on an external USB hub, compared to the Control Hub.</comment>
<data>{"commentPositionLeft":-21,"commentPositionTop":-155}</data>
<statement name="STACK">
<block type="comment" id="vG1;7$#*;crH,9)V$Lbq">
<field name="COMMENT">This OpMode shows AprilTag recognition and pose estimation.</field>
<next>
<block type="variables_set" id="+WOa|3hz0c^Rah6+[;U4">
<field name="VAR" id="3.)/eLHm(iRl1^Qsq;Hb">USE_WEBCAM_1</field>
<value name="VALUE">
<block type="logic_boolean" id="C]dWgdzJ2YW[h}=7w5QN">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="variables_set" id="FCFS4e[3x0E8kv3Xjfa~">
<field name="VAR" id="dP0MCE~zG8MZ2;t(?.f[">USE_WEBCAM_2</field>
<value name="VALUE">
<block type="logic_boolean" id="NUgNSX~wF*3]-J_T7Bih">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="variables_set" id="=h}.ng[oH-wZbjM.ZciK">
<field name="VAR" id="@KC#O?,#5lKLUS5$uZs=">USE_WEBCAM_3</field>
<value name="VALUE">
<block type="logic_boolean" id="2Q2_U@qZ~%ksGD]EdTZ/">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="procedures_callnoreturn" id="Bt8IZ20-|$=@:CZ+i~L_">
<mutation name="initMultiPortals"/>
<next>
<block type="procedures_callnoreturn" id="f5VC4xOrYYZrGzpFY}@G">
<mutation name="initAprilTag"/>
<comment pinned="false" h="60" w="270">Initialize AprilTag before waitForStart.</comment>
<next>
<block type="comment" id="/TX8,^RvHuP6X%R,Py^^">
<field name="COMMENT">Wait for the Start button to be touched.</field>
<next>
<block type="telemetry_addTextData_All" id="Y/b(p3p_Ls7l_.)bQt%8">
<value name="KEY">
<shadow type="text" id="]K/@Q[7z:EBSoy.ggFCo">
<field name="TEXT">DS preview on/off</field>
</shadow>
</value>
<value name="TEXT">
<shadow type="text" id="eV-62@bA|1V9{)n7lim2">
<field name="TEXT">3 dots, Camera Stream</field>
</shadow>
</value>
<next>
<block type="telemetry_addTextData_All" id="/Zm[n8^)(`(S}Ab9j!;|">
<value name="KEY">
<shadow type="text" id="E)4aB(Zb2,Da/0v0AiN=">
<field name="TEXT">&gt;</field>
</shadow>
</value>
<value name="TEXT">
<shadow type="text" id="^u5_oh+s(.Vs1Kk;$yw9">
<field name="TEXT">Touch Play to start OpMode</field>
</shadow>
</value>
<next>
<block type="telemetry_update" id="CcM7+$syN,5p}u1NCi8q">
<next>
<block type="linearOpMode_waitForStart" id=":`$wN_ci`O;o6P0~.(+g">
<next>
<block type="controls_if" id="}Q?5mbxSO8Di;i!__6[y">
<value name="IF0">
<block type="linearOpMode_opModeIsActive" id=")o%YFX/#9kvv^sgXr4~5"/>
</value>
<statement name="DO0">
<block type="controls_whileUntil" id="^0Kagy/e+Ea{rbZPv2G6">
<field name="MODE">WHILE</field>
<value name="BOOL">
<block type="linearOpMode_opModeIsActive" id="e)cr{!2VIET83s,JWC.="/>
</value>
<statement name="DO">
<block type="procedures_callnoreturn" id="L1~6q-w9m`2ahlT|b!@A">
<mutation name="AprilTag telemetry for Portal 1"/>
<next>
<block type="procedures_callnoreturn" id=".nE~$]5yWi@dvC{X413?">
<mutation name="AprilTag telemetry for Portal 2"/>
<next>
<block type="procedures_callnoreturn" id="g[QYfMq91|B;=^DFuv7r">
<mutation name="AprilTag telemetry for Portal 3"/>
<next>
<block type="procedures_callnoreturn" id="A~A;7W!jqa;{%%68qJYl">
<mutation name="AprilTag telemetry legend"/>
<next>
<block type="procedures_callnoreturn" id="28f4}qE,|+0R9eRduR*U">
<mutation name="Toggle camera streams"/>
<next>
<block type="telemetry_update" id="exvivmft-pX$n!1,8Ea$">
<comment pinned="false" h="55" w="295">Push telemetry to the Driver Station.</comment>
<next>
<block type="linearOpMode_sleep_Number" id="jjoCwI:;J87CrtGs%}K7">
<comment pinned="false" h="46" w="191">Share the CPU.</comment>
<value name="MILLISECONDS">
<shadow type="math_number" id="w~.7$M*lJeh#@I/xsbHy">
<field name="NUM">20</field>
</shadow>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id=":Un!nS!LS%^tq]:g4^?Z" x="1151" y="164">
<field name="NAME">initAprilTag</field>
<comment pinned="false" h="80" w="160">Initialize AprilTag Detection.</comment>
<statement name="STACK">
<block type="comment" id="Z#tr,B$;l$RV0)j4q0n.">
<field name="COMMENT">First, create an AprilTagProcessor.Builder.</field>
<next>
<block type="aprilTagProcessorBuilder_create_assign" id="]gR@^J/H_v)OY6f[`3z5">
<field name="APRIL_TAG_PROCESSOR_BUILDER" id="NYqOu)Ei(Q{C!f;y!a^O" variabletype="AprilTagProcessor.Builder">myAprilTagProcessorBuilder</field>
<next>
<block type="comment" id="-dkxGvL2:a(h8n8Mok-i">
<field name="COMMENT">Create each AprilTagProcessor by calling build.</field>
<next>
<block type="variables_set" id="$.wt,WCD1s5fSqROQT*(">
<field name="VAR" id="?.?jAjDXaP~!^(jq/Ls_">myAprilTagProcessor_1</field>
<value name="VALUE">
<block type="aprilTagProcessorBuilder_build" id="3Vk~@]VGDELD;GHGgEgn">
<field name="APRIL_TAG_PROCESSOR_BUILDER" id="NYqOu)Ei(Q{C!f;y!a^O" variabletype="AprilTagProcessor.Builder">myAprilTagProcessorBuilder</field>
</block>
</value>
<next>
<block type="aprilTagProcessorBuilder_create_assign" id="x$,jMZe-LH#jbqm,qAL}" disabled="true">
<field name="APRIL_TAG_PROCESSOR_BUILDER" id="NYqOu)Ei(Q{C!f;y!a^O" variabletype="AprilTagProcessor.Builder">myAprilTagProcessorBuilder</field>
<comment pinned="true" h="82" w="159">Optional, seems not to decrease chance of crashing.</comment>
<data>{"commentPositionLeft":-220,"commentPositionTop":2}</data>
<next>
<block type="variables_set" id="7c+trNOMI#F%G`uOw!VR">
<field name="VAR" id="R845[Ju$~:kO{$^,NIfo">myAprilTagProcessor_2</field>
<value name="VALUE">
<block type="aprilTagProcessorBuilder_build" id="3q*$kto7+[%^gTcz6ANE">
<field name="APRIL_TAG_PROCESSOR_BUILDER" id="NYqOu)Ei(Q{C!f;y!a^O" variabletype="AprilTagProcessor.Builder">myAprilTagProcessorBuilder</field>
</block>
</value>
<next>
<block type="variables_set" id="F1#:k69ssGCP++HIrqk`">
<field name="VAR" id="=(^@|Tz:xjvrbiC~Y964">myAprilTagProcessor_3</field>
<value name="VALUE">
<block type="aprilTagProcessorBuilder_build" id=")bPZT.?}syQNx?(/uPe.">
<field name="APRIL_TAG_PROCESSOR_BUILDER" id="NYqOu)Ei(Q{C!f;y!a^O" variabletype="AprilTagProcessor.Builder">myAprilTagProcessorBuilder</field>
</block>
</value>
<next>
<block type="procedures_callnoreturn" id="RIkutpx=T[e:d?67s*e)">
<mutation name="Make first VisionPortal"/>
<next>
<block type="procedures_callnoreturn" id="=8K~[A{1UqUw/-Rp.=GJ">
<mutation name="Make second VisionPortal"/>
<next>
<block type="procedures_callnoreturn" id="%!miV8U2OSE[3!9Qq(x4">
<mutation name="Make third VisionPortal"/>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="Zv2gxly_VRD9c;ooprJK" x="1146" y="478">
<field name="NAME">Make first VisionPortal</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="comment" id="w{nzs#L5ZbP.GKW2S`x_">
<field name="COMMENT">Create a VisionPortal.Builder and set attributes related to the first camera.</field>
<next>
<block type="visionPortalBuilder_create_assign" id="s1^/ZS*LG[dC%CsYcl=%">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<next>
<block type="controls_if" id="T`t))DI)e(S6b*Xls7U=">
<mutation else="1"/>
<value name="IF0">
<block type="variables_get" id="Zr+H]wQb_aiB|J+{-0:G">
<field name="VAR" id="3.)/eLHm(iRl1^Qsq;Hb">USE_WEBCAM_1</field>
</block>
</value>
<statement name="DO0">
<block type="visionPortalBuilder_setCamera" id="h;`Yd}]R=F.Fw89p`1N/">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="68" w="247">Use a webcam.</comment>
<value name="CAMERA">
<shadow type="navigation_webcamName" id="b`AjugjMrzm855@U*q;W">
<field name="WEBCAM_NAME">Webcam 1</field>
</shadow>
<block type="navigation_webcamName" id="-_ij?RQuVjOLDO[K*[nW">
<field name="WEBCAM_NAME">Webcam 1</field>
</block>
</value>
</block>
</statement>
<statement name="ELSE">
<block type="visionPortalBuilder_setCamera" id="pm=N,.9EB)-Y)[HJlB;-">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="56" w="298">Use the device's back camera.</comment>
<value name="CAMERA">
<shadow type="navigation_typedEnum_builtinCameraDirection" id="8u8O_}55dptgjBxmKq`9">
<field name="CAMERA_DIRECTION">BACK</field>
</shadow>
</value>
</block>
</statement>
<next>
<block type="comment" id="DbdMBABkX(`Xc]t2}Xuv">
<field name="COMMENT">Manage USB bandwidth of three camera streams, by adjusting resolution from default 640x480.</field>
<next>
<block type="visionPortalBuilder_setCameraResolution" id="bbsD4s}Bwx$enUn,h%q9" disabled="true">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="150" w="325">Set the camera resolution.</comment>
<value name="CAMERA_WIDTH">
<shadow type="math_number" id="~%d96O[kR.jBaLjs$1sQ">
<field name="NUM">320</field>
</shadow>
</value>
<value name="CAMERA_HEIGHT">
<shadow type="math_number" id="X*:F4M3pM?@f5b:9t[Kx">
<field name="NUM">240</field>
</shadow>
</value>
<next>
<block type="comment" id="I+p-_JaszFbSq28;uEAu">
<field name="COMMENT">Manage USB bandwidth of three camera streams, by selecting Streaming Format.</field>
<next>
<block type="visionPortalBuilder_setStreamFormat" id="4RGPwN1bpgYAdNG$aRp(">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="150" w="325">Set the stream format.</comment>
<data>{"commentPositionLeft":-81,"commentPositionTop":-175}</data>
<value name="STREAM_FORMAT">
<shadow type="visionPortal_typedEnum_streamFormat" id="yc},8z#Ubqo^3n0M9#o,">
<field name="STREAM_FORMAT">MJPEG</field>
</shadow>
</value>
<next>
<block type="comment" id="-QJd~|I/HUP84GR.F=0N">
<field name="COMMENT">Add myAprilTagProcessor to the VisionPortal.Builder.</field>
<next>
<block type="visionPortalBuilder_addProcessor" id="`A$k?7nl@kd=7y*v@/+-">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<value name="VISION_PROCESSOR">
<block type="variables_get" id="HoXmAtlB7{ai0YF!ZyTl">
<field name="VAR" id="?.?jAjDXaP~!^(jq/Ls_">myAprilTagProcessor_1</field>
</block>
</value>
<next>
<block type="comment" id="0*a@Z?!~c{N5i)z4/V`=">
<field name="COMMENT">Add the Portal View ID to the VisionPortal.Builder</field>
<next>
<block type="visionPortalBuilder_setCameraMonitorViewId" id="|=UJ|87n6E1BW!j!,s=_">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="150" w="325">Set the camera monitor view id.</comment>
<data>{"commentPositionLeft":-81,"commentPositionTop":-175}</data>
<value name="VIEW_ID">
<block type="variables_get" id="YNR^H^:(-s8nkv#MFd^d">
<field name="VAR" id="KU}sO+c6etmmKt$BH;l9">Portal 1 View ID</field>
</block>
</value>
<next>
<block type="comment" id="6Q2EYFS^A(u/rVLX*nI}">
<field name="COMMENT">Create a VisionPortal by calling build.</field>
<next>
<block type="variables_set" id="UggZXj@UuhBf97)(oA;m">
<field name="VAR" id="Xk!_{IPng0#/P|7dx?3N">myVisionPortal_1</field>
<value name="VALUE">
<block type="visionPortalBuilder_build" id="OBOV:tKH!^AaYsI{A$~x">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="=L4%[*x};aVlq^5PYHwL" x="1857" y="466">
<field name="NAME">Make second VisionPortal</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="comment" id=":vQrkISfg^MzC-ZQN$d3" disabled="true">
<field name="COMMENT">Create a VisionPortal.Builder (again) and set attributes related to the second camera.</field>
<next>
<block type="visionPortalBuilder_create_assign" id="(05c2T!Z9b)#V2Lt+~3W">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="true" h="85" w="150">Optional, but seems to decrease chance of crashing.</comment>
<data>{"commentPositionLeft":-213,"commentPositionTop":-78}</data>
<next>
<block type="controls_if" id=":035Wc9@%UF3HZ:v!ey$">
<mutation else="1"/>
<value name="IF0">
<block type="variables_get" id=":Zx)+xB{_lM]`OSi,bTu">
<field name="VAR" id="dP0MCE~zG8MZ2;t(?.f[">USE_WEBCAM_2</field>
</block>
</value>
<statement name="DO0">
<block type="visionPortalBuilder_setCamera" id="gTXDroUC)dFqKCUxm5Gp">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="68" w="247">Use a webcam.</comment>
<value name="CAMERA">
<shadow type="navigation_webcamName" id="6!ARlE1_/RTH`o|dIY1|">
<field name="WEBCAM_NAME">Webcam 2</field>
</shadow>
<block type="navigation_webcamName" id="j_xNjob;EW~2O[*y6Sv/">
<field name="WEBCAM_NAME">Webcam 2</field>
</block>
</value>
</block>
</statement>
<statement name="ELSE">
<block type="visionPortalBuilder_setCamera" id="LMxXHS|,QLGQ.M$uG;vD">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="56" w="298">Use the device's back camera.</comment>
<value name="CAMERA">
<shadow type="navigation_typedEnum_builtinCameraDirection" id="+PJd^UinSi4]zG3:=)EO">
<field name="CAMERA_DIRECTION">BACK</field>
</shadow>
</value>
</block>
</statement>
<next>
<block type="comment" id="$t2U01*}6lH?|cB;ks;e">
<field name="COMMENT">Manage USB bandwidth of three camera streams, by adjusting resolution from default 640x480.</field>
<next>
<block type="visionPortalBuilder_setCameraResolution" id="?7E1{+cv;Gis:SD@.#.w" disabled="true">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="150" w="325">Set the camera resolution.</comment>
<value name="CAMERA_WIDTH">
<shadow type="math_number" id="+{~V_O!2yWQ[2Y][kSDW">
<field name="NUM">320</field>
</shadow>
</value>
<value name="CAMERA_HEIGHT">
<shadow type="math_number" id="~+Q-:xc==*fY.@?LE/D[">
<field name="NUM">240</field>
</shadow>
</value>
<next>
<block type="comment" id="S2VQlNT48]HHu[pCP*T@">
<field name="COMMENT">Manage USB bandwidth of three camera streams, by selecting Streaming Format.</field>
<next>
<block type="visionPortalBuilder_setStreamFormat" id="/]2xvtxSr7ueR+)BLVh[">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="150" w="325">Set the stream format.</comment>
<value name="STREAM_FORMAT">
<shadow type="visionPortal_typedEnum_streamFormat" id="2tCZ_Ckf8]l}g.]qQ}=g">
<field name="STREAM_FORMAT">MJPEG</field>
</shadow>
</value>
<next>
<block type="comment" id="px_~#aY,Q@B9_Z$s?nWp">
<field name="COMMENT">Add myAprilTagProcessor to the VisionPortal.Builder.</field>
<next>
<block type="visionPortalBuilder_addProcessor" id="(/{Ua?Miu@]!Hn;RUHGB">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<value name="VISION_PROCESSOR">
<block type="variables_get" id="M$YCt1n?jPe9YJP7C(z@">
<field name="VAR" id="R845[Ju$~:kO{$^,NIfo">myAprilTagProcessor_2</field>
</block>
</value>
<next>
<block type="comment" id="@E(A5OKfE10^xQM@Nk}3">
<field name="COMMENT">Add the Portal View ID to the VisionPortal.Builder</field>
<next>
<block type="visionPortalBuilder_setCameraMonitorViewId" id="O/sq*OFa)fkf-}v$T1)k">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="150" w="325">Set the camera monitor view id.</comment>
<data>{"commentPositionLeft":-81,"commentPositionTop":-175}</data>
<value name="VIEW_ID">
<block type="variables_get" id="|hBy!-$43-Ta9=B4g#Q*">
<field name="VAR" id="C8uw7?2|6A@3Qmz_@NWv">Portal 2 View ID</field>
</block>
</value>
<next>
<block type="comment" id="@T/}=c*y#{:QZqhf?32P">
<field name="COMMENT">Create a VisionPortal by calling build.</field>
<next>
<block type="variables_set" id="gy*CGj`Nv_#v}mJW$LyG">
<field name="VAR" id=".a=1R-U9w)m)V6CRWoD}">myVisionPortal_2</field>
<value name="VALUE">
<block type="visionPortalBuilder_build" id="Etb=jIbjtCd`7xVDNSE1">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="AJ.}eAieT5heQm^e6K9{" x="2636" y="458">
<field name="NAME">Make third VisionPortal</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="comment" id="|~zzNoH^D.ZRFMZual*K" disabled="true">
<field name="COMMENT">Create a VisionPortal.Builder (again) and set attributes related to the second camera.</field>
<next>
<block type="visionPortalBuilder_create_assign" id="PdFMM.qyQRHWz~5[,6B[">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="true" h="85" w="150">Optional, but seems to decrease chance of crashing.</comment>
<data>{"commentPositionLeft":-213,"commentPositionTop":-78}</data>
<next>
<block type="controls_if" id="NtTIQrq@7h6~nxi*8l}K">
<mutation else="1"/>
<value name="IF0">
<block type="variables_get" id="Y]wO9%T[Y9FzjO6:p?o5">
<field name="VAR" id="@KC#O?,#5lKLUS5$uZs=">USE_WEBCAM_3</field>
</block>
</value>
<statement name="DO0">
<block type="visionPortalBuilder_setCamera" id="^5%+?vbZjHf`Cd)N74V@">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="68" w="247">Use a webcam.</comment>
<value name="CAMERA">
<shadow type="navigation_webcamName">
<field name="WEBCAM_NAME">Webcam 2</field>
</shadow>
<block type="navigation_webcamName" id="9V}+ZLQ7-up99[@S)3]4">
<field name="WEBCAM_NAME">Webcam 3</field>
</block>
</value>
</block>
</statement>
<statement name="ELSE">
<block type="visionPortalBuilder_setCamera" id="#~CpeD6FnmA-o)9FWd!|">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="56" w="298">Use the device's back camera.</comment>
<value name="CAMERA">
<shadow type="navigation_typedEnum_builtinCameraDirection" id="BrT8uJj[l:@;)Yl7~v0f">
<field name="CAMERA_DIRECTION">BACK</field>
</shadow>
</value>
</block>
</statement>
<next>
<block type="comment" id="Rr|I,{FOVm}g]$i5dw`h">
<field name="COMMENT">Manage USB bandwidth of three camera streams, by adjusting resolution from default 640x480.</field>
<next>
<block type="visionPortalBuilder_setCameraResolution" id="`e5q#{|d/~_4wR-I)qPR" disabled="true">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="150" w="325">Set the camera resolution.</comment>
<value name="CAMERA_WIDTH">
<shadow type="math_number" id="5w]e/u%[V[LaIA4alhc=">
<field name="NUM">320</field>
</shadow>
</value>
<value name="CAMERA_HEIGHT">
<shadow type="math_number" id="1W+eM!LwNDV,c$so(0rb">
<field name="NUM">240</field>
</shadow>
</value>
<next>
<block type="comment" id="WWW%IQ8BetrY$-AV+D9U">
<field name="COMMENT">Manage USB bandwidth of three camera streams, by selecting Streaming Format.</field>
<next>
<block type="visionPortalBuilder_setStreamFormat" id=".M5@eZ$e%,z|_v%HP]!G">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="150" w="325">Set the stream format.</comment>
<value name="STREAM_FORMAT">
<shadow type="visionPortal_typedEnum_streamFormat" id="o27tQ:dq3w:]]UWw1EnI">
<field name="STREAM_FORMAT">MJPEG</field>
</shadow>
</value>
<next>
<block type="comment" id="Hw|-HD*waECfQzho|Eg.">
<field name="COMMENT">Add myAprilTagProcessor to the VisionPortal.Builder.</field>
<next>
<block type="visionPortalBuilder_addProcessor" id="^Q)Wm_[34H_SHpW456Nv">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<value name="VISION_PROCESSOR">
<block type="variables_get" id="1QC*[tM8[E%pyueKu?X?">
<field name="VAR" id="=(^@|Tz:xjvrbiC~Y964">myAprilTagProcessor_3</field>
</block>
</value>
<next>
<block type="comment" id="]jQFm6jy2uB`Nq;12aHX">
<field name="COMMENT">Add the Portal View ID to the VisionPortal.Builder</field>
<next>
<block type="visionPortalBuilder_setCameraMonitorViewId" id="fV%)rp^mz[zh)-Ke)/KQ">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
<comment pinned="false" h="150" w="325">Set the camera monitor view id.</comment>
<data>{"commentPositionLeft":-81,"commentPositionTop":-175}</data>
<value name="VIEW_ID">
<block type="variables_get" id="-]aMD_9eM3Y(@u@WcTAr">
<field name="VAR" id="s8utLt2j=?bZT+FGQPpk">Portal 3 View ID</field>
</block>
</value>
<next>
<block type="comment" id="qG=.N]/yohUBNQPGS6@S">
<field name="COMMENT">Create a VisionPortal by calling build.</field>
<next>
<block type="variables_set" id="ptl%l^(%%d.l*2fwOrWD">
<field name="VAR" id="ytNpDf^72tW_b6:(p~5*">myVisionPortal_3</field>
<value name="VALUE">
<block type="visionPortalBuilder_build" id=",JG+=zGW/Vt[)8uXR1!A">
<field name="VISION_PORTAL_BUILDER" id="wx@xgbnS_]b0DQL.08Qg" variabletype="VisionPortal.Builder">myVisionPortalBuilder</field>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="0qq4Mgt5,Tpch.4Sd-:*" x="551" y="643">
<field name="NAME">Toggle camera streams</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="comment" id="{Dm;|45xiJw91sf:=klh">
<field name="COMMENT">Manage USB bandwidth of three camera streams, by turning on or off.</field>
<next>
<block type="controls_if" id="!7_WSukNml?WxUrVW=}Y">
<mutation elseif="1"/>
<value name="IF0">
<block type="gamepad_getProperty_Boolean" id="nHP+eLQXZnMf$GP.l+2:">
<field name="IDENTIFIER">gamepad1</field>
<field name="PROP">DpadDown</field>
<data>{"IDENTIFIER":"gamepad1"}</data>
</block>
</value>
<statement name="DO0">
<block type="visionPortal_stopStreaming" id="WxT@T#Ky#v5b~U}F-piA">
<comment pinned="false" h="150" w="325">Temporarily stop the streaming session. This can save CPU resources, with the ability to resume quickly when needed.</comment>
<value name="VISION_PORTAL">
<block type="variables_get" id="+oda$..:Xa3Va0rMe{;L">
<field name="VAR" id="Xk!_{IPng0#/P|7dx?3N">myVisionPortal_1</field>
</block>
</value>
</block>
</statement>
<value name="IF1">
<block type="gamepad_getProperty_Boolean" id="4p5t*;5@A|8*!R_$E^Fw">
<field name="IDENTIFIER">gamepad1</field>
<field name="PROP">DpadUp</field>
<data>{"IDENTIFIER":"gamepad1"}</data>
</block>
</value>
<statement name="DO1">
<block type="visionPortal_resumeStreaming" id="TRp3/F9RhWFZnU3l.]ei">
<comment pinned="false" h="150" w="325">Resume the streaming session if previously stopped.</comment>
<value name="VISION_PORTAL">
<block type="variables_get" id="{Bzk]pC5=f5AS/,gp5T{">
<field name="VAR" id="Xk!_{IPng0#/P|7dx?3N">myVisionPortal_1</field>
</block>
</value>
</block>
</statement>
<next>
<block type="controls_if" id="|]F%BPYW#MDZ?J`J%)AE">
<mutation elseif="1"/>
<value name="IF0">
<block type="gamepad_getProperty_Boolean" id="5yv}|5w/I?^s4.$b;IUm">
<field name="IDENTIFIER">gamepad1</field>
<field name="PROP">DpadLeft</field>
<data>{"IDENTIFIER":"gamepad1"}</data>
</block>
</value>
<statement name="DO0">
<block type="visionPortal_stopStreaming" id="(H1CLsp;eG:Lghigj}k7">
<comment pinned="false" h="150" w="325">Temporarily stop the streaming session. This can save CPU resources, with the ability to resume quickly when needed.</comment>
<value name="VISION_PORTAL">
<block type="variables_get" id="kY}*9h+bR!$d1Qb~uvj-">
<field name="VAR" id=".a=1R-U9w)m)V6CRWoD}">myVisionPortal_2</field>
</block>
</value>
</block>
</statement>
<value name="IF1">
<block type="gamepad_getProperty_Boolean" id="=.K{19)qu+/#0+v3#;}}">
<field name="IDENTIFIER">gamepad1</field>
<field name="PROP">DpadRight</field>
<data>{"IDENTIFIER":"gamepad1"}</data>
</block>
</value>
<statement name="DO1">
<block type="visionPortal_resumeStreaming" id="W0ZV27+w(`pYc9Z490@%">
<comment pinned="false" h="150" w="325">Resume the streaming session if previously stopped.</comment>
<value name="VISION_PORTAL">
<block type="variables_get" id="5?*fMVs(5$@/FE5Y#D!Q">
<field name="VAR" id=".a=1R-U9w)m)V6CRWoD}">myVisionPortal_2</field>
</block>
</value>
</block>
</statement>
<next>
<block type="controls_if" id="CfZYVSd7bd~KLx:r.T~u">
<mutation elseif="1"/>
<value name="IF0">
<block type="gamepad_getProperty_Boolean" id="(iH2dQ_siCJOViZbn)i#">
<field name="IDENTIFIER">gamepad1</field>
<field name="PROP">B</field>
<data>{"IDENTIFIER":"gamepad1"}</data>
</block>
</value>
<statement name="DO0">
<block type="visionPortal_stopStreaming" id="caLSOuF6BVS:u9MpygeC">
<comment pinned="false" h="150" w="325">Temporarily stop the streaming session. This can save CPU resources, with the ability to resume quickly when needed.</comment>
<value name="VISION_PORTAL">
<block type="variables_get" id="-wUY9C82e;,0k06oo!(s">
<field name="VAR" id="ytNpDf^72tW_b6:(p~5*">myVisionPortal_3</field>
</block>
</value>
</block>
</statement>
<value name="IF1">
<block type="gamepad_getProperty_Boolean" id="@HUE:@O]E;cd0@}Y^d.@">
<field name="IDENTIFIER">gamepad1</field>
<field name="PROP">A</field>
<data>{"IDENTIFIER":"gamepad1"}</data>
</block>
</value>
<statement name="DO1">
<block type="visionPortal_resumeStreaming" id="5*Ru]NW(VfC(Vx39{-Kq">
<comment pinned="false" h="150" w="325">Resume the streaming session if previously stopped.</comment>
<data>{"commentPositionLeft":-81,"commentPositionTop":-175}</data>
<value name="VISION_PORTAL">
<block type="variables_get" id="4Yumy[%H9t_^bY~ZNd8[">
<field name="VAR" id="ytNpDf^72tW_b6:(p~5*">myVisionPortal_3</field>
</block>
</value>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="Eg%7GTPuhcoA]FCw9:]O" collapsed="true" x="6" y="914">
<field name="NAME">AprilTag telemetry for Portal 1</field>
<comment pinned="false" h="80" w="160">Display info (using telemetry) for a recognized AprilTag.</comment>
<statement name="STACK">
<block type="variables_set" id="c8~R@@~J_)0dhTTP,GP@">
<field name="VAR" id="l)/,LjA`jR!1Nc@Z:`l!">myAprilTagDetections_1</field>
<comment pinned="false" h="80" w="160">Get a list of AprilTag detections.</comment>
<value name="VALUE">
<block type="aprilTagProcessor_getDetections" id="^Sth`xX=n79Q8`P*Z#qt">
<value name="APRIL_TAG_PROCESSOR">
<block type="variables_get" id="Icn).;@XjTI7SR.j$UY#">
<field name="VAR" id="?.?jAjDXaP~!^(jq/Ls_">myAprilTagProcessor_1</field>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addTextData_All" id="3m5}jTks8BeMJ]|.h*Kp">
<value name="KEY">
<shadow type="text" id="MNA3Pe{~9.uc1dSMmO=j">
<field name="TEXT">Portal 1 - # AprilTags Detected</field>
</shadow>
</value>
<value name="TEXT">
<shadow type="text" id="DRWu-r*O-0eJ4pG2n$_l">
<field name="TEXT"/>
</shadow>
<block type="lists_length" id="q{bEB[P*p2XiVOMj*ku#">
<value name="VALUE">
<block type="variables_get" id="/5v#48C2W5M+l:4)g!zX">
<field name="VAR" id="l)/,LjA`jR!1Nc@Z:`l!">myAprilTagDetections_1</field>
</block>
</value>
</block>
</value>
<next>
<block type="controls_forEach" id="|@Y$y8D~],V(MRQ+Cyv{">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
<comment pinned="false" h="81" w="199">Iterate through list and call a function to display info for each recognized AprilTag.</comment>
<value name="LIST">
<block type="variables_get" id="W,d1s!eFWeDT0X}~eq,n">
<field name="VAR" id="l)/,LjA`jR!1Nc@Z:`l!">myAprilTagDetections_1</field>
</block>
</value>
<statement name="DO">
<block type="comment" id="U@Dkpel-LMa.00jJsqA-">
<field name="COMMENT">Display info about the detection.</field>
<next>
<block type="telemetry_addLine" id="qrKb?#/HMYJo.RhU8rW:">
<value name="TEXT">
<shadow type="text" id="3^Lv-r.jG6}7LV;(yIh.">
<field name="TEXT"/>
</shadow>
</value>
<next>
<block type="controls_if" id="1KHSCf_sX!Qd~BKfG}QD">
<mutation else="1"/>
<value name="IF0">
<block type="aprilTagDetection_getProperty_IsNotNull" id=":^$lP:Ut!p3Z)E+vy^]D">
<field name="PROP">metadata</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="9Lq*6VTlT$7uDRiB|mYe">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="telemetry_addLine" id="awB~K!HjEb=h6tM,%vLN">
<value name="TEXT">
<shadow type="text" id="?hM/$PX}4MN:|W`joKgn">
<field name="TEXT"/>
</shadow>
<block type="text_join" id="0C_x2#T#t7yl!%45k{$?">
<mutation items="4"/>
<value name="ADD0">
<block type="text" id="buEo7p[-2T4:49=`uwK1">
<field name="TEXT">==== (ID </field>
</block>
</value>
<value name="ADD1">
<block type="aprilTagDetection_getProperty_Number" id="lifbVBMNn+.1j?y6v54X">
<field name="PROP">id</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="w(63KWmGiZ83+qITBep;">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="=n-]].djPxb,OFyxcOQF">
<field name="TEXT">) </field>
</block>
</value>
<value name="ADD3">
<block type="aprilTagDetection_getProperty_String" id="=AvXMAjUic3u3lbFtEt4">
<field name="PROP">metadata.name</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="zKHYs.Y87Qrl9%G~Oq^V">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addLine" id=";grqK`+-g7;g50c=|L0l">
<value name="TEXT">
<shadow type="text" id="!y]i-sUsabeyV/)u=6D5">
<field name="TEXT"/>
</shadow>
<block type="text_join" id="4TtGi;Z(gbFaks}Eap^9">
<mutation items="7"/>
<value name="ADD0">
<block type="text" id="+]Cns+.i=%b0bFaT6;NI">
<field name="TEXT">XYZ </field>
</block>
</value>
<value name="ADD1">
<block type="misc_formatNumber_withWidth" id="df*#gw3iYx$kvL$9{Y?m">
<value name="NUMBER">
<shadow type="math_number" id="g`p?z|x@JeU%MJ4.tSFQ">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="jUN`u.6t[:O8`9Ncql]!">
<field name="PROP">ftcPose.x</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="mb(6}~t}KLoi4`XT~d:H">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="k*}!VVn#l8HSq7E2i?#R">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="mh4H+`GE$Em,(iS4ZjPR">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="y34}1aACqw@S]sESt=A#">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD3">
<block type="misc_formatNumber_withWidth" id="4Oj?ZaC$d#_1X}?b[T.|">
<value name="NUMBER">
<shadow type="math_number" id="2cGf/q9c-ZnJ}LB6C1i$">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="^ZxENE!MDi;z:vW0d@XL">
<field name="PROP">ftcPose.y</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="bYyr?K,sa#Z.])=_ot.X">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="BQJxM*kkA=P:cx1$gjDj">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="$REh~]PUb9LYTO;OfzqZ">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD4">
<block type="text" id="D7A3=:fGOVPSdci(UQtX">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD5">
<block type="misc_formatNumber_withWidth" id="FCZL%yFs6[0x{rm0ps54">
<value name="NUMBER">
<shadow type="math_number" id="|j[Xf6X[,{Y~6k#Ow9ay">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="@o/Xx/]f-CWGv|Tr)2Nk">
<field name="PROP">ftcPose.z</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="[9!-4|yF{X2|/{iSu:SC">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="ga,Viu`_|ozkv#5q3*@0">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="(E3-dHVlUbl(~6A~LN[p">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD6">
<block type="text" id=")9nfo^3]N$S,m~5}*3*=">
<field name="TEXT"> (inch)</field>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addLine" id="6W%[*9{;}.5Jl{VBB=*t">
<value name="TEXT">
<shadow type="text" id=";t?`r+|~SzTLUUHO=;M9">
<field name="TEXT"/>
</shadow>
<block type="text_join" id="$$x)e|XJcO*g[Y8~M2/Q">
<mutation items="7"/>
<value name="ADD0">
<block type="text" id="CNSpY2iH=tR#]P,pi4u.">
<field name="TEXT">PRY </field>
</block>
</value>
<value name="ADD1">
<block type="misc_formatNumber_withWidth" id="sht8%%Nn`h2}jwZ`-{x)">
<value name="NUMBER">
<shadow type="math_number" id="?pMQrP+klggGPQ})NZWJ">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="Iy|1o|tQ9/Xq~XhaEN$_">
<field name="PROP">ftcPose.yaw</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="rVJim4c8+/ys[,t:o!0a">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="mHP*I^3G3|9rAiui`;?f">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="VxWPF,FgQz,lDodmj[WR">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="]dbZO?6z_PP)Na=ij|hW">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD3">
<block type="misc_formatNumber_withWidth" id="!i;Ow5b5|tm]^:f=af8O">
<value name="NUMBER">
<shadow type="math_number" id="xsH[9W8/eLks@vlm]1*g">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="ShLjZCVXxN!~/4l*tkIW">
<field name="PROP">ftcPose.pitch</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="OCoPF8gE#WFKctf6vd6f">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="DyJDDqNjyT?RD%Og91T/">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="M?Svc5)[b)Apn186A8Em">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD4">
<block type="text" id="7-XP1=zX3p(TS(}va$9`">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD5">
<block type="misc_formatNumber_withWidth" id=":tQhsy?3wU|KpZT;GEux">
<value name="NUMBER">
<shadow type="math_number" id="v%b/#{Uh]xNL*jCpZAlp">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="rr^=wlJCB2_afebAXJ}Z">
<field name="PROP">ftcPose.roll</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="vBZ8!}wPWKb}V3-g]Wle">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="mu5y,^`sp#UgVsrfnkbc">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="1a@0e%XGstoBjtg)K@p]">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD6">
<block type="text" id="I*Wn1Gf}j+e`]CP5J0Cp">
<field name="TEXT"> (deg)</field>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addLine" id="p~aY/Ief^l:6#%yF5mBb">
<value name="TEXT">
<shadow type="text" id="[:Q^{:f(MSqR]$h@YO_G">
<field name="TEXT">text</field>
</shadow>
<block type="text_join" id="7AAW16ak[E;pRyJ50_pV">
<mutation items="7"/>
<value name="ADD0">
<block type="text" id="_D88fgJh36dZBe#kxQkh">
<field name="TEXT">RBE </field>
</block>
</value>
<value name="ADD1">
<block type="misc_formatNumber_withWidth" id="o=,mI,_W=C-(irqk:S^/">
<value name="NUMBER">
<shadow type="math_number" id="67$:0vchTm|ZAu?yf9Zs">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="V_e8w[RX[YJ6%2RfwTK4">
<field name="PROP">ftcPose.range</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="5U:C0C|9gsGJwjwric-u">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="E}T84I!akJTmE1gb#KTc">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="UKUfpg-DJ~rM||Pp1;?~">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="/)!A!j+m`c^.RSzJfnW8">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD3">
<block type="misc_formatNumber_withWidth" id="v,Ilg5bR5*;(#^l3B@-0">
<value name="NUMBER">
<shadow type="math_number" id="%)S}?+}8]#C5YOJMTtIz">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="}bh%9Kz6)u_zYo7,L]Iq">
<field name="PROP">ftcPose.bearing</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="B6P^H@vWo+vyX@sYn_ik">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="5ti##om.fc`N4y~4C#;|">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="22o;=,7*otM:5h`-4L|A">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD4">
<block type="text" id="Q|e}m1um|X;(#X^F`wb(">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD5">
<block type="misc_formatNumber_withWidth" id="x-{*.Ghd4zinz}U9X3?V">
<value name="NUMBER">
<shadow type="math_number" id=".MdJRQ6rUBU)RFzD8T%o">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="D(K1+O}E+Y7i_ek8}A?z">
<field name="PROP">ftcPose.elevation</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="sv;lYz!5q^E[A|N14(.X">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="GU73O^@;SXL))%*l[8Me">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="4Nv)-M9MfCY%aAn:1SEF">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD6">
<block type="text" id="x`,kpt}.uw,YSWON!D^j">
<field name="TEXT"> (inch, deg, deg)</field>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
<statement name="ELSE">
<block type="telemetry_addLine" id=".k7)ZU|.JU[vLM%.9oWH">
<value name="TEXT">
<shadow type="text" id="hqwM9[:8R6P;nJWo`z$@">
<field name="TEXT"/>
</shadow>
<block type="text_join" id="Q$XL59m.y(HLLD=Lb6bM">
<mutation items="3"/>
<value name="ADD0">
<block type="text" id="GO{s|1|cjZX5wm!s}6^U">
<field name="TEXT">==== (ID </field>
</block>
</value>
<value name="ADD1">
<block type="aprilTagDetection_getProperty_Number" id="YbKMT]1!N/1orH}f.`^%">
<field name="PROP">id</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="*DZMa]u.xVDWo54-+9Xp">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="Ej2sUV*ZReT^:zwt~{Ar">
<field name="TEXT">) Unknown</field>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addLine" id="*wewMc^H[$Rs0;EK}Ow]">
<value name="TEXT">
<shadow type="text" id="2oq;P##KvH:(,WjrIe3!">
<field name="TEXT"/>
</shadow>
<block type="text_join" id="DS^4mx0$o}XW[*EAx9g+">
<mutation items="5"/>
<value name="ADD0">
<block type="text" id="~aS!V+hMdY{-*4G3Ow%3">
<field name="TEXT">Center </field>
</block>
</value>
<value name="ADD1">
<block type="misc_formatNumber_withWidth" id="NWWJ-BvdUXyMBZ|RD`m}">
<value name="NUMBER">
<shadow type="math_number" id="WWZ1rIy[E-^rf4i5ES.w">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="Kns6PW?m}A;SO?@NVb#)">
<field name="PROP">center.x</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="Ar)`$(G]w1~mg?c!0{v;">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="ZZ080[{./+Y}t=(P1DCR">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="sPPkrRLvHyLpl?+E}RhL">
<field name="NUM">0</field>
</shadow>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="M[jW(z}Tg(pfF5o6v96v">
<field name="TEXT"/>
</block>
</value>
<value name="ADD3">
<block type="misc_formatNumber_withWidth" id="IGswFrO!Q%aCF}3x,SPE">
<value name="NUMBER">
<shadow type="math_number" id="iQ6P;:;Igrei}.mq2:.{">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="P2eT2TYX6nNBSYz7e^E)">
<field name="PROP">center.y</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="ZmOVtYIkx|@b66VSAfd]">
<field name="VAR" id="#N}rZbJ`OBBjBfneH(5M">thisDetection_1</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="MQkYmiA}ms4pA[Ifr2gb">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="*L=(!sY,[nz~xV=Ke@]u">
<field name="NUM">0</field>
</shadow>
</value>
</block>
</value>
<value name="ADD4">
<block type="text" id="lH92feGire@JDBfwGTlN">
<field name="TEXT"> (pixels)</field>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="PiXmqEM*lcO9ZlW+_zh$" collapsed="true" x="91" y="983">
<field name="NAME">AprilTag telemetry for Portal 2</field>
<comment pinned="false" h="80" w="160">Display info (using telemetry) for a recognized AprilTag.</comment>
<statement name="STACK">
<block type="variables_set" id="DA}VCy252A_3,#,cMTk^">
<field name="VAR" id="#-fO4*%%y)1L#4aoBjaQ">myAprilTagDetections_2</field>
<comment pinned="false" h="80" w="160">Get a list of AprilTag detections.</comment>
<value name="VALUE">
<block type="aprilTagProcessor_getDetections" id="zVd1v{na@3HX0wLnNORh">
<value name="APRIL_TAG_PROCESSOR">
<block type="variables_get" id="jeuTx7w(Oxp9*IOEM@xr">
<field name="VAR" id="R845[Ju$~:kO{$^,NIfo">myAprilTagProcessor_2</field>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addLine" id=",]h6ivYGPHtk{=He`7yT">
<value name="TEXT">
<shadow type="text" id="CY{8FF+XB;GP~RdfJ;!a">
<field name="TEXT"/>
</shadow>
</value>
<next>
<block type="telemetry_addTextData_All" id="y9[TlNm#f53kEfY,xE~%">
<value name="KEY">
<shadow type="text" id="qeH^YPq.MMDTbrg(z`sK">
<field name="TEXT">Portal 2 - # AprilTags Detected</field>
</shadow>
</value>
<value name="TEXT">
<shadow type="text">
<field name="TEXT"/>
</shadow>
<block type="lists_length" id="T{O#OI]0^f.)x9jPtl85">
<value name="VALUE">
<block type="variables_get" id="z4ukeRBUJVYA0=tBAem0">
<field name="VAR" id="#-fO4*%%y)1L#4aoBjaQ">myAprilTagDetections_2</field>
</block>
</value>
</block>
</value>
<next>
<block type="controls_forEach" id="3MJ,rl-DNf.u4.CMVE)j">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
<comment pinned="false" h="81" w="199">Iterate through list and call a function to display info for each recognized AprilTag.</comment>
<value name="LIST">
<block type="variables_get" id="+N^]KuU-}8BTDGRY[zUh">
<field name="VAR" id="#-fO4*%%y)1L#4aoBjaQ">myAprilTagDetections_2</field>
</block>
</value>
<statement name="DO">
<block type="comment" id="--h-(bQcy6c9DE~@D(tp">
<field name="COMMENT">Display info about the detection.</field>
<next>
<block type="telemetry_addLine" id="j-zKjg,an9FIpmyJctrS">
<value name="TEXT">
<shadow type="text" id="kc91Z}dd1H!i(6pN{In^">
<field name="TEXT"/>
</shadow>
</value>
<next>
<block type="controls_if" id="b^?yBi[(5ib*iLEpCr7F">
<mutation else="1"/>
<value name="IF0">
<block type="aprilTagDetection_getProperty_IsNotNull" id="5FRBl*.8KyB?Ke}iKjH?">
<field name="PROP">metadata</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="`tMK!YnrEd@mHAN|=a0k">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="telemetry_addLine" id="j].*_DI/li(fF=InXf/=">
<value name="TEXT">
<shadow type="text">
<field name="TEXT"/>
</shadow>
<block type="text_join" id="+or*L`H-h]qG#vZ=g24g">
<mutation items="4"/>
<value name="ADD0">
<block type="text" id="$IrOXTmtifm/k@0Bbp+|">
<field name="TEXT">==== (ID </field>
</block>
</value>
<value name="ADD1">
<block type="aprilTagDetection_getProperty_Number" id="eX9W^=nE[NL$,IY}*n,Q">
<field name="PROP">id</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="gWu]^kNjcBSR_o)u[W!d">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="`bfuJ5xQ:bv`Wl}t|,nx">
<field name="TEXT">) </field>
</block>
</value>
<value name="ADD3">
<block type="aprilTagDetection_getProperty_String" id="[c=y^F^!fs,RU(|SI#I!">
<field name="PROP">metadata.name</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="qzJ{j%F*LqY=70gy:u^4">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addLine" id="?l42bu^rFF+!ZA[gu|T5">
<value name="TEXT">
<shadow type="text">
<field name="TEXT"/>
</shadow>
<block type="text_join" id="U.lB`85,6i[nlunh+|Q,">
<mutation items="7"/>
<value name="ADD0">
<block type="text" id="5*z_]JNRDh_VCaUa1!t$">
<field name="TEXT">XYZ </field>
</block>
</value>
<value name="ADD1">
<block type="misc_formatNumber_withWidth" id="=Z,-1CpGyI32na6),TPO">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="2dkyYdo0+?$HiV}+.Qbo">
<field name="PROP">ftcPose.x</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="]XwumxfTtoX[texFZ=8#">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="aH{KmTn*hQ4I,C{[m53Z">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="tG{!;2oNlFBl[}bDAE4`">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="Tl;)ryF7L|f}muw@8NdD">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD3">
<block type="misc_formatNumber_withWidth" id=",3)Eluan#yaw(}KzSQ?a">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id=".;1-W6wgnv3:H@/%uKD|">
<field name="PROP">ftcPose.y</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="cDue%g+}Y#`+V?H(BWr[">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="^E*~f-3^25(m^{E*QU:P">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="x^pUwm2u,+{px7kDP9xY">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD4">
<block type="text" id="HvqfYcHnj6xAylnSP{}v">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD5">
<block type="misc_formatNumber_withWidth" id="?/@Qq9xx/Z!9?jN[5+-%">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="L9OR,zM4HYOu*/4mK,+C">
<field name="PROP">ftcPose.z</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="+k0piWr.K+8`yM36V$Jt">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="K/#b:$3t*!E~s(=(N!r$">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="]tAIAfwD1C0BF{YtFdP,">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD6">
<block type="text" id="y9.G(wkx%DC/@JQZZDTi">
<field name="TEXT"> (inch)</field>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addLine" id=",xj4VC^AY*{OKGGMHuig">
<value name="TEXT">
<shadow type="text">
<field name="TEXT"/>
</shadow>
<block type="text_join" id="82apN$,S:Y}g8M@6gDuW">
<mutation items="7"/>
<value name="ADD0">
<block type="text" id="@qVBz-DN{$h(UpU*MfW)">
<field name="TEXT">PRY </field>
</block>
</value>
<value name="ADD1">
<block type="misc_formatNumber_withWidth" id="phjN,6Z[]8;:OQ7VdA7H">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="x=|vs((`bmn@caF{pT*d">
<field name="PROP">ftcPose.yaw</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="Wn/10f0~3c,?0iAh!mEN">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="f)aJY,c,ee1O@sxXcXg[">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="S*}Xg},iKoeNX9^:t)BW">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="rP;vm6MTQOejszPz5qq*">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD3">
<block type="misc_formatNumber_withWidth" id="vW0y,kfJ4$k~mn(9NH=E">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id=")b~(2)h9,,qDm$,]+5F3">
<field name="PROP">ftcPose.pitch</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="F@W%AcCim1:j?(yWeQt:">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="Ww.9YO+mgu.3;Wg/WZez">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="KpT{4SGMOmS,NNFh%~_M">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD4">
<block type="text" id="w@ePXswLn^-XT!p8evP$">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD5">
<block type="misc_formatNumber_withWidth" id="ZPb.?ndpBsufMJ:,:id$">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="Yzp4vm,5g[VzP3.#(|jh">
<field name="PROP">ftcPose.roll</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="$sC3K9Xm5EE[0d.xS53k">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="4:a*Ovn*B6}Dp}Mmn*_Q">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="H_-]7e*Bu!#~lS;Tw3(#">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD6">
<block type="text" id="51z_Y^s9O@QpZpMn{]a+">
<field name="TEXT"> (deg)</field>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addLine" id="yN=Lk==Q?1:#bG.s~Vi{">
<value name="TEXT">
<shadow type="text">
<field name="TEXT">text</field>
</shadow>
<block type="text_join" id="eKWMc2V:ZE5?nGTl!_A8">
<mutation items="7"/>
<value name="ADD0">
<block type="text" id="^A}r;HCHPCj]EQ,N}~|(">
<field name="TEXT">RBE </field>
</block>
</value>
<value name="ADD1">
<block type="misc_formatNumber_withWidth" id="?C8j:gwo%BgZ?O7^|rps">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="GQ_)NU*CA#?r*~y+PHmC">
<field name="PROP">ftcPose.range</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="8eq)o+xN1[i*.k*es-dM">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="1)-1N;!0de~@S}qgGKC#">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="Njyh;/bOs{m/6Ch)`PVo">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="mDRVQno68b18BBK[H/$G">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD3">
<block type="misc_formatNumber_withWidth" id=")=xYAw7S~$^O(tuh*@*^">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="]ZG|=T|p1uP^VHS}8L}9">
<field name="PROP">ftcPose.bearing</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="x$0Ax}bFZYk_F@XD,wY,">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="wMDM(L:R.^_Y9?Pp,$vn">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="k+U:^V8LW|)(l7(TTB%M">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD4">
<block type="text" id="v=kVdY1[E:ct`L%@4c~O">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD5">
<block type="misc_formatNumber_withWidth" id="$l+F2UR0JyWev!32ulg2">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="X?T}}G#n%*z1`UyK2w~]">
<field name="PROP">ftcPose.elevation</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="|a1^4*[.Kf|ZQp[kQm3$">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="m!0^k/oW$|q18Iqhy;^f">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="bmU7[M$#d%u,5ytqaD[W">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD6">
<block type="text" id="1D7[BYf4bK]$x/!^w(yS">
<field name="TEXT"> (inch, deg, deg)</field>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
<statement name="ELSE">
<block type="telemetry_addLine" id="lZ3MU=#2#~]uaN}hVt2o">
<value name="TEXT">
<shadow type="text">
<field name="TEXT"/>
</shadow>
<block type="text_join" id="y@V1;c?q?e|!Xr6(%eF}">
<mutation items="3"/>
<value name="ADD0">
<block type="text" id="x-1MH?pNE|ql~hR[M8X}">
<field name="TEXT">==== (ID </field>
</block>
</value>
<value name="ADD1">
<block type="aprilTagDetection_getProperty_Number" id="*CzHk6}%nW#gJB^,f4J.">
<field name="PROP">id</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="^cQRp|hZG:|S4d3ah8=;">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="9KyX1O:A+aV[O[ik)#^5">
<field name="TEXT">) Unknown</field>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addLine" id="GmxN2XsIa3(d!GD2yYvU">
<value name="TEXT">
<shadow type="text">
<field name="TEXT"/>
</shadow>
<block type="text_join" id="DB[5|#sKwXY50MciHuwO">
<mutation items="5"/>
<value name="ADD0">
<block type="text" id="kU[D!6#]j~?wO_y={TLD">
<field name="TEXT">Center </field>
</block>
</value>
<value name="ADD1">
<block type="misc_formatNumber_withWidth" id="sdBI1~-0L{e1{k-$w0j*">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id=";o,O/*^4jG0[-E*5F_~H">
<field name="PROP">center.x</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="}/K/,VnEc[MXICtLk}-o">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="LkLlYm.oV{s[q.^v|}R?">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="R@.;}Mg0h+A1p{{.p@pA">
<field name="NUM">0</field>
</shadow>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="ll{YV+3HC!wtLQ)thc1K">
<field name="TEXT"/>
</block>
</value>
<value name="ADD3">
<block type="misc_formatNumber_withWidth" id="QYTB@h1TZLyYw%!sJx1g">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id=")wjxde#{Ar7lpS},p[^_">
<field name="PROP">center.y</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="neD2mo|vByu?k6mD#{iY">
<field name="VAR" id="vP~n9zf$lW%hYD/C.j_-">thisDetection_2</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="F%,bq`Ha#n!wAhhbA,{x">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="Tu..WrltN89hBjvwH;%/">
<field name="NUM">0</field>
</shadow>
</value>
</block>
</value>
<value name="ADD4">
<block type="text" id="N8F{IAKp]!-?$#@+BTC7">
<field name="TEXT"> (pixels)</field>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="nv/?U1C{Q{J_-U:Rh$uJ" collapsed="true" x="166" y="1059">
<field name="NAME">AprilTag telemetry for Portal 3</field>
<comment pinned="false" h="80" w="160">Display info (using telemetry) for a recognized AprilTag.</comment>
<statement name="STACK">
<block type="variables_set" id="n,,~W_^-HH[nJI6;Mi[C">
<field name="VAR" id="gKb]O2H[9HgH6GB,LAf8">myAprilTagDetections_3</field>
<comment pinned="false" h="80" w="160">Get a list of AprilTag detections.</comment>
<value name="VALUE">
<block type="aprilTagProcessor_getDetections" id="s0T$~eGs~7/mLSr#5Yz+">
<value name="APRIL_TAG_PROCESSOR">
<block type="variables_get" id="Z;$Rol-dFnEx0+uD0*eP">
<field name="VAR" id="=(^@|Tz:xjvrbiC~Y964">myAprilTagProcessor_3</field>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addLine" id="HBJxqBzdE[)$z~3W~]Zf">
<value name="TEXT">
<shadow type="text" id="8rUU+/s2#sREWs,oObs:">
<field name="TEXT"/>
</shadow>
</value>
<next>
<block type="telemetry_addTextData_All" id="po,Ez$qppP.oL@_Y,t?g">
<value name="KEY">
<shadow type="text" id="H/^rz|fCex*-$PabaJBL">
<field name="TEXT">Portal 3 - # AprilTags Detected</field>
</shadow>
</value>
<value name="TEXT">
<shadow type="text">
<field name="TEXT"/>
</shadow>
<block type="lists_length" id="KtC,vKMX}X+|u%Sj`xsM">
<value name="VALUE">
<block type="variables_get" id="}MAy)r/3jb_b}MO_UwMO">
<field name="VAR" id="gKb]O2H[9HgH6GB,LAf8">myAprilTagDetections_3</field>
</block>
</value>
</block>
</value>
<next>
<block type="controls_forEach" id="!lqX+%RKH(gCX+SW(]y2">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
<comment pinned="false" h="81" w="199">Iterate through list and call a function to display info for each recognized AprilTag.</comment>
<value name="LIST">
<block type="variables_get" id="z##V1MfIl96/!}ZW/#XS">
<field name="VAR" id="gKb]O2H[9HgH6GB,LAf8">myAprilTagDetections_3</field>
</block>
</value>
<statement name="DO">
<block type="comment" id="OPTw?(Bm1UuO[4K;LkUI">
<field name="COMMENT">Display info about the detection.</field>
<next>
<block type="telemetry_addLine" id="okH}OpHegZi)oeMvy5uE">
<value name="TEXT">
<shadow type="text" id="*v*Xv)9EzJ-{oyA}f4wt">
<field name="TEXT"/>
</shadow>
</value>
<next>
<block type="controls_if" id="u^][S#OpE,57,8XTa;we">
<mutation else="1"/>
<value name="IF0">
<block type="aprilTagDetection_getProperty_IsNotNull" id="YPvK!5Olbcn!QLuE$FYp">
<field name="PROP">metadata</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="L0RI/,-J|b]#go9$6:aV">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="telemetry_addLine" id="FC*5/M$s:]!r|)3^hWuH">
<value name="TEXT">
<shadow type="text">
<field name="TEXT"/>
</shadow>
<block type="text_join" id="HK68qb;t%QhJVx+;_jFN">
<mutation items="4"/>
<value name="ADD0">
<block type="text" id=":W9iGt25_j22}u-%D=UE">
<field name="TEXT">==== (ID </field>
</block>
</value>
<value name="ADD1">
<block type="aprilTagDetection_getProperty_Number" id="r%,^N;b2.r)48~VfdD4s">
<field name="PROP">id</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="[eYo5Ns1,J%dv!u-H:z2">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="=%])rAx_^r^l:5QdGdPW">
<field name="TEXT">) </field>
</block>
</value>
<value name="ADD3">
<block type="aprilTagDetection_getProperty_String" id="g0=B}.jdq%]vLqV`{$u|">
<field name="PROP">metadata.name</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="nb3Q+Q`Da9TmgNyeX~QW">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addLine" id="YB(wtpvmVL}tzhx]Yz}k">
<value name="TEXT">
<shadow type="text">
<field name="TEXT"/>
</shadow>
<block type="text_join" id="sTc^caBzW7WY}}gT}u_Y">
<mutation items="7"/>
<value name="ADD0">
<block type="text" id="E`GTdd$au@VuSEGp3b_%">
<field name="TEXT">XYZ </field>
</block>
</value>
<value name="ADD1">
<block type="misc_formatNumber_withWidth" id="D0%08~cmH{as=8E6c$G,">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="}b,1$L{{$bGn@LiLWgaq">
<field name="PROP">ftcPose.x</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="Q9((6+^x}9qT|91f(?}l">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="Vo6#g~c=lm)Ly%j{Cyh?">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="n=F:gTs#nTinD-@RXSXn">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="qrIcKCj9+l/wu,r[C,u;">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD3">
<block type="misc_formatNumber_withWidth" id="#`Nczb5,ww-=D{vLBw`W">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="4O0JDu@YqNaiIDfba:HM">
<field name="PROP">ftcPose.y</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="*Pc4[$S`:pD[RgwYKttr">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="m*0p+Y_h#wg5L5uYv1^7">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="u{L:}e3,09S97{zRP9W~">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD4">
<block type="text" id="Mwe0eL9))RQ34DSMy]?B">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD5">
<block type="misc_formatNumber_withWidth" id="UV,+Hm#fx6U1,nxSLH+H">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="ZzxOj{~J~MHwrPPBR(.V">
<field name="PROP">ftcPose.z</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="%l^:]W=+pCsBnva_8GuL">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="E${:N*$?0WX)K3W9G1iK">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="p0?xeH#q1gqfKmnILv[^">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD6">
<block type="text" id=",Pn8pQDVb:(gl|xkVaSP">
<field name="TEXT"> (inch)</field>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addLine" id="s%X0+IRv|84Rqq6kLeA}">
<value name="TEXT">
<shadow type="text">
<field name="TEXT"/>
</shadow>
<block type="text_join" id=":^|=[cizs6~wgfxWnO0+">
<mutation items="7"/>
<value name="ADD0">
<block type="text" id="0-!!9yoS/+8=kOw_VD5V">
<field name="TEXT">PRY </field>
</block>
</value>
<value name="ADD1">
<block type="misc_formatNumber_withWidth" id="d}.9T{`s!uRq@oHQH0[W">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="jz3g*]u4lIKR,?r[rn*h">
<field name="PROP">ftcPose.yaw</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="yHW!QkR4+KNCE;KVFo`j">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="-hv2tr!PkGBC/zi.A1:2">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id=",sBXg/pHAE^S7h*B.rng">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="fnuQIa*i4rj1(vaTy.@s">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD3">
<block type="misc_formatNumber_withWidth" id="L0hGCF9}m|SMw#jV{j`0">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="!eES5WaVE(sn$kqZ/DMU">
<field name="PROP">ftcPose.pitch</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="N1v8!_Zcs^+Pl-}*e|iT">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="{nkkeR0av~:Nhu;@iH{q">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="y$|!=!R=PytqmeN}Fi-S">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD4">
<block type="text" id="PdzQxonZFvtM14x]=nu:">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD5">
<block type="misc_formatNumber_withWidth" id="$,Yrj.x)N?)E,JzV{DpI">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="BxYLF8xV;j[{//D=7,@E">
<field name="PROP">ftcPose.roll</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="V5YP0;{+q4z8^u%~O@Dd">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="miixpz{:AGKtCuzTQpU}">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id=";_~QzopQT@%m$aA|2yyg">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD6">
<block type="text" id="f{.._`D%Axn,M`~k_d}U">
<field name="TEXT"> (deg)</field>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addLine" id="=r;JYC*WNFAJZxSqEJC`">
<value name="TEXT">
<shadow type="text">
<field name="TEXT">text</field>
</shadow>
<block type="text_join" id="yR-(zy[2yX@Z@WsA25]I">
<mutation items="7"/>
<value name="ADD0">
<block type="text" id="#eUFBj7Yi=9Ia2nNr-e?">
<field name="TEXT">RBE </field>
</block>
</value>
<value name="ADD1">
<block type="misc_formatNumber_withWidth" id="f]K+24oFKVRx^(=F^JJC">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="bV?!+2:sVMt;TD]wzqTE">
<field name="PROP">ftcPose.range</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="D(YjcR2#~nQkB{FrKbss">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id=".6CD0R/;0xHfoq6#jCDq">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="6gveE_OM+#$~uSGV{?gh">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="Ve2`H@Qbv:q+yFg5oV!J">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD3">
<block type="misc_formatNumber_withWidth" id="/#)4lD_tUp?-Ch-6m%zF">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="|;wC2~!D]_Oj7~UBCLQY">
<field name="PROP">ftcPose.bearing</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="/cB)3ni/)D(0]A6#}De;">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="@$VLg]u2y}aD$gvWJsUm">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="D;FZX/J}Rg=#7:q/d0mS">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD4">
<block type="text" id="{se2d(U+A_RnHPtzXbIy">
<field name="TEXT"> </field>
</block>
</value>
<value name="ADD5">
<block type="misc_formatNumber_withWidth" id="X0_78Is8t}-PpnH.k+Hd">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="iz#Cx8fSDr(*os`{43Tw">
<field name="PROP">ftcPose.elevation</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="(t;Ss:N}4*5oBI2%^jR/">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="OOO(gz5Y@8uX^iB@C(Q7">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="2(H=FU9{[nw;V1]U9{2@">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="ADD6">
<block type="text" id="gZO}-ATMX_y$ogD[,3%.">
<field name="TEXT"> (inch, deg, deg)</field>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
<statement name="ELSE">
<block type="telemetry_addLine" id="(5|?42J}kSumv@H/+?{V">
<value name="TEXT">
<shadow type="text">
<field name="TEXT"/>
</shadow>
<block type="text_join" id="w}O_^O!#otSYuV(Y0wr{">
<mutation items="3"/>
<value name="ADD0">
<block type="text" id="h)ESoU!MW2J=f37ZGB{:">
<field name="TEXT">==== (ID </field>
</block>
</value>
<value name="ADD1">
<block type="aprilTagDetection_getProperty_Number" id="Rb[Ziplt?+y^HODK^lHC">
<field name="PROP">id</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="0=ruIsDd%h3[i*m[vmF^">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="_kd8M3*}xQHLF)*aL6_q">
<field name="TEXT">) Unknown</field>
</block>
</value>
</block>
</value>
<next>
<block type="telemetry_addLine" id="#wUL7%RlL-OS;OQO$,gA">
<value name="TEXT">
<shadow type="text">
<field name="TEXT"/>
</shadow>
<block type="text_join" id="Xx-ZrcJ~3hRi!aNEwG3k">
<mutation items="5"/>
<value name="ADD0">
<block type="text" id="y;-#8a_;O@gv:LOA`BzE">
<field name="TEXT">Center </field>
</block>
</value>
<value name="ADD1">
<block type="misc_formatNumber_withWidth" id="kX+%L$%0Y$QUE]m2sHrs">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="MQ/slU#oo8e/^yr906}V">
<field name="PROP">center.x</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="|Cp3dyF~1AtRVD,~fPl4">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="7A~Y8NLP+2.i4-*R,f/8">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="xR+Hz(mUFy61Q$PmW`c6">
<field name="NUM">0</field>
</shadow>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="eb9Rg6^+JaLRu0)/XBHN">
<field name="TEXT"/>
</block>
</value>
<value name="ADD3">
<block type="misc_formatNumber_withWidth" id="/X$G`%nZo[a0~3OF`|ZG">
<value name="NUMBER">
<shadow type="math_number">
<field name="NUM">3.14159265</field>
</shadow>
<block type="aprilTagDetection_getProperty_Number" id="lX#eA!=`CJ`hE9RX`M#A">
<field name="PROP">center.y</field>
<value name="APRIL_TAG_DETECTION">
<block type="variables_get" id="e?y`x8)TxGg,t1bImfUS">
<field name="VAR" id="M[;eWz=hk$Aa_?=Id[gW">thisDetection_3</field>
</block>
</value>
</block>
</value>
<value name="WIDTH">
<shadow type="math_number" id="NKvXfo`PAwd*yFD*r|Na">
<field name="NUM">6</field>
</shadow>
</value>
<value name="PRECISION">
<shadow type="math_number" id="A0z~/|x=x,aOFqMGvZ6M">
<field name="NUM">0</field>
</shadow>
</value>
</block>
</value>
<value name="ADD4">
<block type="text" id="%}T9.#d8%Yt^b]SGHr9*">
<field name="TEXT"> (pixels)</field>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="kZY3mh[z77]eY#o88#s4" collapsed="true" x="261" y="1143">
<field name="NAME">AprilTag telemetry legend</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="telemetry_addLine" id="3N{F`jhy%rx/{Xex;5zu">
<value name="TEXT">
<shadow type="text" id="ds{Hr}!u1tUZ{*]D~==j">
<field name="TEXT"/>
</shadow>
</value>
<next>
<block type="telemetry_addLine" id="[:W.s1Ok!]MP)3.3IU{#">
<value name="TEXT">
<shadow type="text" id="Pzz,~#oj]g6(p8-kE+HJ">
<field name="TEXT">key:</field>
</shadow>
</value>
<next>
<block type="telemetry_addLine" id="(z3|~vT*DZX[fOyQ2%S[">
<value name="TEXT">
<shadow type="text" id="M=~-,X%t3PZW:?]x+FCV">
<field name="TEXT">XYZ = X (Right), Y (Forward), Z (Up) dist.</field>
</shadow>
</value>
<next>
<block type="telemetry_addLine" id="M,AbdMv6W{1dFQc)zQt~">
<value name="TEXT">
<shadow type="text" id="`KTr5c!E2VUU.9*_77qL">
<field name="TEXT">PRY = Pitch, Roll &amp; Yaw (XYZ Rotation)</field>
</shadow>
</value>
<next>
<block type="telemetry_addLine" id="uuC6(PL0R.pO7.AFo]db">
<value name="TEXT">
<shadow type="text" id="^GlP*DEB!=^Mvq=zsRKv">
<field name="TEXT">RBE = Range, Bearing &amp; Elevation</field>
</shadow>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</xml>
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<Extra>
<OpModeMeta flavor="TELEOP" group="" autoTransition="" />
<Enabled value="true" />
</Extra>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment