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;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bold definition types in <dl></dl>
|
.content {
|
||||||
dt {
|
// Bold definition types in <dl></dl>
|
||||||
font-weight: bold;
|
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;
|
|
||||||
}
|
}
|
||||||
&:hover {
|
|
||||||
|
figure {
|
||||||
|
position: relative;
|
||||||
|
display: inline-flex;
|
||||||
figcaption {
|
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
|
title: Counting laps using bluetooth dongle detection on the 12 urenloop
|
||||||
created_at: 09-05-2011
|
created_at: 09-05-2011
|
||||||
|
toc:
|
||||||
|
depth: 1
|
||||||
---
|
---
|
||||||
|
|
||||||
_Crossposted from [jaspervdj.be](https://jaspervdj.be/posts/2011-05-09-12-urenloop.html)_
|
_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.
|
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">
|
<img src="https://jaspervdj.be/images/2011-05-09-12-urenloop.jpg" alt="Just after the start">
|
||||||
<figcaption>Just after the start</figcaption>
|
<figcaption>Just after the start</figcaption>
|
||||||
</figure>
|
</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.
|
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">
|
<img src="https://jaspervdj.be/images/2011-05-09-gyrid-node.jpg" alt="A Gyrid node">
|
||||||
<figcaption>A Gyrid node</figcaption>
|
<figcaption>A Gyrid node</figcaption>
|
||||||
</figure>
|
</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
|
- receiver: sending all received bluetooth data to a central computing node
|
||||||
|
|
||||||
Here is another picture of what's inside of a 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)">
|
<img src="https://jaspervdj.be/images/2011-05-09-gyrid-node-inside.jpg" alt="A Gyrid node (inside)">
|
||||||
<figcaption>A Gyrid node (inside)</figcaption>
|
<figcaption>A Gyrid node (inside)</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
|
@ -58,7 +60,7 @@ Here is another picture of what's inside of a node:
|
||||||
## Relay batons
|
## 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.
|
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">
|
<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>
|
<figcaption>Left: our sweatshop, right: a relay baton</figcaption>
|
||||||
</figure>
|
</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)!
|
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">
|
<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>
|
<figcaption>Ring-based network with spanning tree indicated</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
|
|
||||||
|
# The software
|
||||||
|
|
||||||
## count-von-count
|
## 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.
|
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.
|
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">
|
<img src="https://jaspervdj.be/images/2011-05-09-plot.png" alt="Linear regression used">
|
||||||
<figcaption>Linear regression used</figcaption>
|
<figcaption>Linear regression used</figcaption>
|
||||||
</figure>
|
</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`.
|
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:
|
`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.
|
and more.
|
||||||
|
|
||||||
## Conclusion
|
# Conclusion
|
||||||
|
|
||||||
It's a hardware problem.
|
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.
|
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">
|
<img src="https://jaspervdj.be/images/2011-05-09-monitoring.jpg" alt="Thomas & me monitoring the batons">
|
||||||
<figcaption>Thomas & me monitoring the batons</figcaption>
|
<figcaption>Thomas & me monitoring the batons</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
|
|
Loading…
Reference in a new issue