Donnerstag, November 09, 2006

DEV304 Microsoft Robotics Studio

Martin Calsyn
Abstract:
The Microsoft Robotics Studio is a Windows-based environment for academic, hobbyist and commercial developers to easily create robotics applications across a wide variety of hardware. Key features and benefits of the Microsoft Robotics Studio environment include: end-to-end Robotics Development Platform , lightweight services-oriented runtime, and a scalable and extensible platform.

Diese Session besuche ich jetzt rein aus persönlichem Interesse. Wer weiss, ev, gibt es zu Weinachten ja einen Lego Mindstorm ;-)

Robbotics ist in den Anfängen, es existiert noch keine wirkliche Killer Applikation. Es gibt keine Standard Hardware und auch keine HW"abstraction".Und das "Real World testing" ist sehr teuer.

• The ‘hot buttons’ from Industry, hobbyists, academia and researchers:
• Static and dynamic device configuration
• Coordinating asynchronous device input
• Starting and stopping components dynamically and independently
• Monitoring and interacting with running systems
• Improved development cycle, particularly with limited access to robot hardware
• Spanning multiple compute units
• Reuse of software, particularly across different hardware
• Microsoft Robotics Studio addresses:
• Reusable components: Introduces a paradigm that facilitates reuse
• Standardization: Introduces a hardware abstraction paradigm
• Concurrency and distributed computing: Introduces CCR and DSS to greatly simplify these tasks
• Simulation: Introduces a high-fidelity, extensible virtual world

Barrier to Entry: Introduces a Visual Programming Language to make the advanced features more accessible to newcomers


Was ist eine Robotics Applikation ? :

• A composition of loosely-coupled and concurrently executing components providing:
• Orchestration of sensors and actuators
• User Interaction
• Control or Behavior logic

Architektur:

• Services are the basic building block
• Structured state
• Behavior
• Partner services
• Contract

• Operations
• State retrieval and manipulation
• Create and Terminate
• Notification

• Services
• Can be used to abstract hardware
• Can be composed and provide aggregated functionality (sensor fusion, for example)
• Are inherently remotable and participate in distributed operations
• Restartable and mobile (state transfer)
• Must be inherently asynchronous

• But asynchronous programming is hard!
• Sequential applications
○ Flat or incremental performance
○ Potentially poor responsiveness
• Explicitly threaded apps
○ Hardwired number of threads prefer K processors for a given workload
○ Can penalize < K processors and fail to scale to > K processors
○ Hard to write and even harder to debug



Das Programming Model:

• Zuerst muss ich den Service und die Operations deklarieren;Operations

public sealed class Contract {
public const String Identifier = "http://schemas.coroware.com/2006/10/machinedirectory.html";
}
[DataContract()]
public class MachineDirectoryState {
[DataMember]
public List Services = new List();
}
public class MachineDirectoryOperations : PortSet { }
public class Get : Get> { }
public class Replace : Replace> { }

• Declaring a Service Port
[ServicePort("/machinedirectory", AllowMultipleInstances=false)]
private MachineDirectoryOperations _mainPort = new MachineDirectoryOperations();
• Defining Partnerships
[Partner("NodeDirectory",Contract=nds.Contract.Identifier, CreationPolicy = PartnerCreationPolicy.UseExistingOrCreate)]
private nds.NodeDirectoryOperations _nds = new nds.NodeDirectoryOperations();
• Coordinating Asynchronous Tasks - A compositional, declarative pattern
protected override void Start()
{
ActivateDsspOperationHandlers();
}
[ServiceHandler(ServiceHandlerBehavior.Concurrent)]
public virtual IEnumerator GetHandler(Get get)
{
get.ResponsePort.Post(_state);
yield break;
}
[ServiceHandler(ServiceHandlerBehavior.Exclusive)]
public virtual IEnumerator ReplaceHandler(Replace replace)
{
_state = replace.Body;
replace.ResponsePort.Post(DefaultReplaceResponseType.Instance);
yield break;
}


Beispiel für einen Choice:


// Subscribe to the local node directory service
nds.Subscribe sub = new nds.Subscribe();
sub.NotificationPort = _ndsNotify;
_nds.Post(sub);
Activate(
Arbiter.Choice(
sub.ResponsePort,
delegate(SubscribeResponseType resp)
{ LogInfo("Successfully subscribed to node directory"); },
delegate(Fault fault)
{ _mainPort.Post(new DsspDefaultDrop()); })
);

