Glossary Item Box
The term action is used in two contexts. Every DSSP message has an action which specifies what type of message it is. VPL activities also have actions that indicate what behavior to perform. Actions in VPL correspond to requests in a DSSP service.
An actuator is a device that a robot can use to interact with the real world. Examples include: a sound device for making beeps or playing synthesized speech; a gripper on an arm for picking things up; and wheels (really the motors) to drive the robot around. In a programming sense, an actuator is an output device.
An arbiter in RDS is responsible for arbitrating amongst the incoming messages, i.e. deciding when certain conditions have been met to enable a task to run. Arbiters must be activated for them to work. There are several different types of arbiters. See also Choice, Join, Multiple Item Receiver, and Receiver.
In DSS services messages can arrive at arbitrary times and in unpredictable order. These are asynchronous messages. It is also possible for two or more messages to arrive simultaneously, which requires a way to handle concurrency.
An attribute is a piece of metadata that is stored in a .NET executable file. It provides additional information about the object that it is attached to. Adding attributes to classes and methods in the code is called decorating or tagging.
The term autonomous means able to operate on its own. An autonomous robot needs an on-board computer to provide the necessary intelligence for it to run independently. In RDS, autonomous is also used to refer to robots that are remotely controlled via a wireless connection because they can roam around freely.
The term behavior can be interpreted at two levels. For service operations, the handler implements the behavior because a service contract contains only data definitions, not executable code. At a higher level, robots have behaviors such as wall or line following, obstacle avoidance, etc.
DSSP messages contain a body which is the information that is processed by service handlers. In some cases the body does not contain any information and the receipt of the message is sufficient to trigger some behavior. The body is wrapped inside other data that is used by DSSP.
CCR (Concurrency and Coordination Runtime) is a lightweight runtime that provides a message-oriented programming model enabling fine grained concurrency and complex coordination of messages without the programmer having to deal with the overhead of traditional asynchronous programming.
A CCR port is a data structure that contains two primary pieces of information:
A "First-In-First-Out" (FIFO) data structure (queue) containing messages that have arrived on the port; and
A list of continuations (tasks) that can be executed pending message arrival and arbitration over those messages.
Arbitration is done by arbiters that implement common concurrency constructs like join patterns and interleaved calculations.
A character variable can hold a single character. In general characters can be printable or non-printable (such as carriage return and linefeed). The Unicode character set includes characters from a large range of different languages including Western European languages and simplified Asian languages.
A Choice arbiter in CCR is responsible for selecting one of many incoming messages. It takes the first message to arrive on one of the ports and then tears down the remaining receivers so that all other messages are ignored. The most common use is to receive a Response message or a Fault from a service.
In a client-server system a central system runs as a server and offers services to many clients across a network. A typical example is a mail server like Microsoft Exchange. In this case the clients are programs like Microsoft Outlook. Without the server, the clients are unable to talk to each other.
Throughout the documentation there are references to "command prompt" or "the command line". These refer to the DSS Command Prompt window that can be started from the RDS folder in the Start Menu. This is a Windows command shell with some special environment variables pre-defined. It is not the same as a standard Windows command shell.
Concurrency and Coordination Runtime
Concurrency means that two or more pieces of code, called threads, execute simultaneously. If the computer has multiple processors, or a multi-core processor, then it is possible for more than one piece of code to execute at the same time. However, if it is a single-processor machine then the operating system schedules threads to give the appearance that they are running at the same time. See CCR.
An interleave can have receivers in a Concurrent group. Concurrent handlers can run at the same time as other concurrent handlers (subject to the availability of threads). However, Concurrent handlers cannot run while an Exclusive handler is running (or vice versa).
Most services have parameters that can be set to configure the service and change its behavior. These are stored in a configuration file which is an XML file that matches the service state.
In a VPL Diagram, the data and control flow is indicated by connections between activities. A connection can carry data, or simply control the logical flow of the program. In either case, messages travel along the connection.
The term console has two meanings. As a carry-over from the old days of computers, a "console window" means a command shell where you have to enter commands by typing them in as opposed to a Graphical User Interface (GUI). In RDS, there is a console output service that runs automatically when you start a DSS node. This service collects all of the log messages and allows you to view them via a web browser and filter them.
Technically a continuation is the rest of the code that needs to be executed to complete a particular function. In some ways continuations are related to callback functions or event handlers that are executed once some event occurs. However the approach used in C# for continuations is much easier to program. See also Anonymous Delegate, Yield.
A contract is a condensed description of a service that describes its behavior so that other services can use it. You can inspect the contract of a service implementation using the DssInfo command line utility. A contract is typically identified by an HTTP URI, called a Contract Identifier, that if made publicly available allows other parties to find it.
Contract Directory Cache
To save time in looking up services, DssHost maintains a cache of all of the Contract Identifiers for services that are installed on the local machine (and their mappings to DLLs). Whenever a request is made for a service that is not in the cache, DssHost performs a rebuild of the contract directory cache which can be slow if there are many services.
Every contract must have a unique contract identifier. These take the form of a HTTP URI. Although they look like web URLs, there is no requirement for the URL to exist on the Internet.
One of the common problems in computer science is coordinating the execution of multiple threads that share resources so that they do not interfere with each other when they are executing and produce unpredictable behavior. This often goes by the name of mutual exclusion. Coordination also means synchronizing and sequencing how threads execute.
Variables in computer programs typically have a data type which prescribes the type of information that can be stored in the variable. Examples include integers, strings, booleans, etc. Sometimes this term is abbreviated to type.
A dataflow language, like VPL, uses a graphical interface to represent the program. Data (as a message) flows from one activity to another along a connection. In some cases the actual data is irrelevant and the message represents a control flow.
In RDS the term device is used to refer to both sensors and actuators. Most services (but not all) are designed to interact with or control devices. In this sense, a service is analogous to a device driver in the Windows Operating System.
A dispatcher in CCR is responsible for assigning tasks to threads when the tasks are ready to execute. In effect CCR has its own thread pools and does not use the .NET CLR to manage threads. See also Dispatcher Queue, Task, Thread.
DSS services have one or more dispatcher queues. Each queue contains a list of tasks that can be executed to process incoming messages. These tasks are in turn managed via arbiters. See also Arbiter, Dispatcher, Task, Thread.
Dynamic Link Library. A DLL is executable code that can be used by other programs but usually not on its own. In .NET, the term assembly refers to files with a file type of DLL. These have a different internal format from native Windows DLLs.
DSS (Decentralized Software Services) sits on top of CCR and provides a lightweight, REST oriented application model that is particularly suited for creating Web-style applications as compositions of services running in a distributed environment. Services are isolated from each other, even when running within the same node and are only exposed through their state and a uniform set of operations over that state.
The DSS runtime 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. DSS builds on existing Web architecture and extends the application model provided by HTTP through structured data manipulation and event notification. Interaction with DSS services happen either through HTTP or DSSP which is a SOAP-based protocol for managing structured data manipulations and event notifications. The combination of HTTP and DSSP allows services to expose their UI through traditional Web infrastructure mechanisms such as a browser as well as interacting efficiently with each other.
A DSS node is the context within which DSS services are executed. A DSS node can either be started stand-alone using the DSS Hosting tool (dsshost.exe) or as part of another application using the DSS Environment static classes
A DSS proxy is a generated assembly exposing the contract of a service so that it programmatically can be used by another service. The proxy assembly contains the public operations port and state types exposed by the service. When services partner with each other they link with proxy assemblies rather than directly with each other. A proxy is generated using DSS Proxy Generator Tool (DssProxy.exe) which is automatically hooked into the compilation process when generating a new service using DSS New Service Generation Tool (DssNewService.exe). The result of running DssProxy is a Visual Studio project which by default is created in a "Proxy" folder within the service folder.
A DSS transform is an assembly which is generated along with a DSS Proxy assembly to provide a mapping between the service implementation CLR types and the CLR types exposed by the DSS Proxy assembly. The service transform assembly is loaded automatically by the DSS runtime and is only relevant to the service implementation, not other services using the service proxy. A transform is generated using DSS Proxy Generator Tool (DssProxy.exe) which is automatically hooked into the compilation process when generating a new service using DSS New Service Generation Tool (DssNewService.exe).
The DssNewService tool can be used to create new service skeletons in a variety of different languages. Note that new services can also be created directly in Visual Studio using a Wizard, which is an easier interface to use.
DSSP is a simple SOAP-based application protocol that defines a lightweight service model with a common notion of service identity, state, and relationships between services. DSSP defines a set of state-oriented message operations that provide support for structured data retrieval, manipulation, and event notification. The intent of DSSP is to provide a flexible foundation for defining applications as compositions of services interacting in a decentralized environment. The functionality provided by DSSP is an extension of the application model provided by HTTP and is expected to be used as an addition to existing HTTP infrastructure. Please see the DSSP protocol specification for details.
A DSSP Operation is a message exchange between two communicating parties consisting of a request followed by zero or one response messages. The response message, if present, can either be a successful response or a SOAP fault. For a definition of available DSSP Operations, please see DSSP
The DssProxy tool generates Proxies from a service so that it can be called by other services. The interaction between services always takes place via a proxy. DssProxy is run automatically when you build a service.
An embedded resource is an object (that is not itself executable code) which is compiled into an executable program or DLL so that it can be accessed at runtime. Examples include images that are used as icons and XSLT files that are used to format web pages.
An Entity is a simulator object. Entities usually simulate real-world objects such as a camera, a wheel, or even a complete robot. Entities can have children, which is the case for a robot which typically has sensors and actuators (that are also entities).
An event is message that is generated during the execution of a program and is processed by an event handler. In Windows Forms, events can be generated by user actions such as clicking on a button. Event is sometimes used as a synonym for notification.
In .NET programming, an exception is an error that occurs at runtime and is thrown (or raised). Exception handlers can catch exceptions and try to fix the problem, report it or ignore it. If an unhandled exception occurs during the execution of a service handler, DSS automatically terminates execution of the handler, converts the exception to a Fault, and sends it back to the requestor.
An interleave can contain receivers in an Exclusive group. Exclusive messages can only be processed one at a time to guarantee exclusive access to service state. No other message handlers can be active while an exclusive handler is running. However, an exclusive handler will not pre-empt a running handler.
If a service encounters an error in the parameters supplied in a Request or while processing a Request, it sends back a Fault as the Response message. The term Fault is commonly used in relation to Web Services and DSSP uses a similar definition. In Windows programming, code can throw Exceptions. Robotics Developer Studio converts Exceptions inside Service Handlers to Faults.
Field Of View
The term Field Of View (FOV) is used in relation to cameras and also laser range finders. It refers to the angle (usually measured horizontally) that the sensor can see. A typical FOV for a camera is 60 degrees, whereas a laser range finder usually has a FOV of 180 degrees.
Floating point numbers consist of a mantissa with several significant digits and an exponent which is a power of 10. For example, 6427.891 is represented as 0.6427891 times 10 to the power 4 and has seven significant digits. See also float and double.
A Forwarder is used to send messages to another service. Forwarders must be established during service startup. Note that the other services can be located on different computers, in which case messages will be sent across the network transparently, i.e. the sender and receiver do not need to know how the messages are delivered.
In programming, a function is a piece of code that can be called to perform a task. Often a function will return a value based on the parameters that were supplied, which is the intended purpose of the function. Also referred to as a routine or method.
In DSS, Generic Contracts define the operations, state and data types for services. They might also be referred to as APIs (Application Programming Interfaces). They describe how a programmer interacts with a service that implements the particular generic contract. This is a key feature of DSS because it allows applications to use different services at runtime by switching the partnerships in the manifest, without the application having to know which particular implementation of the service is being used.
A GUID is a 128-bit integer (16 bytes) that can be used across all computers and networks wherever a unique identifier is required. Such an identifier has a very low probability of being duplicated.
With RDS it is possible to run a DSS node from another application program. This is referred to as hosting. It allows complete control over the interface that is exposed to the users and also allows DSS nodes to be run as Windows Services that start automatically when a computer boots up.
In DSSP, an insert message can be used to add information to the internal state of a service. For example, in the case of the Simulation Engine, entities must be inserted into the simulation. See also Submit, Update.
When a service is loaded and starts running it is referred to as an instance of that service type. Some services allow for multiple instances to be active simultaneously, but others to not. (This is similar in meaning to an instance of a class in object oriented programming). In a DSS node, each instance of a service must have a unique name in the directory.
The term interface is usually used to refer to the operations supported by a service which are defined in a service contract. This is similar to an Application Programming Interface (API) for a conventional programming library. An interface can also refer to a hardware device used for input, output or control. See also User Interface.
An iterator is a particular type of method that consists of a series of tasks that are run in succession. In C# the syntax for writing iterators makes multi-threaded code appear sequential. Only iterators, not conventional methods, can relinquish control of a thread (release it back to the thread pool) until a message arrives at which point they resume execution. In this way, an iterator never blocks (ties up) threads.
In VPL, a Join activity block accepts multiple input messages and sends a single output message that is composed from the inputs. The output message is not sent until all input messages have arrived.
A manifest is an XML document that describes a set of services to be created by the DSS runtime. Manifests can be used to explicitly overwrite the default properties of a service such as the service instance name, or which partners the service should compose with. For example, a manifest may overwrite the default initial state partner for a service in order to explicitly set the initial state of a service. In addition to being created from manifests, services can be created programmatically by other services, or by accessing the Control Panel service from your Web browser. The Control Panel service is a system service and is always present when running a DSS node.
A Message is an instance of a particular data type. These types can be provided by Robotics Developer Studio or defined by the programmer. CCR and DSS are based on message passing. See also CCR Port, Operation, Request.
In the context of robotics applications, orchestration refers to the task of coordinating sensory input and control a set of actuators to properly respond to the sensory input. The goal of an orchestration is to provide functionality that can act as an independent application or as a componentized part of a larger orchestration.
The orientation of a robot generally refers to the direction that it is facing. Most robots operate on the ground or a floor, i.e. in a 2D space, so a single angle is sufficient to describe the orientation. However, robots such as aircraft or submarines operate in a 3D space so the orientation consists of three angles.
The DssDeploy command-line tool can be used to create a deployment package. This package is a self-installing executable program that usually contains all of the necessary programs and supporting files to run services.
A service composes with other services through the notion of partnering. A partnership describes a relationship between two services in a way that enables reuse or sub components in a late bound manner. Partners exchange messages as defined by service contracts and cooperate with each other - a process known as orchestration.
In a peer-to-peer system any application on the network can communicate with any other application making many-to-many connections. Of course, this assumes that the applications have a common protocol or interface so that they understand each other. If one application goes down, the rest of the network is unaffected.
Several Ports can be grouped together into a PortSet. This makes it easier to handle a set of related Ports. In particular, services always have an Operations Port (which is a PortSet). The data types of the various ports in the service's PortSet define the types of messages it can receive.
The position (or location) of a robot is usually expressed in terms of its coordinates. If it is operating on the ground or a floor then it is in a 2D space so two coordinates can describe where it is (but not its orientation). However aircraft and submarines need three coordinates so specify their position. See also Orientation, Pose.
Messages are posted to ports. The act of posting a message to a port causes arbiters associated with the port to evaluate whether or not a task can be executed to process the message. If there are no arbiters currently registered (activated) then the posted message will be queued in the port.
A C# project is a set of source files and resources that are compiled to create an executable assembly. The configuration information for a project is contained in a file with the type CSPROJ. Projects can also be referenced by a Solution file.
In object-oriented programming, a property is an attribute of a class, also called a data member. A message in DSSP has properties or fields which are the items of information contained in the message. In VPL, the Properties panel can be used to set the configuration of services or activities.
A protocol is a specification for how two computers, or often two applications, communicate with each other. Common protocols include HTTP and FTP. In RDS the protocol used between services is DSSP.
In CCR, a receiver waits for messages to arrive on port and then processes the messages when they arrive. Receivers can be non-persistent which means that they only process one message, or persistent which means that they continue to process messages until they are torn down.
When you are writing a service using Visual Studio you need to add references to the proxies for other services that you want to communicate with. This allows Visual Studio to determine what the data types and operations are for the other services. In VPL, multiple activity service blocks can be references to the same instance of a service so that the diagram can be drawn more conveniently.
The Visual Simulation Environment renders scenes to the screen to show what is happening in the simulated world. Rendering involves applying colors, textures or meshes to surfaces, handling lighting and reflections, etc.
Requests can be issued to services by sending them messages. The message itself is sometimes called a Request. The term Operation is sometimes assumed to be synonymous with Request, but an Operation is a complete Request / Response cycle. See also Response.
For a package called Robotics Developer Studio it seems sensible to define what a robot is. However, the definition varies widely and RDS is not restricted to any particular type of robot. The common conception of a robot is something that has wheels and rolls around beeping and avoiding people and walls. Robots can also be UAVs which can mean either Underwater Autonomous Vehicles (submarines) or Unmanned Aerial Vehicles (drones). There are also robotic arms, the most well-known ones being those used on assembly lines to build cars. However, a house that is automated using built-in sensors and a control system can also be considered to be a robot. The possibilities are endless, but the key features are that a robot has sensors and actuators and usually some (maybe limited) intelligence.
In the Visual Simulation Environment, a scene is what a simulated camera sees. What objects appear in a scene depends on the Field Of View of the camera, its position and orientation, and its Look At point.
A sensor measures something in the real world. For example: sonar sensors measure distances; microphones (and a sound card) can detect sounds; and buttons can be used to select different actions. In a programming sense, sensors are input devices.
Services are the basic building blocks of RDS. A service provides isolation boundaries from other services enabling behaviors to be defined independently. The DSS runtime provides support for creating, monitoring, manipulating, modifying, and deleting services. Services can be combined (a process called orchestration) so that they can achieve higher-level behaviors by working together.
The state of a service is a collection of properties that completely describe the current operational environment of the service. Service State can be persisted, in which case it is written to a file in XML format. When the XML file is later reloaded into another instance of the service it is referred to as Initial State. The Service State is declared in the code as a class that is marked with special attributes.
Visual Studio uses solution files (with a file type of SLN) to hold information about the projects (source files and other resources) that make up a service. Typically a solution contains a single project, but it can have more than one.
In DSSP, a submit message is similar to an Update, but it does not necessarily change the service state. Submit messages are commonly used with web forms that are used to manipulate a service. See also Update.
In order to simplify the programming of services, Robotics Developer Studio provides a Subscription Manager which handles sending notification messages to subscribers. A service using the Subscription Manager does not need to keep track of subscribers.
In VPL a Switch activity block is used to select where to forward an incoming message based on one out of many possible matching values. Each possible match is referred to as a Case. (The Switch activity is based on the C# programming construct of the same name).
A task is a section of code to be executed when a message arrives (or some combination of messages). Tasks can be conventional methods, iterators or anonymous delegates. Tasks are assigned (by a Dispatcher) to available threads in a Dispatcher Queue when they are ready to execute.
An interleave can have receivers in a Teardown group. Usually there is only one handler in this group. The Teardown handlers run when the interleave is being "torn down". No other handlers can execute while a teardown handler is running, and once the teardown handler has completed the interleave is deleted.
A thread is an execution context on a computer. When a program runs it must have one or more threads. In a multi-processor or multi-core computer threads can run simultaneously (concurrently). On a single-core computer only one thread can ever execute at a time. Because CPU time is a scarce resource, operating systems share the CPU across multiple threads. This happens invisibly as far as the application is concerned. In robotics, multiple threads are often required to manage the complex tasks involved and so RDS services are multi-threaded. However, there is still a limit on the number of threads available.
CCR manages a set of threads, called a thread pool, by allocating threads to tasks that are ready to execute based on proprity. If the tasks are of equal priority, CCR will round-robin. Unlike the .NET CLR, the CCR does not dynamically create threads on demand. The size of a particular thread pool is fixed at the time that it is created.
A Uniform Resource Identifier (URI) is a compact sequence of characters that most commonly identifies a resource on the World Wide Web (see RFC 3986 for the formal definition). Contract Identifiers in RDS are in the format of URIs. This is intended to guarantee that they are unique.
A User Interface is a way that a computer program interacts with users. User Interface devices include hardware like a mouse, joystick, etc. User Interfaces can also be based on speech synthesis and recognition.
A variable refers to a location in computer memory using a symbolic name. In many computer languages variables must have a data type and only information of that type can be stored in the variable. See also Boolean, Integer, String, etc.
Microsoft Visual Programming Language (VPL) is an application development environment designed on a graphical dataflow-based programming model rather than control flow typically found in conventional programming. Rather than series of imperative commands sequentially executed, a dataflow program is more like a series of workers on an assembly line, who do their assigned task as the materials arrive. As a result VPL is well suited to programming a variety of concurrent or distributed processing scenarios.
VPL is targeted for beginning programmers with a basic understanding of concepts like variables and logic. However, VPL is not limited to novices. The compositional nature of the programming language may appeal to more advanced programmers for rapid prototyping or code development. In addition, while its toolbox is tailored developing robot applications, the underlying architecture is not limited to programming robots and could be applied to other applications. As a result, VPL may appeal to a wide audience of users including students, enthusiasts/hobbyists, as well as possibly web developers and professional programmers.
Visual Studio. Also written as VS2005 or VS2008, depending on the version. Visual Studio is the Integrated Development Environment (IDE) that is used to develop Robotics Developer Studio services (except for those written using VPL).
Extensible Stylesheet Language Transform. An XSLT file defines a transformation between some data in XML and some other output format. Usually the output format is HTML. XSLT is used in Robotics Developer Studio to format web pages that display service State.
© 2012 Microsoft Corporation. All Rights Reserved.