Presentation is loading. Please wait.

Presentation is loading. Please wait.

Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa.

Similar presentations


Presentation on theme: "Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa."— Presentation transcript:

1 Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa

2 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

3 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.

4 Antonio Cisternino & Diego Colombo Compilation Scheme VisualStorms bcI File Brick Downloader C# VB SML... IL

5 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 (Main) 32-47 Task 1 (32-47)Task 9 (32-47)... Stack 47 46 sp V 1 V 2..

6 Antonio Cisternino & Diego Colombo Compilation: an Example using 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

7 Antonio Cisternino & Diego Colombo Compilation Example: IL IL_0000: ldarg.0 IL_0001: call instance int32 VisualStormsTypes.LegoBrick::Sensor2() IL_0006: stloc.0 IL_0007: br.s IL_0028 IL_0009: ldloc.0 IL_000a: brfalse.s IL_001b IL_000c: ldarg.0 IL_000d: ldc.i4.1 IL_000e: ldarg.0 IL_000f: call instance int32 VisualStormsTypes.LegoBrick::Sensor3() IL_0014: call instance void LegoBrick::SetMotorsPower(Motor, int32) IL_0019: br.s IL_0028 IL_001b: ldarg.0 IL_001c: ldc.i4.4 IL_001d: ldarg.0 IL_001e: call instance int32 VisualStormsTypes.LegoBrick::Sensor3() IL_0023: call instance void LegoBrick::SetMotorsPower(Motor, int32) IL_0028: ldarg.0 IL_0029: call instance int32 VisualStormsTypes.LegoBrick::Sensor1() IL_002e: brfalse.s IL_0009 IL_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)

8 Antonio Cisternino & Diego Colombo Compilation Example: Output 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)

9 Antonio Cisternino & Diego Colombo Compilation Example: NQC int 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); }

10 Antonio Cisternino & Diego Colombo Compilation Example: NQC’s output *** Var 0 = x *** Var 1 = y *** Var 47 = i *** Task 0 = main pwr ABC, 7 dir ABC, Fwd setv var[47], Input(1) jmpl 33 chkl 0 == var[47], 29 pwr A, Input(2) jmpl 33 pwr C, Input(2) chkl 0 == Input(0), 14 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)

11 Antonio Cisternino & Diego Colombo Structure of the System VisualStorms AddIn VisualStormsCompiler SharpStormsLib CliFileReader SharpSerial Reflection AssemblyLoader VisualStudioUser

12 Antonio Cisternino & Diego Colombo Demo

13 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

14 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


Download ppt "Antonio Cisternino & Diego Colombo VisualStorms Tools Another Brick in the Robot... Università degli Studi di Pisa."

Similar presentations


Ads by Google