+
    >Rj8
                        R t ^ RIt^ RIt]P                  P                  ]P                  P                  4      t]! RRRRRR]P                  ! ^d^m4      R7      t
]! RRRRRR]P                  ! ^^4      R7      t]! RRRRRR]P                  ! ^^4      R7      t]P                  ! ^^4      t]P                  ! ^^4      t]! R	RRRRR]P                  ! ^^4      R7      t]
]]].tR
 tR t]R8X  d   ]! R]! 4       '       d   RMR4       R# R# )uR  CANONICAL ArUco board registry for the whole system (single source of truth — import this, never
redefine constants inline). All boards: cv2.aruco.DICT_6X6_250. ID ALLOCATIONS (must never overlap):
  100-108  smith300 arm base board (this file)
  190-198  UMI gripper cube TOP    (this file)
  200-208  UMI gripper cube BACK   (this file)
  217-225  fiducial exoskeleton arm 1   (exo_redo/ExoConfigs/panda_exo.py — NOT ours to move)
  226-234  fiducial exoskeleton arm 2   (exo_redo)
  240,241  DEPRECATED UMI singles (2026-07-07) — do not reuse until physical sheets confirmed destroyed
Narm_baseg{Gz?g{Gzt?      T@)nameshapemarker_msep_mmargin_msheet_mmidsumi_topumi_backumi_v2c                    \         P                  P                  V R,          V R,          V R,          \        V R,          4      # )z7cv2.aruco.GridBoard for a spec dict from this registry.r   r   r   r
   )cv2aruco	GridBoardDICT)specs   &ar_view/aruco_boards.pyboardr   "   s3    99tG}d:.>WtUYZ_U`aa    c                  J   \          U u/ uF*  q R ,          \        V R,          P                  4       4      bK,  	  pp \        \        P                  4       4      VR&   \        \        P                  4       4      VR&   \        V4      pRp\        \        V4      4       F~  p\        V^,           \        V4      4       F[  pWV,          ,          WV,          ,          ,          pV'       g   K0  Rp\        RW$,           RW%,           R\        V4       24       K]  	  K  	  V# u up i )	r   r
   exo_arm1exo_arm2TFzOVERLAP z vs z: )

ALL_BOARDSsettolistEXO_ARM1_IDSEXO_ARM2_IDSlistrangelenprintsorted)sgroupsnamesokijinters          r   check_no_overlapsr+   '   s    9CDAiQuX__.//FD\0023F:\0023F:LE	B3u:q1uc%j)A8$vAh'77Eu
$uxj6%=/JK	 *  I Es   0D __main__zoverlap check:zPASS - all ID ranges disjointFAIL)   r.   )   r.   )g      ^@r   )__doc__numpynpr   r   getPredefinedDictionaryDICT_6X6_250r   dictarangeARM_BASEUMI_TOPUMI_BACKr   r   UMI_V2r   r   r+   __name__r"    r   r   <module>r=      s(    

yy(()?)?@ZvU299S#3FH IVe5"))C2EGZvU299S#3FHyyc"yyc"	86E}"))C:M
O
 62
b
 z	
?P?R?R;X^_ r   