Robotics has always been considered a field of research. It is supposed to be the field of universities and industries. Mainstream programming world is generally unaware of the advancements in this particular field. But this will not be the case any more. This is because Microsoft has jumped into this field. This jump has been taken by Microsoft a few years back. As is the history of Microsoft, this field would now get the attention of general public and developers. People would take advantage of many robotics features they may use in their applications in other fields like finance etc.
Microsoft's release of Robotics Studio and its associated libraries requires several pages of discussion. But I thought there should be an introduction to all this in a single place, which will help a starter to identify each of the pieces so that they could efficiently use them as per their needs and are not lost in an individual piece in the overall system.
The Robotics release by Microsoft mainly consists of three main parts. Among these, CCR and DSS can be used by applications outside the Robotics world:
- Runtime: This supports 8-bit to 32-bit robots. These robots may range from Toy Robots to Industrial Robots.
- CCR: This is the Concurrency library. This is the base of the Robotics architecture by Microsoft. You can use this component for applications running on a PC instead of a robot. CCR is available in the form of a dynamic link library which may be used by any .NET language.
- DSS: This is the services architecture. This is a companion to CCR. This is based on Service Oriented Architecture. It provides the ability to write applications which are highly distributed and modular. This means you can execute your code in the processing work horses and use them anywhere in the distributed environment.
CCR (Concurrency and Coordination Runtime)
This is a separate release by Microsoft and is not part of the Robotics Studio. These are basically designed keeping the robotics community in mind. But seeing its usefulness outside of the robotics world, this has been made a separate release.
CCR is a port based class library to develop asynchronous applications. It is designed to develop asynchronous, concurrent applications which could coordinate. This also handles failure handling issues for these operations.
With the use of CCR, we don't need to do any manual threads management. This can be especially useful in handling concurrency and partial failure. CCR has a failure handling mechanism called Causalities. This is basically a generalization of Try / Catch for multiple threads. But this is meant for many machines and processes working in a synchronous fashion. It also deals with join.
DSS (Decentralized Software Services)
This is a REST based model. This is services model which is state oriented. Making it REST based has made the services and applications to be independent of each other. They may be on the same machine or distributed across different machines connected through any means. When we say REST based, you should understand that the resources should be available by query strings. These services are available as resources to the other services, applications or User Interfaces. This is actually how Microsoft is able to promise low coupling between services.
This makes it possible to develop distributed applications. These applications may also run on the same machines.
DSSP is the protocol used for inter-services communication. This is a SOAP based protocol. LINQ queries are supported in DSSP subscriptions which allows running queries on data sources, and no movement of data is required to run these queries.
DSS Log Analyzer
This is used to analyze the communication of messages between different DSS services existing in the same physical node or across different physical nodes.
Note: In the July 2008 CTP, core DSS and CCR assemblies are copied to the Global Assembly Cache (GAC).
DSSME (DSS Manifest Editor)
DSSME is the DSS Manifest Editor. As its name implies, it is to wire-up different services on the same machine or on different machines. We can also specify the initial state of the services and where they should run. These services may be developed using VPL (Visual Programming Language) or directly in Visual Studio.
Microsoft VPL (Visual Programming Language)
VPL is the Visual Programming Language by Microsoft. This is used to provide an easy solution to develop CCR and DSS based applications. It must be remembered that this seems to follow the Observer Pattern. This is not based on the control flow but on the data flow, which enables some program elements to get executed when some data arrives. So, VPL gives a model driven approach to develop and orchestrate services.
There seems to be some overlap between VPL and DSSME as far as the orchestration of services is concerned. But, DSSME seems to be promising much more than VPL seems to provide for services orchestration. This makes it possible to develop applications by simple drag and drop.
You can see that there are different Activities and Services you can select from. You can define your flow of data based on those services and activities by connecting as per your needs.
Microsoft Visual Simulation Environment
There are three ways to test your ideas. They are Mathematical Models, Simulation, and Experimentation. Not everyone can create Mathematical Models. For experimentation, we need robots, which are expensive. Not everybody can afford them to test their ideas. Microsoft has identified this potential issue for the adoption of its technologies by the community. It has provided a simulation environment. This environment has helped us to simulate our application. If the desired results are achieved through simulation, then we can move to experimentation.
These simulations can also be recorded and played back in the same environment. These recordings are saved in the form of XML files. The simulation media resources such as texture maps, bitmaps, and mesh files can be stored as embedded resources as part of the assembly instead of external files.
The rendering engine is developed on the Microsoft XNA Framework. The engine is based on AGEIA™ PhysX™ Technologies. There are different renderings available in the environment. They are as follows:
- Floor Plan
There are different simulation environments available in the July CTP. The one presented above is the Basic Simulation Environment.
What's in the Installation Box of Robotics Studio?
When you install the July CTP or Robotics Developer 2008, it comes up with the following:
- Microsoft XNA Framework 2.0
- AGEIA™ PhysX™ System Software
- Microsoft Visual C++ 2008 Redistributable Package
- Microsoft CCR and DSS Runtime Redistributable
All the required components are installed with the July CTP installed. They also include VPL, CCR and DSS, and the Simulation Environment. It also includes the necessary project templates to develop DSS Services in C# and VB.NET. Robotics Common includes a generic contract used by Microsoft Robotics Developer Studio samples. The samples include Generic Differential Drive and Generic Contact Sensors.
Different programming languages are supported with the Robotics Studio. They include C# / VB or any of the .NET languages including Microsoft Iron Python. You would be amazed to know that you can even write code in Jscript. This means not only can you do the measurement of your robots, but you can also control them right from your browser from anywhere in the world through Internet.
You probably know that non-managed code may be used by managed code if we create a managed proxy of the non-managed code. So, you can use all your C++ code for performance reasons, and after creating a managed proxy, you can use them using the studio.
Overlapping Between CCR and DSS and Parallel Extensions in .NET
As you go along, you may find some overlapping between the features provided by Parallel Extensions in .NET and CCR and DSS. Remember that when they were designed, Microsoft had different visions for both the technologies. But now, they will be made a part of the .NET Framework. At that time, Microsoft will look at the overlapping between the two and would address this issue. Till then, for non-robotics applications, we should bear with it.
Robotics in the Ecologic World of Application Development
Robotics with Speech API
When you start working with your robots which could interact with real world, the first requirement which you could have is that these robots could speak to persons they are working for. You can take advantage of the speech API of Microsoft or any other third party API.
Robotics and Game Programming
If you look at games, they are visualizations of robots which can move and have different senses. There are different objects on the screen which may work concurrently. Object actions depend on their position. The more you think, the more you will find the analogy between these two fields. But how come they have been designed differently by different sets of people with different backgrounds? If we put two different sets of engineers together and make them work together, this would be the point which could serve as the launching pad of this field. From this point, industrial applications and their simulations would work together. So I think, in future, Robotics could go hand in hand with the Microsoft world which could inspire independent consortiums to develop standards for these fields.
Thus, game programming will also be greatly influenced by Robotics programming.
Software Development Kit
Microsoft Robotics SDK.
Robotics Resources on Internet
There are different resources available on the internet which might help in getting an understanding about Microsoft's involvement in this novel field. Some of the resources are as follows:
Professional Microsoft Robotics Developer Studio (Johns, Kyle).