Team Status Report – 4/27

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.

Eric Status Report – 4/27

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.

Harsh Status Report – 4/27

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.

Chris Status Report – 4/27

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.

Harsh Status Report – 4/20

This week, I was able to test and update some of the color functionality. One of the band-aid solutions I had used for the stroke creation algorithm was to not draw any strokes longer than length 30. The contour finding function of the CV library in python was returning a list with the parts of the contour in different orders. So it would draw part of the outline of an object, and then jump to another location on the edge of object to draw another part of the outline. This would cause the entire object to have extraneous lines drawn in the middle. I fixed the code so that it would treat each part of the outline as a different stroke. This means that it no longer draws the connecting lines between the outline. I also fixed some color issues and made slight improvements to the weight of the color picking algorithm. Furthermore, I worked with Chris and Eric to come up with solutions to making the gantry work more smoothly.

This week, I was on schedule. I have made the software algorithm robust to extraneous lines, and the color picking much better, which were the optimizations that I had planned to do.

For the in-lab demo day on Wednesday, our goal is to get the robot to a near-final state, which means that I will be working on making sure that the physical system is doing what the software actually tells it to do. If there are any changes that need to be made to the software to make the drawing more accurate and fast (such as skipping a few points on the contour when making the outline, to make it faster), I will be in charge of that.

Chris Status Report – 4/20

Beginning early this week my main goal was to be able to complete attachment of the motors to the gantry to allow us to devote most of the week towards making progress on our routines and algorithm. I was able to complete this early on which enabled to test more parts of our code. We were able to verify this week that our diagonal control of the steppers is functional, as well as our ability to move to set coordinates on the gantry efficiently. We were able to program in the locations of the colors in the palette and are able to go to a designated color and swab for paint.

However, as the completion of the gantry allowed us to test it further we discovered that the design was inconsistent in one of the directions. Occasionally the motor would sputter and be unable to move in that direction, although there were no obvious causes. One possible ailment was that the belts on the bottom half of the gantry were looser, and additionally the support rod from the head would sometimes fall out of the bottom carriage. In order to fix both of these issues, the bottom carriages were redesigned to be stronger, easier to detach from the gantry for adjustments, and to hold the support rod completely.

This modification to the design set back some of the scheduled progress for this week, but overall we were still able to test and improve our gantry control routines. Currently the carriage has been redesigned and has been printed, but extensive testing on the new design has not been completed. In the coming week this design will be tested and iterated on if necessary, with the goal of completing this early in the week so that we may get a demo ready by Wednesday. For the rest of the week my goal is to test the gantry system more , and improve its overall consistency in operation. Additionally, I will be working closely with Eric to write and modify the current control routines. My progress for this week was setback, but this is why our schedule had slack time built in for unseen problems and overall the gantry design and implementation has made good progress towards its completed design.

Eric Status Report – 4/20

This week, I continued testing the gantry control system of our robot, specifically the diagonal code that was written last week. During testing, several small setbacks and issues were discovered, which were related to both the software code and the setup of the physical system. I primarily worked with Chris to mitigate and solve these issues. During this week, I also wrote a second batch of code for diagonal motor control using a different method, in the case that the first diagonal motor control code did not work as we intended. This second implementation used sleep timers that fired at carefully calculated intervals to control both motors at once, while the first implementation used a Python library to allow the two motors to be run in parallel. During testing, we determined that the first implementation was not the cause of any issues, but the second implementation is ready in case it is needed. In addition, I helped Chris with testing the physical system.

My progress this week is on schedule. I am continuing to refine, test, and modify the gantry control system as well as the project as a whole. In the next week, I hope to, along with the rest of my team, bring the robot to a near finalized state with little to no issues, which we plan to have ready by Wednesday.

Team Status Report – 4/20

This week, our team has continued making refinements and improvements to the project by adding new functionalities, modifying our system, and fixing bugs. At this point in our schedule, every individual component and subsystem of our project is complete and functional, and our current focus is on refining various aspects of the robot in order to finalize the robot and make the project come together.

The most significant risks to our project right now are various small issues that could result in the failure of one of the components of our project. For example, the way we zero out our gantry system involves moving the painting head into the corner as much as possible. However, this action presents a certain amount of strain and force on the corner of the gantry, which sometimes causes gantry components such as the belts to shift slightly out of position. To mitigate this, we are looking into either alternative ways to zero out the system or, more simply, finding a way to soften the impact between the painting head and the corner of the gantry. Another risk is the stability and strength of our 3D printed parts. We are solving this by printing backups as well as experimenting with slight modifications to our 3D printed parts which should result in a more stable and structurally sound gantry.

No significant changes have been made to our design outside of small modifications made in order to solve various small issues we encounter, such as slightly modifying the size of a 3D printed part or slightly shifting a component in our gantry system. The carriages were redesigned to hold the rods better and not have them pop out all the time. There are no major changes to our schedule, as our progress this week as a team is mostly on track. The testing and refinement of our project is going smoothly and as planned, and we are also spending time preparing for the demo on Wednesday.

Harsh Status Report – 4/13

I spent this week working on calibrating the colors even more. Instead of just calibrating with the palette, I used the paintbrush to draw strokes of each color onto a piece of paper. Then, I used an online color picker to get the HSV value of each stroke manually by trial and error. I did this instead of using a phone camera because taking a picture introduces differences in color such as light reflections, shadows, camera software, etc. After testing these colors using the simulation function that we had used for the mid-project demo day, I was able to see a significant improvement in the colors chosen and drawn after segmentation.

My progress this week was mostly on schedule, since I finished the software portion of the project. However, I haven’t been able to test the software on the physical system yet as the parts to hold the motors in place arrived during Carnival. This coming week, I will help my team finish the physical system and make sure that we can start testing our software. To make good progress on my part of the schedule, the physical system should be finished soon, so I will make sure that this happens this week.

Eric Status Report – 4/13

This week, I completed and tested the parallel code that allowed diagonal movement of the painting head which I began working on last week. This code allowed both of our stepper motors to be controlled at once, which was not a default functionality of the motor library that we are using. The code was completed and tested on our system with the motors attached to the gantry, but with the motors being manually held instead of fixed in place. The diagonal movement of the painting head is working fine and as expected. In addition, I also made a few modifications and bug fixes in other areas of our software.

My progress this week is on schedule. With the diagonal painting head movement code complete, the gantry control system is finished. It will continue to be refined in the future as we begin testing the code on the entire robot system, which will happen once we fix our motors in place. In the next week, I will make any refinements, modifications, or bug fixes in the code as necessary as they come up when testing our subsystems and entire project. Besides that, I will help Chris and Harsh with any help they might have in their areas of the project.