291 lines
13 KiB
Plaintext
291 lines
13 KiB
Plaintext
---
|
|
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
|
|
|
import H2 from "@components/H2.astro";
|
|
import H3 from "@components/H3.astro";
|
|
import InlineLink from "@components/InlineLink.astro";
|
|
import Li from "@components/Li.astro";
|
|
import LinkButton from "@components/LinkButton.astro";
|
|
import Carousel from "@components/Media/CustomCarousel/CustomCarousel.astro";
|
|
import PdfViewer from "@components/Media/PdfViewer.astro";
|
|
import PageGroup from "@components/PageGroup.astro";
|
|
import Paragraph from "@components/Paragraph.astro";
|
|
import Paragraphs from "@components/Paragraphs.astro";
|
|
import PopoverWordDefinition from "@components/PopoverWordDefinition.astro";
|
|
import SkillMatrix from "@components/SkillMatrix/SkillMatrix.astro";
|
|
import Timeline from "@components/Timeline/Timeline.astro";
|
|
import Ul from "@components/Ul.astro";
|
|
|
|
import type { carouselGroup } from "@interfaces/image-carousel.ts";
|
|
import type { categorySkills } from "@interfaces/skill-matrix.ts";
|
|
import type { timelineEntry } from "@interfaces/timeline.ts";
|
|
|
|
import electronics_box from "@assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/electronics-box.jpg";
|
|
import jet_drive from "@assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/jet-drive.jpg";
|
|
import ross_ebox_4p0 from "@assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/ross-ebox-4p0.jpg";
|
|
import ross_on_vessel_at_night from "@assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/ross-on-vessel-at-night.jpg";
|
|
import ross_on_vessel from "@assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/ross-on-vessel.jpg";
|
|
import publication from "@assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/ross-publication.pdf";
|
|
import ross_team from "@assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/ross-team.jpg";
|
|
import ui from "@assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/ui.jpg";
|
|
|
|
import {
|
|
deploymentTimeline,
|
|
subTitles,
|
|
} from "./osu-ceoas-ocean-mixing-group.ts";
|
|
|
|
const headerCarouselGroup: carouselGroup = {
|
|
animation: "slide",
|
|
images: [
|
|
ross_team,
|
|
ross_on_vessel,
|
|
ross_on_vessel_at_night,
|
|
ross_ebox_4p0,
|
|
electronics_box,
|
|
jet_drive,
|
|
ui,
|
|
],
|
|
};
|
|
|
|
const timeline: timelineEntry[] = [
|
|
{
|
|
event: "Started",
|
|
eventDetail: "Joined ROSS",
|
|
date: "April 2016",
|
|
},
|
|
...deploymentTimeline,
|
|
{
|
|
event: "Finished",
|
|
eventDetail: "Left ROSS",
|
|
date: "May 2018",
|
|
},
|
|
];
|
|
|
|
const categorizedSkills: categorySkills[] = [
|
|
{
|
|
category: "Electrical",
|
|
skills: [
|
|
{
|
|
item: "Schematic & PCB Design",
|
|
subItems: [{ item: "Altium Designer" }],
|
|
},
|
|
{
|
|
item: "PCB Assembly & Rework",
|
|
subItems: [
|
|
{ item: "Handheld Soldering" },
|
|
{ item: "Handheld Hot-Air Reflow" },
|
|
{ item: "Oven Reflow" },
|
|
],
|
|
},
|
|
{
|
|
item: "Electrical Diagnostics",
|
|
subItems: [
|
|
{ item: "Multimeters" },
|
|
{ item: "Oscilloscopes" },
|
|
{ item: "Logic Analyzers" },
|
|
],
|
|
},
|
|
{
|
|
item: "Harnessing Fabrication",
|
|
subItems: [
|
|
{ item: "DC Power & Signal" },
|
|
{ item: "Low Frequency RF (<1GHz)" },
|
|
{ item: "Waterproofing" },
|
|
],
|
|
},
|
|
{
|
|
item: "Simulation",
|
|
subItems: [{ item: "LTspice" }],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
category: "Software & Environments",
|
|
skills: [
|
|
{ item: "Git" },
|
|
{
|
|
item: "Programming Languages",
|
|
subItems: [
|
|
{ item: "Python 2/3" },
|
|
{ item: "Bash Shell Scripting" },
|
|
{ item: "Low-Level Embedded C/C++ (Atmel Studio)" },
|
|
{ item: "High-Level Embedded C/C++ (Arduino/Teensy)" },
|
|
{ item: "Matlab" },
|
|
],
|
|
},
|
|
{
|
|
item: "Operating Systems",
|
|
subItems: [
|
|
{
|
|
item: "Linux",
|
|
subItems: [{ item: "Ubuntu" }, { item: "Raspbian" }],
|
|
},
|
|
{ item: "Microsoft Windows" },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
---
|
|
|
|
<ExperienceLayout
|
|
title="Robotic Oceanographic Surface Sampler"
|
|
subTitles={subTitles}
|
|
>
|
|
<Carousel carouselGroup={headerCarouselGroup} />
|
|
<div class="grid grid-flow-row place-content-center gap-4 md:grid-flow-col">
|
|
<LinkButton
|
|
href="https://tos.org/oceanography/article/autonomous-ctd-profiling-from-the-robotic-oceanographic-surface-sampler"
|
|
title="Official Scientific Publication"
|
|
/>
|
|
<LinkButton
|
|
href="https://www.kfsk.org/2017/04/19/remote-controlled-kayaks-ready-research-leconte-glacier/"
|
|
title="KFSK Petersburg Feature / Interview"
|
|
/>
|
|
</div>
|
|
<PageGroup>
|
|
<Fragment slot="header"><H2>Summary</H2></Fragment>
|
|
<PageGroup>
|
|
<Fragment slot="header"><H3>Timeline</H3></Fragment>
|
|
<Timeline timeline={timeline} />
|
|
</PageGroup>
|
|
<PageGroup>
|
|
<Fragment slot="header"><H3>Key Takeaways</H3></Fragment>
|
|
<Ul>
|
|
<Li
|
|
>Hand assembled and validated dozens of custom <PopoverWordDefinition
|
|
key="PCBs"
|
|
/>, wiring harnesses, and electronics boxes</Li
|
|
>
|
|
<Li
|
|
>Wrote, debugged, and assisted with development of embedded firmware</Li
|
|
>
|
|
<Li
|
|
>Accompanied the team on two deployments to the LeConte glacier in
|
|
Alaska to gather ice-water melt and mixing data</Li
|
|
>
|
|
</Ul>
|
|
</PageGroup>
|
|
<SkillMatrix categorizedSkills={categorizedSkills} />
|
|
</PageGroup>
|
|
<PageGroup>
|
|
<Fragment slot="header"><H2>Details</H2></Fragment>
|
|
<PageGroup>
|
|
<Fragment slot="header"><H3>ROSS Overview</H3></Fragment>
|
|
<Paragraphs>
|
|
<Paragraph>
|
|
ROSS was a gasoline-powered water-sampling robotics platform built
|
|
around a Mokai jet-drive kayak. It's purpose was to continuously, and
|
|
often autonomously, gather water data over extremely long distances
|
|
and/or in locations where human-safety concerns would make gathering
|
|
it manually too risky. There were a variety of sensors it could be
|
|
outfitted with depending on the needs of the exact research project
|
|
and destination, but some common ones were an <PopoverWordDefinition
|
|
key="ADCP"
|
|
/> for gathering 3D water current vector data, a <PopoverWordDefinition
|
|
key="CTD"
|
|
/> for measuring water conductivity/temperature/depth, and a high-precision
|
|
GPS for generating meaningful 3D plots of the sensor data. These kayaks
|
|
have been deployed to places like the Indian/Pacific Ocean mixing line,
|
|
and along the active LeConte glacier terminus in Alaska, gathering novel
|
|
data on how vastly different bodies of water act when mixing.
|
|
</Paragraph>
|
|
<Paragraph>
|
|
In its original configuration, the Mokai kayak's throttle and steering
|
|
were already drive-by-wire, which made it an excellent starting point
|
|
for automating. It was also designed for easy transport, breaking down
|
|
into three major compartments that could easily fit in the back of a
|
|
short-bed pickup. For our custom hulls, Mokai also thickened the
|
|
plastic significantly and provided a bare minimum of electronics. This
|
|
barebones platform was then modified by our team to include a
|
|
storm-surge-rated intake and exhaust for the engine, a keel to improve
|
|
rough sea stability, a large alternator, and a plethora of mount
|
|
points the electronics, batteries, fuel, sensors, and radios.
|
|
</Paragraph>
|
|
<Paragraph>
|
|
In terms of the electronics and software for this project, the kayak
|
|
itself was centered around a Pixhawk flight controller flashed with a
|
|
modified Rover variant (this was before a dedicated boat option
|
|
existed). One pelican-case electronics box housed this controller, a
|
|
small <PopoverWordDefinition key="NUC" /> with <PopoverWordDefinition
|
|
key="UPS"
|
|
/>, wifi router, radio control receiver, satellite modem, and quite a
|
|
few custom <PopoverWordDefinition key="PCBs" /> for interfacing with external
|
|
electronics and implementing glue logic/safety overrides. A second box housed
|
|
nothing but sealed lead-acid batteries, which were charged by the alternator
|
|
on later revisions of the platform. The PC ran a custom python script, which
|
|
interfaced with a Matlab GUI over a remote radio link. The kayak could also
|
|
be overridden with an FrSky RC controller, when at close range, and additionally
|
|
allowed for direct control without the PC needing to be in-the-loop. To
|
|
see some of the custom hardware inside of these boxes, check out Nick McComb's
|
|
design pages for them
|
|
<InlineLink
|
|
href="https://nickmccomb.net/college/printed-circuit-boards#omg"
|
|
>here</InlineLink
|
|
>! For even more context on ROSS, and history from before I joined the
|
|
project, check out his <InlineLink
|
|
href="https://nickmccomb.net/college/ross">summary page</InlineLink
|
|
>.
|
|
</Paragraph>
|
|
</Paragraphs>
|
|
</PageGroup>
|
|
<PageGroup>
|
|
<Fragment slot="header"><H3>My Experience</H3></Fragment>
|
|
<Paragraphs>
|
|
<Paragraph>
|
|
I first started on this project by doing what I thought was a one-off
|
|
help session for Nick, working on an issue he was having getting
|
|
ROSS's engine to start and shut down properly. I had more experience
|
|
with engines, and engine control, so I quickly realized that a beefier
|
|
and high-voltage-rated relay was needed to avoid arc-welding the
|
|
contacts closed during shutdown. He rolled out a <InlineLink
|
|
href="https://nickmccomb.net/college/printed-circuit-boards/ross-ebox-auxillary"
|
|
>new board revision</InlineLink
|
|
> with those changes and it was the final version used for the rest of ROSS's
|
|
lifetime. This little taste of the project, and some wishful prodding from
|
|
Nick, was enough for me to join the team part-time.
|
|
</Paragraph>
|
|
<Paragraph>
|
|
While the original plan for me was to re-write the <PopoverWordDefinition
|
|
key="GUI"
|
|
/> for ROSS in Python using Qt, it turns out they needed my help on the
|
|
electrical and firmware side more than anything, so most of my time at the
|
|
lab was focused on that. I hand-assembled so many of Nick's circuit boards
|
|
at this lab that I still can pick his out of a lot from design aesthetic
|
|
alone! I also helped with plenty of wiring harness builds, electrical box
|
|
fabrication, embedded firmware development, and of course, plenty of electrical
|
|
and software debugging. One thing that this project taught me very quickly
|
|
was how difficult it was to make reliable hardware in a high vibration,
|
|
electrically noisy, and salt-laden environments. The number of PCBs we went
|
|
through, alongside wiring harnesses, was pretty incredible considering the
|
|
lengths we went to in order to protect them.
|
|
</Paragraph>
|
|
<Paragraph>
|
|
A very unique aspect of this team/project, and a large part of why I
|
|
was drawn to it, was that it was about as hands-on as you could
|
|
possibly get. Doubly so for an undergraduate student! Not only did I
|
|
get to design and repair a real robot, but it was actually being used
|
|
for proper scientific research! We would regularly go to Newport, OR
|
|
for testing and have to make crazy additions and repairs on the fly.
|
|
This got even more extreme during my deployments to the <InlineLink
|
|
href="http://localhost:4321/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler"
|
|
>LeConte glacier</InlineLink
|
|
>, as you had to get creative and fix things with what you had on-hand
|
|
due to how remote we were. These are experiences that graduate
|
|
students rarely even get to have, so I'm extremely thankful and fond
|
|
of the time I spent here. Huge shout out to <InlineLink
|
|
href="https://nickmccomb.net">Nick</InlineLink
|
|
>, again, who made it possible in the first place! Also be sure to
|
|
check out the scientific paper on this project below!
|
|
</Paragraph>
|
|
</Paragraphs>
|
|
</PageGroup>
|
|
</PageGroup>
|
|
<PageGroup>
|
|
<Fragment slot="header"><H2>Official Scientific Publication</H2></Fragment>
|
|
<div class="h-334">
|
|
<PdfViewer pdf={publication} />
|
|
</div>
|
|
</PageGroup>
|
|
</ExperienceLayout>
|