Glossary Item Box
Robotics Introduction: New and Changed Features
|Microsoft Robotics Developer Studio||Send feedback on this topic|
Robotics Developer Studio 4
The RDS 4 release is a new version of RDS. Note that RDS 2008 R3 is still available for download and will remain available up to 6 months after the RDS 4 release date.
A key objective of this new release is to bring RDS up to date with other software available from Microsoft, including .NET 4.0, XNA 4.0, Visual Studio 2010 and Windows 7. A new DLL also allows CCR to be used with Silverlight 4.0.
Preliminary testing has been done with the Windows 8 Consumer Preview and and there are no known issues. However, Windows 8 Consumer Preview and the beta version of Visual Studio 11 are not officially supported at this time because they are both Beta versions. The support matrix for the operating systems that RDS supports is as follows:
|Windows 8 Consumer Preview||Yes||Yes||No (Until final release)|
|Windows Server 2008 R2||Yes||No||No|
|Windows Vista||Not tested||No||No|
|Windows XP||Not tested||No||No|
RDS 4 supports the Kinect sensor by building on top of the Kinect for Windows SDK V1. The Kinect is a great sensor for robotics that is already changing the way that robots are designed because it provides 3D depth data at a price that cannot be matched by traditional Laser Range Finders. The Kinect services provide access to all the functionality of the Kinect including multiple Kinect sensors and the new Kinect for Windows hardware.
Installing RDS 4
RDS 4 will install side-by-side with previous versions of RDS, including RDS 4 Beta and Beta 2. (However, it is recommended that you uninstall Beta versions before installing the final release version. When you uninstall you must remove both the RDS 4 Beta and the CCR & DSS 4 Beta). RDS 4 does not do an in-place upgrade, so do not attempt to install it into the same folder as a previous version. This is by design.
If you have code from a previous version of RDS that you want to keep, copy it across into the new RDS 4 folder after installation, open a DSS Command Prompt window, and run DssProjectMigration on your folders. This will update the projects so that they will compile with RDS 4.
NOTE: You must install Visual Studio 2010 before installing RDS. Previous versions of Visual Studio are no longer supported. You should also install the Kinect for Windows SDK V1 and the Silverlight 4 SDK before RDS.
Build All Samples
A "Build All Samples" item is available in the Start Menu that builds all of the sample code. This runs a command script that calls MsBuild. You should build the samples immediately after installing RDS. (This applies to the C# samples only - the VPL samples do not have to be rebuilt).
|In order to build the samples you must have an appropriate version of Visual Studio installed. Any Edition of Visual Studio 2010 that includes C# is suitable, although there are some limitations with C# Express Editions (see below for more details). Note that previous versions of Visual Studio are no longer supported. All sample projects are provided in VS2010 format which is not backwards-compatible with Visual Studio 2008. You must also install the Kinect for Windows SDK if you plan to use any of the Kinect-based services, including simulation.|
If you do not have Kinect for Windows SDK V1 and all of its pre-requisities, including Speech, installed on your PC then you will see some error messages when you run BuildAllSamples. The User versions of the Kinect-related services will not build in this case. There are two separate steps involved for the Kinect services. The first step builds services that depend on the Kinect itself. The second step builds services that use the Speech components in conjunction with the Microphone Array. Note that on a 64-bit system you must install both the 32-bit and 64-bit versions of the Microsoft Speech Platform Runtime in order for the RDS samples to build. (This is the approach recommended for Kinect for Windows in any case).
The User samples need to be rebuilt on your PC so that they will all be signed using your key. This avoids versioning conflicts due to Strong Name signing that can result if you mix your own DLLs (signed with your key) with the Microsoft DLLs (which are signed with the Microsoft key).
A signing key is created during installation so every installation of RDS has a different key. This is not a problem if you are working only on one PC. However, if you transfer services to another PC you might encounter version mismatches. The simplest solution is to always compile the source on the target machine, or to make sure that you take all of the DLLs for the necessary service(s). The DssDeploy tool can help you with this by finding dependent DLLs. Alternatively, if you have to support multiple developers, copy the signing key (samples\mrisamples.snk) from one PC to all of the other PCs that will be used by your developers. This ensures that all DLLs are signed with the same key.
In RDS 2008 R2, the samples and tutorials were modified to include "user" in all of the Contract Identifiers, Assembly names, Namespaces, etc. The purpose of this change was to avoid overwriting the Microsoft service DLLs that shipped as part of the package. Instead, all samples and tutorials create separate DLLs. In RDS 4 the "Build All Samples" item in the Start Menu allows you to build all of the samples on your PC thereby ensuring that you have two complete copies of the binaries: Microsoft DLLs and User DLLs. (See the previous section).
The RDS 2008 R3 release took this separation one step further and provided both Microsoft and User manifests in the samples\config folder for all samples, and changes all Contract Identifiers in the manifests to User services. The effect of this change is that the User samples should now completely parallel the Microsoft versions and be independent of the Microsoft versions.
The VPL diagrams that are shipped with RDS are all written to use the Microsoft service DLLs. If you want to modify a service that is used in a VPL diagram and see the effects of your changes, you will have to remove the service blocks for the Microsoft service DLL(s) and replace them with the corresponding User service DLL(s).
If you want to ship code to customers, be sure to use the Microsoft versions (without the ".user") of Contract Identifiers and link against the Microsoft DLLs. All installations of RDS will have these Microsoft DLLs and they will therefore have the same Strong Name signing and there should not be any version conflicts. If you create your code by editing a User sample, you will have to make sure that to change it so that it references the Microsoft service DLLs.
When you are writing services, you should always create a new Contract Identifier and change the Assembly Name (in the Project Properties). The DssNewService and Visual Studio Wizard will do this automatically. This creates a brand new service. If you copy an existing sample, you must also change the Contract Identifier and the Assembly Name even if the code that it contains is identical to begin with.
If you are an advanced programmer, it is still possible to turn a User sample back into the equivalent Microsoft code. This is discouraged because it defeats the purpose of the User samples.
When you uninstall RDS it does not uninstall the CCR and DSS Runtime. This is by design. You should uninstall the runtime package after RDS if you want to remove all of RDS from your system. Other software that is installed by RDS includes PhysX, DirectX and XNA. These packages are not removed either.
RDS does not remove the installation folder if it contains any modified files. All files and folders that were not installed by the package or have been modified are left behind. This can amount to a significant amount of data. However, it is intended to protect your source code from being lost inadvertently. If you no longer require the files, delete the installation folder after uninstalling to recover the disk space.
CCR & DSS
There have been many bug fixes to CCR and DSS. These are not listed here.
A new CCR for Silverlight 4.0 DLL is included. (Note that this DLL is not for Silverlight 5). This can be used, for example, in Windows Phone 7 applications. A Silverlight sample is provided (under Samples\Silverlight) to show how it can be used.
In conjunction with this new DLL, several CCR Extension Methods have been added to CCR that mirror similar methods available in DSS services.
DssDeploy now has an /ExcludeHost qualifier (short form /x) that excludes DssHost from the a package when you are creating a new one. To remain consistent with the previous behavior, the default is /x- which means do include DssHost. If you do not want DssHost (recommended) use /x+.
DssProjectMigration no longer supports VS2005 or VS2008. It will work with Visual Studio 2010 C# Express but you will see an error message that it cannot migrate the projects. If projects are not in VS2010 format, open them in VS2010 Express first, which will update them, and then run DssProjectMigration again. This is due to a limitation of the Express Edition of VS2010.
DssProjectMigration does not support migrating projects to the new version (called Visual Studio 11 or Visual Studio 2012) that works with Windows 8 Consumer Preview.
DssInfo is deprecated. It might be removed in a future release.
DssNewService can only create projects in VS2010 format. It does not add a using statement for Microsoft.Dss.Core which you might want to add depending on which APIs you want to use.
HttpReserve has a new qualifier /Prefix. This is related to changes in the security model. For more information see the next section.
In RDS 4, DSS nodes no longer listen on all network interfaces, but on the loopback address only. (This is usually referred to as localhost, or IP address 127.0.0.1). This prevents DSS nodes on different computers from talking to each other and also prevents browsing to a DSS node from another computer. If you want the old behavior, you must adjust the appropriate config file in the bin folder (either DssHost.exe.config or DssHost32.exe.config) so that AllowUnsecuredRemoteAccess is set to true. The same applies to using VPL (with VplHost.exe and VplHost32.exe).
If you plan to use multiple computers in a network each running a DSS node, or you want to connect from another computer using a web browser, it is important that you read the section DSS Node Security Model.
A new service called SerialComService has been added. This can be used to communicate with a serial port. It is used by the Reference Platform services.
There are several new generic contracts defined in Robotics Common:
The Generic Differential Drive (GDD) contract has been modified to add a new operation: ResetEncoders. Because this is an addition, new services are backwards compatible with old partners. The encoder information is contained within the Wheel State which is in turn included in the GDD State. In many implementations the extra overhead of separate encoder services is not warranted. Therefore the GDD is now free to manage the encoders directly. For backwards compatibility, the GDD contract identifier has not been changed. However, if you write a new service that conforms to the GDD you should handle the ResetEncoders request.
The Start Menu has been modified to include a link to the Documentation folder rather than just a link to the Help file. There are several new documents included in PDF format:
- DSS Attributes
- Getting Started with RDS
- Kinect Services for RDS
- Log Analyzer (an advanced topic)
- Obstacle Avoidance Drive
- RDS Reference Platform Design Spec
- Simulated Reference Platform
- Structured Logging (an advanced topic)
The RDS Help File has been renamed from MsrsUserGuide.chm to RDSUserGuide.chm.
The CCR and DSS Class Reference now contains the full set of classes the same as on MSDN instead of a subset.
The Apartment Model has been modified so that all of the doors are open. This allows the robot to roam over a larger area.
Most of the objects in the Apartment now have meaningful names.
Simulated IR and Sonar Sensors
The simulated Infrared and Sonar sensors no longer display "hit points" as red dots to show what object they are hitting.
The simulated Sonar is implemented using a depth buffer so that it can "see" glass objects such as the doors in the Apartment model. The simulated IR sensors use ray casting and "see" right though glass. This is how real sensors work and is one of the reasons for mixing both Sonar and IR on a robot in order to improve the reliability of obstacle detection.
The simulated Kinect sensor provides both Depth and RGB data. Unlike the real Kinect, the simulated one can be made to work in any resolution and with any Field of View. This requires detailed knowledge of the simulator and it is not explained here.
The Kinect simulation does not attempt to model the noise characteristics of the real Kinect, nor the non-linear nature of the depth range data. Likewise, the Depth and RGB pixels should be well aligned in simulation, which is not the case for a real Kinect. Lastly, the simulated Kinect works in any of the simulated environments because it does not actually work like an infrared device, i.e. it is unaffected by virtual sunlight. In summary, all data in simulation is (near) perfect.
There is no simulation of the Microphone Array. You can use a normal microphone attached to your PC with the Speech Recognition service, but there is no way to get do beam forming, acoustic echo cancellation, etc.
Although the simulator can support multiple Kinect sensors, there are no samples with multiple Kinect sensors.
Skeleton Tracking is not supported by the simulated Kinect. (There are no people in the simulator anyway). This is a limitation of the Kinect for Windows SDK which does not provide APIs for converting depth images to skeletons.
VPL and DSSME
There are no significant new features in VPL or DSSME. However, there have been several bug fixes. In particular it is now possible to "drill down" into service state when creating an initial config where previously you could not specify data for types that were defined in another namespace.
Build All Samples
The "Build All Samples" item in the Start Menu does not upgrade or migrate projects. It uses MsBuild to directly build the samples and tutorials included with RDS and this does not require projects to be upgraded.
Depending on which Edition of Visual Studio you have, there might be two or three warnings or errors when you run "Build All Samples". All of the errors and warnings are display at the end of the build script so you do not have to read them as the scroll past. These errors are harmless and all samples should build normally if you open the samples in Visual Studio.
Visual Studio 2010
You can use DssProjectMigration to upgrade any of your existing projects to VS2010 by using the command-line qualifier: /vs:VS2010. If you run DssProjectMigration on a top-level folder then all of the samples under that folder will be upgraded.
Visual Studio C# Express 2010 does not support upgrading a project from the command line so DssProjectMigration cannot be used to upgrade samples using C# Express. (It issues an error message).
When you run DssProjectMigration and only have VS2010 Express installed, it displays a message that it cannot find Visual Studio Professional or above as in the following example.
C:\RDS4\samples\RoboticsTutorials\Tutorial1\CSharp>dssprojectmigration /b- . * Searching Directory: C:\RDS4\samples\RoboticsTutorials\Tutorial1\CSharp\ * Updating project C:\RDS4\samples\RoboticsTutorials\Tutorial1\CSharp\RoboticsTutorial1.csproj ... * Updating project C:\RDS4\samples\RoboticsTutorials\Tutorial1\CSharp\RoboticsTutorial1.csproj.user ... Cannot find Microsoft Visual Studio 2010 Professional or higher. Skipping conversion of projects to VS2010 format. Already a VS2010 solution: RoboticsTutorial1.sln
However, if you open an old VS2008 sample in Visual Studio C# Express 2010 then it will be upgraded. The upgrade automatically changes the Target Framework to 4.0. You can then compile the sample. Similarly, if you create a new service then you can also compile it with Visual Studio C# Express 2010.
NOTE: The Visual Studio 2010 GUI forces you to do an upgrade when you open a VS2008 project. Once you have upgraded to VS2010, the only way to go back to VS2008 is to manually edit the Solution (.sln) file and the Project (.csproj) file and change the relevant fields. There is no supported way to "downgrade" a Visual Studio project. (Although this is not difficult, it is not documented here due to the risk of rendering the project unusable).
If you do not install Visual Studio before installing RDS, then you will not get the Visual Studio Wizards because the necessary template folder does not exist. As noted above, you should install Visual Studio before RDS.
If you do not have Visual Studio installed, you might see errors when you try to run DssHost or other command-line tools saying that a pre-requisitie is missing: .NET 4.0. This occurs because RDS requires the full .NET profile, not just the Client profile that comes with Windows 7. As noted above, you must install Visual Studio before installing RDS.
Service Pack 1 for Visual Studio has been released. You can install SP1 if you wish but it is not required,
Internet Explorer 9
Internet Explorer 9 (IE9) is more strict on several web standards, including XSLT. As a result some pages in RDS services might not refresh correctly even though they display correctly the first time. The symptom is that no formatting is applied and you see raw data.
To work around this problem you can turn on Compatibility Mode in IE9. Although this usually works, this does not guarantee that the problem will be fixed in all cases.
HTML 5 Not Supported
When you are coding a service to use an XSLT page you cannot use HTML 5 tags. This limitation arises because MasterPage.xslt has an explicit version of 4.01.
As from the release date of the Kinect for Windows SDK V1, you can now use Kinect for Windows for both commercial and non-commercial use. Therefore the license for RDS 4 has been updated to once again allow both commercial and non-commercial use.
It is now possible to serialize Skeleton data for transmission between DSS nodes. There is some overhead in doing this. Note that this does not affect messages sent between services running in the same DSS node, i.e. on a single computer, because there is an optimization step that does an in-memory copy.
In RDS 4, it is now possible to have multiple Kinect sensors attached to a single computer. However, the Kinect requires a lot of USB bandwidth so you should attach each Kinect to a separate USB controller, i.e. not on the same USB hub. In addition, it is not possible to get Skeleton data from multiple Kinect sensors. This is a limitation of the Kinect for Windows SDK.
The simulated Kinect has been improved so that it better matches the behavior of a real Kinect. However, not that it does not have the same granularity and the data returned is linear, unlike the real Kinect.
The most noticeable effect of the changes is that values greater than the maximum range now return zero. This means that the background in the depth camera view will often be black whereas previously it was white.
The simulated Kinect services (Kinect, Depth Camera, Webcam) have been restructured so that they more closely parallel the services for the real Kinect. This might cause breaking changes if you had previously written services to use the simulated Kinect under RDS 4 Beta.
The Sharp Infrared Sensors commonly used on a Reference Platform robot are analog devices, but they voltage to distance curve is non-linear and becomes ambiguous below a certain range. The calculations currently performed to convert from voltage to distance give incorrect (very high) values under certain circumstances. This usually happens if the IR sensor is exposed to a source of infrared. One example is a television set, which generates radiation across a whole spectrum including both visible light and IR. Therefore you might see unusual values reported in the Robot Dashboard. A similar problem can occur if the IR sensor is faulty. This will be fixed in a future version of RDS but in the meantime you should simply cap the range values at the maximum range of the sensor.
Obscure Deadlock in CCR when using an Interleave
A deadlock can occur when an Interleave is activated (for the first time) whilst ports under its control are being posted to. This can only happen during a narrow time window. The workaround is to either make sure that the Interleave is set up prior to posting messages to ports that it is guarding, or create an empty interleave and use .CombineWith() to fold in the receivers for the ports.
Exception in the Simulator when using the Editor
When you use the entity properties window in the Simulator Editor (for example for setting angular velocity), the Simulation Engine deletes the entity and inserts a new entity in its place with the updated properties. Services for simulation entities need to support this explicitly if they hold a reference to the entity, otherwise they will get an Unhandled Exception (Access Violation) when they attempt to update the entity after you leave Edit Mode. The Simulated Reference Platform service, along with the Simulated IR and Simulated Sonar do not support this concept. Many entity services are likely to be affected. To work around this problem you will need to set the properties appropriately either in your code or in the saved simulation state file.
The correct fix is to listen for Entity Inserts and Deletions. On an insert, update the handle to the entity. On a Delete, set the handle to null and add code throughout the service to check for a null reference before accessing the entity so that exceptions will not occur.
Speech Recognizer and Text To Speech Configs
When the SpeechRecognizerGUI sample and the TextToSpeech sample are launched for the first time, the following error might appear:
* Service started [02/14/2012 19:31:14][http://127.0.0.1:50000/directory]
* Service started [02/14/2012 19:31:14][http://127.0.0.1:50000/constructor]
* Service started [02/14/2012 19:31:14][http://127.0.0.1:50000/console/output]
** Common Create Handler ExceptionSystem.InvalidOperationException: Service not found:
at Microsoft.Dss.Services.Serializer.DataCache.LoadServiceAssemblies(ServiceInfoType createRequest)
DsspOperation create) [02/14/2012 19:31:14][http://127.0.0.1:50000/constructor]
* Rebuilding contract directory cache. This will take a few moments ... [02/14
* Contract directory cache refresh complete [02/14/2012 19:31:16]
* Service started [02/14/2012 19:31:17][http://127.0.0.1:50000/texttospeech]
However the error will not occur when the service is launched the second or subsequent times.
Speech Recognizer Sometimes Fails to Load Grammar
In the LoadGrammar method of SpeechRecognizer.cs in the MicArraySpeechRecognizer project, there is no wait after the following async call:
This sometimes results in an error message similar to "cannot change grammar while speech recognition is running". One way to handle this is shown at:
SpeechRecognitionEngine RecognizeAsyncCancel Method
This problem is timing related, so you might not see it at all. If it does happen, you might be able to just restart DSS. If it happens frequently, you should modify the sample service according to the MSDN web page.
Contract Identifier URIs
DSSProxy generates a warning message if the Contract Identifier for a service uses the prefix http://schemas.tempuri.org. This prefix is generated by the DSS Service Wizard as a placeholder. You should replace it with a URI that is appropriate to your own organization. Note that this does not have to be a real URL. The URI format was chosen as something that it easy to understand but can easily be made unique. It is not required that you have a web page at this address (although it would be a good way to document your services).
Contract Identifiers are case-sensitive. Therefore it is recommended that all Contract Identifiers should be in lowercase. Contract Identifiers in manifests are always forced to lowercase by the Manifest Loader, so a Contract Identifier that contains uppercase characters will not match and the service will not be found. This will result in an error similar to:
Service creation failure most common reasons: - Service contract identifier in manifest or Create request does not match Contract.Identifier - Service references a different version of runtime assemblies Additional information can be found in the system debugger log.
DssHost and 64-bit Windows
If DssHost (as opposed to DssHost32) is used to launch a DSS Node on 64-bit Windows, all of the services and any dependent DLLs must be compiled for 64-bit. Some packages, such as XNA, Speech, etc. only work in 32-bit so a service that links to any of these DLLs will fail to load in 64-bit. If you run a service that only operates in 32-bit you might see multiple errors. One of them will be similar to:
System.BadImageFormatException: Could not load file or assembly
The solution to this problem is simply to start the DSS Node again, but this time use DssHost32.exe. Note that when you create a new service, the command line in the Project settings uses DssHost.exe. If you run the project using the Debugger, e.g. by pressing F5, then this problem might occur. You can change the Project Settings in the Debug tab to use DssHost32.
Robotics Introduction: New and Changed Features
© 2012 Microsoft Corporation. All Rights Reserved.