I agree with @Nate_Koenig and @wjwwood that the “data exchange” format shouldn’t be a scripting language. As others have pointed out, you can then have libraries/tools/DSLs for generating that data exchange format, one of which could be python.
I think that the choice of language (XML/json/yaml/etc) is less important now than determining what information about the robot will be represented. Once we have an outline of what we want in the format, expressing that in XML or yaml or whatever should be a (mostly) easy step. Personally I like XML, but I don’t care much.
I’d like to suggest that we should actually be coming up with a set of robot description formats, each of which express a particular type of robot information. For example we could have formats for:
- kinematic description - what are the joints, their spatial relationships, and how do they move
- dynamic description - what are the dynamic (mass/inertia properties)
- visual description - how does the robot look? This might include textures and things that 99% of robot code doesn’t care about, but which is used by visualization tools like rviz.
- simulation parameters - it is sometimes necessary to set parameters that are specific to the way that physics are simulated.
- limits - are there max velocities for the joints? max positions that are safe?
- semantic information about joints and groups of joints - “this is a gripper” or “these joints make up an arm”
. . .
My hope is that by breaking this down into sub-specs, we would be able to have smaller groups of people flesh out a spec for the part that they are deeply involved in. Some of these matter to almost everyone. kinematics for example, will be used by almost every piece of robot software. That means there will be more interested parties who want to have input about what goes into that spec, but it (hopefully) is also a simpler spec to come up with.
For any given robot, then, the description could include some subset of these. To create a simple robot that you can publish TF for, you might only need to use the elements from (1). Then if you want to make that robot simulate-able, you might need to define the dynamics elements, and add some simulation elements that give the physics engine hints.
The overall spec would then be a list of “accepted sub-specs”. When specs have bee proposed but not fully stabilized and accepted, they could be “proposed sub-specs”. This would give smaller groups within the robotics community a chance to come up with a new format that helps them describe their needs, test it out, and as it gets stabilized and finds broader use it could be merged in as a sub-spec.
As an example, lets say that roboticists working on soft robots find that they need a way to describe the physical characteristics of the links of their robots in particular ways. They could create a sub-spec for defining physical properties of materials, start using that in some of their custom tools, and over time it could be accepted as an official sub-spec. I think this approach is better than putting all elements for all robot use cases into one spec.