Wilson Holmes.jpg
User data
Name Wilson Holmes
Affiliations MTU
MOST
Interests 3D printing, Growbot, OSHE
Groups MOST users
Registered 2019
Impact Combined page views of this user's contributions to the main namespace. 5,321
Contributions Michigan Tech Open Source Hardware Enterprise
Core-XY Style (Cartesian), Direct Drive 3D Printer
OSHE Growbot
Location data
Loading map...
Location Michigan, USA

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

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

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

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)

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.

Very first dumb wire following version
The robot would simply set the speed of the motors to a scaled value of the ADC's inductor readings.


First "tic-tac" wire following version
Robot following wire, this was our first successful attempt, but the robot was too aggressive in its corrections.


First "tic-tac" wire following version failure
Robot failing to follow the wire due to too aggressive movements.


Current wire following code with fail-safe
Robot following wire and stopping when it has lost the wire.

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.

Screenshot showing the updated remote control program.
Screenshot of the crontab on the Raspberry Pi meant to check the battery level every five minutes.
Battery checking/auto-shutoff script
This is the script intended to be run every 5 minutes by the cron table defined cron job to check the voltage of the battery and react accordingly.

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!