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!