-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcompetition.html
201 lines (179 loc) · 12 KB
/
competition.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
<!DOCTYPE HTML>
<!--
Linear by TEMPLATED
templated.co @templatedco
Released for free under the Creative Commons Attribution 3.0 license (templated.co/license)
-->
<html>
<head>
<title>Competition!</title>
<link href="shrimp.ico" rel="icon">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<link href="https://fonts.googleapis.com/css?family=Roboto:100" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Ubuntu" rel="stylesheet">
<link rel="stylesheet" href="font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="js/skel.min.js"></script>
<script src="js/skel-panels.min.js"></script>
<script src="js/init.js"></script>
<noscript>
<link rel="stylesheet" href="css/skel-noscript.css" />
<link rel="stylesheet" href="css/style.css" />
<link rel="stylesheet" href="css/style-desktop.css" />
</noscript>
<style>
h3 {
font-size:150%;
margin-bottom:1%;
}
</style>
</head>
<body>
<!-- Header -->
<div id="header">
<div id="nav-wrapper">
<!-- Nav -->
<nav id="nav">
<ul>
<li><a href="index.html">Homepage</a></li>
<li><a href="about.html">About</a></li>
<li><a href="team-contract.html">Team Contract</a></li>
<li><a href="meeting-minutes.html">Meeting Minutes</a></li>
<li><a href="ethics.html">Ethics Case Study</a></li>
</ul>
</nav>
</div>
<div class="container">
<!-- Logo -->
<div id="logo" style="font-family: Ubuntu; font-weight: normal">
<h1><a href="index.html">team-shrimp-cracker</a></h1>
<span class="tag">A robotics team dedicated to jamming the most flavor in a little robot.</span>
</div>
</div>
</div>
<!-- Header -->
<!-- Main -->
<div id="main">
<div class="container">
<div class="row">
<!-- Sidebar -->
<div id="sidebar" style="width: 20%;" class="4u">
<section>
<header>
<h2>LABWORK</h2>
</header>
<div class="row">
<section class="6u">
<ul class="default">
<li><a href="lab01.html">Lab01</a></li>
<li><a href="lab02.html">Lab02</a></li>
<li><a href="lab03.html">Lab03</a></li>
<li><a href="lab04.html">Lab04</a></li>
<li><a href="m01.html">Milestone01</a></li>
<li><a href="m02.html">Milestone02</a></li>
<li><a href="m03.html">Milestone03</a></li>
<li><a href="m04.html">Milestone04</a></li>
<li><a href="competition.html">Competition</a></li>
</ul>
</section>
</div>
</section>
</div>
<!-- Content -->
<div id="content" class="8u skel-cell-important" style="width:75%;">
<section>
<header style="margin-bottom:5%; ">
<h2>COMPETITION DAY!</h2>
</header>
<div class="grey">
<h2 style="font-size:200%; margin-bottom: 2%;">Introduction</h2>
<p>For this class, our goal was to build a maze-mapping robot that would traverse a randomly designed maze. The robot would detect walls and "treasures" of varying frequencies, then send that information to be displayed on a remote computer. Upon travelling to every part of the maze that is reachable, the robot would stop and play a tune to signal that it is finished.</p>
<p>Our robot Shrimpy did most of these things, to varying levels of success. Though the algorithm for mapping wasn't the MOST efficient, Shrimpy completed the mazes and played the "done" tune. The robot did update our display, buggy as it may be. The biggest problem was with the treasure detection, in that it didn't work and we removed it entirely. </p>
</div>
<div class="white">
<h2 style="font-size:200%; margin-bottom: 2%;">Final Design</h2>
<p>We went through multiple iterations of Shrimpy, until we arrived at the glorious Shrimpbot9001, pictured below.</p>
<div class="w3-content w3-display-container" style="width:50%;">
<img class="mySlides" src="images/shrimpbot-1.jpg" style="width:100%">
<img class="mySlides" src="images/shrimpbot-2.jpg" style="width:100%">
<img class="mySlides" src="images/shrimpbot-3.jpg" style="width:100%">
<img class="mySlides" src="images/shrimpbot-4.jpg" style="width:100%">
<button class="w3-button w3-black w3-display-left" onclick="plusDivs(-1)">❮</button>
<button class="w3-button w3-black w3-display-right" onclick="plusDivs(1)">❯</button>
</div>
<script>
var slideIndex = 1;
showDivs(slideIndex);
function plusDivs(n) {
showDivs(slideIndex += n);
}
function showDivs(n) {
var i;
var x = document.getElementsByClassName("mySlides");
if (n > x.length) {slideIndex = 1}
if (n < 1) {slideIndex = x.length}
for (i = 0; i < x.length; i++) {
x[i].style.display = "none";
}
x[slideIndex-1].style.display = "block";
}
</script>
<br>
<h3>Physical design</h3>
<p>As you can see in the images, the design of our robot is based off a shrimp. This award-winning design features a sleek 3D-printed body with spaces for components and boards built in. Thus, we didn't need to make a board tower like many of the other groups did.</p>
<h3>Wiring and components</h3>
<p>The basic circuitry did not change significantly since milestone 4.</p>
<p> The bill of materials is shown below </p>
<img src="images/BOM.PNG" style="width:100%;">
<h3>Software
<a href="/code/final-code.zip" download>
<i class="fa fa-download" aria-hidden="true"></i>
</a>
</h3>
<p>The main changes we made since milestone 4 were to fix some bugs in our DFS algorithm and to make the communication between the radio receiver and the FPGA more reliable. </p>
<p style="text-decoration: underline"> Maze Mapping </p>
<p>After continued testing of the robot mapping several edge cases for the mazes, we made a minor improvement to our DFS algorithm. Previously, we only added nodes not currently in the frontier to the frontier. This sometimes resulted in the robot trying to retrace its path to an adjacent node. We solved this by adding all adjacent nodes (with no walls in between) to our frontier stack. Instead, when we popped from the frontier stack, we just checked the visited stack to see if we had already visited the node to avoid duplication.</p>
<p>We also found some minor bugs in our implementation after testing. One bug occured when retracing a path. If a node was added to a frontier previously and it was adjacent to our current location, our robot tried to move directly from our current position to the frontier node even if there was a wall in between. This was fixed simply by checking if there was a wall in between our current node and destination node before trying to move there. If there was, the robot would just try to retrace its path.</p>
<p style="text-decoration: underline">Radio and FPGA communication </p>
<p>We made signifcant changes to the way we sent the radio packets. Each radio packet only contained new information (current position, walls, treasures, and a done signal). The size of each packet was an integer. The packet was created through bit masking on the robot side, and similarly interpreted on the radio receiver.</p>
<p>We also improved our sending of radio packets. Previously, we found that occasionally radio packets were dropped. In order to improve accuracy, we re-sent radio packets if they were not received (this was determined through auto ACK). However, to avoid the possibility of getting caught in an infinite loop, we only resent packets at most ten times. </p>
<p>Another improvement we made from milestone 4 was in the communication between the radio receiver and the FPGA. After interpreting a packet and writing the appropriate pins on the arduino (we used parallel communication between the arduino and the FPGA), we set a dedicated valid bit to indicate that the packet was accurate. The FPGA would only change the state of the GUI based if the valid bit was high. This would avoid the chance that the FPGA might read a partial packet and change the state of the GUI. </p>
<p>Below are videos of Shrimpbot9001 running through mazes on competition day:</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/la6RSw5Q0-Q" frameborder="0" gesture="media" allow="encrypted-media" allowfullscreen style="margin-left:15%;"></iframe>
</div>
<div class="grey">
<h2 style="font-size:200%; margin-bottom: 2%;">Conclusion</h2>
<p>As mentioned before, we struggled with treasure detection, and eventually decided to not include it in the final competition. If we had more time, that is definitely one of the things we would like to improve.</p>
<p>Additionally, it would be nice to make our maze-searching algorithm more efficient, such as by implmeneting Djikstra's instead of DFS. This would have been especially nice in the final maze, where we had to retrace many extra steps, when the robot could have mapped the one outlier square sooner and finished much earlier.</p>
</div>
<div class="white">
<h2 style="font-size:200%; margin-bottom: 2%;">Thanks for a gr8 year!</h2>
<p>We'd like to thank Kirstin for running this class, as well as our lab TA's AJ and Ryan for their help and enthusiasm <i class="fa fa-smile-o" aria-hidden="true"></i></p>
<img src="images/shrimpers.jpg" style="width:70%; margin-left:15%;">
</div>
</section>
</div>
</div>
</div>
</div>
<!-- /Main -->
<!-- Tweet -->
<div id="tweet">
<div class="container">
<section>
<blockquote style="font-family:Ubuntu; letter-spacing: 2px;">no bad robots</blockquote>
</section>
</div>
</div>
<!-- Copyright -->
<div id="copyright">
<div class="container">
website design from <a href="http://templated.co">TEMPLATED</a>
<br>
</div>
</div>
</body>
</html>