ROS looks like a good tool. Here I discuss it, and what work I think I’d need to do on the Pi…
ROS is the Robot Operating System. This is a standardised effort to create a structure of APIs around common robotics tasks. These can then be shared individually and applied to a range of robot subsystems. Basically mix and match for robots!
Idea being I could use a visual hazard detection routine developed in a University with a hobbyists robot drive train and perhaps my own AI routines to rapidly build out a new robot. Then share my own modules for others to use after this.
Why use ROS?
ROS provides a nice way to create, share and re-use higher level components. By their own admission, this library is intended for basically inter process communication of individual management components within a robot, rather than deal with low level concepts like motors, servos, etc.
What ROS provides is an overarching mechanism for launching individual processes (nodes) that are loosely coupled. Consider one part of a robot using a laser rangefinder to determine the distance of an obstacle. It merely publishes that information. Another, separate, module (or indeed several) may use that information.
ROS provides a publish-subscribe messaging capability, as well as a service (direct invocation) capability. Nodes may be installed on the same physical machine, or distributed amongst several machines.
ROS also provides an ecosystem of tools used together. These are referred to as ‘stacks‘. Different communities maintain their own stacks. Basically these are distributions of ROS components for a particular use. I’ve not explored these yet, but aim to in the future.
Why I’m going to use ROS
ROS provides a nice way to manage inter node communication. I know, for example, that I want to write some things in the microcontroller (Gertboard Atmel), some in the Pi (Python for AI) and some in Node.js (sending data to MarkLogic – E.g. flight data. Also retrieving some data).
ROS provides a nice mechanism to get all these things to talk together. That’s probably what I’m going to use it for.
I suspect my co-ordination will be handled by a Python pybrain based AI routine using PiRobot type functionality.
I want to make sure that whatever I do can be re-used by others. I think the capability of storing data in an external MarkLogic repository would be useful, so I’ll definitely implement that and share it. Others could use it to save and share scientific readings, or images.
I’d also like to create a tutorial and ‘standard’ set up to allow kids/teens to easily build their own cheap robots. This is a very low level concept, but I’m sure I can create it in such a way so as to plug this in to ROS easily.
ROS does not yet have a standard build for Raspberry Pi’s Raspbian OS. There has been talk on this though. I’d love to get involved in testing that out (would save me time building it from source).
The first piece I need to create is a MarkLogic Store service. I’ll write this in Node.js to take JSON, XML and CSV information, along with some basic metadata, and save that as a document in MarkLogic.
I’ll also create a nearby aircraft publishing service too. This will use the ADS-B signals over DVB-T digital TV signals to identify nearby aircraft, their position, and ‘intention’ (what they are doing – ascending, descending, etc.). This will publish individual aircraft movements as it receives them.
I’ll write this in whatever language I need to. I’m thinking it’ll have to be C++ in order to effectively use the kernel modules for the DVB-T chip.
I’ll then create a co-ordinating node that will take the latest reported positions (subscribe to the above info stream) and when it determines the last one saved to MarkLogic is 60 seconds old, will send a new message to the server.
I’ll probably write this in Python just to get used to the language. (I’m a bit rusty – not used it since 2000!)
A bit overkill using ROS to do this, but should be a good learning experience for the future.