We are pleased to present Ciclop, the first DIY 3D scanner from BQ, together with the 3D scanning software Horus.
As with the other BQ DIY products, Ciclop and Horus are open source, which is why they belong to the Technological Heritage of Humanity. All the information on the mechanical design, the electronics, the software, algorithms, mathematics and experiments made will be available to the community.
This enables anybody to study and understand the functioning of the scanner, as well as making modifications, improvements and developing new versions. We want to contribute and drive forwarde the development of these devices.
The scanner is based on major projects from our Technological Heritage which have been developed in the community, such as: GNU/Linux1, Python2, Reprap3 and Arduino4, among others. They have all our admiration, recognition and gratitude, as they have been fundamental in accomplishing this project.
State of the art
Several alternatives exist for capturing the three-dimensional geometry of an object, such as laser triangulation, structured light and stereo vision. Comparatively, the first method offers greater precision and a higher resolution, but it also has limitations in terms of the kind of materials that can be scanned. Laser triangulation is based on capturing the projection of a laser beam over an object using a camera.
There are already scanners on the market with prices ranging from €500 to over €20,000 which are not open source, so the user is not able to study or modify the software.
FabScan5 and MakerScanner6 feature among these open source scanners, but they are not available for purchase as kits and the materials must therefore be purchased separately.
Ciclop is an open source 3D scanner kit. Being open source enables the user to study and modify it, whereas being sold as a kit permits the user to buy all the components together and at a fair price.
The structure of Ciclop is made up of 3D-printed pieces, M8 threaded rods, M8 screws, M3 screws, nuts and washers. It has a 20 cm diameter methacrylate platform on which the piece is placed for scanning. It is covered with a anti-slip surface to prevent objects from moving during the scanning process.
The platform is supported by a 110 mm diameter ball bearing. The movement is created using a Nema 17 stepper motor.
The ZUM BT-328 is an Arduino-based board that executes the control firmware of the motor and both lasers. It communicates with the PC via a micro-USB cable or Bluetooth. The ZUM SCAN is connected at the top, a shield derived from the Arduino CNC Shield9. This shield has 2 stepper drivers and connection pins for 4 lasers and 2 light dependent resistors (LDRs).
The firmware has been developed using GRBL10 as a base and using other projects such as Marlin11 (the firmware used in open source 3D printers). It enables the lasers to be switched on and off, as well as the position, speed and acceleration of the stepper motor to be controlled using Gcode commands.
This application is the core of the scanning process. It manages the communications, the capture and syncing of the data, the image processing and the generation and visualisation of the point cloud.
It has been developed and optimised for GNU/Linux (Ubuntu18). However, it has been tested for Windows and it will also be supported for Mac. Horus consists of three workbenches which can be selected by the user.
In this section each component of the scanner can be freely controlled: the camera settings, the lasers, the motors, etc… It has been designed so that makers and developers can carry out tests and experiments on eac h component of the device separately.
The calibration workbench contains the tools needed for calibrating the device, from adjustment of the camera settings to the laser triangulation and detection of the rotating platform.
The system has been designed to calculate the internal scanning parameters automatically, using the structure assembled by the user. This is very important, because on being a DIY kit, no two scanners will ever be assembled identically. It is impossible to determine a priori what dimensions and directions the user will create on assembling it. Furthermore, the user can create a scanner with different dimensions and positions of the lasers and the camera. Horus will auto-calibrate correctly to achieve the perfect scanning.
This section allows to select the type of scanning: with/without texture, one/two lasers, steps per turn, etc. It also provides a 3D environment for visualising the point clouds in real time and a video window which displays the different parts of the image processing.
The scanning times depend on the algorithm used and the acceleration and step of the motor. For 800 steps per turn (0.45º per step), the times vary from 2′ the fastest to 6′ the slowest (using both lasers) on Linux.
The result of this process is a PLY19 file. Here are some more examples:
Horus also includes a wizard that simplifies the calibration and scanning processes, using a step-by-step guide.
There are various open source programs, such as Blender20 or MeshLab21, which allow a point cloud (PLY) to be converted into a mesh (an STL22 file). STL is a file format for 3D meshes composed of triangles. An STL file can be printed in 3D using programs such as Cura23.
Once the STL has been created, the model can be visualised in Horus.
In this project we want to keep on evolving and improving. One of our main areas of work will be incorporating post-processing 3D mechanisms and meshing into Horus..
We encourage you to get involved with this project!
In the coming weeks, we will be publishing all the developments, documents and manuals relating to this project in detail under Creative Commons and GPL v2 licence.
Are you ready?
- GNU/Linux operating system
- Python programming language
- RepRap community
- Arduino community
- FabScan project
- MakerScanner project
- IEC60825-1:2014 Class 1 Security certification
- ZUM BT-328 controller board
- Arduino CNC Shield power shield
- GRBL CNC control software
- Marlin firmware
- wxPython graphic library
- NumPy matrix calculus library
- SciPy scientific calculus library
- Matplotlib graph-plotting generation library
- OpenGL 3D graphics library
- OpenCV artificial vision library
- Ubuntu. Ubuntu GNOME, Kubuntu operating system
- PLY mesh format
- Blender 3D editor
- MeshLab advanced mesh processor
- STL mesh format
- Cura 3D printing software