• Example: Interleave
ActivateDsspOperationHandlers().CombineWith(
Arbiter.Interleave(
new TeardownReceiverGroup(),
new ExclusiveReceiverGroup(
Arbiter.Receive(true,
_ndsNotify, NdsInsertHostHandler),
Arbiter.Receive(true,
_ndsNotify, NdsDeleteHostHandler),
Arbiter.Receive(true, _dirNotify,
DirInsertHandler),
Arbiter.Receive(true, _dirNotify,
DirDeleteHandler)
),
new ConcurrentReceiverGroup()
)
);

• Services run within an execution context called a ‘node’
• Nodes expose http and SOAP/TCP endpoints



Es folgt nun eine Demo im Microsoft Robotics Sudio und er demonstriert, wie er mittels http mit den Services interagiert.

• Nun erfolgt eine Exkursion in die Visual Programming Language
• Ich kann damit joins kreieren, choices und pathways.
• Ich kann partnerships mit externen services kreieren
○ All Services (regardless of language) are available on the diagram surface
Das Studio mit seiner Visual Designer Language sieht ein wenig aus wie der Designer im Workflow. Nur es ist etwas eigenes. Dazu am Schluss mehr.

Es folgt eine Demo, wo das ganze in einem Simulator gezeigt wird. Er kann seinen Robo Steuern, Bilder anschauen von der Robo Cam. Etc. Alles, wie wenn es ein echter Robo wär. Nur eben im Simulator. Ziel ist es, das ich im Simulator wie beim echten Robo immer den selben Code verwenden kann. Somit ist auch sichergestellt, dass die Simulation "realistisch" ist. Die Tests werden so natürlich sehr viel günstiger, so kann ich etwas für eine Laser Spektrometer programmieren, ohne einen kaufen zu müssen.

• Simulation
• Cost effective
• High-fidelity
• Fast, incremental prototyping



• Entities consist of:
○ A graphical representation of your object
§ Geometric shape
§ Complex mesh with materials and textures
○ A physics representation
§ Shape, Mass, CM, friction, joints
§ Physical shape (hull) can be automatically derived from geometric shapes and complex meshes
○ An entity can have both, either or neither representation(s)

• Simulation services
○ Communicate with entities to effect changes in entity state (change position, orientation, physics attributes like torques and forces)
○ Communicate with application services through a service interface
§ This service interface should mimic the interface used for the real device on the real robot
• Application services
○ Your application code
○ Should be identical code for simulation or real-world use


Printscreen des Simulators:



