There is a new(ish) product available called Microsoft Robotics Studio, which is an excellent product. It makes controlling commodity robots very easy, and makes the entry into robotics very easy. I am not going to dwell on how good Microsoft Robotics Studio (MSRS) is, as this has been blogged about by many people. What I am going to do it stick my finger in the air and guage the wind.
I have been designing various interfaces for my robots for a while, and each new interface incorporates more features and better modularity. Well, it got me thinking about creating a coherent modular well documented, and most importantly of all, open sourced robotics studio.
Lets think about this logically... In order to control a robot we need input, output, processing, and simulation. We will also need a Hardware Abstraction Layer (HAL) and an output layer.
I would like to create an Open Source simulation environment for robots of all types. The robot simulator will incorporate realistic physics simulation provided by Open Dynamics Engine and a rich toolbox for creating robots in a 3d CAD-like environment. Input and Output devices, such as sensors and motors, will be easy to add to the system with a flexible HAL with high modularity.
Features that the Open Source Robotics Studio must have are:
- A simple and intuitive interface
- easy creation of drivers of sensors and motors
- realistic simulation environment
- Modularity of plugins and extensions
- Simple robot control API
- kinematics support
- Machine vision
- Visual Programming Language
- Threading support
The system will comprise of 3 layers, the HAL, the portability layer, and the main application core.
Main Application layer
Hardware Abstraction Layer
The HAL will allow for modular drivers for robot hardware. The Hartware Abstraction Layer will control a sanitised interface between each piece of the robot core hardware. The HAL will be split into further modules which handle the Interface to communication hardware on the target device which then has modules to handle the specific protocol on the bus, enumerate devices, and load the protocol specification from an XML file. The XML file makes for quick sensor development if the device is simplistic. More complex controller hardware may require additional processing libraries to be loaded.
The portability layer sits between the hardware layer and the main application layer.
This layer allow the Hardware abstraction layer to run on different target hardware and hook into the main application.
The application layer will host the main simulation environment. This layer interface will allow the main simulation to be replaced with customised code when the application is ready for deployment. The application will sit above this layer, and provide interface to the pluggable module system allowing easy use of physics computer vision, AI, and more. This layer also has a script execution engine that allows for threaded robot control.
The simulator runs above the application layer. The application layer provides the interface to both the enumerated hardware, and the modules required to manipulate a virtual robot.
OpenCV and ARToolkit(Plus) for camera manipulations
Open Dynamics Engine for physical simulation
OGRE3d for model handling
OpenGL for displaying all parameters.
Visual Programming Language to obtain the low entry bar for uptake
Player robot platform support
Realtime Linux compatible.