ROS Resources: Documentation | Support | Discussion Forum | Service Status | Q&A

URDF with Webots?

We noticed that one of the major culprits in Webots-ROS integration is URDF support. Therefore, we would really appreciate your feedback and help on how to solve this efficiently (what is the best for the community).

We would like to hear what does sound like an optimal scenario for your use case?

#1 Import URDF and Maintain PROTO

  • Initial input format: URDF or PROTO (Webots native format to describe robots and objects)
  • Maintained format: PROTO
  • ROS format: Exported URDF

Currently, we suggest users convert their URDF to Webots PROTO using our urdf2webots. Once the PROTO is created a user develops and maintains a robot model in the PROTO format. In ROS application, when URDF is required, it can be exported simply by robot.getUrdf() or through CLI webots convert input.urdf.

At the moment, imported and exported URDF are not the same and it is quite hard to develop consistency. In addition, the exported URDF is often missing some extra tags like transmission, but it can be easily resolved.

The advantage of this method is that the PROTO files can be extended with powerful Lua scripting + it is Webots native format.

#2 Maintain URDF Only

  • Initial input format: URDF
  • Maintained format: URDF + tag
  • ROS format: The maintained URDF

The idea is to import URDF to Webots every time the simulation starts. The importation would be done either through urdf2webots or we would develop a native Webots support for URDF importation.

This will require adding tag to URDF that would contain Webots specific model data. However, effectively it would be very similar to the Gazebo approach. You would be able to use xacro to generate URDF as you used to.

What do you think? Would you prefer to maintain PROTO and export URDF as needed or you would like to stay with URDF and import it to the Webots on the fly? Do you have another good idea?

Please justify your answers. We would like to hear your use case in which one method is clearly preferable!


We definitely prefer method 2 since we use the URDF for multiple other purposes including visualization in RViz and we don’t want to maintain two separate representations.

1 Like

Agreed on preferring #2. I never want to have multiple robot description files that contain the same information - makes it a mess to maintain.

If Webots specific tags are needed, they can be imported from a webots.xacro file or added in using xacro conditionals. But then at least the common robot description is still in one place for all applications that might need it (Gazebo, Rviz, etc).

1 Like

Certainly number #2!

Simulation is a supporting tool for us, not the main goal. And since the real robots use the URDF, it would be best if the simulation uses the same model.

Frankly I also find the PROTO format a bit odd. A new format was invented when there are already so much of those: xml, yaml, json, etc. So ‘live’ conversion from URDF to webots would be great for new developers already familiar with URDF (live robots or gazebo) to adopt webots.

1 Like

Another vote for #2 here!

1 Like

Count me for #2 too :slight_smile: We’re a research university so we try to keep our code as versatile and unversally usable as possible. That means I like to have a single Xacro file (or library of files), which can generate URDF for RViz, SRDF for Moveit, SDF for Gazebo Classic, SDF for Ignition Gazebo, and, eventually, also PROTO for Webots. I never know which colleague will find an interesting feature in Webots or any other tool and would like to use our robot there. But I still want to retain compatibility with all the other tools that are useful for other colleagues. Xacro showed to be a very powerful language and so far, a combination of Xacro and a few lines of sed is enough for us to keep all the robot definitions in one place.

To achieve such versatility in the Xacro, we defined a Xacro parameter rendering_target which specifies what is the intended use of the processed model. So if you “render the Xacro” for RViz URDF, you pass rendering_target:='urdf' and inside the xacro files, there can be sections specifically enabled only for this use-case.


Definitely voting number 2! Would be great to have that supported!

1 Like

Another vote for #2.
We’d if possible like a seamless transition off Gazebo.

I am currently scoping the difficulty in switching to Webots - I work in a automation research group for a very large multinational. We have fully automated pipelines running simulations in CI using Gazebo. The ability to seamlessly (and automatically) swap in robot calibrations using xacro, as well as a single point of truth is essential for us.

I’ve been able to get our robots to partially import with the URDF converter - with some components failing. Doing any modifications to the generated PROTO (which will be required) is a real blocking factor right now.

I (and members of our group) would be happy to chat via Discord / Webex if you’d like any detailed / specific feedback.

1 Like

I vote for #2 Maintain URDF only

1 Like

I second the votes for #2 for all the reasons @sillkjc and @shonigmann mentioned, especially the need for a single point of truth. Maintaining a separate robot description is not feasible for most users including me.

1 Like

Wow, thank you all for the valuable feedbacks! We really appreciate it!

I believe we have now a clear idea of where to put our efforts.


A standard model description is needed so my vote goes for #2 too.

In case changes in URDF are needed, you could directly contribute to it.

My 2 cents.

1 Like