laserspace/README.md
Ruben van de Ven 0b9d4d12f7 Simpler default
2025-08-04 16:01:23 +02:00

36 lines
2 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 an adaption of the [laser_frame_stream_gui.rs example code](https://github.com/nannou-org/nannou/blob/master/examples/laser/laser_frame_stream.rs) to enable 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)
<video controls="" src="/security_vision/laserspace/raw/branch/main/assets/screenshots/laserspace-demo.mp4">
<strong>Your browser does not support the HTML5 "video" tag.</strong>
</video>
## Usage
```bash
cargo run ZMQ_QUEUE_ADDRESS
```