As simulation worlds get more complex: heightmaps, PBR textures, photoscanned assets, custom plugins, sharing them becomes a real pain. I always end up telling colleagues to export this path, set that variable, hope the directory layout matches.
I wonder if a self-contained world bundle would make sense. One file that carries everything and runs anywhere (for example .gzworld extension), no setup needed, just the same way .glb embeds a full 3D scene into a single portable file, but for a full simulation environment, and later gz sim recognizes it natively.
I know Docker solves environment reproducibility at the system level, but Iām thinking about something lighter, at the asset level. More like a file format than a deployment tool.
Curious if this is useful to everyone and make sense !!, or if something like this already exists and I missed it!
anyway, I put together a small proof-of-concept: GitHub - khalidbourr/gz-bundle Ā· GitHub. At the moment it generates a zip archive with a .gzworld extension. not a proper binary format yet. But the concept works.
Great project and initiative! I feel your pain⦠Distribution of models via Fuel has always been half-baked for a few reasons:
Impossible to share custom plugins
Many things have to be configured outside the SDF because of topic prefixes
No way to start external controllers like ROS control
Some models have plugin versions baked in them
These problems also break the drag and drop UX essentially all other simulators/game engines have. Dnd of model from Fuel never resulted into a working simulation for me (except simple static models).
So yes, I feel there definitely is need for something like you propose. The hard part would be custom plugins, but otherwise, it should be solvable.
Great project and initiative! I feel your pain⦠Distribution of models via Fuel has always been half-baked for a few reasons:
Thankās for feeling my pain haha
These problems also break the drag and drop UX essentially all other simulators/game engines have. Dnd of model from Fuel never resulted into a working simulation for me (except simple static models).
Exactly, drag and drop a world, everything shows up and works correctly in few seconds. Thatās the goal.
I think this could increase gz-sim adoption and enable proper community benchmarking like one complex realistic environment packaged as a single file, used by everyone to test algorithms
The hard part would be custom plugins, but otherwise, it should be solvable.
Thatās true, I am still thinking how I can do it.
Anyway, I would be very happy to see this grow with contributions from the community.
I think there is value in having separate models that can be versioned and reused across multiple projects, but having a quick way to share a bundle eliminates a host of problems, especially for new users.
If we do this upstream, it would also be nice to have a version of this for model files. You can then create your own world by āincludingā this file in addition to your own models.
Something like this would also be nice to have when exporting SDF files from a running Gazebo instance (i.e /world/world_name/generate_world_sdf service). Currently, the exported file contains absolute paths to resources used, which does not work for sharing.
nitpick: Weāve been trying to move away from the .world extension preferring .sdf since that is the short of the file format SDFormat. Taking an example from .usdz, I would suggest using.sdfz.
I think there is value in having separate models that can be versioned and reused across multiple projects, but having a quick way to share a bundle eliminates a host of problems, especially for new users.
If we do this upstream, it would also be nice to have a version of this for model files. You can then create your own world by āincludingā this file in addition to your own models.
I agree, we need a bundle also at model level.
Something like this would also be nice to have when exporting SDF files from a running Gazebo instance (i.e /world/world_name/generate_world_sdf service). Currently, the exported file contains absolute paths to resources used, which does not work for sharing.
This is amazing actually i forgot it !!
nitpick: Weāve been trying to move away from the .world extension preferring .sdf since that is the short of the file format SDFormat. Taking an example from .usdz, I would suggest using.sdfz.
yeah I find .sdfz much cleaner, I just wonder having both world bundle and model bundle sharing the same extension ā.sdfzā wonāt be a bit confusing ?
I need to take a look on the link you shared seems interesting thank you !
Concerning custom plugins, does it make sense to bundle them as .so? Or is that a lost cause given platform/compiler dependencies?