Sudoku Solver

This little robot solves a sudoku puzzle all by itself.

It scans the sudoku puzzle using a light sensor. It calculates the solution to the puzzle and then writes the digits.



Scanning

It first performs a quick scan to determine which cells are empty. It sweeps the light sensor over the sudoku puzzle while continuously reading the sensor values.

Each non-empty cell is then handled. An image of the digit is created by scanning the cell line by line moving the robot forward a tiny bit for every line.

Thresholding

The scanned image is very noisy and blurred.

To make it more sharp the image is transformed to a binary image (black and white).

Each pixel with a value below a threshold value is set to black. And the rest of the pixels are set to white.

The values from the light sensor are very close to each other and the overall values are affected by surrounding light, distance between surface and sensor and so on.

The threshold value is calculated by applying an automatic threshold algorithm (The Otsu Method).



Segmentation

The binary image may have more than one segment. It may have pixels not belonging to the digit. The center segment is found and other segments are deleted.



Thinning

The image is converted to 1-pixel wide lines with a thinning algorithm.

Feature extraction

Now the digits are classified by extracting some features from them:



Width of the digit

Number of tips

Position and direction of tips

For example a digit with only one tip which is pointing to the right is classified as 6.

Raw image Thresholding Segmentation Thinning

Solving the Sudoku

Solving a sudoku puzzle is a quite simple task for a computer. It is usually implemented using a recursive backtracking algorithm. But since the Mindstorms processor is rather slow, and since it doesn't allow for recursive functions, it took some care to optimize it.