Team Status Report for 4/25/26

This week we focused on finishing our remaining tasks and our final testing/integration testing. We added a physical button instead of the purely software key. We finished adding a UI for parcheesi and the appropriate on board implementation. We improving our move planning algo and detection for the board. Cleaned up board swapping between chess/checkers and parcheesi for our demo.

Until the demo we still need to fine tune a few things mainly visual in terms of the board.

Tests:

Motors:

Move Completion time: 4.42

Placement accuracy across all 3 games: (100%)

Note/Change: This number was initially more inaccurate but after tuning down the speed and slowing down the magnet pick up and let go we were able to increase our accuracy.

Magnet Pickup: 100% succesful

 

CV System (Pi + Camera):

Diff Accuracy alone: 82% (detection of extra or too few squares means a wrong detection)

Full CV Accuracy with game rules and board state: 100%

ML Accuracy: 62% (initially)

Promotion Accuracy and Detection: 100%

Change: Our low ML Accuracy caused us to switch from a trained model to a system that stored pieces on the side of the chessboard and remembered them. This meant that for promotions it could take from the used pieces. Could also detect when player 1 promotes to one of these pieces and takes it.

Auto detection of Outer board: 75%

Auto detection of Inner Board if Outer board correct: 70%

Change: Made the user manually pick the corner points in software. Coupled with changing the outer board corners to a unique color for auto detection and then using fixed geometry for inner board and then manual user confirmation.

 

Player 2 GUI:

Ran tests for invalid move detection on all 3 games: 100%

Ran tests for correctly updating given the move from the Pi:

For Chess: 100%

For Checkers: 100%

For Parcheesi: 100%

Integration Tests:

Ran through 10 full games of Chess, Checkers, and Parcheesi.

Ensured no build up in error, ensured software state matched physical state, ensured accuracy throughout the game: 100%

Session reliability: 5 game of each type was played back to back to back to ensure we didn’t need to recalibrate (for at least an hour). Total duration took 4 hours.

User Enjoyment: Ran study to ensure > 80% like it more than strictly virtual We received 100% enjoyment. (Tested on 10 people)

 

Chris’s Status Report for 4/25/26

For this week I worked on a few final things. I added improvements for the motion planning algorithm to allow it to move better between off board and in board, I added a check for when the manual captured pieces are put on the game board, the next turn it moves the piece to the captured area by automatically detecting where it is. Finally, I improved the automatic detection in order to revert back to this and have manual human confirmation, will make sure the accuracy is high enough tomorrow. Finally, added checks for our parcheesi implementation and made sure it could function properly and move accurately physically on the board.

This week I also updated the algorithm to detect shorter paths instead of minimizing blockers, here is an update on Motion Planner:

Parcheesi Region detection works but is not perfectly consistent with detection and with moving the pieces especially because of the strength of the magnets relative to the piece weight. May need to focus on validation and making sure our other systems and chess/checkers gameplay is smooth rather than trying to make all 3 work perfectly.

CV Detection:

Harrison’s Status Report 4/25/26

Continued work on individual game finalization and system integration.

Game board swapping and final code implementation for subunits finalized. Ensured accurate movements tested with our final magnet-modified pieces.

Finishing up the final algorithms and connecting the P2 online interface to the Raspberry Pi and STM32 motor control systems.

 

Iniyaa Status Report 4/25

This week I worked on the Parcheesi Player 2 interface and updated the chess interface to comply with more rules. I also integrated a mock mode that allowed for easier testing with the player 1 interface. My progress in on track and my work for the next week is to work primarily on the poster and final report.

Harrison’s Status Report 4/18/2026

Worked on the Final Presentation presented by Chris.

Started work on the finalization of ML and algorithm (special chess movements) integration. This includes the movement of pieces out of the way when moving pieces like the knight and tracking of taken pieces to be used for promotions.

Very simple design to make the outside of the machine look nice (black cloth) around the edges, while elevating the machine.

