Embedded - 301: Giant Novelty Check
Episode Date: August 29, 2019Carter Frost spoke with us about the Cabrillo College Robotics club and winning the 2019 NASA Swarmathon. Cabrillo has many student clubs. Cabrillo Robotics has a Facebook page and is @CabrilloRobotic... on Twitter. The club gets its funding from the Cabrillo Foundation (to donate, make sure to note “Cabrillo Robotics Club” in your contribution). Please RSVP for the Embedded 300 party on Eventbrite.com.
Transcript
Discussion (0)
Welcome to Embedded.
I am Alicia White.
I'm here with Christopher White.
And today, our guest is in person.
Carter Frost is here to talk to us about swarms, robotics, and clubs.
Hi, Carter.
Thanks for joining us.
Thank you.
Could you tell us about yourself?
So I'm a student at Carrillo College and various different community colleges.
And I've been involved with the Robotics Club for about two years.
And this last year, I was sort of thrown into the position of being the president of Robotics Club.
Before that, I've actually worked for several different companies in different countries,
mostly working on the things called hardware security modules,
which are responsible for generating random numbers
and making public and private keys that we use for our day-to-day transactions
in order for us to prove that we are who we say we are.
All of that infrastructure has to exist.
So that's previously what I've done.
Cool.
Now I have a bunch of questions about that too.
Of course.
We should get started with lightning round then,
where we ask you short questions and we want short answers.
And if we're behaving ourselves, we won't say how and why and all of that.
Favorite fictional robot?
I'm going to go with the B-9 robot, Lost in Space.
Favorite non-fictional robot?
Hmm.
I mean, the R2 is pretty cool, the robot that's up at the International Space Station.
Insect swarms, pro or con?
I mean, pro, because that's sort of what I do.
Do you know how many honeybees live in a hive?
I should know that. I have a beehive in my backyard, but I don't know.
Favorite random number?
I'm going to go with 12 right now.
Favorite prime number?
I'd say three.
That's very low.
I write programs to generate those for me.
Have you ever pet a penguin?
Huh.
This is something you should remember.
I've gotten very, very close to a penguin.
I don't know if I've ever pet a penguin.
Have you ever touched a penguin?
Probably, yeah.
When I was younger.
Yeah, I used to hang out at the Monterey Bay when I was very young.
A lot, so. Favorite animal was younger. Yeah, I used to hang out at the Monterey Bay when I was very young a lot.
Favorite animal?
So that's a duck.
Okay.
I feel like we should ask why.
I know we're not supposed to ask why, but I feel like we should ask why.
Why? So I had a pet duck for about 14 years.
Same duck?
Yeah, same duck.
Yeah.
And I used to have a whole flock before that and a goose. Um, it's just gets better and better. Did you play duck, duck, goose with actual, yeah, the, the goose never liked always being the goose. Um, for sure. Uh, yeah. So the ducks are just, they're, they're really funny characters. Whenever I would watch cartoons, I'm like, Oh, somebody just sat down and watched a ton of ducks interact and they just wrote it down and turn it into a cartoon because
that's exactly how they behave. What's a tip you think everyone should know?
Do your best because that's all you can do. And then feel good about that.
I could do my worst. I can really do my worst.
And still feel good about it?
Sometimes, yeah.
You should watch him procrastinate sometimes.
It's amazing.
I'm very good at it.
I've procrastinated procrastinating.
Yeah, I distract myself from distracting myself all the time.
Okay, so I want to ask you about your community college, Cabrillo College, which is our local community college.
We'll say that again. And I read in the paper
that they have a robotics club. And then I went to go
see a little bit at one of the mini make fairs.
And then I read two years later
that you win competitions, which is very cool.
So this competition, the one you won this year, could you tell us about it?
Yeah.
So the NASA Swarmathon, the idea was originally a grant from the University of New Mexico, their biological laboratory and computing resources. and Computing Resources, they made a proposal to NASA's education department for minority education
and said, hey, we want to introduce swarming to all these different institutions
and have students come up with novel search algorithms and whatnot
and solving the problems that they might run into in regards to swarming technologies.
And so that grant was approved back when that department was around,
and that helped fund the lab to essentially spend their undergrads
and also their PhD-holding individuals to working on building the Swarmy robot, building all the models in Ross and Gazebo, and then making everything work in Ross.
And then ultimately sending out the challenge to all these different schools.
And the schools had to qualify as being minority-serving institutions. So, there were a lot of schools that were sort of
not quite – they didn't qualify for that. But luckily, Cabrillo is a very much minority-serving
institution. And a lot of other very big universities all over the U.S. and our territories
did qualify. And so, we were able to compete in the big leagues.
I think the first year or so, we were the only community college that was competing.
And this last year, about a third, somewhere between a third and a half of the competing
schools were community colleges.
And it's really cool because we were able to put Cabrillo College on the map because we won against all these universities that are world-renowned universities.
Not to name any of the names of the schools.
Because you can totally look those up yourself.
You can look those up yourself, yeah.
And Cabrillo has something of an advantage.
It's a pretty big community college, right?
I mean, the student body is fairly sizable,
comparable to universities. Yeah, I mean, we're about the same size as a big university,
I would say. And one of the cool things is that a lot of these students are at Cabrillo College,
they're just now learning good practices, good coding practices, how to program.
I get to watch, I mean, I've been at Cabrillo long enough that I've seen students go from having no knowledge that this is a magical Facebook machine to, hey, I can actually turn
this on, make it run programs and make it solve problems that I thought that I didn't
know how to solve.
So that's really cool to watch that transformation happen with students
as they're going through. As much as the universities where a lot of these students
hopefully already have their stuff together, they already know what they want to do.
And the fact that a bunch of students that are just now learning how to program are beating
these students that theoretically have been through all of the courses already.
Going back to the Swarmathon, you talked a little bit about the robot,
and you mentioned ROS, Robot Operating System, and Gazebo, which is the simulator.
Yep.
But what makes it a swarm? How many of these do you get?
So Cabrillo College, we got three of them sent to us as a kit.
And then during the competition, in the physical competition, I think we had six.
And then in the virtual competition, we had eight of them.
And essentially, all of the robots would hopefully work all together and would go out and collect resources that were in the arena, whatever the arena looks like, whatever obstacles are there, and then collect them to a centralized location.
And so most of what all the teams did was that the robots were essentially on their own.
They weren't really working together.
They were sort of just trying to stay out of each other's way because there were problems with the localization. The manufacturer who made the IMU
made some mistakes, so it was really hard for the robots to actually know where they were,
let alone communicate with each other where they were relative to each other.
So there were a lot of teams that wrote the code in the simulator that didn't have that problem,
and the robots worked great. They worked together fantastically.
They were able to stay out of each other's ways and implement their own search algorithms.
But then the moment they put it on a physical robot,
the robot couldn't tell which direction north was.
Seems like a problem.
Yeah, it was sort of a problem.
And so we were actually the only school that had solved that problem,
which gave us a huge advantage.
So is this one of those don't put your magnetometer next to your motor sort of problems?
Yes.
Well, so there was that.
The fact that the field would, that all four DC motors would interfere with it.
But also they stuck, the antenna for the GPS was like one of the ones that you have on your car,
that it literally had a giant magnet on it that they just glued on top of the robot, but it still had the magnet in it.
And so we were able to calibrate that out because it was hard metal or soft metal.
We were able to calibrate that out, and we actually came up with our own calibration routine that we shared with all of the other schools and the University of New Mexico who came up with the competition. But even the raw readings from the IMU, when you did the full
rotations of the robot in all nine rotations of it, we plotted out and we saw this sort of
weird spheroid that was lopsided and going off
into space in one direction. And so, Darren Churchill, one of the students at Cabrillo,
he saw this and he essentially, he just hunkered down and figured out all the math and plugged it
into some matrices and was able to circularize it. And then was able to actually, when we got
a reading from the IMU, we're able to put it into his matrix and figure actually, when we got a reading from IMU, were able to put it
into his matrix and figure out, oh, what direction are we actually pointing?
And fortunately for all the other schools, the problem was symmetric.
So if they never did more than one turn, they could actually get back to home.
So a lot of the teams that did really well without solving the problem, they were able
to essentially drive straight out from the home plate. If they ran into a cube, great, they would
pick it up and they would bring it straight back. But if they ever made another turn, they would be
lost. So essentially, they would only be turning right when they were at home, keeping their back
to home and then driving straight away from home. And so the problem with that is if they ever ran into an obstacle, they couldn't navigate
around the obstacle and there might be a ton of really cool resources behind it.
And so because we were able to reliably navigate and turn around, it wasn't random chance that
we would just keep, that we would get back home.
We knew exactly where home was.
We had spent a lot of time measuring the
tire diameter and realizing, oh, the robot isn't actually balanced properly. So the, so the tire
was depressed on this side more than this side. And that, that now we actually could drive
correctly or nowhere, nowhere, nowhere we've, where we've driven. And so it was just, it was a
lot of physical testing realizing that, oh, the simulation model, there were, there were some hacks like, oh, they put a force field in front of the tire so that the rover couldn't, could never run over anything.
And so if it ever in the simulator, if it would run into a cubes, it would just push them out of the way.
But in the real, in the real world, the rover would happily beach itself on top of one of the cubes and it would be, you know, just turning its wheels and thinking that it's driving forward when it's really not. And so we also, we went half the speed what other teams
went. And so that gave us a lot more time to make decisions like, oh, maybe there's a cube there.
Let's not run over that cube. And so that gave us a huge advantage too. It was just driving slower.
And so everyone's like, why are you driving slower?
And we're like, look, we're still, we're beating you.
We're collecting twice as many cubes as you, even in the simulator, where it was a perfect scenario for them because we were a lot more cautious with everything we were doing.
Okay, so I want to back up just a little bit.
So you mentioned collecting cubes.
Uh-huh.
So what is the actual competition, the details of the competition?
Yeah, so the Swarmathon is to essentially collect as many resources as you can and deliver them to a common home nest or a common location that is where all the rovers start out when the round starts.
Okay.
So it's kind of like in a real-time simulation game, sending out all your miners to come back with ore and stuff.
Right.
And so the base competition is just collect the cubes.
Whoever has the most cubes at the end of the time period wins.
And they put obstacles. Yeah. And there's an unknown cubes at the end of the time period wins. And they put obstacles.
Yeah.
And there's an unknown course at the beginning.
You know, they don't give you the course and say this is what we're planning.
Yeah, exactly.
So, yeah, you can't pre-program anything.
And actually, this last year was really exciting because we kept asking them, well, what's the maximum size for the arena?
And they're like, oh, well, that shouldn't matter.
And we're like, well, but we have to make our map a certain size. And so, Darren, one of our students, he spent a lot of time trying to figure out, oh, how can I
dynamically expand the, because it was like a two-dimensional array in C++. So, it's really
hard to like, you got to resize them and do all kinds of, you know, how do you populate them when
you haven't encountered what you need to encounter. So, yeah, that was fun because we didn't know how many obstacles there were.
We didn't necessarily know how many cubes there were going to be
because they said one thing and then what there was was another thing.
And so it was fun because we didn't know.
We knew that there weren't going to be any ramps or anything like that
because the robot has no way of sensing those kinds of things.
But there would be obstacles and weird shapes.
There might be like concavity, which is a huge problem with trying to figure out how to escape that when you're doing localization and trying to make a plan around an obstacle.
Because you'll back up, you'll turn a little bit, and you run into the same object that you just that you were just in um and so we had to think of think of all of that and buy obstacles put cardboard boxes build our own random things that hopefully had the proper acoustic properties
because the robot essentially uses uh three sonars in front of it to tell where obstacles are. And sonars themselves are not, I mean, these were really cheap, like $3 sonars.
And so it was hard to tell, oh, is that the wind blowing?
Or is there a wall in front of me?
Which caused us problems.
It actually disabled one of our robots last year.
And actually, I think this year it happened too, where the wind just kept blowing and the robot just kept backing up
because it thought that the wall was coming towards it.
The brief from NASA is that the idea is to build the algorithms necessary to go to Mars
and to collect resources on Mars.
Yeah, so the idea is that before humans actually go places like, you know, bottom of the ocean,
the moon, Mars, wherever, that we're going to be sending robots there first.
They're going to be identifying and then collecting resources and then hopefully building
the structure.
For me personally, before I go to Mars, there better be a flushing toilet or at least a
composting toilet, right?
So, yeah.
So, the idea is that that first step of going around identifying and collecting resources,
robots are pretty good at that, right? We don't have lasers in our eyeballs that we can pick up a rock and shoot it and then
generate oxygen for ourselves.
So, the robots are really good at doing those kinds of things,
even though they might be doing it much slower than how we are doing it.
Even over the course of a year,
the robot doesn't need much more than sunlight and warmth to keep it alive.
Humans are very needy creatures.
So what ended up happening was that we actually did a correlated random walk, which I don't know if you want me to talk about that.
Oh, yeah.
Okay.
So, I mean, you can look up the Wikipedia.
I think they have like a sentence on correlated random walk.
But essentially, we pick a random direction that is essentially sort of the direction that we were going in the first place.
And then we drive a somewhat random amount within a threshold forward.
And then if we don't find anything, then we pick another direction that's sort of in the direction of where we were going.
And then we just keep going until we hit an obstacle.
And the first thing that we would do with the planner is that we would say,
okay, well, there's something in front of me. Can I get around it? And then you would spend a good amount of time trying to
figure out, can we get around it? We try the left side, the right side. We just try to plan around
it. And if we find out, oh, no, there's actually a real wall here or a cliff or something here,
then we just sort of bounce and we continue our random walk after we've bounced and turned around.
And that allows us to traverse the most amount of area in the shortest amount of time. If the
competition scope was something more along the lines of collect all of the resources within the
arena, then we would go with something more of like a spiral search or some kind of search that was shared amongst all the rovers.
So the only collaboration the rovers really had to do was just not run into each other with a correlated random walk.
And we had actually started writing code for divvying up like, oh, hey, you randomly walk in this quadrant and you randomly walk in this quadrant. And we found that then the robots weren't exploring sort of the area between those two
regions and there might be cubes there and we didn't want to risk that.
But, I mean, the code is pretty straightforward to write to be able to do that.
But yeah, just randomly walking and having the robots occasionally, you know, wave at
each other as they were going by worked out pretty well in our favor.
You mentioned some algorithms there.
The coordinated random walk is pretty standard for searching an area that you don't know much about.
Then you mentioned Spiral, but your team had to figure out hardened and soft iron calibration, which is a pretty well-known IMU sort of thing.
Yeah.
How much are you looking at other algorithms versus designing it yourself? So, I mean, there's a good amount of whiteboard work where we would spend
time just drawing out like, okay, if I was a robot, what would I do? And we even laid out
cubes and I said, okay, if you're a human and you had to cover up your eyes and look straight down,
how would you go about solving this problem? And we actually did this simulation with a few
students and say, what would you do? And we just watched this simulation with a few students and say, you know, what would you do?
And we just watched, we had a few students watch the student
that was looking straight at the ground and say,
okay, well, what is this person doing?
And then we would try to, you know, write it out in an algorithm
if it was something that was really obvious.
And we would go, okay, let's actually write the code to do that
and see is that more effective than what we had.
And so I wrote a test series that I made.
I had like 50 to 100 simulated worlds,
like environments where the cubes were laid out,
and I could test those things.
So if somebody said, oh, I have a really cool search algorithm,
I want you to try it, I'm like, great.
And I would just pull it and run it,
and they would spend about two days and say,
oh, no, that search algorithm
performs worse or more poorly than what we have over here. Or no, there's features of that that
are really cool. And so what was neat was that with the correlated random walk that we originally had
two years ago, we were able to say, well, there's these features from these other algorithms of,
oh, well, when we do a bounce, we bounce off the wall like this.
That was sort of a byproduct of other people coming up with other algorithms.
So, yeah, we spent a lot of time on the whiteboard trying to figure out other things
and sort of adding little details and whatnot.
But you didn't spend a lot of time looking at papers and books and robotic.
Yeah, I mean, we did.
We watched, I mean, Darren Churchill sat,
hungered down and did like,
watched a ton of Ross tutorials
and took some classes, some MOOCs online
to learn more about Ross
and figuring out those kinds of problems.
We spent a lot of time on Wikipedia
trying to figure out some of the problems
that we're running into.
And some of it was we would read a paper and see, okay, well, is this person actually right?
This is somebody's PhD thesis.
Did they actually do an application of this?
And one of the things with our computer vision for all of the cubes that were the resources that we're collecting. They have April tags on top of them.
And somebody's PhD work was a faster and more accurate way of detecting those cubes.
And I happened to be reading his paper and I went, oh, this is really cool.
I wonder if anyone's actually done this.
And I found that as part of his PhD work, he actually wrote the C++ code.
And I had memory leaks and things like that because all he needed to do was a few-minute presentation.
But we were able to grab his code and implement it.
And that freed up a huge amount of computing resource, which we're very limited on the robot.
Just because I was reading a paper and I was like, oh, cool, he's actually written the code.
And there were pull requests.
Somebody else was also watching his code.
There were pull requests to fix the memory leaks and fix some of the problems. And it was like,
sweet, most of the work is already done. We just have to figure out how to plug it in and maybe fix a few things so it works perfectly for us. So yeah, we spent a good amount of time trying
to research online, paying attention to the forums and whatnot.
But the Swarmy had sort of unique problems to the Swarmy that you don't quite see in a lot of the cool robotics kits that you can just buy online.
The Swarmy is the robotics kit you got from the competition.
Yeah.
And you got three of them.
Yeah, we got three of them.
And we couldn't really make any hardware modifications to them. I put a little battery charge meter on it because I was driving the rover around, and it has no way of knowing what its battery level was, and it would just randomly die on me.
I'm like, well, this is not okay.
So I put a little voltage and a current meter on it so I can watch it when it's driving around.
That's pretty much the only modification that I did, but we don't have that in the simulation or in the physical competition because sort of the beauty of the competition is that the robots get to stay here in Aptos, Cabrillo, and in Florida or University of New Mexico or wherever the competition is being held or anyone who's running our code just downloads our code and runs it, they can run it on their robots because they're identical. And they run the calibration routine wherever they are.
So they account for Earth's magnetic whatever at that location.
Or if there's a ton of rebar or a metal that's in the ground at that specific location.
So we had a lot of calibration files just based on where we were testing our robot around
campus. Because, oh, there's some random transformer that's in the wall. I pulled the
compass out on my watch and was like, why every time the robot drives by this wall, does the robot
make a huge jerk towards the wall? There's something going on. So I pulled out my compass
and went, oh, well, there's something right here on the wall. So either we just avoid the wall or we just keep that in mind when we're testing. And so that was sort of the cool thing
about the competition was that all of the hardware across all of the schools was exactly the same.
So anyone could pull the base code or pull anybody else's code and run it and test it out.
Was the code open source and available to other teams?
Yeah. So there's a base code that the University of New Mexico provided to all of the schools.
And then all of the code last year that all of the teams submitted became open source so that any of the teams could look at each other's code. And the idea was that this was the last hurrah that everyone, you know, take the best of the best and look around at each other's code and figure out if you can steal anything or
integrate anything. And so I spent a lot of time actually grabbing everyone's code and running it
and seeing how we fared against those schools in the simulations and whatnot. And one of the things
I was actually really bummed about was the school that I was sort of most afraid of was the Community College of New York.
They competed last year.
They actually didn't even compete this year because they were trailing right behind us in all of my simulations.
Like, oh, man, if they do a major improvement, we're in trouble.
And they didn't compete this year.
I'm like, okay, we're okay.
But, yeah, so it's cool
because we could look at each other's code and um we have a we have a form a swarmathon form
that all the other teams would ask for help and the the university of new mexico the people who
are running the competition they're very busy because they're teaching classes and they're
busy doing all of their other things and so uh so that gave an opportunity for a lot of the students to help each other out. So I would see a school post a comment on the form, you know, post like,
oh, I need help. Something's wrong. Something's wrong with, you know, blah, blah, blah. And I was
able to pull their code from the previous year and go like, okay, well, I think this is their
problem because I noticed that they had that problem last year. And I'm able to give them
feedback like, oh, hey, did you try this?
Install this package.
Oh, you forgot you have an open curly brace here or something like that.
And so that was pretty cool that we could collaborate and help each other out.
That seems very – I think it's really cool that it's all very open and you're sharing things and helping each other out.
How does the competition distinguish between – how do they keep people from cheating?
So, I mean, there are rules in place and essentially there's an asterisk on all the rules that essentially says it's up to the judges.
So, I mean, things like somebody can't just have like a little remote
control and driving the robots around during the competition. And actually this year we didn't even
know, we knew about the week that the competition would be happening, but we weren't even there for
the physical competition because that was just being run by UNM during their free time.
But there's...
What's to stop somebody from taking 99% of your code,
making a couple of tweaks, and then...
Nothing.
I mean, that was sort of the beauty of it,
is that we were really hoping that somebody would grab our code
and use it because it would be really obvious.
Because our, especially our behavior of our robot,
is very obvious.
It's different than all of the other schools.
And part of that is because we
took the base code and we sort of took, we had an idea of what it did and we ran it a few times
and looked at how it ran. And then we tossed most of that and started from scratch. And that also
gave us a huge advantage because all of the other schools were writing in C++ for everything.
And so we were able to say, okay, well, let's write, you know, in C and in C++ for everything. And so we were able to say, okay, well, let's write in C and in C++ all of the basic stuff
like the drive controllers and mapping and things like that, but do all the decision
making and all of the fun mathematical things up in Python because there's all these libraries
that exist.
And when I looked at the other school, at the base code that was given out,
if I wanted to drive forward one meter, it would be anywhere between 100 to 1,000 lines
because the code had to be written as a state machine.
That you had to essentially say, have I achieved my goal?
No, keep driving, have I achieved my goal?
And there's all these interrupts and all kinds of things that they had to take into account for all the time.
And so what we were able to do was that kind of thing was we were able to percolate in Python up to drive
and then open paren, one, close paren, done, or swarmy.drive.
And then the robot would do that behavior.
And if it ran into an obstacle, it would throw back an exception and we could handle that exception.
And that was much easier and much more accessible to the students. And it was a lot less intimidating because when I first started
looking at the base code that was provided by UNM, I'm like, whoa, where do I start? Like,
how do I change any of the base behavior that they gave us? Because there was just all this code and
I'd have to read a hundred lines to be like, oh, they're just driving forward a little bit.
And so that gave us a huge advantage too, was that we could prototype and write code very quickly.
So if somebody wrote something on the board for a search algorithm or a pickup behavior or whatever, I could pretty much write that in the Python in less than 30 minutes and have it running on a real robot. Versus the other teams where,
even after they had written all the code,
their deployment process,
because they had to compile
and they had to deploy it to the robot,
that took over an hour.
What was the processor on the robot?
It's just a dual-core Intel something.
Yeah, it's pretty,
like 1.2 gigahertz or something.
It was very limited.
And our computer vision took up half of that immediately.
What sensors did you have?
So we had the three sonars I was talking about. And then we have a camera that's used for detecting
the April tags, which are the tags on the cubes, the resources, and also the tags that are on the
home plate. And then we have like an IMU package, a Palau Lu thing that, you resources, and also the tags that are on the home plate.
And then we have an IMU package, a Palau Lu thing that does barometric pressure,
temperature, gyro accelerometers, that's that whole sensor suite.
There's a GPS, which we actually removed all of the code for the GPS, and that helped lighten up the processor load a little bit.
And then we have an Arduino that talks to all of that besides the camera.
And then there's on two of the – well, on all four DC motors, there's a light encoder
on those, and we only look at two of the light encoders to tell how many times the wheel have turned the wheels turned so we know where we are so in combination with with the light encoders
and the the imu we're able to know where where we've driven because one of the problems we
realized with the gps was even when we got a perfect fix on the gps it was like cool we're
still in the same parking lot um and that wasn't really good for real localization. I mean,
if we were truly lost and we were driving out in the city and we sort of wanted to get back,
sure, the GPS is probably good enough. But where I'm trying to return to a pile of cubes and I
don't want to spend a ton of time searching, even being off by a full meter is unacceptable.
And yet GPS, it's easy to be off by a full meter is unacceptable. And yet GPS, it's easy to be off by a full meter.
Right, exactly.
And we would just have the robot sit there stationary, and we would watch it, and it looked like a bee was flying around a 15 by 15 meter area.
And we're like, well, that's the size of some of the smaller arenas, so this isn't reliable enough. And so we sort of just ignored that data,
unless if something really bad happened, like we said,
okay, something happened with the robot, it got picked up,
or it's turned around and it's not,
the robot has no way of knowing where it is.
After, I think, like four attempts to go home based on odometry,
we would then go, okay, find GPS, where are we?
Okay, where do you think home is?
Okay, we'll try to go there.
And you said you weren't even there for the day of competition.
Right.
So this last year, the competition was at the University of New Mexico when essentially they had time to run the competition when they had their undergrad students to help do the logistics and set up the arenas and do all that stuff.
But last year, the competition was at Kennedy Space Center, and I was there.
And what's it like?
I mean, it sounds like it can all be virtual.
Right.
So there are two competitions.
There's a virtual competition where, yeah, they just post the videos on YouTube of the simulator rounds.
But in the physical round, these are physical rovers.
They're driving around in essentially a parking lot or wherever they're set up.
And it's cool because there's all these students that have also shown up as well from other schools.
And I get to talk about, oh, what kind of problems did they run into?
How did they solve them?
Like one of the schools, they looked at the PCB of how the power is distributed to the motors.
And they realized, oh, one of the channels on the PCB was thinner than the other one for the left and right motor.
And so that was causing the rover, when you thought you were applying the same voltage to one wheel and another wheel, the rover would list to one side.
And so, I mean, we corrected that with our PID controller, which we spent a lot of time working on that and looking at a lot of articles on solving those kinds of problems. But for them,
they're like, oh, well, we just wrote some machine learning to figure out, you know,
how far we were driving and giving it feedback. And they came up with a magical, you know,
constant number that they just plugged in and everything was working for them. And so it was
cool because we were able to talk about it and see how they identify the problems and how they solve the problems. And that was neat. And watching them do the same kind of homework for other
classes and talk about their instructors and how their instructors talk about certain assignments
or certain concepts and reflect on how my instructors provided that content. So that
was cool because I got to be like, wow, I'm really lucky at Cabrillo.
We don't have to do that kind of barbarity.
We just write a program that does that for us.
They're doing stuff on paper, filling up sheets of paper.
I'm like, wow, that's crazy.
Yeah, so it was the opportunity to be able to mingle
and be able to talk to other students at other institutions
and also a chance to visit visit kennedy space center was always cool and um yeah talk to some nasa officials and whatnot
meet an astronaut this year when they ran the physical competition without you how did you
know that they did the full calibration of your magnetometer? Because that sounds like an important thing. So, we put in a lot of warnings on our diagnostics that we could check the calibration. We have our
robots check their own calibration. And we print out in a diagnostics message that says,
hey, you haven't calibrated me properly. And we're very obnoxious with that.
Originally, what we used to do was we actually
uh we actually deleted the calibration file if we decided that it wasn't good enough we'd be like
air you know we're deleting calibration file it's not there anymore we were like well okay
even a really bad calibration is better than no calibration and so we're like okay we're just
going to continue we're gonna we're gonna to operate the robot even with a bad calibration.
And then also Darren Churchill wrote a 2D calibration where the robot could calibrate itself.
Just by going in a circle.
Just by going in a circle a few times.
The thing is that that wasn't – it's not perfect because you don't have all the roll and pitch and accelerometer and all of that stuff.
So if it goes over a bump or whatever, it's really hard for it to tell.
But it was still good enough for us to pretty reliably navigate around the world.
You've said instructors and you've said students.
And talking to you, it sounds like you were very involved and very in charge.
But you are on the student side of this.
Yeah.
And how many credits is this class worth?
There's no class.
It's just a club.
It's just a club.
It's just a club, yeah.
And how do you join the club?
Do you have to be a student?
Yeah, I mean, preferably we would prefer people to be students, but, I mean, members of the community are perfectly welcome to come and attend our meetings and participate.
That's, yeah, that's great.
That would be great.
How much time do you dedicate to this every week?
So when the competition was, when we were really hunkering down and getting ready, I mean, the last two months was easily 40 hours a week. On my side and Darren's side, he probably spent every waking moment that he wasn't in class or sleeping, he was probably working on coding.
And for me, I was stressing about how things were going and trying to write code to solve whatever problem was happening.
Some of the universities, though, they probably have robotics classes.
Yes.
And this is part of their robotics class.
Yes.
That doesn't seem fair.
Well, I mean, that just shows that we're that much better.
Yeah, I mean, there's, yeah, Channel Islands, they have clubs, they have, yeah, they have
class credits. Same thing with SIPI.
And there are various schools that I know that they have classes that this is their class, is that they come and they write code for the Swarmathon specifically.
And you said that you don't have the Swarmies talk to each other except to not run into each other.
So for all of the other teams, yeah, that's pretty much the case.
But, I mean, they don't really talk to each other even when they are going to run into each other.
They just use their sonars. at the point where our rovers could communicate, because we figured out the localization problem,
that now the robots actually know where they are,
like where they really know where they are and which direction they're pointed,
and they know where they're going because they're making plans and whatnot.
So they could communicate.
The code is at a point where they could communicate.
It's like a checkbox.
They could communicate where they are, stay out of my area because I'm going and I'm doing this thing.
Actually, in the code last year, I would have the robots publish, oh, I'm going into the home on this side.
And the idea was that then other rovers could avoid that corner during that time.
Because there's a lot of traffic control. If somebody's in home, you want to be able to have them be able to escape without
other rovers driving into home and causing a roadblock. So essentially, we're now there where
implementing solutions saying, I'm going to take this territory, you take this territory,
would be relatively easy now.
And you might need GPS back for that, so that they have the same time base.
No, so we would use a common time server.
We would just have a laptop or something be the NTP time server,
and then they would just all sync to that.
And time is definitely a fun problem with ROS, because...
Yes! We powered up the rovers after they've been sitting a while. And, I mean, a quartz crystal drifts a lot, especially when they're not connected to the internet.
And so, I mean, the robots run in Ubuntu on them.
So, if they are connected to real internet, they sync pretty good.
And it's not really a problem.
But, yeah, we'll publish a message and then do a
transform from one rover to the other rover. And if they're two seconds off, bummer that. That's
an error. And then they're not able to resolve whatever they're looking at, saying, oh, I see
a cube here. What is that relative to you? But the idea of being able to say, one rover says,
I see a pile of cubes. And then it shares that with all of the other robots.
And we sort of ran some tests with that.
And one of the problems that we realized is after we exceeded more than two rovers, if we had three rovers going after the same pile of cubes, they would get in each other's way. So, sort of doing that sharing of, oh, I see a pile of cubes or I see an obstacle here wasn't really beneficial.
And there was natural drift to the odometry that didn't really make sense to say, oh, I see an obstacle that's way out in the frontier.
It's out here.
And share it with the other rovers because that might be somewhere
else relative to the other robots based on their drift.
I mean, the further and further away we get from home, even if it's a few inches, that's
going to add up, especially if you're transforming from one rover to the other rover, saying,
oh yeah, 20 feet away that there's a wall here.
Well, that wall might, a rover might drive up to it and be like, I don't see a wall here.
Well, what do you do then?
Do you erase it from both rovers' maps?
Well, one of them might be, it probably shouldn't erase it because that's a way to get back home.
It has to avoid that obstacle because maybe it's still on the other side of that obstacle.
So map sharing is a fun problem that we sort of dove into
and we played around with and we went, well, okay,
right now for the scope of this competition, we don't need to do that yet.
I mean, this is a simultaneous localization and mapping problem,
a SLAM problem, which is pretty well known in robotics.
Yeah, and so we initially started looking at a lot of SLAM things,
but the sensors that we had didn't allow us to do like the cool visual slam completion and closed loops that we would have really loved.
I have a Curie robot and that robot has a laser grid in its chest and it's able to look at furniture and go, oh, I know exactly where I am.
And I'm like, oh, I wish we had this on the swarmy.
But we don't.
We have these three little sonars that are pretty unreliable.
And you can't use your camera.
You can only use your camera for identifying the text.
I mean, the camera is pretty much pointed straight at the ground.
You can only see about a foot, maybe a foot and a half, or what is it, 20 centimeters
in front of you, which when you're looking at pavement, it's really hard to say, oh, I've seen this
pavement before.
Um, or, or even, you know, even lines in a tennis court that you don't know.
I mean, yeah, with, with the compass, we know exactly which direction we're pointing, but
we don't know necessarily, are we looking at that same line or not?
Um, so yeah, the, the, the, I actually started making a 3D model,
a real 3D model of the robot
so that the robot could use computer vision
to detect whether or not it was looking at another robot
or an obstacle.
And I realized, well,
by the time that the rover is close enough
to see another rover, it's already too late.
So yeah, if the camera was tilted up a little bit,
we'd be like, let's let's do some
computer vision let's let's cut let's cut down uh you know all of our cpu usage and be really
really diligent about what what operations we're doing and how often we're doing it
um but because we just didn't have the field of view with the camera there was really not an
option if you had perfect knowledge if if all the robots could communicate localization was
was spot on uh and you were able to integrate them and they all were able to share knowledge
perfectly what would your approach to the the competition be in that case what would the swarm
act like yeah so so essentially i would probably still do the correlated random walk for the discovery. I might
divvy up quadrants or whatever. We already have a voting system in place
for determining, for the robots talking to each other, that they essentially
decide who gets to start moving first, who gets out of the way when
one of them's in the way, who gets out of the way. We already have that part.
But that would help strengthen that a lot more.
Trying to navigate around each other.
But yeah, probably still doing correlated random walks just in a smaller area.
So confine the area that they're operating in.
And then, yeah, having some kind of metric of, okay, I see a resource pile that is this big.
I think that this is big enough to include two other rovers besides myself, besides the rover that found the pile so they can pick at it faster.
Because the major thing with the competition was the time constraint. It was you have this much time, collect as many resources as you can versus something more of longs of you have as much time as you want, collect all of the resources, which in some cases a team might never do.
So, I mean, it makes of more of a real-world situation, you know,
you have a year, you send a rover somewhere, you have essentially until the rover breaks
down for it to complete its task.
Which sounds like forever, but who knows?
It's not like you can repair it.
So, you do have a limited time.
Right.
It's just a different limit.
Right.
And so, the question is, do you want to be as thorough in collecting the resources that are the closest to you as possible or or maybe if you're just
going around and identifying resources do you want to cover the most ground or do you want to
find the most stuff the the best stuff that's as close to you as possible which are different
algorithms well and you mentioned crowding near home, and I'm like, well, maybe you should set up depots, and they should take it partway, and then there should be one ant, one swarmy, whose charter is basically to go to the depot and turn around.
It's turning around all the time. who do that, but they did that in the simulator round where they would have robots that were out in the frontier, were collecting
resources, and then were dropping them off
in like an intermediate
area, and then the robots
were, then there were robots that were just in charge of
going between the immediate area
and home and just relaying
those cubes.
It worked great in the simulator.
But without
fixing localization, that's terrible.
Right, exactly.
And so even when they were like, sweet, they found a cube, they picked it up, and then they dropped it off in this intermediate zone that didn't count for anything.
The robot that was in charge of picking it up and delivering it to home never found it.
You're like, well, that didn't score anything.
Didn't work at all.
So yeah, I mean, I read their paper.
We have reports that we have to well, that didn't score anywhere. It didn't work at all. So yeah, I mean, I read their paper. They actually had,
we have reports that we have to generate,
and their paper worked great. I read the paper, I'm like,
oh, this is fantastic, and I tried to run it myself,
and I tried to run their code myself, and I'm like,
oh, this doesn't work.
But yeah, there was,
for the Mission to Mars, which is
a simulated competition,
one of the schools,
to solve the problem, they just dropped multiple home plates all over the arena
so that that crowding problem wasn't an issue.
Was that allowed?
Yeah.
For the mission to Mars, the schools create their own scenarios.
Yeah.
Scenario is, all of the cubes are already on my robot.
Yeah, success.
So your team obtained 20 resources with your swarm in, I think, the final round?
Yeah.
How many did the second place team collect?
I think it was like four or five, yeah.
Five.
Yeah.
But you weren't there, you didn't know.
Right. But you weren't there. You didn't know. And so when they said the awards ceremony is at Kennedy Space Center, you were just like, eh, that's far.
And expensive to go to.
Well, that wasn't actually the argument was that I was busy.
I was actually teaching in Watsonville at the time for PVUSD.
But yeah, we got a call and said, hey, no, you actually need to be there.
And I'm like, well, I can't be there.
And so I contacted our advisor and one of our team members and said, hey, guys, they need us to go.
So they jumped on a plane and flew out.
And there was a check.
There was a check.
It didn't even cover the airfare, yeah.
Which is kind of a bummer, but winning is still pretty cool. Yeah, but we still have this giant a check. There was a check. It didn't even cover the airfare, yeah. Which is kind of a bummer, but winning is still pretty cool.
Yeah, but we still have this giant novelty check.
Our advisor spent a great deal of effort trying to sneak it onto the plane because it's too big.
Oh, yeah.
Yeah, the novelty check is massive.
So, of course, he has a huge story about how he got it on the plane and whatnot.
But now it's actually sitting in the CIS lab in the STEM center at Cabrillo College.
So we were able to get the novelty check from Kennedy Space Center to Cabrillo College.
And you were president of the Robotics Club this year.
Yeah.
I'm on your mailing list.
So I know you send out parliamentary rules of order style meeting notes.
Why is it so formal?
So, I mean, I've been involved with the student government for a few years before then.
And so the money that we use is actually public money.
It gets collected from students.
But because Cabrillo College is a state institution, all the things that even the clubs do is the same
as if a California assemblyman was doing something, that it's the same laws that bind us.
Yeah.
So, when somebody does sneaky stuff with an election or whatever, it's the same as if
you're getting somebody else elected instead of Gavin Newsom or whatever, that it's the
same legal – I mean, the courts probably won't consider it just as bad.
But in the sense of what's written in the law, what applies because it's an institution that's using public funds, that the same rules apply.
And so I'm like, well, if I can at least put a lot of that on my side, that I already have that pre-made.
Like I'm writing out emotions for some
people and putting on a slip of paper and saying, here, can you say this? And then they decide
whether or not they want to say it or not, that I'm sort of preparing things so that we're doing
things correctly. And you're president this year.
Yeah. But you're actually
fairly new to the club. Yeah. So this is my second year in the club.
But the club's been around for a while.
Yeah, the club's been around for about five years or so.
And they've been doing other competitions and doing well.
Yeah, so I think originally the robotics club did the ROV underwater competitions.
And from what I hear, we did very well and we were winning all of those competitions.
And they got fed up with winning.
They kept winning until they – and then they started moving on to building robots, playing with Arduinos.
They built a 3D-printed quadcopter.
Yeah, doing things like that.
And then the Swarmathon came around like three years ago, and so the club very much changed course into a lot more of the software club where we were working with a robot, testing the robot. either wrangling the swarmy of making sure that it's not driving off where it's not supposed to and moving kibs around and software.
And so the nice thing is that the competition's over,
so we're able to now go back to doing other robotics things
where we will be able to design our own robots, be able to get kits and build them, test them out,
and learn more about just the general things of robotics instead of just focusing on software.
Because that was originally the club we had a lot of engineers and whatnot that wanted to build stuff.
And actually one of the cool things is that a lot of the members from the club formed another club, the Aeronautics Club on campus.
And they started building things like that.
And then another club, the Rocket Club, also formed from the Robotics Club.
So the club was this great spot where we collected a lot of students. They were able to sort of
specialize and they were able to form their own clubs, which was really neat.
And there are a lot of STEM clubs.
There are a lot of STEM clubs, yeah.
And one of the things that I was surprised with the Robotics Club was you do a lot of outreach.
Yeah.
So, I mean, for me, I think that it's really important that we continue to bring people to Cabrillo because we're a really good institution. I have a lot of friends who have gone to four-year institutions and they're wishing they could come back to Cabrillo and finish their four-year degree, which they can at Cabrillo.
But the quality of the instruction is really excellent.
And we have a lot of opportunities.
There's a lot of people who are very generous with their money and with their equipment.
I mean, just our makerspace, we have 15 3D printers that are free to use for students.
So we have a lot of really cool resources and trying to bring people from the community to come in, use our resources, and also help out – bring different perspectives to everything.
Because sometimes when we've been through all the computer science or the computer information studies route and an engineer comes in and goes, oh, well, what if you do it this way?
It's like, oh, sweet.
Yeah, we could just do it that way. So bringing in as many people as we can and also having people come in from high
school and immediately know that there's a place for them to go on campus, I think is really
valuable. Because that was, when I first came to Cabrillo and I go to various other community
colleges, it's really hard to find a niche, a place to hang out, a place to do things, and a place to contribute.
And so I think that the robotics club is an excellent spot for that.
And you mentioned that there are other community colleges that have robotics clubs.
Yes.
You mentioned Newark, but do you think it's common or do you think it's like one in a hundred?
Well, not quite one in a hundred because I know that there's a few community colleges here in California and we have 113, 114 community colleges.
And there's a few here.
I think it's pretty rare because a lot of community colleges don't have necessarily computer, even a computer science program or department.
And that makes it really hard for people to do programming.
Actually, some of the teams that were competing in the Swarmathon, they didn't have any computer science classes at their institution, which makes it really hard.
That would be hard.
Yeah, because suddenly you don't have an advisor that maybe necessarily knows how to code or whatever,
and the students are just sort of on their own.
And so that was one of those things.
On the forum, I would occasionally get questions.
It was like, oh, this person doesn't know how to allocate memory in C.
Like, oh, okay, well, let's help them out in this and send them some guides of like, okay, this is what I think you're trying to do.
Here's a few lines of code.
Hopefully that helps out.
Here's a YouTube video explaining the problem you were having.
And so, yeah, it was cool because these people were trying to solve problems without being, I don't know, tainted by how normal education is teaching
things, which can be really good and really bad at the same time.
You don't know what's impossible.
Yeah, right.
You don't know what's impossible, exactly.
Which sometimes is awesome and sometimes just leads to pain.
Yeah.
And you have been at Cabrillo for a while.
Yes.
I asked you if you watch the show Community,
which is about
going to community college for longer
than two years.
Why?
Why?
Are you graduating soon?
Actually, this summer, I think I got
three degrees and a ton of certificates.
Right now, I
have to do all of the math
because I'm going for
just a computer science degree, a bachelor's at the University of Santa Cruz, but I haven't
transferred yet. So, I want to sort of front load and do all of the math. So, even if I have to
retake all the math, I'm at least familiar with it. So I actually really struggle with math, and I just keep going.
And fortunately at Cabrillo, we have a lot of support groups for mathematics.
And so I haven't utilized it as much as I really should be.
But yeah, the instructors are very supportive and whatnot.
So I've been able to try, try again, and that people are willing to work with me.
You mean UCSC, right?
No, Cabrillo College.
No, no, no.
I mean where you're transferring to.
Yeah, the hope is that I would be transferring to UCSC.
And if for some reason that doesn't work,
I'll just go to Aachen, Germany.
They have a technical institution
for what I actually want a degree in.
What do you want a degree in?
So that would be cybersecurity
with a specialization in hardware security modules.
Yeah, so I sort of have these lots of hats that I wear.
But I mean, robotics has been a lot of fun
as a student, something to play with. And I'm sure that robotics will
pop up in my career as well. And you said you were teaching
at one of the local school districts.
Yeah, so over the winter and summer, I do these engineering camps through both the Baskin
Foundation and also the Baskin Foundation, Cabrillo Foundation, and also PVUSDs, which
is the school district here in Watsonville.
They have a migrant ed program.
So these are students whose parents are migrant workers.
And so, yeah, so I do these engineering camps.
We have girl camps and we have boy camps.
And they tend to be around junior high age and early high school age.
And we do all kinds of engineering projects.
We talk about structural engineering.
I mean, we talk about all the different engineering fields.
We have lots of projects where they build stuff.
You know, they build wind turbines.
We just had them build their own RC car from scratch
with a twisted pair from a Cat6 and Popsicle sticks and tinfoil and some DC motors.
And, yeah, all kinds of different projects.
So, yeah, so I've been doing that for like four years or so.
And then also I had been doing, I was, for the last two semesters, I was a supplemental instructor here at Cabrillo College, which I get to come in as a student and have
the students who are taking a normal computer science class, and I get to talk about what
kind of coding practices should they reinforce, what's good coding conventions, how to comment,
what are useful comments.
Students come and go like, oh, I got a bad grade on this.
I'm like, oh, okay, well, let's learn about why, what the instructor is expecting, and what's good practices and what's bad practices.
I don't want to see a break in the middle of your loop.
What are some good practices and bad practices in writing comments?
So, I mean, for me, I have experiences firsthand and secondhand and thirdhand.
With comments, I always write comments for trying to – if there's something that is not immediately human-readable, like the code itself isn't just explanatory, which hopefully you write code that just is explanatory.
If you're writing Python, that's pretty easy.
But in some other languages, that's not quite the case. But writing comments that are explaining what you're doing, how you're trying to
achieve it. I mean, not necessarily just saying, oh, this thing takes in these arguments and it
returns these things. Maybe what is that block of code doing? Because one of the things that I've
noticed is libraries change. And so code that works perfectly fine will break.
And one of my former companies I worked for,
they had a consultant who was writing code,
and he literally wrote a block,
he wrote a, like, for a block of code,
he wrote, this code is really important, don't delete it.
And it was just ugly code.
And we're like, why is this code just not working?
And we just took out that block of code and everything started working.
You know, like, just leaving a comment saying, don't touch this, this works fine, that's not useful.
Maybe if you're like, oh, this is a hack to solve this problem in this library, we're like, okay, well, they patched the library and now this hack doesn't work anymore.
That would be something that would be useful to know.
Be wary of any comments that start with, I am a genius.
They should have special comment markers.
And then I leave a lot of to-dos for myself of
partially implemented things that I haven't quite gotten
to yet. Because there are many times when I'm working on a project, I get
distracted with another project and another project. And then, you know, two months later, I'll pick up the
original project. What was I doing here? Because I didn't leave good enough comments for me to be
able to pick up where I left off. So not only leaving comments for the next person who's taking
over your job, but also leaving comments for yourself so that when you pick it up, or you get paid as a consultant to come back and work on your own code that you left it there.
And, I mean, I've worked with people that, you know, they do stuff like they'll have comments locally
and then they strip the comments before they push it.
And you're just like, oh, this person needs to get fired.
So I think it's really important to document as much as you can.
And then even when things aren't appropriate to document in the code, a lot of companies have wikis.
So I'll just be like, hey, give me permission to wiki.
I'm going to create a few pages and explain what my code is doing.
But yeah, I think that leaving enough left behind is really important.
Somebody needs to come in that they're not cursing you, that they're thanking you for leaving a nice breadcrumb trail.
Breadcrumbs, that's the way I look at it.
So the club is interesting and the college is very cool.
Although I say that not having taken any classes there, even though it's very cool.
But I do wander the campus.
How do you get funding to do the robotics club?
Some of the funding comes from the student fees that are collected.
But a lot of the funding is actually from donations from community members.
People come in and bring equipment.
People will go to the Cabrillo Foundation website and will just type in the notes field, say, Cabrillo Robotics.
And that's a huge way for us to be able to get money
for being able to buy hardware for various different projects.
Do you have any projects you particularly want hardware for
or things you're looking forward to?
So one of the cool things about the Robotics Club
is that we have a lot of members,
and so diversity is good.
Having any kind of equipment,
any kind of robotic development kits
would be happily welcome.
So I heard that there's an iRobot person who comes on the show a few times.
So, we would love one of your kits.
But yeah, any kind of the robotics kits would be appreciated.
But also being able to build our own hardware, being able to say, oh, well, I want to buy 20 time-of-flight sensors or something like that.
Being able to have the money to be able to do something like that would be great.
And so you have a contribution page on the Cabrillo Foundation?
Yeah.
Okay, we'll put that in the show notes.
Great, thank you.
Well, Carter, I think that we have kept you long enough for a weekend afternoon,
especially as school is starting soon?
Yeah, so I think it's in a week or two.
Do you have any thoughts you'd like to leave us with? school is starting soon? Yeah, so I think it's in a week or two.
Do you have any thoughts you'd like to leave us with?
Yeah, so
as I said, do
your best, because that's all you
can do.
And networking is really important
for students especially.
Just go to conferences
and ask really good questions
and talk to people at booths.
If you're interested in a topic that you don't necessarily just have to keep
sending your resume to everybody, that if you go and physically meet people,
there's a lot of meetups and whatever.
Those are great opportunities.
Our guest has been Carter Frost, senior student troublemaker at Cabrillo College.
He is also president of the Cabrillo College Robotics Club as they won the NASA Swarmathon for 2019.
Thanks, Carter.
Thank you.
Thank you also to Christopher for producing and co-hosting.
And of course, thank you for listening.
And I forgot to mention the party.
I hope you're coming
because it's like tomorrow
or the next day
or sometime really, really soon.
It is going to happen
on September 7th
in the afternoon in Aptos.
If you haven't signed up,
please do so right now
or I won't have enough cake for you.
Sign up at embedded300.eventbrite.com.
And you can always contact us for that link or other things at show at embedded.fm or hit the
contact link on embedded.fm. And now a quote to leave you with, and this is coming from Jeff
Winger. You are all better than you think you are. You were just designed not to
believe it when you hear it from yourself. Embedded is an independently produced radio
show that focuses on the many aspects of engineering. It is a production of Logical
Elegance, an embedded software consulting company in California. If there are advertisements in the show, we did
not put them there and do not receive money from them. At this time, our sponsors are Logical
Elegance and listeners like you.