I’m excited to share a new update that makes it much easier to visualize terrain and buildings directly in Gazebo, without the hassle of using multiple external tools to gather terrain data and building models.
With this new version:
Buildings can be added effortlessly
Buildings can be easily disabled when not needed
Everything integrates cleanly into the Gazebo workflow
Feel free to check it out, try it in your own setups, and report any bugs or issues you come across.
Many thanks to all the contributors who helped make this possible!
Looking forward to your feedback.
If you like the project, don’t forget to the repository on GitHub!
Currently the tool is tested for Gazebo Harmonic. Will soon test it for Gazebo Jetty.
Repo: gazebo_terrain_generator
The issue with existing tools is that we need use multiple tools get terrain simulation up and running in gazebo + we need manually set the world, model files.
Keeping it easy to use has always been my moto. So, the tool clubs everything, downloading ortho tiles, generation heightmap for user specific region, reposition the spawn location and now add buildings in few clicks.
Not to mention use env to set the place to save them so we dont have to manually copy them
This is a update for my previous work which is a generating terrain for gazebo sometime back.
Its listed in gazebo projects page too.
Hi @ saiaravind19 nice feature, and thanks for checking out our talk!
Just to clarify Forest3D’s focus: it generates realistic outdoor environments for robot navigation, fully automated. Inputs are a DEM file + Blender 3D models. Outputs: complete Gazebo Harmonic world with terrain mesh, textures, assets, collisions, no manual SDF editing, no file copying.
Despite the name, Forest3D is general purpose: urban assets like buildings and roads would work too.
Watching your demo, I still don’t get the scope of your tool: is it for bird’s-eye drone visualization or for realistic simulation?
The user need to download the Geotif data from some source.
If I am not wrong he will only be able to download in tiles which will have regions which is not interested in. So the user need to clip them off .
Some times if he needs a better resolution image like 18 or 19 there will and region of interest spawned across multiple tiles there will be manual process to stitch them all.
Also spawn location If the user want to adjust the spawn location he needs to do it manually because the terrain is never flat and spawning robots in irregular terrain is a pain.
Having multiple worlds with assets so I can share it across.
So this tool solve all such pain point. What it lacks is generating trees/Forest in a region. Most important realistic properties for ground.
This tool is mainly to have satellite maps along with terrain in Gazebo. Now I have added buildings to the same tool.
If you are open for collaboration we can work together solving each others gaps to build one tool.
Also Actually I found a way get the ground height not directly from gazebo but I am using it in my current work. I can help you with that if needed.
It would also be nice to be able to write provider plugins for map tiles and elevation. Many countries provide free and high-quality geodata for their surface (not so often also building models). E.g. Austria has very nice coverage by open geodata. Unfortunately, the formats and APIs vary, therefore the need for plugins. Also the countries like to use their own weird coordinate systems instead of WGS84.
We have written something similar to your generator for Czech republic, but we’ve never made it through the finish line of such nicely usable GUI as yours. It would be nice if our accessors could be somehow integrated.
Also, another student at our group did some automated building placement, and we’ve quickly figured we need to put some texture on the buildings so that e.g. visual SLAM can work. Do you see any good source for such textures? If not, we’ve implemented a fallback to a generic texture of a facade with windows. Not great to look at, but SLAM is happy.
Last, we also downloaded the semantic maps (roads etc.) and placed special objects in the Gazebo maps in their place (as objects with visuals but without collisions). This allows for example darkening the road surfaces a bit. It could also serve as a guide on where to not place trees
Forest3D actually started the same way as yours, generating 3D terrain with aerial photo as flat texture. The problems I faced:
DEM resolution: Web-downloaded DEMs have poor resolution (~30m), not practical for realistic simulation. That’s why Forest3D takes manual DEM input, users can provide high-resolution data from drone surveys or other sources.
Flat features: Trees, buildings, powerlines, rocks, all critical for obstacle avoidance (low-altitude drones) and navigation (ground robots), were just flat textures. Far from a truly 3D outdoor simulation.
Forest3D fills that gap: moving from flat aerial textures to actual 3D simulation.
If you’re interested, feel free to fork the repo or contribute, use your automated DEM pipeline and feed Forest3D’s input.
P.S. Concerning terrain height: heightmaps are indeed effective, but they don’t support roughness textures, important for my use case. That’s why I use STL + OBJ instead.
@peci1 regarding UI I did use an open source repo which already did most of the heavy lifting in downloading the tiles.
FYI: Other features w.r.t 3d terrain for gazebo is build by me.
I completely agree with you there are many open source terrain data available online but its kind of hard use and require post processing.
Maybe in the future I will try to have plugins so that we can integrate such sources into one place.
I didn’t explore on adding textures to the buildings as my use case is mostly mapping and path planning. But its nice to have it . Can you share the repo like I would like to explore your approach and see if I can add it to my current work.
Nice to hear that you guys have done some groundwork on where not to place trees. I want to add trees to this project next version with collision seems like I can get some inspiration from you work. Can you repo link for this work too Plz.