Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion 404.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ title: 404
layout: 404
---

The page you're trying to load was not found
The page you're trying to load was not found.
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# John Lyle's Portfolio

## To Do List
* AugRE Work
* Drop Drone RL
A Jekyll-based portfolio website showcasing my engineering projects, experiences, and technical capabilities.

## Current Projects
* Gaze-based multi-agent control research
* 3D printing with robotic arms
* Advanced battlebot development
3 changes: 2 additions & 1 deletion _config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ author-name: John Lyle
# URL for the Image of the Author
author-image: /assets/images/headshot.png
# 60 Words About the Author
author-about: I am a fourth-year mechanical engineering student at UT Austin. I have experience in electronics, software, and mechanical design, and love the interdisciplinary nature of robotics. I am passionate about developing innovative R&D solutions to improve human lives and mitigate risks.
author-about: "I am a mechanical engineering master's student from UT Austin with experience in electronics, software, and mechanical design. I love the interdisciplinary nature of robotics and am passionate about developing innovative R&D solutions to improve human lives and mitigate risks."
# URL to the Author's Profile (i.e., Github, Twitter, Stackoverflow, etc)
author-url: https://www.linkedin.com/in/johnlyleiv

Expand Down Expand Up @@ -99,3 +99,4 @@ exclude:
- vendor/ruby/

repository: jbliv/jbliv.github.io

2 changes: 0 additions & 2 deletions _includes/about.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,10 @@
<a href="{{site.url}}{{site.baseurl}}/#contact"
class="button is-rounded is-uppercase has-text-weight-normal is-black is-outlined">Contact
Me</a>
</a>
</div>
<div>
<a href="{{site.url}}{{site.baseurl}}/projects"
class="button is-rounded is-uppercase has-text-weight-normal is-black is-outlined">Projects</a>
</a>
</div>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion _includes/contact.html
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
{% endunless %}
<hr>
<h3 class="is-size-5 is-uppercase has-text-weight-semibold has-text-black is-marginless">
You Can find me here
You can find me here
</h3>
<div class="column is-full is-size-3">
{% unless site.facebook_username == %}
Expand Down
1 change: 0 additions & 1 deletion _includes/showcase.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ <h3 class="subtitle has-text-white-bis is-uppercase has-text-weight-medium is-ma
<hr>
<a href="{{site.url}}{{site.baseurl}}/#about"
class="button is-white is-rounded is-outlined is-uppercase has-text-weight-normal">About Me</a>
</a>
</div>
</div>
</section>
8 changes: 4 additions & 4 deletions _posts/2023-01-10-optimal-schedule-algorithm.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ tags:

**Problem Statement:** Automate the schedule creation process for a snack shop while accounting for current metrics used in manual schedule creation.

**Project Details:** This is a project I did of my own volition during winter break of my sophomore year. It was made using python and the openpyxl package. It is only partially completed and does not have the final touches I wish it did. Although the code is not the prettiest and is missing some features I am still proud of the underlying algorithm which this post will focus heavily on. I took user availability and working time preferences from an excel sheet which was read by the program and then an optimal schedule was created and formatted into another excel sheet for printing and distribution.
**Project Details:** This is a project I did of my own volition during winter break of my sophomore year. It was made using Python and the openpyxl package. It is only partially completed and does not have the final touches I wish it did. Although the code is not the prettiest and is missing some features, I am still proud of the underlying algorithm which this post will focus heavily on. I took user availability and working time preferences from an Excel sheet which was read by the program, and then an optimal schedule was created and formatted into another Excel sheet for printing and distribution.

**Project Background:** The schedule that this program creates is for a student org snack shop. There are 16 officers that each have 3 hours a week. The shop is open 8 hours a day 5 days a week. The image below shows an example of how one would fill out their availability. The red indicates unavailable, the white indicates available, the light green indicates preferred, and the dark green indicates ideal. The cover image in this post is the final result of the program.

Expand All @@ -36,13 +36,13 @@ tags:
6. Least amount of light green. (Focus on ideal hours)
7. Least middle hour of 3 hour blocks. (When a person has 3 hours of straight availability try and pick the first or last hour)

