Horus is a multi-platform software designed to control open source 3D scanners. It has a graphical interface for managing communications, capture and syncing of data, image processing, the calibration processes and generation and visualisation of point clouds.
It has been developed and optimised for GNU/Linux1 Ubuntu2. It has also been tested on Windows and Mac will also be supported. The software has been coded in Python3. It uses wxPython4, NumPy5, SciPy6, Matplotlib7, OpenGL8 and an optimised OpenCV9 version for Linux.
Horus is open source software. The source code has been published on GitHub and released under the GPL v2 licence10. This licence guarantees the fundamental freedoms associated with the use of open source software. Any code released under this licence automatically becomes part of the Technological Heritage of Humanity.
Horus can be installed on Ubuntu, Windows and Mac.
Please follow these instructions on how to install the application: Installation.
First steps with Horus
The first time you start Horus, a welcome message appears.
This window provides shortcuts to the main functions such as launching the wizard, scanning or accessing the advanced configuration panel. It also includes a quick access to recently used models (point clouds or meshes).
The main window has a menu bar, a tool bar and a dropdown menu to switch between workbenches.
The software includes the option to load and save profiles, as well as to reset the default parameters. It also provides access to the preferences where the user can adjust the connection parameters, load the firmware onto the board or select the application language.
Launching the wizard
The wizard guides the user through a simplified version of the processes of connecting, calibrating and tuning the scanning parameters.
This section describes the control and calibration workbenches.
This workbench permits the free control of all the scanner components independently: the camera, the lasers and the stepper motor. It also allows the reading of the LDR sensors, a feature added to implement in the future an intelligent adjustment of the camera settings.
The camera control section allows to change the following parameters:
- Brightness: image luminosity
- Contrast: relative difference of the image’s intensity
- Saturation: colour intensity of the image
- Exposure: opening time of the camera lens in milliseconds
- Frame rate: number of images captured per second
- Resolution: size of the image, always in a 4:3 relation
- Distortion: permits the correction of the lens distortion – these values are calculated during the camera calibration
The left and right lasers can be switch on or off via this workbench. The value of the LDR sensors can also be obtained. This value ranges from 0 to 1023, depending on the amount of light detected by each sensor.
In this section the motor can be enabled or disabled. The angle of rotation and the angular speed and acceleration can also be configured.
NOTE: The enabled motor consumes almost the same amount of current as the moving motor. If the motor is left enabled for a long time, both the motor and the control driver will overheat.
The last menu is a G-code commands terminal whch enables communication with the processor. Further information on the firmware commands is available on the Horus Firmware post.
The calibration workbench enables adjustment of the camera parameters in order to obtain an optimum calibration. It also enables the three fundamental calibrations to be carried out which determine the scanner parameters: camera sensor and lens calibration, calibration of the lasers in relation to the camera and calibration of the rotating platform in relation to the camera.It is also possible to change the calibration pattern values in order to use different patterns.
In this calibration, the internal parameters of the camera are obtained. These are:
- Focal distances (horizontal and vertical)
- Optical centre (horizontal and vertical)
- Lens distortion
This calibration is optional, as most cameras are identical and the experimental values are close to the theoretical ones. Nevertheless, the option to calibrate these parameters is available for advanced users.
In order to perform this calibration, different captures of the pattern are taken in different positions. This data is then used to determine the intrinsic parameters.
In this calibration, the laser planes equations are determined, described by the normal to the plane and the distance to the origin. The position and orientation of the laser is not important. This calibration determines their planes with millimetric precision, regardless of their location.
The laser calibration is key to determining the point cloud in relation to the camera system. It is an automated process that takes a few seconds.
In the extrinsic calibration, a homogeneous transformation matrix in relation to the camera is obtained. In other words, this means the position and rotation of the disc’s system in relation to the camera system.
As with the previous calibration, the process is fast and automated. This calibration process is essential for rotating scanners.
Starting to scan
The scanning workbench is composed mainly of a toolbar, a video viewer and an interactive 3D viewer.
The point cloud of the object can be viewed in real time during the scanning.
The video viewer enables visualisation of the different phases of the image processing.
The scanning process has its own parameters for the camera, the lasers, the motor, the image processing algorithms and the point cloud.
The toolbar allows you to select the scanning algorithm (only geometry or geometry and texture), the number of lasers being used (left, right or both lasers), steps per turn, etc.
Meshlab is an open source software for processing 3D meshes. It can be used to remove noise, calculate the normals of the points, align different point clouds, reconstruct a mesh and apply textures, etc.
We have many objectives regarding the features of this application. The main working lines are:
- Incorporating a comprehensive point cloud post-processing system
- Developing a 3D reconstruction and meshing interface
- Creating installers for even more operating systems
- Implementing a plug-in system to simplify the integration of new features
- Many more new and interesting ideas!
We strongly encourage you to send us your ideas and suggestions, and to contribute to this project.
May the scanner be with you!
- GNU/Linux operating system
- Ubuntu. Ubuntu GNOME, Kubuntu operating system
- Python programming language
- wxPython graphics library
- NumPy calculus library
- SciPy scientific calculus library
- Matplotlib graphics generation library
- OpenGL 3D graphics library
- OpenCV computer vision library
- GPLv2 open source licence
- PLY mesh format
- STL mesh format
- MeshLab advanced mesh processor
- Blender 3D graphics software