Team Status Report – 5/4

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.

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.

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.

Chris Status Report – 4/7

Much of my time this week was spent preparing for our demo on Monday. This involved finalizing all of the control we were able to achieve and creating demo scripts or use during our actual demo. Additionally I worked on improving the software portion of our project for the demo by speeding up how the objects were filled in. This involved creating more sophisticated code for identifying continuous horizontal regions of the code. I also changed the library used for drawing the rendered image to speed up the debugging process and created a simple debugging stroke drawing option which sacrifices accuracy for speed in order to test changes faster.

This week I was also able to begin the construction of our base board which the frame and gantry will attach to. This involved carefully measuring and cutting holes in the board for the legs of the frame to slot into. This has been completed, and the remaining work in this area is to make cutouts for the palette and water cup, as well as to attach the mounts for the stepper motors. These parts have not arrived yet, so for this reason I shifted my attention to the software components mentioned above.

Overall my progress this week has been mostly on schedule. Ideally I would have finished the construction of the base board this week, but as this was not possible due to the missing parts I was able to shift my focus to the other portions of the project and assist Eric and Harsh where needed. Next week I hope to finish construction of the baseboard and we can move on to more extensive testing of our physical system.

Team Status Report – 4/7

Over the last week, our team has worked on getting the control system ready to test the painting routines including the color grabbing routine, the brush cleaning routine, and the drawing routines. We also worked on creating the base board and improving the painting algorithm. In the beginning of the week, our team spent significant time preparing for the demo on Monday.

There are no new significant risks for our project that we foresee occurring in the future. Our mid-project demo went smoothly and we were able to create a functioning gantry system and a robust painting algorithm. Small risks include the parts of the gantry system wearing out over time, but that is something we took into account in our design. This is the reason we 3D-printed a lot of our parts, so that we could reprint them if they wear out. Any other risks we encounter should be mitigated through our careful planning and design.

No significant changes have been made to our design, and the realization of our robot is going smoothly and as planned. There are no major changes to our schedule, as our progress this week as a team is mostly on track.

Team Status Report – 3/30

This week, our team made progress in many areas of the project. We are also beginning to put our subsystems together and testing them with each other, and our project as a whole is beginning to take shape. Overall, the team worked this week on preparing for the demo next Monday, which resulted in our progress of being able to trace out basic shapes using our gantry system and motor control software.

There are no new significant risks for our project that we observed this week or that we can foresee occurring. The preliminary tests and experimentation of our prototype gantry is working as we expected with little to no issues. As we continue finalizing our robot and connecting our subsystems together, there still remains the risk that the subsystems do not interact as we expected. However, our careful planning makes this risk very unlikely, and any issues we do encounter can probably be easily dealt due to our planning and design.

No significant changes have been made to our design, and the realization of our robot is going smoothly and as planned. There are no major changes to our schedule, as our progress this week as a team has been on schedule.

 

Harsh Status Report – 3/30

This week I completed designing the stroke algorithm and wrote the code for it. Using Chris’ stroke plotting function, I was able to simulate the drawing of both the outline strokes and fill-in strokes. The outline stroke algorithm is very quick and can draw outlines for complex images in under a minute. The fill-in stroke algorithm is quite slow. Complex images take 10’s of minutes to completely finish drawing, depending on the brush width. Last week I had said that I would finish the design of this algorithm and have simulations by this week, and I fulfilled that goal.

My progress is on schedule this week because I have finished the requirement for demo day for the software part. The goal was to finish the algorithm and the simulation framework. Since the algorithm took very long to finish, Chris helped me by constructing the stroke plotting functions. I’ve tested the algorithm on multiple images, so it works for sure. This means that all that is left for the stroke drawing algorithm are optimizations to the algorithm and how the code is written.

For the next week, I will start testing the stroke drawing on the physical system. However, Eric and Chris would have to make sure all the controls work before that, so while they work on that, I’ll work on optimizing the code. Since it runs very slowly for fill-in strokes, I’ll have to either come up with some optimizations that make it faster (such as removing for-loops and using more optimal data structures), or porting the code into C++, which is a much faster algorithm.