**Class Based Structure:** This program utilizes object oriented program and python classes in order to effectively accomplish the goal. I created classes for both the officer and the schedule. This allowed me to store availability for each officer and the schedule created as well as it's metrics within the corresponding class. I was also able to create functions for each class such as ones for getting an officer's availability and for getting metrics from a schedule.
**Class Based Structure:** This program utilizes object-oriented programming and Python classes in order to effectively accomplish the goal. I created classes for both the officer and the schedule. This allowed me to store availability for each officer and the schedule created as well as its metrics within the corresponding class. I was also able to create functions for each class such as ones for getting an officer's availability and for getting metrics from a schedule.

**Core Algorithm:** The main algorithm behind this program uses a tree based structure with a combination of breadth and depth first searches. The root of the tree is an empty schedule and a child is created for each officer available within the first hour of the first day. This process is repeated for each hour under each child and added to the queue. Children are added to the queue with those representing an addition of an Ideal or Preferred hour first.
**Core Algorithm:** The main algorithm behind this program uses a tree-based structure with a combination of breadth and depth first searches. The root of the tree is an empty schedule and a child is created for each officer available within the first hour of the first day. This process is repeated for each hour under each child and added to the queue. Children are added to the queue with those representing an addition of an Ideal or Preferred hour first.

Once the queue reaches a size of 10,000 the search is switched to a depth first search until it returns below 10,000. Due to the order of placement in the queue when it is treated as a stack schedules with more Ideal hours tend to appear first. When a complete possible schedule is found it is added to the list of solutions and it's metrics are recorded. From then on new schedules are only added if they are equal in metrics rankings. If a better schedule is found the list is reset as well as the comparison metrics.

If the program checked every possible schedule combination it would take days or weeks to run. In order to optimize the run time each branch has it's metrics tracked as new children are created. If the branch gets to a point where it will never have better rankings than the current best solution then the branch is removed and no further search will be done on it. This drastically decreases the amount of nodes searched and in turn decreases computing time.
If the program checked every possible schedule combination it would take days or weeks to run. In order to optimize the run time, each branch has its metrics tracked as new children are created. If the branch gets to a point where it will never have better rankings than the current best solution, then the branch is removed and no further search will be done on it. This drastically decreases the amount of nodes searched and in turn decreases computing time.

During my testing the input data I used tended to search 340 million nodes and locate 1.6 million solutions in ~40 minutes of runtime before determining that the optimal solution had been found.

Expand Down
6 changes: 3 additions & 3 deletions _posts/2023-04-24-wings.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ tags:

**Problem Statement:** The primary goal of this project was to create a wireless noble gas sampler fleet that was both low cost and easily portable. This project was handed off to myself and a few other undergraduates from a previous group of undergrads to fix a few things with the design and then finish manufacturing the rest of the gas samplers.

**Project Background:** Underground nuclear weapons testing commonly releases a radioactive isotope of xenon as a byproduct of such tests. Since noble gases travel through soil into the atmosphere these gases is a great way to detect nuclear weapons tests. Current solutions for noble gas sampling require incredibly expensive machines that are nearly impossible to setup in remote locations. By creating a cheaper and portable solution for collecting samples we can instead ship these samples back to labs to be tested instead. Another motivation behind this program was to create improved atmospheric transport models for the gas studied.
**Project Background:** Underground nuclear weapons testing commonly releases a radioactive isotope of xenon as a byproduct of such tests. Since noble gases travel through soil into the atmosphere, these gases are a great way to detect nuclear weapons tests. Current solutions for noble gas sampling require incredibly expensive machines that are nearly impossible to set up in remote locations. By creating a cheaper and portable solution for collecting samples, we can instead ship these samples back to labs to be tested. Another motivation behind this program was to create improved atmospheric transport models for the gas studied.

**Project Timeline:** I joined this group in May 2022 where we were tasked with adding a few finishing touches to the design and manufacturing 4 more of the sampling units. In my first few weeks on this project I spent a lot of time familiarizing myself with all aspects of the design and assembly process. By doing this I helped myself better understand how the gas sampler worked and more importantly I caught multiple key design flaws in the sampler that required drastic changes in order to remedy. After creating fixes for all of these flaws I assembled and documented the assembly procedure for the first of 5 samplers to be built.

Expand All @@ -37,7 +37,7 @@ Once assembly was complete the samplers were used in an irradiated gas release a
---
# Individual Contributions

