Design simulation worlds using SDF with ground planes, models, physics configuration, and lighting
Think like a simulation environment designer who creates realistic testing grounds for robots. You understand physics engines, lighting, and model placement. You build worlds that are stable, performant, and suitable for the testing scenarios required.
Before creating or modifying any SDF world, ask yourself:
Q: What physics engine should be used?
Q: What step size is appropriate?
https://fuel.gazebosim.org/... URIs<?xml version="1.0"?>
<sdf version="1.8">
<world name="my_world">
<!-- Physics configuration -->
<physics type="dart">
<max_step_size>0.004</max_step_size>
<real_time_factor>1.0</real_time_factor>
</physics>
<!-- Lighting -->
<light type="directional" name="sun">
<cast_shadows>true</cast_shadows>
<pose>0 0 10 0 0 0</pose>
<diffuse>0.8 0.8 0.8 1</diffuse>
<direction>-0.5 0.1 -0.9</direction>
</light>
<!-- Ground plane -->
<model name="ground_plane">
<static>true</static>
<link name="link">
<collision name="collision">
<geometry><plane><normal>0 0 1</normal></plane></geometry>
</collision>
<visual name="visual">
<geometry><plane><normal>0 0 1</normal><size>100 100</size></plane></geometry>
</visual>
</link>
</model>
</world>
</sdf>
<!-- Include model from Fuel -->
<include>
<uri>https://fuel.gazebosim.org/1.0/OpenRobotics/models/Table</uri>
<name>table_1</name>
<pose>2 0 0 0 0 0</pose>
</include>
<!-- Multiple instances with different names -->
<include>
<uri>https://fuel.gazebosim.org/1.0/OpenRobotics/models/Cardboard Box</uri>
<name>box_1</name>
<pose>2.5 0.3 0.8 0 0 0</pose>
</include>
Popular Fuel models:
OpenRobotics/models/TableOpenRobotics/models/Cardboard BoxOpenRobotics/models/Coke CanOpenRobotics/models/Construction Cone<physics type="dart">
<!-- Step size: smaller = more accurate but slower -->
<max_step_size>0.004</max_step_size>
<!-- Real-time factor: 1.0 = real-time, less than 1.0 = slower -->
<real_time_factor>1.0</real_time_factor>
<!-- Gravity vector (m/s²) -->
<gravity>0 0 -9.81</gravity>
</physics>
For unstable simulations:
<surface>
<friction>
<ode>
<mu>0.8</mu> <!-- Static friction -->
<mu2>0.6</mu2> <!-- Dynamic friction -->
</ode>
</friction>
<contact>
<ode>
<kp>1e6</kp> <!-- Contact stiffness -->
<kd>100</kd> <!-- Contact damping -->
</ode>
</contact>
</surface>
Typical values:
<world name="indoor_room">
<!-- Physics, lighting, ground (as above) -->
<!-- Walls -->
<model name="wall_north">
<static>true</static>
<pose>0 5 1 0 0 0</pose>
<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>
</visual>
</link>
</model>
<!-- Furniture from Fuel -->
<include>
<uri>https://fuel.gazebosim.org/1.0/OpenRobotics/models/Table</uri>
<pose>2 2 0 0 0 0</pose>
</include>
</world>
<world name="obstacle_course">
<!-- Base elements -->
<!-- Scattered obstacles -->
<include>
<uri>https://fuel.gazebosim.org/1.0/OpenRobotics/models/Construction Cone</uri>
<name>cone_1</name>
<pose>3 1 0 0 0 0</pose>
</include>
<include>
<uri>https://fuel.gazebosim.org/1.0/OpenRobotics/models/Construction Cone</uri>
<name>cone_2</name>
<pose>5 -2 0 0 0 0</pose>
</include>
<!-- Goal marker -->
<model name="goal">
<static>true</static>
<pose>10 0 0.1 0 0 0</pose>
<link name="link">
<visual name="visual">
<geometry><cylinder><radius>0.5</radius><length>0.2</length></cylinder></geometry>
<material><ambient>0 1 0 1</ambient></material>
</visual>
</link>
</model>
</world>
Before finalizing any SDF world:
<static>true</static>This skill is used by:
content-implementer agent when generating Module 2 lessonsDependencies:
urdf-robot-model - for robots to place in worldssensor-simulation - for testing sensors in environmentsros2-gazebo-bridge - for controlling simulationsSearch for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer