This week, I worked closely with the rest of my team in order to optimize various aspects of the robot. Primarily working with Chris this week, I optimized the color picking algorithm of the robot even more, tested and redefined constants related to the locations of the paints and other items on the board, and helped expand zeroing capabilities in the other corners. In addition, I tested various parameters to use in our system and helped determine which to use, including the speed of the motors, the gap between fill-in strokes, and the brush width. I also edited the painting routine to add more instances where the robot zeros itself in order to account for drift. In addition to this, I helped fix various bugs and generally helped my teammates with whatever tasks they were working on. In the beginning of the week, I also spent time creating most of the final presentation powerpoint and preparing for my presentation of it. I oversaw many of the painting attempts of the robot, and recorded each painting instance to determine the time it took for each image. I also worked on putting the final demo poster together and wrote much of the content for it.
My progress is on schedule this week, as I and the rest of my team are in the final week of the project and are nearing completion of the entire project. As exhibited in the team status report, our robot has made significant improvements in painting, and we are happy with the state it is in currently. In the next few days, we will continue wrapping up several aspects of the project such as the UI and other small adjustments in order to finalize the for the public demo on Monday.
The first part of the week was spent on finishing the final presentation. After that, I started working on the GUI that we would present on public demo day. Initially, we manually put in a file path to an image and then it would pop up some windows to show what was being rendered. Since we wanted a more robust UI, I used Tkinter on Python to create a better interface. It now allows the user to navigate to a file of their choice, and it shows the original image, the segmented image, and the rendered image (image as it should look on the canvas) in a cleaner interface. After this, we were facing two main problems. The first one was that the pulleys weren’t aligned well, and it was causing our gantry to have variable resistance. This was causing our gantry to jam once in a while. We decided to print new pulleys with more screw holes to be able to center the shaft in the pulleys. The second problem we were facing was that the motors weren’t able to draw enough current through our motor board, since it’s only rated for 1A. We tried to overpower the board, but it wasn’t enough, so we’re exploring ways to solve this problem. I helped Chris with both these tasks. I did other small tasks such as creating a new metal water cup and spray painting it, as well as applying lubricant to the gantry.
I was on task this week. I was able to complete a basic UI that we can use to demo our project. I was also able to help Chris with other tasks involving optimization of the gantry. Before our demo, I will work with the team to center the pulleys correctly and fix the power problem to eliminate jamming.
This week all of our efforts have been put into making the system more stable and consistent. This involved much trial and error and tampering with our system. I improved our color picking algorithm to also consider the color of neighbors when selecting a color to use. This prevents the output image from becoming too simple and uninteresting, allowing for a less perfect color to be used for the purpose of more contrast in the output image. Additionally, I changed our method for performing fill in strokes to perform large zig-zag strokes rather than individual lines, which allows for smoother operation and more continuous motion. The most important work done this week was related to power supply optimizations. We found that the issue of our motors jamming was due to insufficient power. After using a power supply with more current we found that the system was able to perform with almost no jams, and allowed us to produce a much clearer image. However, the higher power usage seemed to damage our stepper motor board and we were forced to use our backup. We are now very hesitant to use the higher power supply as it may destroy our last board. We are continuing to try to find other methods of powering the motors to circumvent our jamming issue, which is largely the only issue remaining that is preventing us from getting clean looking results.
Overall this week we have remained on schedule. We were able to produce a much higher quality image and have found ways to address almost all of our issues. We are continuing to work on the power supply issues to hopefully eliminate the jamming problem and if we are successful in this our project will be in a much more complete state. Before our demo on Monday we hope to be able to produce a painted image for more complex image inputs and display a video of this during our demo.
This week, our team approached the completion of our project with numerous improvements, adjustments, and bug fixes. Our robot has significantly improved in nearly all aspects. For example, below is an image of the rocket ship that we were testing with our robot. Under it is a comparison image of what our robot drew last week, on the left, and what it drew this week, on the right.
As the image shows, our robot has made significant improvements in its drawing ability. Several bug fixes and algorithm optimizations has resulted in steadier strokes, a neater image, and a more cohesive final product. In addition, we have created a basic UI for selecting an image and seeing a rendered result, and are preparing videos, images, and other media for use in our public demo.
There are no significant risks remaining with our project, as we have mostly wrapped it up. Some small risks are that the robot still occasionally jams or drifts. We are addressing this by zeroing the gantry often to account for drift and by optimizing metrics and parameters to minimize the motors jamming. Jamming is somewhat inconsistent; there are times when long testing sessions will go without any jamming or issues. During other times, the robot will frequently jam and make errors. Nevertheless, we are doing our best to account for all the known issues of the robot and to ensure our public demo goes as smoothly as possible.
No significant changes were made to the design of the system. Several small additions or adjustments were made, such as testing different power supplies for our robot, adding tubes to allow the gantry to zero in all four corners, and using a thicker brush for broader strokes. No significant changes to our schedule have occurred, and we are rightfully in our last week of work with the completion of our robot on the horizon.
This week, our team made significant progress into completing the overall system and having a functional robot.
Currently, the most significant risks to our project is the occasional jamming of the motors, which causes the gantry to fail every once in a while. This is being mitigated through several mechanical solutions, including putting lubricant on our poles as well as adjusting various aspects of the physical gantry. Another possibility is to have some sort of feedback system that would allow us to know when our motors have failed and the painting head is out of place. This would require either encoders on our motors or a camera which tracks the head. Both these solutions would require significant time and dedication to in the last two weeks of the project, so we will likely not go ahead with either of these as it is too big of an undertaking this late in the project cycle. Instead we will improve what we can in our current design to improve the consistency.
We made a few significant changes to our design. The first major change was that we redesigned the carriages. Since we wanted to reduce the jamming problem, make the belts fit better, and make the carriages fit better on the shafts, we made the carriages loop around the shaft instead of just clip on to them. We also changed their dimensions and made them more robust. To fix the deviation problem caused by the jamming of motors, we decided to put plastic tubing on part of each shaft, so that we could calibrate the head against where the tubing prevented the head from moving any further. There are no major changes to our schedule, as we continue to be in the testing and refinement stages of our project.
This week, I spent a significant amount of time putting together the project and ensuring it is in a demo-able state. I mainly worked with Chris this week to improve and test various areas of the project. One thing we noticed about our current color selection algorithm was difficulty in accurately choosing extreme cases of HSV values, which included black, white, and red, as these colors were represented by a minimum or maximum value for one of the three properties defining it. Chris and I optimized and refined the algorithm by weighting the three different properties of HSV colors so that our system would more accurately pick colors. Another important item that Chris and I worked on was reducing the jamming of the motors while optimizing the accuracy and routines of the gantry system. Using testing scripts, we tested various parts of our system individually and in conjunction with each other in order to optimize timings and spacings in the painting routine. This week was also the first time we tested our robot running a routine that involved the paints and water. Through our testing and refinement, we were able to accomplish the robot automatically completing a painting routine.
My progress is on schedule, as I am in the testing and refinement phase of the project. Our project is in a complete, demo-able state, and the remaining work is continuing to optimize various aspects of the design as well as minimize errors and failures. Next week, we hope to eliminate a significant number of small issues and problems, such as the motors failing, finding a way to zero our gantry, optimizing the color selection algorithm even more, and reduce the extra line drawn by the brush when rotating on the servomotor.
The beginning of this week was spent getting ready for the demo on Wednesday. I measured the dimensions and cut the hole in the base-board for the water cup. I also drew out dimensions for a second hole in case we needed a clean water cup and a dirty one. I had to learn to use the mechanical tools since Chris had been doing the work on the physical system before. One of the problems we were facing was that the motors would sometimes get stuck and not complete the entire motion of the stroke. This was a major problem, so I tried to see if using lubricant would help reduce friction and make the gantry operate more smoothly. I found several different types of lubricants in the Makerspace, including grease, WD-40, and another aerosol based lubricant. The first aerosol based lubricant didn’t do much. However, WD-40 worked much better and noticeably reduced the jerkiness of the robot. The second part of the week was spent on creating the presentation slides for this week.
This week, we all worked together to reduce errors in our system, as well as start creating the slides. Our project is now something we can demo. I was on schedule for this week. The next week will be spent trying to make our gantry system more robust. Most of our limitations are now in the physical system, and we will work on adding the torsioner, reducing friction, and making any other optimizations we can think of.
This week all of our efforts were put toward getting the project into a demo-able state. The beginning of the week involved implementing the redesigned carriage attachments. The new design worked much better, and allowed for the belts to remain mostly parallel with the board which seemed to help performance. They are also much more sturdy, easier to detach from the gantry, and easier to mount the belts onto. Overall this redesign was a major success and contributed massively towards getting the gantry in a more consistent operating state.
Beyond adding the new carriage designs, I worked closely with Eric to develop a new demo script which would allow us primary access to all of the gantry control functions, including moveTo, zeroing the gantry, and pigment selection. This enabled us to test the consistency of grabbing pigment and moving to set coordinates on the board, and extensively test the gantry and make needed improvements to our constants related to step size as well as improve the overall logic of our gantry control routines. This also exposed some glaring issues to us; mainly that the gantry will fail to move in one of the axes directions quite often. This seems to be an issue of the motor not being capable of turning, not any software issues. This requires further attention, but modifications were made to the design to try to control this as much as possible. This included adding tubing on the bars to prevent the paint head from being to travel to one of the corners, allowing us a much safer method of zeroing the gantry to that location. This will allow us to mediate drift, but the issue of the motors not moving at all still needs to be addressed.
Eric and I also worked on improving the color selection algorithm as we noted that there were times when very poor decisions would be made. This was mostly on black and white colors, and also red which is a special case in the HSV encoding, as this is the color where the values wrap around. These improvements helped dramatically, and the output is a very close match to the source image. I also developed a more true main function, which takes an input image, segments it, and renders it back to the user in our palette colors. After this point the image is painted for the user.
Despite the issues noted above, we were able to begin painting with our robot. We used one of our simple test images composed of 6 shapes of different colors. We were able to demonstrate the ability of the robot to paint a single shape at a time in the desired color. The results are currently inconsistent, but this is the next issue for us to address.
Overall this week I was able to remain on schedule, and make up for some slight deviations in last week. My goal for the following week is to make improvements to the performance of the gantry to allow for more consistent control. This may involve adding lubricant on the axes or increasing the power supplied to the motors to overcome whatever is preventing them from turning. In addition to this, I also aim to continue working on the software for controlling the paint head, to improve the routines for drawing strokes to be more concise in the movements made as well as to properly zero the head during operation.