AKA RoboHum 1.0
I decided to skip this week's XPE weekly and take the Microsoft Robotic Studio (MRS) for a test drive! I have to start off by saying... WOW! This is an awesome framework. Anybody that have tried writing software that uses many sensors and actuators and then trying to coordinate them will know that this is not an easy task!!! MRS makes it easy. I will quickly review the 2 parts that makes up the robotic studio and then talk a little about the way I tested it.
I will also review how I build my very 1st "robot"
Concurrency and Coordination Runtime (CCR) provides a highly concurrent, message oriented programming model with powerful orchestration primitives enabling coordination of messages without the use of manual threading, locks, semaphores, etc. CCR addresses the need of service-oriented applications by providing a programming model that facilitates managing asynchronous operations, dealing with concurrency, exploiting parallel hardware and handling partial failure. It enables you to design your application so that its software modules or components can be loosely coupled; that is, so that they can be developed independently and makes minimal assumptions about their runtime environment and other components. This approach changes how you think of programs from the beginning of the design process and facilitates dealing with concurrency, failure and isolation in a consistent way.
The CCR runtime is a self-contained .NET DLL accessible from any language targeting the .NET 2.0. Common Language Runtime (CLR).
Decentralized System Services (DSS) provides a lightweight, service oriented application model that combines key aspects of traditional Web-based architecture (commonly known as REST) with pieces of Web Services architecture. The application model defined by DSS builds on the REST model by exposing services through their state and a uniform set of operations over that state but extends the application model provided by HTTP by adding structured data manipulation, event notification, and service composition.
The primary goal of DSS is to promote simplicity, interoperability, and loose coupling. This makes it particularly suited for creating applications as compositions of services regardless of whether these services are running within the same node or across the network. The result is a highly flexible yet simple platform for writing a broad set of applications. DSS uses HTTP and DSSP as the foundation for interacting with services. DSSP is a lightweight SOAP-based protocol that provides support for manipulation of structured state and for an event model driven by changes to the structured state. DSSP is used for manipulating and subscribing to services and hence compliments HTTP in providing a simple, state-driven application model.
The DSS runtime is built on top of CCR and does not rely on any other components in Microsoft Robotics Studio. It provides a hosting environment for managing services and a set of infrastructure services that can be used for service creation, discovery, logging, debugging, monitoring, and security.
[Taken from MSR documentation]
I decided to really test MRS, that I should make my own "robot". I went out and bought a cheap electric remote control car, stripped it open and started the conversion
Before

Stripped down

PC Added
I controlled my 2 motors via relays switched using the parallel port. Each motor has 2 relays. The first relay changed the direction of the motor by switching the polarity and the second relay is used to turn the motor on and off.
The next step was to create a LPT motor service. I based my service on the generic motor service provided. It is amazing to think that all this is done using managed code. Once my service was up and running I wrote a very basic coordinating service using the Visual Programming Language (VPL). The VPL also has a feature to export or compile the service as C# code. After compiling the service, I used DssDeploy to create a package.
Next, I installed XPe on the single board computer (SBC) and deployed my package. Finally I ran my MRS Service on my intelligent "robot".
MRS provides a few different methods of accessing remote DSS services:
- WinForms UI
- Web based UI
- Vision based tracking
- Audio based UI
- Game Controller based UI
To access RoboHum, I added a Bluetooth dongle and established a Personal Area network with RoboHum. From here, I currently allow two methods of control (Web based UI & Game controller based UI). Future plans include adding speakers and a microphone to support Audio based UI and to add a web cam and support vision based tracking.
I am also planning on porting my service to the Compact Framework (CF) and to rather install CE on a SBC.
There are loads of was to test the MRS. MRS supports a very realistic simulation environment which can be used to test the features. Also have a look at the Sumo competition! I only chose to make my own robot because it is relative low cost method. The company that I work for sells SBC's so I didn't have to buy the PC. The remote control car was R300 and the relays that I had to buy were R100. This makes my "robot" total cost less than R500!!! Again there are loads of methods to do this... I only chose this method because I had all the necessary parts and knowledge...