"""Generate an ArUco fiducial board sized to the base plate (160mm), matching the exo config style
(DICT_6X6_250, markerLength:markerSeparation = 0.8:0.2). Outputs a print-ready PNG."""
import cv2, numpy as np
from cv2 import aruco

BOARD_MM = 160.0            # base_cube.001 plate is 160x160mm
GRID = (3, 3)              # cols, rows
DICT = aruco.DICT_6X6_250
IDS = np.arange(100, 100 + GRID[0] * GRID[1], dtype=np.int32)   # fresh IDs 300..308

d = aruco.getPredefinedDictionary(DICT)
unit = GRID[0] * 0.8 + (GRID[0] - 1) * 0.2                      # relative units across the row
marker_mm = 0.8 * BOARD_MM / unit
sep_mm = 0.2 * BOARD_MM / unit
board = aruco.GridBoard(GRID, marker_mm, sep_mm, d, IDS)
ppm = 12                                                        # px per mm
img = board.generateImage((int(BOARD_MM * ppm), int(BOARD_MM * ppm)), marginSize=0)
cv2.imwrite("assets/aruco_base_board.png", img)
print(f"board 160mm 3x3 DICT_6X6_250 ids={IDS.tolist()} marker={marker_mm:.1f}mm sep={sep_mm:.1f}mm -> assets/aruco_base_board.png")