Am schluss zeigt er noch Hardware, welche ich benötigen kann. (Feuchtigkeitssensor, GPS Modul, Infrarot Sensor, Temperatur Messer, und einen echten Robo. Er kann leider nichts am Robo zeigen, da es ihm anscheinend das Netzteil geschmort haben soll.

Sehr interessante Session, über die ich noch sehr viel schreiben könnte. Es ist schwierig hier das Konzept verständlich zu erklären. Typisch Microsoft ist, dass sie eine Visual Language geschaffen haben, die nur im ROBO Studio gültig ist. Hier hätte ein Konzern interner Griff zur WinWF Engine genau dieselben Ergebnisse gebracht. Dies wurde dann auch gefragt, weshalb für die Orchestrierung nicht WinWF gebraucht werde. Die Antwort: Das sei so, und vermutlich habe man nicht miteinander gesprochen. Wenn ich mehr Zeit hätte, würde ich sofort beginnen mit der Robo Programmierung !

DEV227 Windows Presentation Foundation (WPF) in the Real World: Zürich Airport Monitoring System

Ronnie Saurenmann
Abstract:
WPF enables new scenarios, in particular regarding rich data visualization. In this session we will present an ongoing project at Zürich Airport, where a WPF based map is used to display near real time data about the airport. With this system it is possible in a blink of an eye to see the status of the airport, including landing and taking off airplanes with the relative information like delays, load, etc... At the beginning we will present the overall architecture of the system, and in particular how Service Oriented Architecture (SOA) helped in having all the data available and aggregated. Then we will focus on the WPF User Interface (UI) showing the application running and how to build the basic construct in WPF. This session has the goal of providing you with new ideas and scenarios combining WPF and SOA. We will also demonstrate the ease of use and productivity of WPF.

Auf diese Session bin ich jetzt wirklich gespannt. Ronnie war gestern (war ja auch schon bei uns) auch an der Swiss Country Night, Ich weiss, was er zeigen wird, wir haben und gestern noch darüber unterhalten. Es ist vor allem so, das für WPF immer die gleichen Demos gebraucht werden. Ronnie wird uns endlich eine "echte" Applikation zeigen.
Ronnie beginnt sehr witzig und macht sich auch gleich lustig über die Demo die man immer irgendwo sieht. Er erklärt, dass Zürich bei den letzten war in ganz Europa, wenn es sich um Verspätungen gehandelt hat. Nun, er wisse zwar nicht ob es sich wegen seiner App so Entwickelt hat, aber jetzt ist er nr5. Er erklärt, dass das Problem ist, irgendwie sinnvoll die grosse Menge von Daten darzustellen. Jetzt kommt die Demo. Wooow , geile Applikation !!
Man sieht die Map vom Flughafen Zürich. Ich sehe, welche Flugzeuge wo sind, ich sehe wie beladen die Flugzeuge sind etc. Einfach nur cool !



Was musste alles beachtet werden ?






Client Service Communication:

• Web Services Pull every 10 seconds
• Message is zipped
○ I don’t like the zip idea
• Get the last 10 seconds vector for the animation
• Plus all the additional information
○ Delays, Passengers load, Destination, Etc..

• Today, considering Duplex binding in WCF
• Still not the best in regarding of Firewall
○ Then two binding
§ Intranet: Duplex over TCP or HTTP and Binary
§ Extranet: HTTP/SOAP BasicProfile
• Need to host it outside IIS for TCP
○ WAS not yet available
• WCF doesn’t work for a XBAP deployment
○ WCF needs full trust, XBAP are partial trust by default

• Why WPF?
• Powerfull graphical engine
○ Takes advantage of GPU
• Full animations support
○ fully programmable
• Any visual element is a .NET object
○ Easy to create, manipulate and interact
• XAML
○ Nice separation UI/Code
○ Possibility to convert from other formats

• Used Expression Interactive Designer for XAML generation
• Great way to learn WPF
• Used Visual Studio for code behind and XAML editing
• Disabled Cidar
• Remember always to save when switching tool!

Nun zeigt Ronnie, wie er mit dem Interactive Designer das ganze gebaut hat. Er bringt das ganze sehr witzig rüber und hat viele Lacher auf seiner Seite.Die Flugzeuge sind buttons…

Cool Featurers:

• Controls are look less
• Choose them by behavior
• Can be completely restyled through templates
• Nice for changing look and feel of an application without changing code
○ Application face-lifting like Car face-lifting
• Template can be applied at design and at runtime

• Template binding
• Can expose inner property of a template as external property
○ E.g.. Fill of a Rectangle bound to a Button Background
• The coordinate system
• Double precision
• Can apply transformation to it
• I can use original Latitude and Longitude
○ Can position airplane based on lat/long coming from the radar
○ Simply flip the Y axis
• WPF ist nicht Resolution independent !!
• Data and Control binding
• Can bind data to any property
• Can also bind an element property to another element property
• Scalable and hierarchical vector engine
• Can transform an element and all the contained ones
• Super easy to build zoom or panning


Er zeigt nun, wie er aus dem Button ein Flugzeug macht. (Canvas)
Ist wirklich cool, und ich weiss, wie wir in Zukunft unsere UI's machen !!

Nun zeigt er, wie er wirklich die Verschiedenen Flugzeuge gezeichnet hat, Er nimmt eine svg Graphik und Konvertiert sie in Xaml. Somit kann er diese einfach importieren und der Button sieht nun wirklich aus wie ein Flugzeug, Das ganze ist schon sehr schön animiert und sehr schnell entstanden.

Woher stammen die Daten für die Koordinaten ?

• Where it comes from
• Airport GIS application
○ Original too detailed (e.g doors numbers)
○ Exported in SVG
○ SVG is XML so it is easy to convert in XAML
§ Watch out for scaling problems
§ We used XAML Pad as a conversion tool
□ Alternatively can build a XSLT
§ Every element has a name (e.g. Runway1) so it is very easy to interact with

• Er zeigt nun, wie er die Daten (XAML) importiert und er nun gleich die "Original" Map hat, die immer exact dem Original entspricht.



… Remeber, the airplaine is a Button.

Simply Zoom in:




Nun kommt die Erklärung, wie das ganze animiert wird. Cool ist auch, da das ganze ja vektor basiert ist, ich einen Zoom hinzufügen kann. So kann ich jetzt überall hinzoomen.
Nun wird noch das scroling hinzugefügt. Und fertig ist die App!
Jetzt implementiert er noch ein "Alarm" System. So dass die Leute, welche diese Applikation benutzen, auch gleich darauf aufmerksam gemacht werden, Er fügt dem Runway 1 Grau und Rot hinzu, und nun blinkt die Runnway…
Also jetzt bin ich voll von WPF überzeugt !!


Summary:
• When a company adopt SOA you have tons of data at your disposal
• The problem is how to visualize it
• WPF is an amazing technology for data visualization
• Easy to learn, fast to build
○ No need of DirectX or Direct3D special knowledge
• Quite performing
• Any technical visualization apps is a good candidate for WPF
○ F1 Racing simulation
○ Pollution visualization
○ Medical instruments visualization
○ Map based solutions


Ronnie, nicht weil ich dich kenne oder du einen Bonus bei mir hast, aber das war die Beste Session für mich an dieser TechEd! Es war die erste Demo, die Realitätsbezogen war, aus der ich einen Nutzen ziehen konnte und das ganze so nachvollziehen konnte, das ich es auch verstand ;-) und unterhaltsam war das ganze auch noch.

