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) ## Usage ```bash cargo run ZMQ_QUEUE_ADDRESS ```