As part of a project I’m doing for a Seattle startup, I’m playing with Microsoft Robotics Developer Studio (RDS). I downloaded the 2008 release and generated a simple program to use a desktop joystick (basically a UI element displayed on the screen) to control an iRobot Create. That worked fine – it was cool to direct the robot around. But of course, what I really want is to have my code take the place of the joystick and control the robot.
I used a feature of VPL (the Visual Programming Language RDS uses to prototype these things) to generate the whole sheebang as a “service” so I could look at the code being generated to hook the joystick up to the iRobot and then shim in my own code in its place. The problem is that when I did this, I got this error from VS:
The type or namespace name 'Robotics' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
pointing at this line generated by the RDS code:
using drive = Microsoft.Robotics.Services.Drive.Proxy;
Sure enough, trying to add a reference to Microsoft.Robotics. anything fails since that namespace doesn’t exist on my machine.
I guessed that I was missing an install of something, perhaps the “CCR and DSS toolkit” – but talking to someone on the Robotics dev team at MS, I verified that I had the same assemblies as he did.
I then realized I was using Visual Studio 2010 Release Candidate – could that be the problem?
Sure enough, rebuilding this under Visual Studio 2008 fixed the problem. So for some reason, VS 2008 is able to find the Microsoft.Robotics assemblies – but VS 2010 is not. A friend on the Robotics dev team confirms that there are a few tweaks needed to make the toolkit work with Visual Studio 2010.
That then took me on to the next problem –getting this to run. When I run it in VS 2008, I get an error:
The thread 0x670 has exited with code 0 (0x0).
*** Initialization failure: Could not start HTTP Listener.
The two most common causes for this are:
1) You already have another program listening on the specified port
2) You dont have permissions to listen to http requests. Use the httpreserve command line utility to run using a non-administrator account.
Exception message: Access is denied
Trying to use the httpreserve tool (which is installed as part of RDS), I get an error that the port can’t be reserved. But if I run VS 2008 as an administrator (Start / Visual Studio 2008 / Microsoft Visual Studio 2008 (right click / Run as Administrator)) and then run the compiled RDS service – it works. So there definitely is a problem with the non-admin user accessing the http port 50000 (for some reason, I don’t have this problem on my second machine which also has RDS installed). I figured there is some permission group I need to be part of to enable this – but which one? I wish the Microsoft RDS tools didn’t “dumb down” their explanation of what was happening here and instead told me what precisely was failing.
I decided to just move this to another machine where DSS is working and where I had VS 2008 installed, so copied the files over there. I ran into a couple of more problems before I got this working:
The final two problems:
* In the Post Build step that is generated (to run DSSProxy), a “%” sign was translated at some point into the URL-encoded equivalent, %25, which caused the ReferencePaths to not be generated correctly and caused the cryptic DssProxy error: “Not a DSS Assembly”
* After fixing that, I still got the error and what I finally noticed is that I have both Robotics 2008 and Robotics 2008 R2 installed on my machine. I am building this under the R2 release, but for some reason the assembly references are to the 2008 release – i.e. they point to
This also confuses DSS Proxy. Deleting those references in VS and adding the correct ones from the V2.1 directory (references for Microsoft.Ccr.Core, Microsoft.Dss.Base, and Microsoft.Dss.Runtime fixed the problem and I am now running!