assets/screenshots | ||
examples | ||
src | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
README.md |
A tool to send lines to a series of laser projectors (showlasers). Uses the 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 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) the lines are generated by means of a sequence of Python scripts.
Usage
cargo run --bin render_lines_gui