Extra Questions:
1. I have had experience coding motor control code in the past, but I have never used an STM32. Chris was a big help as a knowledge base for using the STM32 since he took Embedded. Along with this, setting up the software connections and getting to the point where I could run code off of the STM32 after installing drivers, YouTube tutorials and AI were helpful in my learning of setting up the IDE and updating the system.

2.

Team’s status report for 4/18/26

This week there was a lot of integration that went on between the systems. Here is our combined repo code:

https://github.com/ChrisBernitsas/FlexyBoard

In terms of progress we:

integrated the CV, GUI, Pi bridge, and STM32 into one end-to-end system.

Added off board capture spaces and legal move validation for chess/checkers

Added A* based movement around pieces

Kept improving Software GUI

Kept fine tuning motor accuracy and tuning how it took inputs from the Pi (works on percentage system, square system, or coordinate system now) This makes it robust for more games.

Moved to contour-based CV detection. When testing the outer board and chessboard detection part seemed to be not up to our accuracy standards so currently it’s a manual selection at the start of the game and will be reverted back to automatic this week when we can get a unique color to outline them.

Did unit/integration testing between and for subsystems based on our design report and have numbers for some systems.

Our next tasks are as follows:

1. Fix magnets on Chess pieces/Finish Checkers pieces (I think 3 missing magnets and some are flipped polarity from the gantry magnets)

2. Improve detection of outer board and inner chess/checkers/parcheesi board unless we stick with manual.

3. Improve our system so we can slide boards in and out for fast change. (Velcro system).

4. Incorporate button for ending turn instead of enter key

5. Allow software to, at any time, update the game board with any new position/promotion

6. Promotion testing from captured area/ML

6. Confirm and fully test Algo for moving through obstacles and off board

7. Finish updating parcheesi UI in software (and all features/rules) and label squares virtually so that they can be used when sending commands.

8. Test accuracy of motor control coupled with CV system and algo for full games of parcheesi/chess/checkers especially

9. Potentially automate camera detection of if its chess/checkers/parcheesi board so don’t have to manually input (will automatically know which rules and potentially GUI to use) instead of manual selection/input

Chris’s Status Report for 4/18/26

In the past 2 weeks, I worked on many different components of the system and a large chunk of my work was on integration.

We had taken out our code from the different systems (Motor, CV, Software) and combined them into a GitHub Repo in order to proceed with further integration.

You can see the progress and commits here: https://github.com/ChrisBernitsas/FlexyBoard/commits/main/

I integrated the CV pipeline, the GUI, the Pi Bridge, and STM32 into one end to end system.

CV Changes:

I changed the CV system so that it used contours to detect groups of changed pixels rather than a straight up diff which proved more useful for lighting changes and with some fine tuning of threshold levels has proven to be very accurate (need to run tests again to obtain another number, but I do not think it has made a mistake when coupled with the game legal move handling). I also incorporated legal move handling for chess and checkers including special moves. Based on the detected squares changed there is a legal move resolved which uses those changed squares to find which move likely occurred. Accompanying this, there is player 1 move validation so weak CV detections are rejected and retried instead of continuing to player 2 in a corrupted state.

Motor Changes:

For testing: I made multiple scripts to test the accuracy in various scenarios. For example, one of these scripts took one chess piece and moved it to every single one of the 64 squares one by one lifting and removing the magnet each time and then returned to its original position to see if it was accurate enough to stay within the chess square each time (although some minor accuracy issues which we can fine tune, it was accurate enough)

Added percentages to our STM move sequencer, this allows instead of strictly a1 -> b2 or 0,0 -> 7,7, we can add percentages if we want to move pieces outside of the chessboard but within the flexyboard (for capturing pieces and other uses). For integrating with the software, I added a software move in the GUI is converted into commands which is sent to the STM which can be executed. For example:

6,7 -> 8.00%,85.71%
8.00%,85.71% -> 8.00%,82.00%
8.00%,82.00% -> 28.57%,82.00%
28.57%,82.00% -> 5,5

Added a capture area in our software which is 3 rows of 10 squares (2 at the bottom of the board where there is a lot of space and 1 at the top). These 30 squares will be used to store captured pieces and eventually be used to move for promoted pieces. The software now has an inventory which it keeps track of which pieces it moves to these captured pieces and has an order in which the 30 squares are used.

