Hello all,
I'm starting on a robot software platform to solve a problem that I see with hobby robotics: the barrier to entry for more than the most basic robots is extremely high with a steep learning curve thereafter. I bet a lot of you guys are in the same boat that I am: you want a functional robot and platform you can use to develop some specific part (a new sensor design, navigation algorithms, getting your robot to do pushups) and you don't care to develop the large number of other important and difficult to implement parts. I think the solution here lays in a good object oriented robot development platform.
I admit I'm new to constructing and controlling robots but I have implemented a simple robot in simulation in PlayerStage - the simulation capabilities were really cool and it let me cut my teeth on object avoidance and let me play around with little risk of monetary loss. What I don't think it'll do is let me control my quadrapod I built as it can't model servos and the interactions between them. Not all hobby robots use wheels and it would be nice to have a library that can support both and more (snake style, robots that travel along rails, millipedes, gripper arms). A robust modeling system can bring this to the table with easy to use high level interfaces and lower-level control if desired and the same is true for things like sensors.
It's important to note that this approach will no doubt require higher computational complexity on the robot than your average microcontroller can provide but it's possible now for under $200 to have a 400 mhz computer with 128 megs of ram in a few grams and drawing only a watt or two when running full speed. Add in ethernet or 802.11 and an IP layer and you can "tether" the robot with or with out wires. The size, weight, and energy requirements are quite reasonable on modern robots and I think the increase in all of those aspects for control is worth it. Here is the kind of features I'm thinking the framework should support (note that with the proper implementation these would come for-free or with minimal implementation cost):
* Models of servos that not only control things like angles but also linear travel and rotational/linear velocity
* Servo correction, grouping, and synchronization in servo classes so higher level operations don't have to know about them
* Software validation of control commands: an attempt to rotate a servo to a point that causes it to bind causes a fault
* Models of limbs that not only provide a high level interface for control ("move foot two inches forward" would lift the leg and rotate it forward) but also hold the information required to perform kinematics
* Motion description systems that work with arbitrary time bases so you can have a ramping up and down of speed at the head and tail of a motion profile then have that profile executed over any arbitrary time length
* and much much much more
Here is my notes so far on a set of classes and their hierarchy:
http://triddle.ath.cx/classes.pdfI also think the appropriate way to organize the framework is via an event-driven model and state machines; this technique has been used to write GUI programs for a very long time and it has proven itself to be quite good for a lot of the same problems that need to be solved here: code reuse and interconnect-ability. Events are anything from bump sensors triggering to arriving at a way point and each event updates some portion of the robot and causes other actions to happen appropriately.
I've got my computer platform and programming language of choice for lots of reasons but I'm deliberately keeping the language out of the discussion right now. I'd like to focus on things the software should do that help us, the robot hobbyists, instead of trying to make the software conform to the restrictions in a language. I'm especially looking to drum up discussion in this area and especially from seasoned veterans. What do you guys think?
Tyler