🃏 The 10 weirdest things real-world boards have taught this router #464
drandyhaas
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
We stress-test the autorouter against a big pile of real open-source KiCad boards — hunted specifically for their weird geometry — and it turns out the physical world of PCBs is deeply cursed. Nearly every item below started life as a bug report, a phantom DRC, or a "wait, that's legal?" moment. In roughly ascending order of "excuse me?":
10. Pads placed at jaunty non-90° angles
Most pads are politely axis-aligned. Then someone rotates a footprint 37° for board-fit and the pad rectangle is now a diamond. The parser has to carry a residual
rect_rotationand rotate the obstacle/DRC geometry to match, or it models a rectangle the copper isn't actually in. (check_pads.pyexists specifically to catch mis-modeled overlapping pads before we even start routing.)9. Drill holes that don't live under their own pad
You'd assume the hole is in the middle of the pad. On castellated module paddles it isn't —
(drill (offset x y))— the copper center is one place, the hole is off to the side. Confuse the two and you either drill through copper or leave a hole floating in space.8. Card-edge gold fingers
PCIe cards, SODIMMs, Game Boy cartridges: copper deliberately run to the very edge of the board so it can be jammed into a slot and rubbed thousands of times. The router's entire worldview is "keep copper away from the board edge," and these boards go "no — route copper at the edge, that's the whole point."
7. Castellated half-holes
Modules (nice!nano, ESP stamps) meant to be soldered onto a carrier via half-vias sliced straight down the middle by the board outline. Half a plated hole, hanging off the cliff. Both the pad and the drill are bisected by the edge, on purpose.
6. Copper that IS the component
Sometimes the trace doesn't connect the part — the trace is the part. PCB coils, planar transformers, motor stators, resistive heaters, current shunts made of copper geometry, and (a real corpus board) a CubeSat solar panel with an embedded PCB magnetorquer coil — the copper spiral is the actuator. The router's one job here is: do not "optimize" it.
5. Boards that aren't remotely rectangular
Every router quietly assumes the board is a tidy rectangle with copper kept politely inside it. Then a wearable shows up shaped like a crescent — a 166-point free-form
gr_polycurve of arcs and notches, with mounting holes punched through the middle. The outline itself is perfectly legal; the pain is everything downstream that assumed four straight edges. Worse: one code path read the curvy outline just fine, while another — the one building the board live inside the GUI — didn't recognize a polygon-shaped outline at all, so it silently fell back to the only Edge.Cuts shape it did understand: a lone mounting-hole circle. It concluded the entire board was ~2 mm across, decided every component was floating off in the void, and then face-planted trying to route to parts it now thought were off-board. It turns out "where is the board, exactly?" has a surprising number of wrong answers.4. Net-ties: pads that are SUPPOSED to touch
Kelvin/4-wire sense taps, zero-ohm jumpers, star-ground ties: two different nets whose copper deliberately touches at one footprint, and it is 100% legal. The router has to route through the tie the way the part intends, and DRC has to not scream "SHORT!" here — while still screaming about every accidental short everywhere else.
3. NPTH slots are secretly "the board edge"
To KiCad, a non-plated slot milled through the middle of the board is board edge — copper must keep full edge-clearance from it, and it carves keep-outs into plane fills. So a hole in the center of the board is, geometrically, the edge of the board. Sure. Makes sense. Love that for us.
2. Components parked ~4 inches off the board
Real boards get captured mid-layout, with a TO-220 regulator sitting 117 mm above the outline, just vibing in the void (looking at you, Apple-1 replica). Route naively and the router faithfully reserves routing space out there and inflates the whole grid. The right move is to treat clearly-off-board parts as unreachable and ignore them — which took its own set of fixes to get right.
1. Pads that are a different shape on every layer
The reigning champion of cursed geometry: padstacks. One pad, oval 2.54 × 1.27 mm on the top layer, a bigger custom rounded-rect 2.64 × 1.78 mm on the bottom (again, the Apple-1's DIP pads). Read only the top size and the router cheerfully drops a via 0.027 mm from bottom-layer copper it never knew existed. This one hid thousands of real DRC violations from our own checker until we taught the parser to model every layer of the stack — the checker was calling boards clean that KiCad rightly flagged.
Honorable mentions from the "who hurt you" file: nixie tubes with radial pin circles at 170 V, diode-matrix ROMs (hundreds of identical through-hole cells wire-OR'd into a grid), a 676-ball BGA on an 8-layer card, a 400-pin Zynq escaped on two layers, plated rings that don't quite span their own drill (so they're secretly NPTH), and boards smaller than a postage stamp where edge-clearance eats the entire routable area.
The wonderful thing about open hardware is that people build everything, and every strange choice is a real design someone actually shipped. So keep 'em coming — the weirder your board, the better it makes the router. 🎛️
(If you've got a board that breaks the router in a new and exciting way, that's not a bug, that's a donation. Drop it in an issue.)
All reactions