**Design Flaw Identification and Fixing:** While acquainting myself with this project I found many flaws that would have greatly hindered the operating abilities of the gas samplers. Once I identified all of these flaws I then designed solutions for each of them.
**Design Flaw Identification and Fixing:** While acquainting myself with this project, I found many flaws that would have greatly hindered the operating abilities of the gas samplers. Once I identified all of these flaws, I then designed solutions for each of them.

**1. Incorrect solenoid selection:** When examining the data sheet for the solenoids I noticed they were only capable of holding to the desired rated pressure of 135 psi in one direction. This would mean that samples would leak once the main line was depressurized. I selected a replacement component that was a normally closed globe valve that would automatically close in case of power loss to preserve the sample. This component would satisfy pressure requirements and was significantly cheaper however it took 5 seconds to completely actuate.

Expand All @@ -55,7 +55,7 @@ Once assembly was complete the samplers were used in an irradiated gas release a
<img src="/assets/images/wings/new.jpg" width="480" height="260" style="max-width: 100%; height: auto;" alt="New Tank Layout">


**Software Contributions:** In order to account for the actuation delay of the solenoids a delay in a few areas of the code had to be created. Since the Arduino is single core MCU I had to learn how to do simulated multi-threading in order to allow other functions such as error checking to run during said delays. In addition to this I also fixed various bugs with the web interface as well.
**Software Contributions:** In order to account for the actuation delay of the solenoids, a delay in a few areas of the code had to be created. Since the Arduino is a single-core MCU, I had to learn how to do simulated multi-threading in order to allow other functions such as error checking to run during said delays. In addition to this, I also fixed various bugs with the web interface as well.

**Safety Cap:** It was important to have a method of identifying tanks full of irradiated samples and ensure that they couldn't be accidentally opened. I designed the safety caps shown below to remove the possibility of accidental sample release.

Expand Down
4 changes: 2 additions & 2 deletions _posts/2023-10-3-handheld-controller.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ tags:
<img src="/assets/images/controller/teleop.gif" width="480" height="260" style="max-width: 100%; height: auto;" alt="Demonstration GIF">


**Problem Statement:** Create an ergonomic controller that integrates 1 analog input and 4 digital inputs from the user. All inputs must be sent through 2 analog signals and all inputs must be useable with the hand in a closed grasp position. In addition I also had to create a ROS node for decoding the analog signals and triggering the associated functions.
**Problem Statement:** Create an ergonomic controller that integrates 1 analog input and 4 digital inputs from the user. All inputs must be sent through 2 analog signals and all inputs must be usable with the hand in a closed grasp position. In addition, I also had to create a ROS node for decoding the analog signals and triggering the associated functions.

**Project Timeline:** This project was given to me during my robotics engineering internship at [Contoro Robotics](https://www.contoro.com/). First I designed the circuit that allowed me to send 1 analog input and 4 digital inputs through 2 analog signals. Next I iterated through many prototypes of main body designs. Using feedback from my coworkers I arrived at a base design that was comfortable to hold. Unfortunately the grip still wasn't comfortable enough for continuous use over an extended period of time. I then decided to pivot to a consumer pilot stick from Logitech. I disassembled this pilot stick and implemented my circuit by modifying the included PCB as well as replacing the output USB cable with the required connector for my use case. Once the controller was ready to be implemented I mounted it on the exoskeleton and performed a calibration. Finally I created a ROS node for decoding the signals and performing the desired functions.
**Project Timeline:** This project was given to me during my robotics engineering internship at [Contoro Robotics](https://www.contoro.com/). First, I designed the circuit that allowed me to send 1 analog input and 4 digital inputs through 2 analog signals. Next, I iterated through many prototypes of main body designs. Using feedback from my coworkers, I arrived at a base design that was comfortable to hold. Unfortunately, the grip still wasn't comfortable enough for continuous use over an extended period of time. I then decided to pivot to a consumer pilot stick from Logitech. I disassembled this pilot stick and implemented my circuit by modifying the included PCB as well as replacing the output USB cable with the required connector for my use case. Once the controller was ready to be implemented, I mounted it on the exoskeleton and performed a calibration. Finally, I created a ROS node for decoding the signals and performing the desired functions.

---
# Engineering Process Overview
Expand Down
Loading