The Rubik's cube solver is made from 6 low-cost NEMA 17 stepper motors. A single Arduino MEGA controls all six of them through 6 stepper drivers. The stepper drivers are on a custom-made PCB shield that connects them to the Arduino and distributes power to the stepper drivers.
The software is relatively straightforward; the only difficulties being trying to find the best speeds to stop any jams from occurring.
As of now the robots fastest solve is 2.22 seconds, beating the human record of 2.76 seconds by over half a second.
Currently, I am attempting to integrate a ESP32 Cam that attaches to the robot and does the solving algorithm onboard, making the robot completely independent.
This is an improved version of separate swerve drive that is described below. This swerve drive has two "pods" that each have a wheel that can be oriented towards any angle.
This allows the robot to drive in any direction and rotate while doing so. To accomplish this, the robot uses inverse kinematics to figure out the exact angle and speed each wheel should be at to correctly drive. The applications of this ability can be seen in warehouses, automation, and any place where space is heavily restricted.
Then, I used a PID loop to determine how quickly to rotate the module. Once the module is rotated to the correct place, a regression model is used to translate the desired velocity to a PWM value.
Unlike the above project, this is a differential drive, meaning it uses the sum and difference of the two motors to either rotate, drive, or both. The coaxial drive accomplishes the same goal but has separate motors for rotation and driving. Differential drive had a few advantages over coaxial when I was initially choosing a design. The biggest reason was that there were more open source 3d printable designs. But the differential drive also has a torque advantage. Since you can use both motors to do the same action, you can essentially double torque when only driving or only rotating.
The robot communicates via Bluetooth using the ESPNOW protocol, with one ESP32 on the robot, and another connected to joysticks.
Once I got far enough into the project, I realized that what I had was imprecise, difficult to control and simply not high quality. So, I did a complete teardown, and built it back from the group up, designed my own coaxial drive.