Lastly, a major part this week was the algorithm for moving pieces (especially if there are blockers like knight ‘jumping’ over other pieces). This was done with an A* recursive algorithm which turns the board into a graph with nodes and edges and computes paths given the edge weights and the blockers (if a piece blocks a path). The tie breaker for this algorithm is

1. fewer blockers (fewer pieces in the way)

2. shorter path

3. fewer turns

4. straight movement over diagonal movement when distance is equal

I had added the outer area outside the chessboard (but within the flexyboard) as part of this algorithm for path determination. So this means pieces can now move outside the chess board and back into it if there is a path that is not blocked (or if there are blockers those are moved if it is the most optimal path).  Collision validation was added for both in board and out board paths. The off board inventory is treated as obstacles to move around if a piece there exists.

Promotions have not been tested yet.

 

 

 

ADDITIONAL QUESTION:

As you’ve designed, implemented and debugged your project, what new tools or new knowledge did you find it necessary to learn to be able to accomplish these tasks? What learning strategies did you use to acquire this new knowledge?

Over the course of the project there are many new technologies I had to learn. One of the first things was the Raspberry Pi. I had never really used a Pi extensively before. Had to learn the entire process of setting it up (flashing the SD card with the imager), setting up SSH, installing dependencies, etc… For this, one of the biggest things that helped was when I was eating lunch with my friend and asked him questions about Pis (he had used them extensively before) for like 30 minutes. Was able to ask him questions from time to time after that as well, but the majority after set up was straight forward and trial and error. I had never used an accessory connected to a Pi either obviously so had to go through the process of connecting the camera to the pi and watching a tutorial on how to actually get images and process them. I had read documentation as well about this and this helped a lot for the initial small code in the beginning when I was making sure everything was set up properly.

Communication between the Pi and STM was also something I had to learn. I had taken embedded and was pretty confident working with microcontrollers, but having to format movement commands and send them in a parseable format to the STM was something that I read on the raspberry pi forums combined with old Embedded notes and code that I had done.

There were many other parts; however, one of the bigger parts was the A* algorithm. I had been trying for a while to implement pretty rudimentary methods but nothing seemed to be working. Eventually, I decided to build something up from 15-281. I had forgotten a lot of this but was able to relearn it. In order to do this it was a lot of internet, I had watched a lot of YouTube videos to figure out the best approach I wanted and what would actually suit my requirements and ended up reading a few articles I think GeeksForGeeks proved very useful.

In general another part which I had to learn was integrating and testing. There wasn’t really any external source for this that helped. This was just a lot of manual understanding and planning. I think the learning strategy for this part would be classified as learning by trial and error, for each time a subsystem didn’t work as expected or wasn’t working with another subsystem something had to be changed. So definitely learned a lot in terms of making systems work together and integrating them together after they’ve been built individually.

Iniyaa’s Status Report 4/18

This week I worked on the player 2 interface. I started by creating the checkers interface and after I got that working, I started on the chess portion. I now have a home page where you can select chess or checkers and then play the game. Chess if somewhat functional but not fully tested. Checkers should be fully functional on the player 2 side but has not yet been integrated.  To test on my end, I set up a mock raspberry pi using python that sends the json input that the player 2 interface takes. The checkers game works with this mock player 1 interface. Also, I worked on creating the Parcheesi board for the physical flexi board. So far I am slightly behind schedule as it would be nice to have parcheesi also integrated on the player 2 side but it is not yet done. However, I didn’t have too much trouble doing chess and checkers so I am not super worried about integrating parcheesi. Since we have final presentations this upcoming week, I will need to put in more time outside of class time to get the player 2 interface done. Furthermore I need to coordinate with my teammates about the integration of the Player 2 interface with the physical FlexyBoard. We are slightly behind schedule but I think if we put in a lot of work this week we can make it work. My tasks for the upcoming week are to finish the parcheesi game on the Player 2 side and confirm with Chris about connecting the P2 interface with the raspberry Pi.