Files
orisys-sensor-design/sensors/finger-xynova/r01/design.yaml
T
2026-09-23 10:01:08 +08:00

101 lines
3.8 KiB
YAML

sensor: finger-xynova
revision: r01
status: draft
# Authoring unit in Blender (mm). Export converts using meters_per_source_unit.
authoring_unit: mm
meters_per_source_unit: 0.001
source_blend: source/geometry.blend
# Expected sensing surface topology for r01 (from shipped 30fps-0703 runtime).
# First exports from geometry.blend may differ until topology is locked.
expected:
sensing_vertices: 2595
sensing_triangles: 5005
frames:
sensor: origin_sensor
objects:
sensing_surface: sensing_surface
cam_sensor: cam_sensor
origin_sensor: origin_sensor
# Headless colored-patch texture generation (`orisys-design texture`).
# UV unwrapping is still done in the Blender GUI: the headless run consumes the
# UV maps already stored in source_blend and never creates or unwraps one.
# One PNG/SVG/PDF set is written per UV map below. All maps and formats share
# the settings and patch colours, so they differ only by UV layout.
# These are the revision defaults; CLI flags override every value.
texture_patch:
mesh: sensing_surface
camera: cam_sensor
uv_outputs:
produce: patch_texture_produce.png # hardware production layout
compute: patch_texture_compute.png # compute/runtime layout
width: 3700 # 1850*2
height: 3280 # 1640*2
# Camera frame is square (1000x1000), so equal counts make camera-space
# elements square. The original 80x45 grid was copied from a 16:9 camera.
nx: 80
ny: 80
color_r: 0.05
edge_sample_grid: 5
seed: 7 # fixed so PNG/SVG/PDF share one reproducible colour set
vector:
width_mm: 18.5 # editable SVG/PDF production page width
height_mm: 16.4 # editable SVG/PDF production page height
cross:
enabled: true
length_px: 40
thickness_px: 3
color: [1.0, 0.0, 0.0, 1.0] # red reference cross
# Post-generation printability inspection (`orisys-design inspect`). Advisory
# only: it reports a verdict but never blocks generation or changes exit codes.
# Millimetres are measured on the vector page declared above.
printability:
printer_dpi: 600 # target UV printer resolution
min_dots: 2 # printer dots required across the smallest feature
min_feature_mm: 0.10 # smallest acceptable feature width
min_edge_mm: 0.05 # shortest acceptable polygon edge
max_sliver_ratio: 4.0 # longest edge / minimum width
min_patch_area_mm2: 1.0e-4 # area above which a polygon is a material feature
# Optical stack above the markers, ordered from the camera inward.
# The markers sit on the sensing surface underneath these layers, so their image
# is displaced relative to the straight-line pinhole model.
#
# ior values are LITERATURE ASSUMPTIONS, not measurements - that is what
# ior_source records, so an assumed index can never pass for a measured one.
# Replace them with measured values when available; nothing else needs to change.
optics:
marker_surface: sensing_surface
layers:
# Solids, not surface pairs: `shell` and `rubber-1` are each one closed mesh,
# so the ray enters and leaves the same object.
# Stack: camera > shell > rubber-1 > sensing_surface > rubber-2.
# rubber-2 is BEHIND the markers, so it does not refract camera light and is
# deliberately not a layer.
- name: plastic_shell
solid: shell
ior: 1.59
ior_source: assumed_pc_literature
- name: clear_rubber
solid: rubber-1
ior: 1.43
ior_source: assumed_silicone_literature
collections:
frames: FRAMES
export_compute: EXPORT_COMPUTE
assembly: ASSEMBLY
design_sim: DESIGN_SIM
exclude: EXCLUDE
notes: |
Canonical source is geometry.blend with named collections and objects.
Compute export uses sensing_surface + cam_sensor relative to origin_sensor.
Studio observation cameras are derived from mesh bounds; no cam_viz required.