Skip to main content

World Configuration in Gazebo

Creating and configuring simulation worlds is a fundamental aspect of developing effective digital twin environments. A well-configured world provides the context in which robots operate and interact with their environment. This section covers the essential elements of Gazebo world configuration.

World File Structure

Gazebo uses the SDF (Simulation Description Format) to define worlds. A typical world file includes:

  • World Properties: Global settings like gravity, magnetic field
  • Models: Robot and object definitions
  • Lights: Lighting configuration
  • Plugins: Additional functionality
  • Physics Engine: Solver settings and parameters

Basic World Template

<?xml version="1.0"?>
<sdf version="1.7">
<world name="my_world">
<!-- World properties -->
<gravity>0 0 -9.81</gravity>

<!-- Magnetic field -->
<magnetic_field>6e-06 2.3e-05 -4.2e-05</magnetic_field>

<!-- Physics engine configuration -->
<physics name="default_physics" type="ode">
<max_step_size>0.001</max_step_size>
<real_time_factor>1</real_time_factor>
<real_time_update_rate>1000</real_time_update_rate>
</physics>

<!-- Scene appearance -->
<scene>
<ambient>0.4 0.4 0.4</ambient>
<background>0.7 0.7 0.7</background>
</scene>

<!-- Models and objects -->
<!-- Add your models here -->

</world>
</sdf>

Essential World Properties

Gravity Configuration

Gravity is fundamental to realistic physics simulation:

<gravity>0 0 -9.81</gravity>

Considerations:

  • Use negative Z value for Earth-like gravity (downward)
  • Adjust magnitude for different celestial bodies
  • Can be set to zero for microgravity simulations

Physics Engine Settings

The physics engine configuration affects simulation quality and performance:

<physics name="default_physics" type="ode">
<max_step_size>0.001</max_step_size>
<real_time_factor>1</real_time_factor>
<real_time_update_rate>1000</real_time_update_rate>
<ode>
<solver>
<type>quick</type>
<iters>10</iters>
<sor>1.3</sor>
</solver>
<constraints>
<cfm>0.0</cfm>
<erp>0.2</erp>
<contact_max_correcting_vel>100.0</contact_max_correcting_vel>
<contact_surface_layer>0.001</contact_surface_layer>
</constraints>
</ode>
</physics>

Parameters:

  • max_step_size: Smaller values improve accuracy but decrease performance
  • real_time_factor: Target ratio of simulation time to real time
  • real_time_update_rate: Updates per second (affects timestep)

Environment Models

Terrain and Ground Planes

Simple ground plane:

<model name="ground_plane">
<static>true</static>
<link name="link">
<collision name="collision">
<geometry>
<plane>
<normal>0 0 1</normal>
<size>100 100</size>
</plane>
</geometry>
</collision>
<visual name="visual">
<geometry>
<plane>
<normal>0 0 1</normal>
<size>100 100</size>
</plane>
</geometry>
<material>
<ambient>0.7 0.7 0.7 1</ambient>
<diffuse>0.7 0.7 0.7 1</diffuse>
</material>
</visual>
</link>
</model>

Building Custom Environments

For complex environments, you can:

  • Import CAD models (STL, DAE, OBJ formats)
  • Use primitive shapes (boxes, cylinders, spheres)
  • Combine multiple models into hierarchical structures
  • Use heightmap terrain for outdoor environments

Lighting Configuration

Proper lighting enhances visual quality and supports computer vision tasks:

<light name="sun" type="directional">
<pose>0 0 10 0 0 0</pose>
<diffuse>0.8 0.8 0.8 1</diffuse>
<specular>0.2 0.2 0.2 1</specular>
<attenuation>
<range>1000</range>
<constant>0.9</constant>
<linear>0.01</linear>
<quadratic>0.001</quadratic>
</attenuation>
<direction>-0.3 0.3 -1</direction>
</light>

Plugins for Extended Functionality

Camera Plugins

Add cameras for computer vision tasks:

<plugin name="camera_controller" filename="libgazebo_ros_camera.so">
<camera_name>my_camera</camera_name>
<image_topic_name>image_raw</image_topic_name>
<camera_info_topic_name>camera_info</camera_info_topic_name>
<frame_name>camera_link</frame_name>
</plugin>

Controller Plugins

Integrate with ROS/ROS2:

<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
<robotNamespace>/my_robot</robotNamespace>
</plugin>

Scene Customization

Atmospheric Effects

Add fog for outdoor environments:

<scene>
<fog type="linear">
<color>0.8 0.8 0.8</color>
<density>0.01</density>
<near>1.0</near>
<far>100.0</far>
</fog>
</scene>

Sky Configuration

Enhance realism with sky effects:

<scene>
<sky>
<time>14:00</time>
<sun_direction>-0.3 0.3 -1</sun_direction>
</sky>
</scene>

Advanced Configuration Techniques

Conditional Spawning

Use Gazebo's parameter server for dynamic world configuration:

<!-- In your launch file or controller -->
<param name="world_name" value="$(find my_package)/worlds/my_world.world"/>

Multi-Robot Worlds

Configure worlds for multiple robots:

  • Use namespaces to avoid topic conflicts
  • Separate robot models with adequate spacing
  • Configure individual physics properties if needed
  • Set up communication channels between robots

Performance Optimization

LOD (Level of Detail)

For complex environments:

  • Simplify collision geometry for distant objects
  • Use lower-resolution meshes for far-away items
  • Implement occlusion culling for hidden objects

Physics Optimization

  • Adjust solver parameters based on environment complexity
  • Use appropriate timestep for your simulation needs
  • Consider disabling physics for static objects

Best Practices

Modularity

  • Create reusable world components
  • Use Xacro or similar tools for parameterized worlds
  • Organize related models in logical groups
  • Document world configurations for reproducibility

Validation

  • Test worlds with various robots and scenarios
  • Verify physics properties match real-world expectations
  • Check lighting for computer vision applications
  • Validate plugin functionality

Version Control

  • Keep world files under version control
  • Document changes and their impact
  • Maintain multiple configurations for different use cases
  • Create backup versions before major modifications

Troubleshooting Common Issues

Slow Performance

  • Check physics engine parameters
  • Simplify complex collision geometries
  • Reduce plugin overhead
  • Adjust visual quality settings

Physics Instabilities

  • Verify gravity and mass properties
  • Check timestep and solver settings
  • Ensure proper model constraints
  • Validate collision mesh alignment

Visual Artifacts

  • Adjust lighting parameters
  • Check material properties
  • Verify mesh integrity
  • Inspect texture coordinate issues

Example: Simple Indoor Environment

Here's a complete example of a simple indoor environment:

<?xml version="1.0"?>
<sdf version="1.7">
<world name="simple_indoor">
<include>
<uri>model://ground_plane</uri>
</include>

<include>
<uri>model://sun</uri>
</include>

<!-- Room walls -->
<model name="wall_1">
<pose>0 5 1 0 0 0</pose>
<static>true</static>
<link name="link">
<collision name="collision">
<geometry>
<box><size>10 0.2 2</size></box>
</geometry>
</collision>
<visual name="visual">
<geometry>
<box><size>10 0.2 2</size></box>
</geometry>
<material>
<ambient>0.8 0.8 0.8 1</ambient>
<diffuse>0.8 0.8 0.8 1</diffuse>
</material>
</visual>
</link>
</model>

<!-- Add more walls, furniture, etc. -->
</world>
</sdf>

This configuration provides a foundation for creating rich, interactive simulation environments tailored to your specific robotics applications.