Joshua’s Status Update for Week of 4/19

Well, I had been continuing development for the Octoprint plugin. This plugin captures a picture on each Z-axis increment, and is supposed to process the images and the pre-computed model that Hannah’s code generated. However, apparently Lucas’ computer and 3D printer are broken, and since he never sent real images using our camera (and corresponding intrinsic/extrinsic matrices), I couldn’t do full tests of the system with known camera parameters. So this past week I’ve been trying to figure out how to, with only 1 image and 1 point cloud, estimate 3D-2D point correspondences without knowing the world-to-camera matrix — since we didn’t have access to a 3D printer, I thought the easiest way to test the whole system was to stream in a timelapse of a 3D print (many can be found on YouTube, and usually include a link to the STL file or gcode being used). It’s easier said than done, because as the number of point cloud points increase, many of the algorithms I looked at performed in the order of magnitude of an hour (which is not useful for our project nor is it feasible debugging-wise).

Continue reading “Joshua’s Status Update for Week of 4/19”

Joshua’s Status Update for Week of 4/12

This week I optimized the edge error code. Originally, I was using Edward Cui’s code for the modified Hausdorff, but after slow computation times, I reimplemented the algorithm myself, which was a lot simpler than I had previously thought. Cui’s implementation imported numpy.core.umath_tests, which apparently is deprecated and runs rather slowly. Instead I call the scipy.spatial_distance.directed_hausdorff function, and use the max of the forward and reverse directed hausdorff distances as my distance metric. This is described in Comparing Images Using the Hausdorff Distance by Huttenlocher.

Joshua’s Status Update for Week of 4/5

I didn’t really do much for Capstone this week due to other exams and labs, but I am planning on continuing refining the edge/blob code I wrote last week, as well as furthering the Octoprint plugin code I had previously started on.

Joshua’s Status Update for Week of 3/29

This week I was able to accomplish my tasks of creating an edge/blob function  . I also completed a function that determined whether an error has occurred, based on the edge/blob results and a reference image. I will be demonstrating these functions using several images of small 3D printed parts.

Joshua’s Status Update for Week of 3/22

This week, I had more discussions with Hannah and Lucas. I think we’re getting back on track. We had to reassign some tasks because each of us now have restrictions on the resources we have access to. So since Hannah has done all the research on the gcode, and since I offered to do the blob code. I started working on the blob comparison code as well as blob detection code. Nothing is really working, so I’m glad the demo got pushed back a week. This week I will finish the blob stuff and integrate that with the core plugin.

Joshua’s Status Update for Week of 3/15

Considering the circumstances with COVID-19, I didn’t do as much this week as in previous weeks. However, during Spring Break, I did begin implementation of the main system plugin. This included a half-runnable/half-pseudcode Python implementation of the RPi camera IO access, creating the prototype for a basic Octoprint plugin with the appropriate handers to access the gcode, and messing around with the possibility of multithreaded. I also attempted to begin the point cloud code. This can all be found in the team’s Github repo. I also wrote the statement of work.

This upcoming week I need to refocus on the main system code and provide solid system error messages and give better access to the necessary IO and handlers.

Joshua’s Status Update for Week of 2/23

What I did:

I presented the Design Review. I also re-read Vision based error detection for 3D printing processes by Felix Baumann and Dieter Roller to understand fully the details of their algorithm. By reading Initial Work on the Characterization of Additive Manufacturing (3D Printing) Using Software Image Analysis by Jeremy Straub, I was able to get more of a run-through of other ways to model the printed object.

Continue reading “Joshua’s Status Update for Week of 2/23”

Joshua’s Status Update for Week of 2/16

What I Did:

Because of our design change late in the week, a lot of the details I did during the week became irrelevant. I was able to implement the optimal camera placement algorithm as mentioned in the previous post, but since we are now using lasers alongside the built-in Ultimaker3 camera, it’s not pertinent anymore. I also began a trade study for an SD card reader that did not lead anywhere because of the design change.

I created a GitHub repo so that code sharing and versioning control could be made easier, but right now it just contains the optimization code.

I made the system block diagram that is seen on our Team Status Update.

I also designed a first-pass power regulation and protection circuit for the RPI Shield (special thanks to 18220, and my eyes for reading the RPI3B+ datasheet and HAT specs). We need protection because new version of the RPI have removed the fuses on the GPIO pins.

Am I Behind?:

I would say that I am behind because the team in general is behind. Because we changed our design late into the Design Phase, we have had to quickly re-refine our requirements, redo our trade studies, and quickly communicate our understand to each other, and I don’t know if we have efficiently done that. However, I believe that once the Design Review is finished, we will be on track to put in our part orders.

Goals for the Upcoming Week:

I get to head up the Design Presentation! Also, I need to order parts required by the RPI Shield. I also need to start laying out the Shield schematic, as well as writing the code that parses the g-code.

Joshua’s Status Update for Week of 2/9

I started the design review slides. In order to determine optimal camera positions, I read Two-Phase Algorithm for Optimal Camera Placement and began implementing its algorithm in Python. There is sort of a steep learning curve, since I haven’t had real experience with optimization techniques. I started off using the cvxpy Python framwork, but got stuck when I realised it could not generate binary integer variables of more than 2 dimensions without clever tricks. I am shifting to using the Python API for IBM’s CPLEX solver (available to me through CMU). By using the process described in the paper and experimenting, we should have a camera arrangement that covers a majority of the print bed. In addition, I started on the block diagram/circuit for the power system and finalized the choice in RF module for the WIFI chip.

The ESP-12F
The ESP-12F contains the ESP8266EX chip, and it can be soldered onto the PCB

Joshua’s Status Update for Week of 2/2

I completed a trade study of various wifi chips. At first I thought we could use the ESP8266EX chip, but after looking further into developing with it, I believe we should move towards using a complete RF module based on the ESP8266EX. I also began a trade study for microprocessors. In addition, I researched and created a list of 24+ types of 3D printing errors, and in preparation for the proposal presentation, narrowed the list down to 4 error classes our device would detect.