Eric Status Report – 3/30

This week, I worked on the gantry control system and made significant progress. Early in the week, I connected the servomotor to the Pi and tested our ability to control the servo with the Pi. I wrote a test file for testing the servomotor, which proved that we could precisely control the servomotor to go to a specific angle. I worked with Chris on finishing the preliminary code for the gantry control system, which contains several control functions involving manipulating the servo and stepper motors to perform tasks. I wrote a new test file for testing the stepper motors, and experimented with several different motions and controls to ensure we could manipulate our stepper motors in the way we desired.

My progress is on schedule this week. I was able to wrap up setting up the hardware for our project, which includes the Pi, the motor shield, the stepper motors, the servomotor, and the connections between these parts. I finished the preliminary code for the gantry control system and I extensively tested the control of our motors.

In the next week, we will begin testing our system as a whole, and ensuring our subsystems are correctly interacting with each other and performing our desired tasks. We will also deal with any issues that may arise from testing. I will modify our code to account for any problems that may occur, or to make our software more efficient and accurate.

Chris Status Report – 3/30

This week I was able to complete the construction of the gantry and begin simple operation of the gantry. This involved printing the remaining parts, attaching all of the parts to the frame after our screws arrived, and calibrating the system in the Makerspace using the levels and tools available there. The completed gantry can be seen in the image below.

In addition to completing the construction of the gantry, I assisted Eric in writing the control software for the gantry. This involved writing control routines such as moving to a specified xy coordinate, initializing the gantry system, moving to a designated pigment in the palette, rotating the servo to make contact with the board, and drawing a specified stroke at a given location. This code is in a prototype form but this layer is completed and can start to be tested on our gantry. I worked with Eric to develop more test suites for our stepper motors in our gantry system, and created simple commands which allow us to move the head, draw lines, and draw a square. This functionalities are shown in the following videos.

I also assisted Harsh by creating a test suite for the painting algorithm which can create a digital model of the strokes which would be delivered to the gantry control layer. This allows Harsh to continue making process and allows him to rapidly debug his code, and also ensures that as long as his code is compatible with the test suite, it will match our gantry layer so long as we successfully implement the single function which the painting algorithm uses.

Overall this week I have remained on schedule. My tasks for the week were to complete motor integration, develop the motor control routines, and control the paintbrush. All of these tasks have been accomplished, which lead into the tasks for the following week which are to test all of the color grabbing and stroke routines on the physical system and begin testing the painting algorithm on the physical system. Eric and I will be working closely together to make sure the gantry control layer can successfully run the routines as expected and offer correct interfaces to the painting algorithm.

Team Status Report – 3/2

This week, our team discussed and finalized the final aspects of our design, and spent a good deal of time working on the design review, which involved both preparing for the presentation as well as writing the report. Many of the parts we ordered arrived, so we were able to start experimenting with them, such as comparing the parts with each other and seeing how well they would fit together. Seeing the parts in person also allowed us to confirm and modify features of our design to accommodate our parts.

The most significant risks of our project continue to be successfully completing the gantry as well as having a robust and accurate image processing algorithm, but no new risks to our project have been assessed since our last status report.

Some minor changes were made to the existing design of our system. We changed the dimensions for some of the parts of our gantry system to better accommodate the parts we have received and their measurements; for example, we finalized the dimensions of our gantry frame to be 18 inches by 18 inches. This change does not come at a cost, as the parts we ordered are flexible and can be cut or modified to different lengths and sizes. Minor changes were made to our block diagram for clarity and to better convey the flow of information, but the actual design of our system has not significantly changed.

One setback our team faced this week is that a miscommunication and careless typo on our end caused us to accidentally order an extra Raspberry Pi motor shield instead of the Raspberry Pi. As a result, some of the testing and experimenting that we wished to do with the Pi this week has to be postponed due to not having the Pi yet. In place of working with the Pi, the team instead focused its efforts on other tasks to make up for it. We have updated our schedule to have more detailed tasks as well as reflect our scheduling updates.