Files
caperren-com/src/pages/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler.astro
Corwin Perren 37e7b3617a
All checks were successful
Build and Test - Staging / test (pull_request) Successful in 26m28s
Build and Test - Staging / build_and_push (pull_request) Successful in 5m4s
Build and Test - Staging / deploy_staging (pull_request) Successful in 3s
Extra Li wrappers removed, added word
2025-12-06 00:12:54 -08:00

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>