-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathev3dev-java.html
More file actions
447 lines (446 loc) · 16.5 KB
/
ev3dev-java.html
File metadata and controls
447 lines (446 loc) · 16.5 KB
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
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 1.5.5">
<title>docs</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<link rel="stylesheet" href="./asciidoctor.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
</head>
<body class="article toc2 toc-left">
<div id="header">
<h1>What is EV3Dev-lang-java?</h1>
<div class="details">
<span id="revnumber">version 2.4.16</span>
</div>
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel1">
<li><a href="#introduction">1. Introduction</a></li>
<li><a href="#project-architecture">2. Project architecture</a></li>
<li><a href="#features-included">3. Features included</a></li>
<li><a href="#subprojects">4. Subprojects</a></li>
<li><a href="#competitive-advantages">5. Competitive advantages</a></li>
<li><a href="#timeline-of-the-project">6. Timeline of the project</a></li>
<li><a href="#evolution-of-java-on-lego-mindstorms-ecosystem">7. Evolution of Java on Lego Mindstorms ecosystem</a></li>
</ul>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>A project to learn Java and create software for Mindstorms Robots using hardware supported by EV3Dev & the LeJOS way.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="introduction">1. Introduction</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Lego Mindstorms ecosystem is
<code>a fantastic educational way to learn Java, Linux and Robotics</code> to develop your creativity using your favourite Bricks.
In the the third generation of the product <a href="https://www.lego.com/en-us/mindstorms">Lego Mindstorms EV3</a>,
others companies like <a href="https://www.dexterindustries.com/">Dexter Industries</a>
& <a href="http://www.mindsensors.com/">Mindsensors</a> has released boards combining the power of
<a href="https://www.raspberrypi.org/">Raspberry Pi 3</a> with the usage of Sensors & Actuators from Lego Mindstorms ecosystem.
The result is very healthy for the Community but…​ some questions appear in the air:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>How to manage the hardware in an easy way?</p>
</li>
<li>
<p>How to continue using Java with all boards?</p>
</li>
<li>
<p>What happen with amazing LeJOS libraries about <code>local-navigation</code> in this context?</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The answer is this project, <strong>EV3Dev-lang-java</strong>.</p>
</div>
<div class="paragraph">
<p><span class="image"><img src="./theThreeAmigos.jpg" alt="ScreenShot"></span></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="project-architecture">2. Project architecture</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The project has been designed with the following solution in mind:</p>
</div>
<table class="tableblock frame-all grid-all spread">
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Layer</th>
<th class="tableblock halign-left valign-top">Option 1</th>
<th class="tableblock halign-left valign-top">Option 2</th>
</tr>
</thead>
<tfoot>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ev3dev-lang-java</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">0.7.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.4.16</p></td>
</tr>
</tfoot>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Platforms</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">BrickPi BrickPi3 PiStorms</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">EV3</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">OS</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Debian Jessie</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Debian Jessie/Stretch</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">JVM</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">OpenJDK 11</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">OpenJDK JRI 11/12 ea</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EV3Dev Kernel</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4.4.47-19-ev3dev-ev3 4.4.47-19-ev3dev-rpi2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4.14.71-ev3dev-2.3.0-ev3</p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p><strong>Note:</strong> At the moment, the whole solution is scalable until the next <code>LEGO Mindstorms</code> product estimated
for next January of 2020.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="features-included">3. Features included</h2>
<div class="sectionbody">
<div class="paragraph">
<p><strong>Java features</strong></p>
</div>
<div class="ulist">
<ul>
<li>
<p>OpenJDK Java 11/12 ea support for EV3 Brick, Brickpi+/PiStorms + Raspberry Pi 3</p>
</li>
<li>
<p>Java profiling tools Support (<a href="http://www.oracle.com/technetwork/java/javaseproducts/mission-control/java-mission-control-1998576.html">Oracle mission control</a> & <a href="http://docs.oracle.com/javase/7/docs/technotes/guides/management/jconsole.html">JConsole</a>)</p>
</li>
<li>
<p>Logging support based on <a href="https://www.slf4j.org/">SLF4J</a></p>
</li>
<li>
<p>Centralized logs with <a href="https://www.elastic.co/products/kibana">Kibana</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p><strong>Platform features</strong></p>
</div>
<div class="ulist">
<ul>
<li>
<p>Support for EV3 Brick, PiStorms v1/v2, BrickPi+ & BrickPi 3</p>
</li>
</ul>
</div>
<div class="paragraph">
<p><strong>Lego Mindstorms features</strong></p>
</div>
<div class="ulist">
<ul>
<li>
<p>Regulated Motor Support</p>
</li>
<li>
<p>Unregulated Motor Support</p>
</li>
<li>
<p>Sensor Support (EV3 sensors)</p>
</li>
<li>
<p>Sounds Support</p>
</li>
<li>
<p>EV3 LCD Support</p>
</li>
</ul>
</div>
<div class="paragraph">
<p><strong>Robotics</strong></p>
</div>
<div class="ulist">
<ul>
<li>
<p>Automatic installation of <a href="http://opencv.org/">OpenCV</a></p>
</li>
<li>
<p><a href="http://espeak.sourceforge.net/">eSpeak</a> TTS (Text to speech) Support</p>
</li>
<li>
<p><a href="http://sourceforge.net/p/lejos/wiki/Sensor%20Framework/">LeJOS Sensor filter</a> Support</p>
</li>
<li>
<p><a href="https://github.com/ev3dev-lang-java/lejos-navigation">LeJOS local navigation stack</a> Support</p>
</li>
<li>
<p><a href="https://github.com/ev3dev-lang-java/usb-devices">RPLidar A1/A2</a> (2D Lidar) Support</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="subprojects">4. Subprojects</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Stable projects:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/ev3dev-lang-java/openjdk-ev3">OpenJDK for EV3</a>: A custom OpenJDK JRE build for EV3</p>
</li>
<li>
<p><a href="https://github.com/ev3dev-lang-java/ev3dev-lang-java">EV3Dev-lang-java</a>: Low level interation with EV3Dev</p>
</li>
<li>
<p><a href="https://github.com/ev3dev-lang-java/lejos-commons">lejos-commons</a>: LeJOS interfaces & utilities</p>
</li>
<li>
<p><a href="https://github.com/ev3dev-lang-java/installer">Installer</a>: A set of Bash scripts to automate some operations with your brick</p>
</li>
<li>
<p><a href="https://github.com/ev3dev-lang-java/template_project_gradle">Template project</a>: A Gradle project ready to test the project</p>
</li>
<li>
<p><a href="https://github.com/ev3dev-lang-java/examples">Examples</a>: A repository with several examples about the usage of this project</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Incubator projects:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/ev3dev-lang-java/lejos-navigation">lejos-navigation</a>: LeJOS navigation stack</p>
</li>
<li>
<p><a href="https://github.com/ev3dev-lang-java/usb-devices">Usb Devices</a>: A library to use Arduino, Grove Sensors, GPS, IMU, LIDAR, and more devices…​</p>
</li>
<li>
<p><a href="https://github.com/ev3dev-lang-java/ros">ROS</a>: A library to publish Sensor data to ROS for SLAM purposes</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="competitive-advantages">5. Competitive advantages</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The competitive advantages of this project are:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Development Java robots with modern Java versions</p>
</li>
<li>
<p>Support for Multiple Bricks like EV3 Brick, BrickPi & PiStorms</p>
</li>
<li>
<p>Support for <code>USB</code> Connections for Sensors like 2D LIDARs, IMU & GPS & <code>Arduino</code> Boards</p>
</li>
<li>
<p>Usage of <code>LeJOS</code> interfaces</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>If you analyze the hardware, any EV3 Brick uses a
<code>SoC: Sitara Processor AM1808</code> (from year 2010) to manage Sensors &
Actuators but now with the usage of a BrickPi/PiStorms unit, it is
possible to use the power of a Raspberry Pi 3 increasing the
possibilities to develop complex projects which require por
Computational consumption.</p>
</div>
<table class="tableblock frame-all grid-all spread">
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Element</th>
<th class="tableblock halign-left valign-top">LEGO</th>
<th class="tableblock halign-left valign-top">Raspberry Pi 3 Model B+</th>
</tr>
</thead>
<tfoot>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Year</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2010</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2018</p></td>
</tr>
</tfoot>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">EV3 Brick</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">BrickPi+ BrickPi3 PiStorms</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">SoC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Sitara Processor AM1808</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Broadcom BCM2837 RISC de 64 bits</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">CPU</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">ARM9 300MHz / 456 Mhz</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4× ARM Cortex-A53, 1.4GHz</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">RAM</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">16KB of Instruction Cache, 16KB of Data Cache, 8KB of RAM (Vector Table), 64KB of ROM</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1GB LPDDR2 (900 MHz)</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">USB</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1x</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4x</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="timeline-of-the-project">6. Timeline of the project</h2>
<div class="sectionbody">
<div class="paragraph">
<p>In 2015, EV3Dev was born to offer a solution to install a complete
<a href="https://www.debian.org">Linux Debian Operating System</a> on
<a href="https://www.lego.com/en-us/mindstorms">EV3 Brick</a>,
<a href="https://www.dexterindustries.com/brickpi/">BrickPi Series</a> &
<a href="http://www.mindsensors.com/content/78-pistorms-lego-interface">PiStorms Series</a>.
The project provides an agnostic Linux interface to unify the way to interact with Mindstorms Hardware too.</p>
</div>
<div class="paragraph">
<p>At the end of the same year, <code>EV3Dev-lang-java</code> was born with the idea to continue developing Java robots
on Lego Mindstorms and providing a port of <code>LeJOS</code> libraries like the <code>local-navigation</code> stack.</p>
</div>
<div class="paragraph">
<p>In the future, we will add the <code>remote</code> support and <code>ROS</code> support.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="evolution-of-java-on-lego-mindstorms-ecosystem">7. Evolution of Java on Lego Mindstorms ecosystem</h2>
<div class="sectionbody">
<div class="paragraph">
<p>LeJOS project is the unique Open Source project available for every Lego Mindstorms generations of the product.
In any generation, the project had to find a solution for the following layers:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Runtime</p>
</li>
<li>
<p>JVM</p>
</li>
<li>
<p>Robotics libraries</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>This premise was solved in every Mindstorms generation:</p>
</div>
<table class="tableblock frame-all grid-all spread">
<colgroup>
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Product</th>
<th class="tableblock halign-left valign-top">RCX</th>
<th class="tableblock halign-left valign-top">NXT</th>
<th class="tableblock halign-left valign-top">EV3 + LeJOS</th>
<th class="tableblock halign-left valign-top">EV3/BrickPi/PiStorms + EV3Dev-lang-java</th>
</tr>
</thead>
<tfoot>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Last release</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">17/12/2006</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">03/02/2015</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">16/11/2015</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">13/11/2018</p></td>
</tr>
</tfoot>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Runtime</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Custom firmware</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Custom firmware</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Busybox + Native libraries</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Debian Jessie/Stretch</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">JVM</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Custom JVM</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Custom JVM</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Oracle JRE 8</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">OpenJDK 11/12 ea</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Robotics libraries</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Initial libraries</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">local-navigation, remote, ros</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">local-navigation, remote</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">local-navigation</p></td>
</tr>
</tbody>
</table>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-343143-18', 'auto');
ga('send', 'pageview');
</script>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Version 2.4.16<br>
Last updated 2021-01-09 15:56:33 CET
</div>
</div>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.js"></script>
<script>prettyPrint()</script>
</body>
</html>