CubeSolver - The Robot
The robot I use is 3D printed, based on the OTVINTA models.

You can access all hardware information here.
Communication with the Robot
This robot is managed through a Pololu Maestro 12, and as mentioned earlier, Pololu does not provide a JDK to communicate with this board.
Manipulating servomotors in Kotlin is therefore not an easy task, but it was made possible thanks to an unofficial library.
This library allows for simple operations:
- Place a servomotor at a certain position, with a given speed and acceleration.
- Request the position of a servomotor.
And that's essential for developing a robot.
Driver Architecture
The driver developed for this project has three layers of abstraction, each using the previous layer:
- A layer that manipulates the servomotors.
- A layer that offers services such as "rotate a face".
- A layer that offers user services, such as "move to home position" or "apply a sequence".
The robot also keeps the cube's orientation in memory, because the cube needs to be pivoted when the face to turn is on the front or back. (The robot has 4 arms and 4 hands, but there are 6 faces to turn).