Team Status Report 03/30/2024

The biggest risks for us are still the card dispenser. We are redesigning the system so that we only have to reprint the front rollers and the card hole to save material and time. We hope that with the new prototypes and the new cards that we get, we are able to achieve a low error rate again, just like it was in the testing Thomas did.

We are adding one thing to the design. We are planning on adding an IR sensor to detect if a card was successfully dealt. This will allow us to better handle errors and it is very cheap, around $8.

We have not made any changes to the schedule, and we are all on schedule as well.

Thomas’s Status Report 3/30/2024

This week, I have gotten test data for our dispenser. Using a new deck, I have dispensed 10 decks in a row and written down how many times the dispenser was not able to dispense a card. The data suggested 24 errors / 1090 cards, which is about a 2% error rate. However, while using the dispenser to test out the hardware interface later, I noticed the error rate went back up by a lot. We believe this is due to the cards themselves gaining friction between each other due to hand oil and card wear and tear over time. I have tried making the card hole smaller to fit just one card, but that seemed to not dispense due to the cards not separating, further supporting our theory. We have come out with a new way to more quickly prototype different card holes by separating the front portion of the dispenser from the rest of the body, which will let us try out many different iterations over the next couple of weeks. 

I am still on schedule, since the rest of my schedule is dedicated to testing and helping others to integrate the full system. Next week, I want to keep testing the dispenser with the new prototyping mechanism we have built. Also, we would like to test out adding IR sensors in order to provide automatic feedback on whether the dispenser failed or succeeded in dispensing the card.

Jason’s Status Report for 3/30/2024

This week, I accomplished a few more things. Firstly, the card classification models have been tested. We found the most success with two separate models for the top and bottom cameras, but use the same color classification model across both of them. At this point, after at least ~500 times of using the models, we have not seen an incorrect classification. We will continue to monitor and train on new data if something comes up. Although I had implemented most of the UNO code around week 1 or 2, we finally got around to testing it live. We ironed out a few bugs with the implementation, and everything seems to be working now. I have also helped Thomas with making some modular modifications to the dispenser, which are being printed. We will continue to iterate on the dispenser over the next few weeks. I also began designing a new control flow to allow better async communication (such as from the website). I also made a crude GUI for visualizing the state alongside logging for debugging.

At this point, I am on schedule. This week, I will finalize the new software macro design and begin work on the website.

David’s Status Report for 03/30/2024

This week, I fully implemented the hardware interface for UNO. We were able to start testing full UNO games using the machine this week. We ran into several weird bugs involving the TkInter based GUI and the hardware IO as the GUI stopped working once we switched to using the hardware controller. Jason and I finally fixed this issue after we forced the Tk display to update in a blocking manner instead of non blocking as usual. Also, our current implementation relies on blocking IO which polls the various buttons and serial interfaces. We started switching this over to an async approach which spins up another thread to do the polling. Also, the issue with the GUI should go away once we switch to a website interface which will have its server running in a different process.

I am on schedule. Next week I plan to finish switching the code over to non blocking IO and to start work on the website with Jason.

Thomas’s Status Report 3/23/2024

This week was another week of testing out and modifying the physical parts, mainly testing the dispenser, collecting data for classification, and reorganizing the things inside the chassis. We had some issues with the dispenser’s consistency last week, so we decided to change the material used from the O-rings to some silicon rubber bands. At least from the couple hundred cards we have tested after, we have seen an improvement in the amount of friction on the cards. Thus, we never have a case where no cards are being pushed out. It’s just 2 cards trying to leave the opening at the same time that get stuck. To address this problem, we currently have a new prototype in the way that with a larger opening this time, hoping that the 2 cards will leave instead of getting stuck. Picking up a card that was additionally dispensed seemed easier than having to get the stuck card out of the dispenser. The internals of the chassis are also reorganized to have less wire tangling.

The last couple of weeks starting this week are integration and testing. I have already finished all the physical parts that are needed, and all that is left is to test and make improvements to the system until we meet the requirements. Thus, I am on schedule. 

Next week, I will test out the new dispenser prototype, and help others collect data and test out the software parts too. Once the software interfaces are done, I could also test the accuracy of the chassis rotation next week as well.

Team Status Report for 3/23/2024

With the discard pile classification model giving us basically a 100 percent accuracy, our potential risks are just the card dispenser accuracy and the draw pile classification accuracy. As mentioned in the personal reports, we have a new dispenser being printed, and Jason is working on getting the bottom classification accuracy up, which looks promising so far. Also, the current dispenser accuracy with the new rubber band material isn’t too far off our requirement, which is also assuring.

No significant change has been made to our design of the system or the schedule, and all of us are currently on schedule. In the next couple of weeks, we will work on integrating and testing our project while also making some improvements on our own parts as well.

Jason’s Status Report for 3/23/2024

This week, I made significant progress on the card classification algorithm. Initially, artificially creating new data before splitting up into test and validation sets was causing misleading results on the testing and validation sets. Also, the model I had designed was having issues with overfitting to the training data. Because of this, I switched to fine-tuning the ResNet18 model on our data instead of training a model completely from scratch. I have trained 3 card classification models, one trained on data from the top camera, one trained on data from the bottom camera, and one trained on both. Across all three of these models, the only image being incorrectly classified is pictured below.

I would argue thinking the card is a 1 instead of a 7 is more our fault than the model’s because of the glare, which we will mitigate by covering more of the backlight. Finally, I have a color classifying model, which is achieving 100% accuracy, as expected. Because of this progress, I believe I am back on track. This week, I plan on fully integrating the software UNO implementation with the hardware and begin work on the website.

David’s Status Report 3/23/2024

This week, I collected a lot more data for the model.I took and labeled over 700 images.This was instrumental in increasing the accuracy of our model which now works great. I also assisted Thomas with testing the new card dispenser. After our testing, we realized that it’s basically impossible to avoid cases where 2 cards try to come out at the same time. Thus, we decided to change the card dispenser to just let the 2 cards out instead of having them jam the dispenser. This way, it’s at least very easy to recover from a fault.Lastly, I worked on implementing the uno hardware controller. I implemented the various commands that need to be sent to control the motors as well as doing the stuff to capture images and send them to the uno simulator. All code and labels for the images are in the git repo.

I am on schedule. Next week I will work on finishing up the hardware controller and starting work on the website.

Jason’s Status Report for 3/16/2024

I recently completed several significant tasks as part of a project. Firstly, I developed a color classifier, which appears to be highly effective, although I am in the process of gathering metrics to quantify its performance accurately. Additionally, I successfully finalized the UNO interface, enabling a controller to receive inputs from users and incorporating redundant state displayers. Furthermore, I gathered data from both top and bottom cameras and devised a script to generate diverse images from existing inputs. By executing this script, I generated an extensive dataset for each camera. Finally, I conducted thorough testing to ensure that the model can effectively learn from and fit to the training data, currently getting 99.9%. I have done a lot of work to get back on track, so I feel we’re in a good place. Next week, I will have full testing metrics for the model on both datasets, having swept through hyper-parameters.

The above two images were generated dataset images from an actual photo taken from our pi camera.

David’s Status Report for 3/16/2024

This week I generated the data set for the card classifier. This involved taking around 500 images and then hand labeling all of them.I also worked with thomas to continue fiddling with the card dealer. We finally found a setup that gives us pretty consistent results.

I am on schedule. Next week I will integrate my code to control the machine into Jason’s UNO controller interface that he has created to make it simple to have the UNO controller code also interact with hardware. I also need to write drivers for the number pad that we are using for user input.