URDF improvements

@olivier.michel @fmrico Could you please bring the results of the recent URDF usage survey on the next TSC meeting? I think the findings in it are very serious and they need to be tackled from a coordinated body like TSC. I’m not sure which WG would fit for it, probably Tooling? @MichaelOrlov ?

Some points I see that could be tackled relatively easily:

  1. Create XSD schema for URDF format. Define some URDF versions. Create a proper format description website similar to sdformat.
  2. Create XSD schema (if possible) for Xacro (90% of users use Xacro to generate URDFs)
  3. Provide links in documentation to tools that can help with URDF/SDF generation (the report mentions about 5 plugins to CAD tools, including FOSS Phobos for Blender).

A little bit more complicated but still doable:

  1. (RQT-based?) visualization tool for URDFs, with live reload of the model when the source file(s) change (and automatically Xacroing them if needed). Using RViz for this was considered cumbersome by 65% of users. The tool should ideally also display mesh origins so that it’s easier for users to understand how to position the mesh relative to the link. Writing an integrated URDF/Xacro editor is a completely different league and I’m not suggesting doing that (at least until the previous points are done).

Does anybody see some other low hanging fruit there? Does anybody want to offer help working on these points or at least reviewing REPs/PRs? I could offer a bit of my time irregularly.


For me, this is the most interesting figure from the survey:

I want the ability to specify acceleration and jerk limits for joints


visualization tool for URDFs, with live reload of the model when the source file(s) change

The VS Code plugin does this to a point, at least with URDF

I never understood this need. URDF is for visualization. I’d expect acceleration and jerk limits to be a part of SDF. Or?


This already exists; see urdfdom/urdf.xsd at master · ros/urdfdom · GitHub . It might need some updates, but it should be largely there.

The version tag exists since early 2020, with a defined version of 1.0 currently. See Add in support for a version tag. by clalancette · Pull Request #133 · ros/urdfdom · GitHub


Great news, haven’t heard about it yet! I’ll add a mention to the ROS 1 wiki then.

However, from the first few lines of the file:

This is a proposal XML Schema

Nice, good to know! It did not work in vscode installed from snap, but it works when installed from deb.

1 Like

So, just to know the proper usage of the schema so that IDEs can use it for intellisense and validation: Should it look like this?

<?xml version="1.0"?>
<?xml-model href="https://raw.githubusercontent.com/ros/urdfdom/master/xsd/urdf.xsd" ?>
<robot name="robot" xmlns:xacro="http://ros.org/wiki/xacro" xmlns="http://www.ros.org">

@fmrico @olivier.michel shoot me an e-mail and I’ll get you on the agenda.

To make this a productive discussion we need to figure out who has the time and resources to devote to improving URDF. Ideally the TSC members should spend some time on this issue, however we might need some community members to step up as well.


I honestly don’t know, sorry. If you figure it out, it might be worthwhile to document it somewhere on the ROS 1 wiki and the ROS 2 documentation pages.

I already did some updates to http://wiki.ros.org/urdf/ and urdf/XML/model - ROS Wiki . As I don’t use ROS 2, I haven’t done the docs update there.

The XML schema definition mentioned above works in VSCode with XML plugin (up to the point that the plugin uses too old XSD parser so it can’t uderstand that multiple <collision> tags are ok). It also almost works in CLion/PyCharm (you just have to download the schema manually to a local file and tell the IDE where to find it).

Hi @peci1 @Katherine_Scott

Yes, of course, I’ll do it. Let me some time to read the paper and survey, and I can do this work as TSC member.



Thanks a lot, Francisco!

Maybe @Daniella1 (who announced the survey here) could have something to add, too?

Hi @peci1, thanks for this post, your suggestions are great!

With regards to visualization, I know that people from Fraunhofer IPA have been working on a tool for online visualization of URDF files.

We are also working on a dataset and a URDF analysis tool that can help us better understand some of the issues. Hopefully these results will be ready by end of April.

We are also in contact with some robotics developers that have created a URDF working group on google groups, but I don’t have access to it yet. There are a number of volunteers that are willing to help improve these issues in the working group.
We should probably find a way to combine our efforts for improving URDF.


URDF is for visualization.

I am not sure about this. At least in my research field (humanoid robotics) URDF is quite used for simulaton/control/planning. If URDF was only meant/used for visualization, why it should have inertial parameters in it?


I would be really happy to help on this. However, I think the real prerequisite here (that is difficult to do just on the community side) is to transfer the specification from the wiki to a git/GitHub repository, even without any website (see Move URDF specification to a Github repo? · Issue #62 · ros/urdfdom_headers · GitHub). Without that, it is really cumbersome to:

  • Version the specification. On a git repo, you can add tags/releases, while on the wiki there is not such support
  • Discuss improvements changes, especially coming from the community. On GitHub there is the usual PR workflow to which most developers are already used, while on the wiki people just modify the specification if they feel confident enough.

I would be happy to handle the wiki → GitHub Markdown conversion, but I think we need to someone that can create a repo for this in the ros organization to green light this, otherwise we just risk to introduce even more fragmentation in different URDF dialects.


Weird. I haven’t worked with humanoids, though… However, I always felt that URDF is not expressive enough to capture all things needed for a simulation. SDF is used for that quite often and it is expressive enough…

Weird. I haven’t worked with humanoids, though… However, I always felt that URDF is not expressive enough to capture all things needed for a simulation. SDF is used for that quite often and it is expressive enough…

Yes, I totally agree on SDF being more expressive in simulation, but it appears to me that URDF (sometimes with SDF-specific extension) is far more used in people that provide description of robot that are also used in simulation, see for example the list in GitHub - robot-descriptions/robot_descriptions.py: Import robot descriptions as Python modules .

To reply a bit more in topic: another aspect I would be happy to help on is to define a simple extension system for URDF, like it has been done for SDF in Custom elements and attributes — Documentation . This would permit developer/organizaton that need some additional data in URDF to easily add it to the URDF they work on, without the need to wait for proposing an extension and discussuing it with all the URDF community/mantainers. Eventually, extension that get widely used across the community can easily made official, and become part of future versions of the URDF specification.