figure and sup changes
This commit is contained in:
parent
cdbf93cfa2
commit
2ccfc8ef24
2 changed files with 38 additions and 28 deletions
|
@ -174,27 +174,33 @@ footer.footer {
|
|||
float: left;
|
||||
}
|
||||
|
||||
// Bold definition types in <dl></dl>
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
figure {
|
||||
position: relative;
|
||||
display: inline-flex;
|
||||
figcaption {
|
||||
position: absolute;
|
||||
background-color: rgba(0,0,0,.7);
|
||||
color: white;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
|
||||
transition: all .1s;
|
||||
.content {
|
||||
// Bold definition types in <dl></dl>
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
&:hover {
|
||||
|
||||
figure {
|
||||
position: relative;
|
||||
display: inline-flex;
|
||||
figcaption {
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
background-color: rgba(0,0,0,.7);
|
||||
color: white;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
|
||||
transition: all .1s;
|
||||
}
|
||||
&:hover {
|
||||
figcaption {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sup {
|
||||
font-size: small;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,15 @@
|
|||
---
|
||||
title: Counting laps using bluetooth dongle detection on the 12 urenloop
|
||||
created_at: 09-05-2011
|
||||
toc:
|
||||
depth: 1
|
||||
---
|
||||
|
||||
_Crossposted from [jaspervdj.be](https://jaspervdj.be/posts/2011-05-09-12-urenloop.html)_
|
||||
|
||||
The [12 urenloop](https://www.12urenloop.be/) is a yearly contest held at [Ghent University](https://www.ugent.be/). The student clubs compete in a 12-hour-long relay race to run as much laps as possible. Each of the 14 teams this year had a baton assigned, so they can only have one runner at any time.
|
||||
|
||||
<figure>
|
||||
<figure class="image">
|
||||
<img src="https://jaspervdj.be/images/2011-05-09-12-urenloop.jpg" alt="Just after the start">
|
||||
<figcaption>Just after the start</figcaption>
|
||||
</figure>
|
||||
|
@ -38,7 +40,7 @@ We decided to attach bluetooth dongles to the relay batons. I'm now pretty confi
|
|||
|
||||
These bluetooth receivers were borrowed from the [CartoGIS](https://geoweb.ugent.be/cartogis/), a research group which (among other things) studies technology to track people on events (e.g. festivals) using bluetooth receivers.
|
||||
|
||||
<figure>
|
||||
<figure class="image">
|
||||
<img src="https://jaspervdj.be/images/2011-05-09-gyrid-node.jpg" alt="A Gyrid node">
|
||||
<figcaption>A Gyrid node</figcaption>
|
||||
</figure>
|
||||
|
@ -50,7 +52,7 @@ The receivers run a custom build of [Voyage Linux](https://linux.voyage.hk/) cre
|
|||
- receiver: sending all received bluetooth data to a central computing node
|
||||
|
||||
Here is another picture of what's inside of a node:
|
||||
<figure>
|
||||
<figure class="image">
|
||||
<img src="https://jaspervdj.be/images/2011-05-09-gyrid-node-inside.jpg" alt="A Gyrid node (inside)">
|
||||
<figcaption>A Gyrid node (inside)</figcaption>
|
||||
</figure>
|
||||
|
@ -58,7 +60,7 @@ Here is another picture of what's inside of a node:
|
|||
## Relay batons
|
||||
|
||||
We built the relay batons using a simple design: a battery pack consisting of 4 standard AA batteries and connecting them to a bluetooth chip, put in a simple insulation pipe. Some extensive tests on battery duration were also done, and it turns out even the cheapest batteries are good enough to keep a bluetooth chip in an idle state for more than 50 hours. We never actually set up a bluetooth connection between the receivers and the relay batons -- we just detect them and use that as an approximate position.
|
||||
<figure>
|
||||
<figure class="image">
|
||||
<img src="https://jaspervdj.be/images/2011-05-09-relay-batons.jpg" alt="Just after the start">
|
||||
<figcaption>Left: our sweatshop, right: a relay baton</figcaption>
|
||||
</figure>
|
||||
|
@ -67,11 +69,13 @@ We built the relay batons using a simple design: a battery pack consisting of 4
|
|||
|
||||
The problem here was that we only could put cables _around_ the circuit, we couldn't cut right through to the other side of the circuit. This means the commonly used [Star network](https://en.wikipedia.org/wiki/Star_network) was impossible (well, theoretically it was possible, but we would need _a lot_ of cables). Instead, [Jens](https://twitter.com/jenstimmerman), [Pieter](https://thinkjavache.be/) and [Toon](https://twitter.com/nudded) created an awesome ring-based network, in which each node also acts as a switch (using [bridging-utils](https://www.linuxfoundation.org/collaborate/workgroups/networking/bridge)). Then, the [Spanning Tree Protocol](https://en.wikipedia.org/wiki/Spanning_Tree_Protocol) is used to determine an optimal network layout, closing one link in the circle to create a tree. This means we didn't have to use _too much_ cables, and still had the property that one link could go down (physically) without bringing down any nodes: in this case, another tree would be chosen. And if two contiguous links went down, we would only lose one node (obviously, the one in between those two links)!
|
||||
|
||||
<figure>
|
||||
<figure class="image">
|
||||
<img src="https://jaspervdj.be/images/2011-05-09-ring.png" alt="Ring-based network with spanning tree indicated">
|
||||
<figcaption>Ring-based network with spanning tree indicated</figcaption>
|
||||
</figure>
|
||||
|
||||
# The software
|
||||
|
||||
## count-von-count
|
||||
|
||||
Now, I will elaborate on the software which interpolates the data received from the Gyrid nodes in order to count laps<sup><a href="#fn1" class="footnoteRef" id="fnref1">1</a></sup>. `count-von-count` is a robust system written in the [Haskell](https://haskell.org/) programming language.
|
||||
|
@ -102,14 +106,14 @@ We also ([hopefully](https://bash.org/?5273)) know the location of our Gyrid nod
|
|||
|
||||
This is something we can easily plot. Note that there are only a few possible positions, since we discarded the RSSI values because of reliability issues.
|
||||
|
||||
<figure>
|
||||
<figure class="image">
|
||||
<img src="https://jaspervdj.be/images/2011-05-09-plot.png" alt="Linear regression used">
|
||||
<figcaption>Linear regression used</figcaption>
|
||||
</figure>
|
||||
|
||||
I've illustrated the plot further with a linear regression, which is also what `count-von-count` does. Based on this line, it can figure out the average speed and other values which are then used to "judge" laps. When `count-von-count` decides a relay baton has made a lap, it will make a REST request to `dr.beaker`.
|
||||
|
||||
# dr.beaker
|
||||
## dr.beaker
|
||||
|
||||
`dr.beaker` is the scoreboard application. It's implemented by [Thomas](https://twitter.com/blackskad) as a [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) service that runs on top of [GlassFish](https://glassfish.java.net/). It provides features such as:
|
||||
|
||||
|
@ -123,13 +127,13 @@ I've illustrated the plot further with a linear regression, which is also what `
|
|||
|
||||
and more.
|
||||
|
||||
## Conclusion
|
||||
# Conclusion
|
||||
|
||||
It's a hardware problem.
|
||||
|
||||
When the contest started, both Gyrid, `count-von-count` and `dr.beaker` turned out to be quite reliable. However, our relay batons were breaking fast. This simply due to the simple, obvious fact that runners don't treat your precious hardware with love -- they need to be able to quickly pass them. Inevitably, batons will be thrown and dropped.
|
||||
|
||||
<figure>
|
||||
<figure class="image">
|
||||
<img src="https://jaspervdj.be/images/2011-05-09-monitoring.jpg" alt="Thomas & me monitoring the batons">
|
||||
<figcaption>Thomas & me monitoring the batons</figcaption>
|
||||
</figure>
|
||||
|
|
Loading…
Reference in a new issue