Tuesday, June 17, 2008

Simulation

This is one of the key areas of Microsoft Robotics, for people like me. The simulator achieves one of the design goals of MRDS: to allow programmers to work on a robot synchronously, while not running the risk of damaging hardware or having to take turns in making use of the hardware.

This is what makes .Net languages so useful in robotics. Microsoft has kept it's eyes on team-based development software throughout their architecture. Most notably (for me) was the invention of partial classes.

Anyway, Sara Morgan defines a simulation for us: "A simulation is a mathematical model that is used to represent one or more physical objects. Data is fed into the model, and the result may or may not be rendered to create a visual three-dimensional image."

The biggest disadvantage from the simulation is the problem of abstraction from reality. What this is saying is that the robot lacks the 'fuzziness' that it would get in the real world. For example, floors are never perfectly flat, however, a plane in a simulator is. Sensor input may also be too clean and the robot may demonstrate strange behaviour in the real world.

What I am really interested in is running a custom simulation through the VPL. I assume this would include loading a manifest file that had my pre-defined simulation engine set as a partner service in the manifest file. I took a look at the Lego tribot in the VPL that provides a SE (under "\Microsoft Robotics Dev Studio 2008\samples\Config\LEGO.NXT.Tribot.Simulation.manifest.xml") and there is a partner service there to "LEGO.NXT.Tribot.SimulationEngineState.xml." Looking at that file it is easy to see how you get your simulation environment included in the VPL. But it's going to take some time for me to figure out the details.

First, I assume you are going to have to define the simulation environment and your robot's components in .Net MRDS code, then in the component code add the simulation as a partner service. Then take your robots components and add them (or their equivalent components) in a VPL and then load using a manifest. I'm still uncertain about autonomy, but this is a big step for me. When I do an example, I'll show you how.

0 incoming messages (comments):