World
World¶
The world element encapsulates an entire world description including: models, scene, physics, joints, and plugins.
# Import the element creator from pcg_gazebo.parsers.sdf import create_sdf_element
# The default world contains only the definition of the acceleration of gravity # and the default configuration of the physics engine using `ode` world = create_sdf_element('world') print(world)
<world name="default">
<physics default="1" name="default_physics" type="ode">
<max_contacts>20</max_contacts>
<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>
<gravity>0 0 -9.8</gravity>
</world>
# The physics engine can be edited using its object setter world.physics.reset(mode='ode', with_optional_elements=True) print(world)
<world name="default">
<physics default="1" name="default_physics" type="ode">
<ode>
<constraints>
<cfm>0</cfm>
<erp>0.2</erp>
<contact_surface_layer>0.001</contact_surface_layer>
<contact_max_correcting_vel>100</contact_max_correcting_vel>
</constraints>
<solver>
<type>quick</type>
<sor>1.3</sor>
<use_dynamic_moi_scaling>0</use_dynamic_moi_scaling>
<friction_model>pyramid_model</friction_model>
<min_step_size>0.0001</min_step_size>
<precon_iters>0</precon_iters>
<iters>50</iters>
</solver>
</ode>
<max_contacts>20</max_contacts>
<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>
<gravity>0 0 -9.8</gravity>
</world>
world.physics.reset(mode='bullet', with_optional_elements=True) print(world)
<world name="default">
<physics default="1" name="default_physics" type="bullet">
<max_contacts>20</max_contacts>
<max_step_size>0.001</max_step_size>
<bullet>
<constraints>
<cfm>0</cfm>
<split_impulse>1</split_impulse>
<split_impulse_penetration_threshold>-0.01</split_impulse_penetration_threshold>
<contact_surface_layer>0.001</contact_surface_layer>
<erp>0.2</erp>
</constraints>
<solver>
<type>quick</type>
<sor>1.3</sor>
<iters>50</iters>
<min_step_size>0.0001</min_step_size>
</solver>
</bullet>
<real_time_update_rate>1000</real_time_update_rate>
<real_time_factor>1</real_time_factor>
</physics>
<gravity>0 0 -9.8</gravity>
</world>
world.physics.reset(mode='simbody', with_optional_elements=True) print(world)
<world name="default">
<physics default="1" name="default_physics" type="simbody">
<max_contacts>20</max_contacts>
<simbody>
<accuracy>0.001</accuracy>
<min_step_size>0.0001</min_step_size>
<contact>
<plastic_impact_velocity>0.5</plastic_impact_velocity>
<plastic_coef_restitution>0.5</plastic_coef_restitution>
<stiffness>100000000.0</stiffness>
<dissipation>100</dissipation>
<override_stiction_transition_velocity>0.001</override_stiction_transition_velocity>
<viscous_friction>0</viscous_friction>
<dynamic_friction>0.9</dynamic_friction>
<static_friction>0.9</static_friction>
<override_impact_capture_velocity>0.001</override_impact_capture_velocity>
</contact>
<max_transient_velocity>0.01</max_transient_velocity>
</simbody>
<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>
<gravity>0 0 -9.8</gravity>
</world>
# A world can contain multiple models, add an empty model by using the add_model method world.reset() world.add_model('model_1') print(world)
<world name="default">
<physics default="1" name="default_physics" type="ode">
<max_contacts>20</max_contacts>
<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>
<gravity>0 0 -9.8</gravity>
<model name="model_1"/>
</world>
# You can add a model to the world as well model = create_sdf_element('model') world.add_model('model_2', model) print(world)
<world name="default">
<physics default="1" name="default_physics" type="ode">
<max_contacts>20</max_contacts>
<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>
<gravity>0 0 -9.8</gravity>
<model name="model_1"/>
<model name="model_2"/>
</world>
# You must have unique names for the models in a world world.add_model('model_1')
Model element with name model_1 already exists