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

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

  • View
    223

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

Antonio Cisternino & Diego Colombo

Demo

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

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

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