DEVWD09 Windows Workflow Foundation Drop in Clinic

Paul Andrew , Matt Winkler
Abstract:
Paul is the Product Manager and Matt is the Technical Evangelist for Windows Workflow Foundation. They are both experienced at consulting with customers on projects and would like to invite you to share your project ideas at this whiteboard session. Potential software architecture using Windows Workflow Foundation will be discussed with the audience.


Ich bin gespannt an diese Session gegangen, es nimmt mich ja Wunder, wie oder was für eine Diskussion da aufkommen wird.
Es wird die Frage nach Designer gestellt. Er zeigt einen Interessanten Workflow Manager, (Link weiter unten)wo ich jede WF Instanz öffnen kann und im Designer sehe, wo mein Workflow steht und wer bei welchem Step was gemacht hat.
Die Frage ist Hosting Designer vs. Custom Designer. Die Antwort hätt ich mir vorstellen können… Hängt davon ab, was du machen willst.
BizTalk vs. WF
Positioning ?
BizTalk ist ein Server Produkt, dass schon länger auf dem Markt. WF ist gemacht für Entwickler, um die Engine in ihren Produkten zu nutzen. Grundsätzlich machen die Produkte ziemlich ähnliche Sachen, jedoch sei der Fokus der Produkte ein anderer. BizTalk ist ein Produkt, WF eine engine "for free". In der nächsten Major Version wird BizTalk WinWF basiert sein. SSIS wird angesprochen, dass dies ja auch eine Art WF ist. Frage: Wird dies auch einmal mit WF gemacht ? Es gäbe 7-8 MS Produkte, die sich commited hätten, WF einzusetzen. Mit den guys von SSIS habe man Gespräche, entschieden sei noch nichts. Wenn man SSIS einsetze, könne es je nach case Sinn machen, dass man sich überlege auf WF zu schwitchen.

Sharepoint sei momentan ideal, um WF's zu hosten. Er meint aber nicht SP WF's, sondern WF's die auf Sharpoint gehostet werden und mit SP WF's interagieren. (Sven -> Eskalation ;-)) )

Updating exisitng workflows (Dynamic updates)
Dies ist nicht einfach zu beantworten. Es gibt ein Dynamic Update API… Er zeigt ein kleines Sample.Er klickt in seinem Workflow Designer bei einem laufenden WF auf "pause", dann auf den Button "Change WF" und fügt dann ein Activity hinzu (Der WF darf natürlich noch nicht da vorbei sein) , dann "Accept Changes" und "Resume", nun kommt der WF an diesem Activity vorbei und es wird dann natürlich ausgeführt. Hmm, interessantes sample, IMHO wird dies für uns und in der Realität nie funktionieren. Ich erklär Euch gerne warum, but not here…
Achtung: Watch this guys: Workflow Manager
Whats about WF scalability? More then 100k ? It's not possible to give a answer with a "Zahl". Es kommt drauf an, was das für WF's sind, was sie machen etc. 100k ist keine grosse Zahl, weil wir ja den persistence Service haben. D.h. es sind ja dann nie die 100k WF im memory. Es ist dann eher eine Frage der Skalierbarkeit der DB. Hier ein Bild, das zeigt, wie ich die WF's skalieren kann:




Locking mechanismen for SP Tasklists: Tasklist framework in SP ist great. Paul recommend, that we should use the oob Tasklist activitys.


Interessante Diskussion, ist noch schwierig dies hier alles so wiederzugeben. Viele Fragen haben wir uns schon selbst beantwortet, da wir schon etwas weiter sind, als die meisten hier. Ich kann Euch nur sagen, dass ich nichts gehört habe, dass wir uns irgendwo falsch entschieden hätten. Ich denke, Paul hätte Freude an unserem Projekt ;-)

Persönlicher Session Break….

Mittwoch 12 Uhr war eigentlich für mich Halbzeit. Ich hab aber wie im Fussball keinen The und Zitronen Schnitz erhalten, sondern wird jetzt mal meinen Senf los….

