User:Wilsonh
Hello! My name is Wilson Holmes and I am a Senior Computer Engineering Undergraduate student at Michigan Technological University. I am love the snow/winter and am also very passionate about Linux, robotics, computers, and programming. Currently I am working with Dr. Joshua M. Pearce in the MTU MOST lab on open source bioreactors!
Full Name: Wilson Holmes
Position: MOST Lab Assistant, MTU Computer Engineering Undergraduate
Background: Computer Engineering
Current School: Michigan Technological University
Interests: Robotics, 3D Printing, Programming, Linux and Robot Operating System (ROS), CAD, Open Source Technology
Skills: Linux, Programming (Python, C/C++, Matlab, Java), 3D Printing and Design, CNC Lathe Operation, Mechanical Design- CAD (Autodesk Inventor, NX, OpenSCAD), Creative Thinking and Problem Solving, Soldering (TH, SMD)
Email: wilsonh@mtu.edu
Brief Biography[edit | edit source]
I am from the Grand Traverse area in lower Michigan. I currently go to school at Michigan Technological University and am working on my undergraduate degree in Computer Engineering. I am planning on continuing to get my masters as well. I previously worked at Verified Path Machining where I used CAD and operated CNC lathes. I love the Keweenaw, skiing and snowboarding, robotics, and programming.
Current Projects[edit | edit source]
- Building a 3D printer with a core-xy motion platform, and a direct drive extruder (E3D Hemera). Runs on 8-bit electronics based on an Arduino Mega 2560 and a RAMPS 1.4 board.
OSHE (Enterprise Projects)[edit | edit source]
Semester 1 Spring 2020[edit | edit source]
Growbot WebUI (Front-End)[edit | edit source]
This semester I worked on the front and back end of a web app for the Growbot project. Here is a link to the OSHE GitHub V1 branch. The main goal for the semester (for the website) was to get sensor data from the robot to be graphed on a page of the website. This was accomplished using python3, the Flask framework for python, Flask-Admin, Bootstrap 4 classes, graph.js, a SQLite3 database, the peewee object relation mapper for SQLite, and many other software tools. By the end of the semester, the website was capable of dynamically graphing all data stored in the database, as well as displaying a webcam stream from the robot. There are also conveniently placed links on the website that will take the user to the Appropedia Standard Operating Procedures (SOP) page with a tutorial on how to add new sensors to the Growbot, as well as how to start up the web server correctly. This included mini tutorials of all of the software tools I had used throughout the semester so that hopefully this project can easily be taken over/understood by future teams/people. In addition to the SOP page, I also provided a full installation guide on the Firmware Installation page. Because of the use of Bootstrap classes, I was able to make the website have full functionality and correct styling for both mobile and desktop devices.
Growbot WebUI Screenshots
-
Fig 1: Home page of the Web UI
-
Fig 2: About page with links to the Appropedia page
-
Fig 3: Growcam page with webcam stream
-
Fig 4: Graphs page with automatically generated graphs from all the sensors in the database
Growbot WebUI (Database Management/Backend)[edit | edit source]
I also implemented a data management system for the Growbot's database, that everyday (1 am) saves the database tables to .csv files, and clears the database, and sends an email with those CSV files to the user. Using Flask-Admin allowed me to give the users an option to view the database (Individual tables and specific contents) right on the website. Eliminating the need for copying the database file over sshfs to the users main computer.
Growbot CSV Export
-
Fig 1: The Flask-Admin page that allows you to see your "sensor" database table
-
Fig 2: The Flask-Admin page that allows you to see your "sensorreading" database table
-
Fig 3: An Example of a .csv file export
-
Fig 4: The two exported .csv files
Semester 2 Fall 2020[edit | edit source]
Growbot ODrive (Configuration)[edit | edit source]
During my Fall 2020 semester on the Growbot project I was software lead of the team and worked on configuring and programming the open source motor controller, ODrive v3.6. The main goal for the semester was to get the robot physically moving and autonomous functions developed. By the end of the semester, the robot was able to be controlled through a python curses Terminal User Interface (TUI), the ODrive configuration procedure/parameters were recorded in odriveCommands.txt
for future students to reference, and rudimentary wire following was implemented. This was accomplished with the use of an Adafruit Analog to Digital Converter (ADC) and an inductor-circuit combo that can be found here at robotshop.com. To see a snapshot of this semester's software progress I will refer you to the OSHE GitHub V2 branch for the "OSHE_Growbot" repository.
Growbot ODrive Configuration and Sensor Setup
-
Figure 1: Inductors on the Growbot for wire guidance.
-
Figure 2: Robotshop circuit that amplifies the inductors signal.
-
Figure 3: Adafruit i2C ADC to read values from Robotshop circuit.
Growbot ODrive (Control and Testing)[edit | edit source]
So far, all of the programming that I have done in the enterprise has been in python. This includes the Terminal User Interface to a remote control program for the Growbot, the test files for the Adafruit ADC, and the rudimentary wire following code. Even odrivetool
, a terminal shell for the ODrive is remarkably similar to the python shell. As for wire following, for the current set-up there is no feedback control loop in place for the robot (no PID) so it is directly driven by the values coming from the inductor circuit and to the ADC. This is something that can be worked on in future semesters when hopefully in-person collaboration is available again.
Growbot Remote and Wire Following Control (Click thumbnails to see animations)
-
Figure 1: The Growbot being controlled over ssh by
teleop.py
, a Terminal User Interface (TUI) for remote control of the robot. -
Figure 2: The Growbot moving back and forth with remote control.
-
Figure 3: The Growbot "following" a wire.
Semester 3 Spring 2021[edit | edit source]
Growbot Wire Following[edit | edit source]
During the Spring 2021 semester on the Growbot project, I was again software lead of the team and worked on implementing wire following on the robot. The main goal for the semester's software progress was to get the robot following a wire on the ground, and by the end of the semester I was able to accomplish this. By using the two inductors on the robot in combination with their OP-amp circuit and the Adafruit ADC connected to the Raspberry Pi I was able to get the robot to follow a wire and also fail safely if the robot lost track of the wire. I have included several videos below to show the differences in implementation between the beginning of the semester, the first proof of concept test, the first true successful test on the ground (as well as an example failure), and then the final revision which while more reliable, also has an auto-stop when the robot has lost track of the wire. The current wire following code can be seen here, but to see a snapshot of this semester's entire software progress, see the OSHE GitHub V3 branch. In one of the below videos I describe the wire following version as "tic-tac", and by that I mean that neither inductor is intended to sense the wire at all times. The robot continues to drive forward when it "sees" nothing on either inductor, but will then begin to correct with a speed that is a factor of the strength of the signal being read from either inductor. That way the robot should be able to react more or less aggressively depending on how off course it is.
Growbot Remote Control Code Updates And Low Battery Auto-shutdown[edit | edit source]
I also made some improvements to the remote control code from last semester. There was a way to control the speed of the robot by pressing `f` to increment the motor speed up by 0.25 turns/sec and `s` to decrement the speed by 0.25 turns/sec. This however, was not visible to the user anywhere in the TUI. So I added instructions to the terminal window explaining this (and the rest of the functionality of the program) so that the user would be aware. I also added a speed readout on the top so that the user would not have to guess how fast the robot was set to move at. That code can be found here. I also added an entry to the cron table on the Raspberry Pi that would run a bash script to then run a python program to check the battery level of the robot, eventually this code will be adapted to instead tell the robot when it needs to go back to the charging base, but for now it is simply a safe guard to shutdown the Raspberry Pi if the battery is too low as to not over-discharge the LiPo battery, which ruins the battery, as well as making it a safety hazard if recharged from that overly-discharged state.
Work Experience[edit | edit source]
Past Employment[edit | edit source]
- Verified Path Machining
- Beginning of Summer 2016 - End of Summer 2018
- Reverse engineered a grout swivel and other related drilling parts with Fusion 360, then operated the CNC machines that the parts were produced.
- FANUC America Corporation
- Beginning of Summer 2020 - End of Summer 2020
- Tested iRVision accuracy with different robot calibration techniques on two 6-axis robot models, a R-2000 and an LR-Mate. Wrote technical documentation and scripts for making data collection and other parts of the testing process easier for the vision system testing.
- Edited .HTML and other files to update the built in beginner iRvision tutorials that are stored/run on the robot controllers that are equipped with vision capabilities.
Hobbies[edit | edit source]
I love playing acoustic guitar and singing. Photography, video editing, PC gaming, and programming also interest me. I also ski, iceskate, skateboard, and snowboard... I love the winter!