There is some nice discussion on how to improve the current URDF format and parsers to fill some immediate needs.
This topic is for questioning everything and discussing what the perfect way to share and reuse information about a robot might be.
What needs are there? What assumptions can we make?
A short list of the needs fullfilled by a robot description:
- Save time by not having to think about and create a project specific description. (Accompanied by the risk that the description designers made provisions to handle all aspects of a description that your project needs.)
- Share a description for reuse by others. You and the peers you are sharing with must agree on the meaning of some subset of the information in the description.
- Share a description between different softwares. By using a single description, errors introduced by data entry mistakes are eliminated. DRY.
- what else?
A short list of things we need from the description:
- Easy to create and edit across all platforms.
- Minimize difficulty in integrating the description into new codes/languages/platforms.
- A starting set of description information that is useful and whos meaning is agreed upon.
- The ability to be extended as needed with project specific info.
- The ability to be formally extended by the community as progress maches forward.
- The descriptions are primarily created by people and the one tool in common across all platforms is the text editor.
- The descriptions are primarily consumed by software.
What is this robot we are describing? What information do we need to share?
What counts as a robot really? For the purposes of this discussion a robot is any physical device whose interaction with the world is sensed, processed, and acted upon in an intentional manner.
For instance, some robots can be described as a set of rigid bodies and constraints on those bodies. Others include soft bodies or flexures. Nonlinear constraints (such as joint limits) and losses (transmission inefficiency) are often known or estimated well enough that we want to include them in the description. Sometimes the constraints are simplified to the joints between bodies and described in the manner of a graph.
Myself, I use URDF only when forced to by the tools needed for a particular project. I prefer an embeddable scripting language (lua, python) for the description. Cleaner than XML for editing and one has callback functions for non-linear or heuristic information. If you are unfamiliar with this approach, RBDL has a nice basic example.
Sounds great right? However I don’t get any of the benefits of a well designed and dessiminated format.
- Any given description is usually project specific (No standard object model)
- Only my internal software reads the description, so not a lot of reuse between software.
- No reuse between peers either. As a consultant an annoying amount of my work is confidential.
The big question:
I see enough frustration in the world with the limitations of URDF that it’s clear that there is a need for something more. What does the next generation of robot description look like?