Yesterday Microsoft released their Robotics Studio. See
http://msdn.microsoft.com/robotics/A friend of mine asked me to take a look at it and share what I thought. Here are my first impressions, which could turn out to be misinformed, or opinions that are subject to change!
The premise is simple, a common SDK, debugger and simulator for all of your robotic needs. Now - I'm happy to admit that I can be a little anti-Microsoft, so to say that I was sceptical on my first viewing, would be a slight understatement.
Let's look at first impressions. Before even seeing the web page I had one chief concern - Windows. Windows is NOT a real-time OS, it doesn't pretend to be, it wasn't designed to be, and it simply cannot be. The message system offers no guarantees that information from one source will reach another within a specific amount of time. This isn't a problem for a lot of applications, but in mobile robotics, it most certainly is a problem, especially if that information is sensor data telling you about the wall that you're accelerating towards at several meters per second, per second. This concern has not really been addressed properly in my mind yet. If it is possible to write code that compiles into the debugger and the simulator, and then recompiles to a different OS that is better equipped to handle real-time applications, (mentioning no Penguins in particular) then I salute MS and all of their little minions. If not, the only saving grace is that despite MS offering no guarantees that the messages will get to the controller in a specific amount of time, they will generally get through eventually, so by driving your robot around slowly and making sure that the environment that it's in, isn't moving too quickly, you will at least be able to write functional code. I may be being overly cautious, but taking a hit in sensor bandwidth, is a big price to pay.
So I did my review of the website and all seemed well. Then I moved on to glancing at the tutorials, and hit upon the second blow. The only published examples are in VB and C#. Now I know that these are the darlings of MS developers at the moment, but they're writing a product aimed at the robotics community. A community that comprises largely C and C++ developers. C++ is a .NET language, (though my experience is that it generally isn't as well supported as C#) at best this is a marketing oversight, at worst, the C++ support is going to suck, big time!
Philosophically speaking I believe the MS coming to the robotics industry is probably a good thing. MS has shown us that often "good enough and fast enough" are the best way to develop working code in a hurry (I know that as you read this, the Linuxphiles and Macphiles sitting at the back will be sniggering away and coughing "security", but that's a whole different rant.) This is an important shift from "the best and the fastest" paradigm, which doesn't really serve you in the world of robotics. It's all very well and good writing some algorithm that assumes perfect sensor data at infinite resolution, but waiting for a physicist to ride in on a white horse, and deliver hardware that can even approximate that, just for your algorithm to be usable is pointless and counter-productive. Being able to write algorithms quickly, that work well-enough given the current hardware constraints, is the most important issue at the moment, and that is traditionally the forte of a Windows SDK.
The head of the team behind the SDK, one Tandy Trower, claims that "the evolution of robot applications is held back by many factors, including the fragmentation of hardware, lack of portability of code, lack of good development tools, and lack of needed support libraries and algorithms". Well, Tandy, I could be misunderstanding your management jargon, but the "fragmentation of hardware" is likely to be one of the saving graces of robotics, research into non-heterogeneous robotic groups, (i.e. groups of robots where some or all of the robots have totally different hardware configurations) is yielding impressive results, and should not be ignored. However I agree with him on the other points. The closest that the robotics sector has to a standard is the infamous Player/Stage project. In this architecture Player is a standard way of writing control code for a robot. Many configuration files exist for player that allow the same code to be used on many different robot platforms, from many different manufacturers. The Stage part of the project is a 2D simulator that can seamlessly replace robotic hardware. There is a project called Gazebo, which is a 3D simulator, but I'm not that keen on it. To be honest I'm not that keen on any of them. I've found that installing them on a Linux distro to be frustrating to say the least when it comes to locating the correct libraries etc, and in the end I ditched them for the manufacture's software, because that was guaranteed to support all of the hardware on the robot and was, in my opinion, far nicer to code in. Of course, if everyone did that, it would make it difficult to share libraries of useful algorithms across platforms. I generally separate out my control algorithms, but in the ARIA API from MobileRobots, (my development tool of choice) the subsumption architecture is essentially precoded for you, so I lock myself in to my API, to save on reinventing the wheel.
So what's good about this? The thing that started to win me over was looking at the information about the simulator. Mr Trower hits the nail on the head when he criticises the development tools available to the roboticist. The simulators in particular are thorn in my side. The average industrial robotics engineer has little need for a fast, accurate simulator. However, an academic R&D researcher has slightly different needs. If I want to develop an intelligent control algorithm, say using genetic algorithms or reinforcement learning, I could die of old age waiting for a real-time simulator to run the number of iterations I need, and with a poor handle on the physics, the final controller may need another decade or so of running on an actual robot before it adapts to real-world physics! I know that many robotics engineers are averse to simulators, as they never fully capture how crappy the sensor data that you get back is and they go against Brooks' physically-grounded "reactive" paradigm, but for a GA there is very little choice! The prospect of a well-written, (stop sniggering at the back), 3D, physically realistic simulator that can potentially run faster than real-time, is making me salivate as I type!
From a purely selfish point of view, the robot used in the simulation demos, is the type of robot that I work with, which means some other poor bugger has had to calculate all of the relevant information about size, weight and centre of mass! So the thought that some other bugger has done work for me appeals to my naturally lazy side and makes me far more open minded about the whole experience!
Tomorrow, I may try to actually use some of the tools that have already been released, (I hope that the SDK works with the version of .NET that the university has, otherwise I shall be most upset!) At the very least I want to get the simulation working and see exactly how good it is!
Till then, loyal readers!
----- Addendum -----
I've been passed another review since I wrote this, and received some feedback from someone who actually attended the conference where it was launched.
More later.