Dynamic reconfiguration of URDF's of a robot
Hi fellow robotic engineers!
Im facing a problem considering a modal "robot", where the robot is rather an intelligent table to which you stick modules which then help in the assembly of products. The exat way this should work is not important :D
The problem we are facing is whether we can change the URDF of the system at runtime. It must be possible to connect and disconnect modules at runtime and add or delete there URDF from those of the whole system.
Just to give you an impression, a module could be a small table with a robot arm on it which can be simply sticked and thus connected into the master table. When this happens, the URDF of the table must be extended by the URDF of the module. When the module is taken away the URDF of the whole system must be reduced by the URDF of the module.
We have a concept to transfer the URDFs network wise, we just have no idea how ros could manipulate the URDFs at runtime. The answer must not be in respect to any specific OS or even ros version. Right now it should preferably be regarded to ros noetic or foxy(ROS2).
I would greatly appreciate if you have any input or idea how this could be conceptionally done with ros.
Thank you!
This has come up multiple times, and in many discussions. I'd really advise searching for "dynamic urdf" or "updateable urdf" with Google (append
site:answers.ros.org
) or even directly on ROS Discourse.One context in which it comes up is "tool switching" with industrial robots. Your application sounds almost identical.
The
problemchallenge is not changing the parameter at runtime (as that's perfectly possible). It's making sure (somehow) that all consumers of that data are aware of the change, are able to update their internal state, and, as that's typically important for things like environment representations, they all have a consistent shared view of that environment representation (ie: urdf / robot model / whatever).ROS 2 already uses a topic to publish "the robot description", so technically this solves the "distribute updates to the URDF to consumers" part. The rest is however left completely implicit (ie: achieve ...(more)