blob: 3898a1f2e7c6ad103041d025d28b70cf887cb2fd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
### Rubik's Cube Solving Robot
This repository is for a robot that solves the rubik's cube. The idea is that after a scrambled rubik's cube has been places in the robot, an ESP32 (master) gets the cube's state (using 2 cameras, looking at opposite corners, each seeing 3 faces). The data is then sent to a more powerful computer (slave) which puts the data through [kociemba's algorithm](http://kociemba.org/cube.htm). The solution is then sent back to the master for servos to execute and (hopefully) solve the cube.
#### Master-Slave Relationship
The data is sent through the default UART connection between the master and the slave in the simple RCTP protocol (Rubik's Cube Transfer Protocol) (see `include/rctp.h`) (Note that both machines have to have the same endianess since the protocol is binary)
### Building
The projects can all be built separately, but only the implementation of kociemba's algorithm (`kociemba/`) can be useful on its own.
- **`kociemba/`:** built using `GNU make` (`kociemba/README.md` for more details)
- **`slave/`:** built using `GNU make` (`slave/README.md` for more details)
- **`master/`:** in contrast with the other parts, the master is built using`esp-idf`'s build system (`master/README.md` for more details)
The Makfile in the root of this repo is a wrapper around the other build systems, so just use:
- **`make all/kociemba/slave/master`** to build all or a single one (with nondebug flags)
- **`make run [FLASH=1] [PORT=ttyUSBn]`** to build and run the slave, and when `FLASH` is set the master program is flashed, and when `PORT` is set, the given port is tried instead of the default `ttyUSB0`
Note that building `master/` using the wrapper requires the `esp-idf` export script to be sourced.
### References
- <http://kociemba.org/cube.htm>
- <https://docs.espressif.com/projects/esp-idf/en/latest/esp32/index.html>
|