Also, zu Converence ist zu sagen, das ich das Gefühl habe, im Gegensatz zu anderen Jahren, das hier mehr Leute sind als je zuvor, aber der "space", wo sich diese Leute bewegen können, kleiner wurde…
Die Events IT-Forum und TechEd wurden ja zusammengelegt. Nun, das macht Sinn. Kein Einwand daher. Es gibt aber schon ein Paar Sachen, die halt auf der Strecke bleiben… Es sind dies :

• Kein Printing Service mehr
• Wenig WC's (Da kann die Event Organisation nichts für, das ist Location related)
• Weniger Kühlschränke mit Getrönken (oft leer oder warme Getränke)
• Keine Glacé mehr
• Keine Party mehr !
• Die Wege sind kürzer, dafür viel mehr Gedränge

Also, jetzt will ich noch erzählen, was ich so erlebe hier… Also, das Hotel ist gut. Keine Rede. Aber… (Da kann das Hotel nichts dafür)
Ich kriege jede Metro mit.Das Ganze Hotel "zittert" wenn ne Metro vorbei donnert, Aber kein Problem, ich richte meine Uhr danach :-)
In der Nacht von Dienstag auf Mittwoch habe ich nicht soo viel geschlafen. Ich kam um ca. 10.00 Uhr ins Hotel. Nun, ihr müsst Euch das vorstellen wie ein Schlauch (das ist der Gang) und am Ende (der Head) habe ich mein Zimmer. Das heisst, ich habe mehr oder weniger Links und Rechts Nachbarn,. Also, als ich nach Hause kam, waren da (ich schätze etwa 10) Girls auf dem Gang. Einige ganz Interessante Exemplare (Sorry die Ausdrucksweise... Girls !) . Sie hatten mühe mit dem Schlüssel etc. Hab natürlich gerne geholfen… Sie hatten unter Anderem die Zimmer Links und Rechts von mir.
So gegen 11 gings los… Sie liefen im Gang mit Ihren "Absatzschuhen" hin und her… (Marmorboden) es machte einen enormen Krach..zudem haben die Ladys nie gelernt, die Türen vernünftig zu schliessen!! Natürlich können nicht 2 und 2 in einem Zimmer sich einigen, wie sie jetzt in den Ausgang gehen. Also switchen sie von Tür oder Zimmer zu Zimmer. Wie man Türen schliesst, haben sie anscheinend wirklich nie gelernt. Also Türe zu = Bäng !... Bäng ! …. Und das alle 20 Sekunden ! Ok, ich musste nichts sagen, hab mitbekommen, wie irgend ein Guy im Gang Terror macht und erzählt, das er um 8 Uhr wieder auf sein müsste um zu Arbeiten. Das Ganze hatte dann auch relativ schnell ein (vorläufiges) Ende, den die Ladys wollten ja in den Ausgang.
Ich war froh denn jetzt war Ruhe.
Erwacht bin ich dann genau um 3.04 Wieso dann ?
The girls are coming back ! Ich bin erwacht, weil auf dem Marmor Boden die Schuhe "schepperten" und zum anderen, weil sie immer noch nicht gelernt hatten, wie man Türen so schliesst, dass niemand erwacht oder so. Zu meinem Bedauern habe ich noch merken müssen, dass sie sich genau für das Zimmer für Ihre gemeinsame "After" Party entschieden haben, welches eine Wand hat, die an "meine" grenzt. So gegen viertel vor vier hat es mir den "Nuggi" rausgehauen. Ich habe an die Wand gepoltert und gerufen "I wane sleep !" Was denkt ihr, passiert ist ? ….
Es wurde keine 3 Minuten später an mein Türe geklopft. Ich schlaftrunken in meinem Bett… Erster Gedanke. "Das hab ich geträumt!, Es ist nach halb vier". Es klopft ein zweites mal .. Und ich steh auf, mach die Türe auf … Ich hab in diesem Moment nicht überlegt, dass ich nun in den Unterhosen da stehe…. Also, ich öffne die Türe… und was hör ich…gekreische… wow, das erste mal das girls wegen mir kreischen… ok, ich weiss nicht warum ;-) Aber, diejenige, die geklopft hatte fragte (mit einer gewissen röte im Gesicht)dann ganz keck: "When you can't get sleep, come to us and have a party ! "..Hmm, ich hab abgelehnt.(Keine Fragen wieso !) Sie haben mir aber versprochen, das sie ruhiger sind und das Zimmer verlegen. Nun konnte ich schlafen und träumte ganz süss ;-))) Ich weiss, ne story die man nur glaubt, wenn man es selbst erlebt hat… THINK WHAT YOU WANT !!

Greets from Barca!