Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università...
-
date post
21-Dec-2015 -
Category
Documents
-
view
225 -
download
0
Transcript of Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università...
![Page 1: Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.](https://reader036.fdocuments.in/reader036/viewer/2022062313/56649d625503460f94a43f5a/html5/thumbnails/1.jpg)
Antonio Cisternino & Diego Colombo
VisualStorms Tools
Another Brick in the Robot . . .
Università degliStudi di Pisa
![Page 2: Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.](https://reader036.fdocuments.in/reader036/viewer/2022062313/56649d625503460f94a43f5a/html5/thumbnails/2.jpg)
Antonio Cisternino & Diego Colombo
Introduction
• Lego MindStorms allow building small robots based on the popular Lego bricks
• A programmable brick allows controlling up to three devices (motors) and test up to three input sensors
• Programs are expressed in a bytecode interpreted by an interpreter in the brick’s ROM
• The execution model is concurrent (up to ten threads) and there is a (very) small amount of memory representing the state of the execution
![Page 3: Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.](https://reader036.fdocuments.in/reader036/viewer/2022062313/56649d625503460f94a43f5a/html5/thumbnails/3.jpg)
Antonio Cisternino & Diego Colombo
Programming the Brick• Lego provides a visual programming
system to program the brick• Other tools have been developed to
program MindStorms: a tiny JVM is being written (to replace the Lego VM), NQC is a C-Like language for programming the Brick
• We have written a library to program MindStorms with .NET and Visual Studio
• The library compiles Intermediate Language (IL) into Lego bytecode, in this way (almost) any .NET compiler can be used to program the Brick.
![Page 4: Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.](https://reader036.fdocuments.in/reader036/viewer/2022062313/56649d625503460f94a43f5a/html5/thumbnails/4.jpg)
Antonio Cisternino & Diego Colombo
Compilation Scheme
VisualStorms
bcI File
Brick Downloader
C#
VB
SML
. . .
IL
![Page 5: Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.](https://reader036.fdocuments.in/reader036/viewer/2022062313/56649d625503460f94a43f5a/html5/thumbnails/5.jpg)
Antonio Cisternino & Diego Colombo
Memory Organization
• The compilation process should map a stack based machine into a register based machine
• Class fields are mapped to global variables
• Stack of a method is mapped to local variables starting from index 47 towards 32
• Local variables are mapped starting from 32
• Thus maxstack + #locals < 32
Global variables (0-31)
Task 0 (M
ain) 32-47
Task 1 (32-47)
Task 9 (32-47)
. . .Stack
4746
sp
V1
V2
.. . .
![Page 6: Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.](https://reader036.fdocuments.in/reader036/viewer/2022062313/56649d625503460f94a43f5a/html5/thumbnails/6.jpg)
Antonio Cisternino & Diego Colombo
Compilation: an Exampleusing System;namespace StormTestAdvanced { public class AracnoBrickTop : VisualStormsTypes.RCX2 {
public int x;public int y;[FunctionType(Function.Task, 0)]public void main() { int i = Sensor2(); while(Sensor1() == 0) if (i != 0)
SetMotorsPower(VisualStormsTypes.Motor.A, Sensor3()); else SetMotorsPower(VisualStormsTypes.Motor.C, Sensor3());}}}
Inheritance to indicate the type of Brick
Custom attribute to indicate tasks, subs
and functions
Inherited methods for I/O
Global variables are expressed as
fields
![Page 7: Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.](https://reader036.fdocuments.in/reader036/viewer/2022062313/56649d625503460f94a43f5a/html5/thumbnails/7.jpg)
Antonio Cisternino & Diego Colombo
Compilation Example: ILIL_0000: ldarg.0IL_0001: call instance int32 VisualStormsTypes.LegoBrick::Sensor2()IL_0006: stloc.0IL_0007: br.s IL_0028IL_0009: ldloc.0IL_000a: brfalse.s IL_001bIL_000c: ldarg.0IL_000d: ldc.i4.1IL_000e: ldarg.0IL_000f: call instance int32 VisualStormsTypes.LegoBrick::Sensor3()IL_0014: call instance void LegoBrick::SetMotorsPower(Motor, int32)IL_0019: br.s IL_0028IL_001b: ldarg.0IL_001c: ldc.i4.4IL_001d: ldarg.0IL_001e: call instance int32 VisualStormsTypes.LegoBrick::Sensor3()IL_0023: call instance void LegoBrick::SetMotorsPower(Motor, int32)IL_0028: ldarg.0IL_0029: call instance int32 VisualStormsTypes.LegoBrick::Sensor1()IL_002e: brfalse.s IL_0009IL_0030: ret
SetVar : 20 32 9 1 0
LJump : 114 26 0 (26 f)SetVar : 20 47 0 32 0
LCheckDo : 149 192 2 47 0 0 9 0 (9 f)
SetPower : 19 1 9 2
LJump : 114 6 0 (6 f)
SetPower : 19 4 9 2
SetVar : 20 47 9 0 0
LCheckDo : 149 192 2 47 0 0 221 255 (35 b)
![Page 8: Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.](https://reader036.fdocuments.in/reader036/viewer/2022062313/56649d625503460f94a43f5a/html5/thumbnails/8.jpg)
Antonio Cisternino & Diego Colombo
Compilation Example: Output
SetVar : 20 32 9 1 0LJump : 114 26 0 (26 f)SetVar : 20 47 0 32 0LCheckDo : 149 192 2 47 0 0 9 0 (9 f)SetPower : 19 1 9 2LJump : 114 6 0 (6 f)SetPower : 19 4 9 2SetVar : 20 47 9 0 0LCheckDo : 149 192 2 47 0 0 221 255 (35 b)
![Page 9: Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.](https://reader036.fdocuments.in/reader036/viewer/2022062313/56649d625503460f94a43f5a/html5/thumbnails/9.jpg)
Antonio Cisternino & Diego Colombo
Compilation Example: NQCint x;int y;task main (){ int i = SENSOR_2; while(SENSOR_1 == 0) { if (i != 0) { SetPower (OUT_A,SENSOR_3); } else { SetPower (OUT_C,SENSOR_3); } }}
![Page 10: Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.](https://reader036.fdocuments.in/reader036/viewer/2022062313/56649d625503460f94a43f5a/html5/thumbnails/10.jpg)
Antonio Cisternino & Diego Colombo
Compilation Example: NQC’s output
*** Var 0 = x*** Var 1 = y*** Var 47 = i*** Task 0 = main
pwr ABC, 7dir ABC, Fwdsetv var[47], Input(1)jmpl 33chkl 0 == var[47], 29pwr A, Input(2)jmpl 33pwr C, Input(2)chkl 0 == Input(0), 14
SetVar : 20 32 9 1 0LJump : 114 26 0 (26 f)SetVar : 20 47 0 32 0LCheckDo : 149 192 2 47 0 0 9 0 (9 f)SetPower : 19 1 9 2LJump : 114 6 0 (6 f)SetPower : 19 4 9 2SetVar : 20 47 9 0 0LCheckDo : 149 192 2 47 0 0 221 255 (35 b)
![Page 11: Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.](https://reader036.fdocuments.in/reader036/viewer/2022062313/56649d625503460f94a43f5a/html5/thumbnails/11.jpg)
Antonio Cisternino & Diego Colombo
Structure of the System
VisualStorms AddIn
VisualStormsCompiler
SharpStormsLib CliFileReader
SharpSerial
Reflection
AssemblyLoader
VisualStudio User
![Page 12: Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.](https://reader036.fdocuments.in/reader036/viewer/2022062313/56649d625503460f94a43f5a/html5/thumbnails/12.jpg)
Antonio Cisternino & Diego Colombo
Demo
![Page 13: Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.](https://reader036.fdocuments.in/reader036/viewer/2022062313/56649d625503460f94a43f5a/html5/thumbnails/13.jpg)
Antonio Cisternino & Diego Colombo
Applications
• Teaching: the ability of programming simple robots with real world languages allow a gentle introduction to programming
• Use of Lego to prototype robots controlled by remote programs running on a full fledged PC and radio controlled
• Application of extensible reflection provided by .NET
• It is Possibile to implement emulators and debug programs in Visual Studio (or guidbg) for .NET
![Page 14: Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.](https://reader036.fdocuments.in/reader036/viewer/2022062313/56649d625503460f94a43f5a/html5/thumbnails/14.jpg)
Antonio Cisternino & Diego Colombo
Conclusions and Future Work
• IL is a rich binary format that can be exploited for purposes different than execution
• The ability of compiling a subset of C# programs to the robot allows a neat environment for experimenting with easy-to-build robots
• In the future the compiler will recognize call to external methods generating RPC code and distributing a computation between the robot and the PC automatically