semvec/pypi-packages huggingface dataset:
kicad-to-openpnp 0.2.0
Transform a KiCad footprint into a OpenPnP package
License: MIT
Requires Python: >=3.10

# kicad-to-openpnp

`kicad-to-openpnp` helps you convert your KiCad project into a set of full-fledged
OpenPnP packages and parts, including pin definitions, as well as dimensions
taken from 3D models of the footprints.

It does *not* replace OpenPnP's KiCad position file import process, it enhances it.

While this project is still WIP, it's been used in several successful assemblies so far.

## Installation

Using [pipx](https://pipx.pypa.io/stable/) ([installation instructions](https://pipx.pypa.io/stable/installation/)) is
recommended:

```sh
pipx install --system-site-packages kicad-to-openpnp
```

(`--system-site-packages` is required due to how KiCad distributes its Python bindings.)

Alternatively, for the latest of the latest, you can try installing directly from GitHub:

```sh
pipx install --system-site-packages git+https://github.com/mmalecki/kicad-to-openpnp.git
```

## Usage

Assuming your board file is called `board.kicad_pcb`, and you're in your `.openpnp2` directory,
you can run the following two commands to generate your new `packages.xml` and `parts.xml`:

```sh
kicad-board-to-openpnp-packages --board board.kicad_pcb --join packages.xml > packages.new.xml
kicad-board-to-openpnp-parts --board board.kicad_pcb --join parts.xml > parts.new.xml
```

The `--join` option will preserve your previous packages and parts and add them without modification
to your new files. An option to allow for updating old entities based on new findings is in the works.

Therefore, if you just want to look at what the tool would output for your current board only:

```sh
kicad-board-to-openpnp-packages --board board.kicad_pcb
kicad-board-to-openpnp-parts --board board.kicad_pcb
```

If the new package and part files look correct, and your OpenPnP application is closed,
you can now move them in place of the old files (making backups beforehand, if you'd like):

```sh
mv packages.new.xml packages.xml
mv parts.new.xml parts.xml
```

## Why and how?
I found inputting part heights, sizes and pads into OpenPnP to be a rather large time commitment,
so I begun looking for ways to automate that.  

I quickly realized that KiCad footprints don't actually contain part body size information.  
However, manufacturers now happily publish STEP files of their products, and
I'm yet to find a model which would be so wildly inaccurate that it would be a problem for
PnP process (0.1 ~ 0.2 mm variations are typical, though).

I then used the KiCad Python bindings to read in the pads and 3D models from the footprints
(accounting for rotation), and CadQuery to load the models and measure their bounding boxes.
This turned out to work. I was able to run several PnP jobs using the data generated by these
here scripts.