laserspace/README.md
Ruben van de Ven dbb31c5bcb Screenshots
2025-07-10 13:37:20 +02:00

32 lines
No EOL
1.7 KiB
Markdown

A tool to send lines to a series of laser projectors (showlasers). Uses the [nannou](https://github.com/nannou-org/nannou) creative coding framework for laser control, and optimisation of the lines before sending them to the DAC.
It's still a bit of a hacked-together tool. But it works for my case.
## Features
* Receive lines over ZMQ.
* Safety feature: stop the output if no lines are received
* Clipping mask, to mark laser-free zones
* Homography by simply dragging the corners of the projection area/corner-pin.
* Change intensity of projected lines.
* Geometric (pincushion/barrel) correction for x and y axes independently
* Particularly x-distortion tends to be present in laser systems due to the independent x/y galvanometer setup.
* Configuration can be saved to a JSON file.
* Many of the settings can be configured per DAC.
* Some pre-defined shapes for debugging purposes.
## Basic idea
This tool was initially made for projection mapping of a large space, which required multiple lasers. Received lines are assumed to be in world-space coordinates. The space is mapped to distinct laser DACs by means of homography/corner-pinning and various geometric correction parameters.
By using ZMQ as input, the mapping of the lines is decoupled from the generation code. In my own setup ([trap](https://git.rubenvandeven.com/security_vision/trap)) the lines are generated by means of a sequence of Python scripts.
![Laser DAC controls](assets/screenshots/laserspace_screenshot_02.png)
![Full canvas](assets/screenshots/laserspace_screenshot_01.png)
![Laser preview](assets/screenshots/laserspace_screenshot_03.png)
## Usage
```bash
cargo run --bin render_lines_gui
```