A tick-tock release cycle allows easy migration to new software versions. Obsolete code is marked as deprecated for one major release. Deprecated code produces compile-time warnings. These warning serve as notification to users that their code should be upgraded. The next major release will remove the deprecated code.
-
Removals
- Hydrodynamics: The
<water_density>SDF parameter has been removed. It was loaded but never used in any computation because the stability derivatives (e.g.<xUabsU>,<yVabsV>) already incorporate fluid density. Existing SDF files that specify<water_density>will continue to load without error; the parameter is simply ignored.
- Hydrodynamics: The
-
Deprecations
-
Hydrodynamics: Added mass via plugin parameters (
<xDotU>,<yDotV>,<zDotW>,<kDotP>,<mDotQ>,<nDotR>, and all cross terms<*Dot*>) is deprecated when using the DART physics engine. The explicit integration used by this path is conditionally stable. These parameters remain required for other physics engines (Bullet, MuJoCo) that do not support native added mass.When using the DART physics engine, use the SDF
<fluid_added_mass>tag on the link's<inertial>element instead. The physics engine integrates added mass implicitly (unconditionally stable) and computes the full non-diagonal Coriolis matrix automatically.Other physics engines (Bullet, MuJoCo) do not support native added mass, so plugin-based parameters remain the only option for those backends.
Warning: Do not set added mass in both
<fluid_added_mass>and the plugin simultaneously. If both are active, forces are double-counted. The plugin now emits an error if this is detected.Migration example (DART) — replace:
<plugin filename="gz-sim-hydrodynamics-system" name="gz::sim::systems::Hydrodynamics"> <link_name>base_link</link_name> <xDotU>-4.876161</xDotU> <yDotV>-126.324739</yDotV> <zDotW>-126.324739</zDotW> <mDotQ>-33.46</mDotQ> <nDotR>-33.46</nDotR> <xUabsU>-6.2282</xUabsU> ... </plugin>
with:
<link name="base_link"> <inertial> <fluid_added_mass> <xx>4.876161</xx> <yy>126.324739</yy> <zz>126.324739</zz> <qq>33.46</qq> <rr>33.46</rr> </fluid_added_mass> </inertial> </link> <plugin filename="gz-sim-hydrodynamics-system" name="gz::sim::systems::Hydrodynamics"> <link_name>base_link</link_name> <disable_added_mass>true</disable_added_mass> <xUabsU>-6.2282</xUabsU> ... </plugin>
Note that
<fluid_added_mass>uses positive values (physical convention), while the legacy<xDotU>parameters use negative values (Fossen sign convention). See http://sdformat.org/spec?ver=1.11&elem=link#inertial_fluid_added_massWhen both
<fluid_added_mass>and an ocean current are active, the plugin automatically corrects the Coriolis force to use the velocity relative to the fluid rather than the absolute velocity.
-
-
Breaking Changes
- Plugins for entities spawned into the world should now be able to
correctly find the world entity as its root entity during
System::Configure. This is a behavior change as it impacts functions such asscopedName(from Utils class) which is widely used in the code base for generating a fully scoped name by traversing up the tree of parent entities. ThescopedNamefunction should now correctly include the world entity in the scope when it is called duringSystem::Configure. One example breakage: The pose topic generated by the Pose Publisher system for models spawned into the world is affected, resulting in a change from/<model_name>/poseto/model/<model>/pose. The new topic name is is consistent with the topic names for models that already exist in the world, i.e. models that are not spawned.
- Plugins for entities spawned into the world should now be able to
correctly find the world entity as its root entity during
- Upgraded GUI framework from Qt5 to Qt6. All GUI plugins distributed by gz-sim have been migrated. This upgrade affects all users' custom Gazebo GUI plugins. Please see the Qt6 Migration tutorial for information on how to port your Qt5 based plugins to Qt6.
-
config.hh:
-
The macro
GZ_SIM_GUI_CONFIG_PATHhas been removed. Please usegz::sim::getGUIConfigPath()instead. -
The macro
GZ_SIM_SYSTEM_CONFIG_PATHhas been removed. Please usegz::sim::getSystemConfigPath()instead. -
The macro
GZ_SIM_SERVER_CONFIG_PATHhas been removed. Please usegz::sim::getServerConfigPath()instead. -
The macro
GZ_SIM_PLUGIN_INSTALL_DIRhas been removed. Please usegz::sim::getPluginInstallDir()instead. -
The macro
GZ_SIM_GUI_PLUGIN_INSTALL_DIRhas been removed. Please usegz::sim::getGUIPluginInstallDir()instead. -
The macro
GZ_SIM_WORLD_INSTALL_DIRhas been removed. Please usegz::sim::getWorldInstallDir()instead.
components/Factory.hh:
gz::sim::components::Factory::Register(const std::string &_type, ComponentDescriptorBase *_compDesc)andgz::sim::components::Factory::Register(const std::string &_type, ComponentDescriptorBase *_compDesc, RegistrationObjectId _regObjId)have been removed. Instead, please usegz::sim::components::Factory::Register(const char *_type, ComponentDescriptorBase *_compDesc, RegistrationObjectId _regObjId)gz::sim::components::Factory::Unregister()has been removed. Instead, please usegz::sim::components::Factory::Unregister(RegistrationObjectId _regObjId).
-
- Modified:
- In the Physics system, all
*VelocityCmdcomponents are now deleted after each time step, whereas previously the component values were set to0after each time step. Persistent velocity commands should be reapplied at each time step. - Default priority values are specified for the
PhysicsandUserCommandssystems to ensure thatPhysics::UpdateandUserCommands::PreUpdateexecute before systems with default execution priority. Several constants for system priority are defined ingz/sim/System.hh. - The ForceTorque system has been changed from updating sensor data during
the parallelized
PostUpdatephase to use the sequentialUpdatephase and writing directly to the ECM if a sensor entity has aWrenchMeasuredcomponent. The ForceTorque system priority is specified to use thegz::sim::systems::kPostPhysicsSensorPriorityconstant to ensure that itsUpdatephase executes afterPhysics::Updateand before systems with default priority.
- In the Physics system, all
- Deprecated
gz::sim::components::Factory::Register(const std::string &_type, ComponentDescriptorBase *_compDesc)andgz::sim::components::Factory::Register(const std::string &_type, ComponentDescriptorBase *_compDesc, RegistrationObjectId _regObjId)have been deprecated. Instead, please usegz::sim::components::Factory::Register(const char *_type, ComponentDescriptorBase *_compDesc, RegistrationObjectId _regObjId)gz::sim::components::Factory::Unregister()has been deprecated. Instead, please usegz::sim::components::Factory::Unregister(RegistrationObjectId _regObjId).
- The type of the static data member
gz::sim::components::Component::typeNamehas been changed fromstd::stringtoconst char*.
-
Deprecated
- The
ParticleEmitter2system was renamed toParticleEmitter. TheParticleEmitter2system is now deprecated. Please use theParticleEmittersystem.
- The
-
The
ignition::gazebonamespace is deprecated and will be removed in future versions. Usegz::siminstead. -
Header files under
ignition/...are deprecated and will be removed in future versions. Usegz/...instead. -
Configuration and log files are stored under
$HOME/.gz/siminstead of$HOME/.ignition/gazebo -
The following
IGN_GAZEBO_prefixed environment variables are deprecated and will be removed in future versions. Use theGZ_SIM_prefixed versions instead!IGN_GAZEBO_RENDER_ENGINE_PATH->GZ_SIM_RENDER_ENGINE_PATHIGN_GAZEBO_PHYSICS_ENGINE_PATH->GZ_SIM_PHYSICS_ENGINE_PATHIGN_GAZEBO_SYSTEM_PLUGIN_PATH->GZ_SIM_SYSTEM_PLUGIN_PATHIGN_DEBUG_COMPONENT_FACTORY->GZ_DEBUG_COMPONENT_FACTORYIGN_GAZEBO_RESOURCE_PATH->GZ_SIM_RESOURCE_PATHIGN_GAZEBO_SERVER_CONFIG_PATH->GZ_SIM_SERVER_CONFIG_PATH
-
The following
IGN_GAZEBO_prefixed macros variables are deprecated and will be removed in future versions. Use theGZ_SIM_prefixed versions instead!IGN_GAZEBO_REGISTER_COMPONENTIGN_GAZEBO_PLUGIN_INSTALL_DIRIGN_GAZEBO_GUI_PLUGIN_INSTALL_DIRIGN_GAZEBO_WORLD_INSTALL_DIR
-
The
gazebocommand line verb is deprecated. Usesiminstead (e.g.ign gazebo->gz sim). -
The shared libraries have
gzwhere there used to beignition.- Using the un-migrated version is still possible due to tick-tocks, but will be removed in future versions.
-
The WorldStatistics message published on the 'stats' topic now has a
steppingfield that should be used in place the 'step' field in the message's header. -
Breaking Changes
-
The project name has been changed to use the
gz-prefix, you must use thegzprefix!- This also means that any generated code that use the project name (e.g. CMake variables, in-source macros) would have to be migrated.
- Some non-exhaustive examples of this include:
GZ_<PROJECT>_<VISIBLE/HIDDEN>- CMake
-configfiles - Paths that depend on the project name
-
The
Scene3Dplugin has been removed and replaced withgz-gui'sMinimalSceneplugin. See this same document for the instructions to replace it when it was deprecated 5.x to 6.x. Setting<legacy>false</legacy>is no longer required forTransformControlandViewAndleplugins.
-
-
Python library imports such
import ignition.gazeboandfrom ignition import gazeboshould be replaced withimport gz.sim7andfrom gz import sim7. Note the change fromignitiontogzand the addition of the major version number as a suffix to the package name.
- Modified:
- In the Hydrodynamics plugin, inverted the added mass contribution to make it act in the correct direction.
- Modified:
- In the Hydrodynamics plugin, inverted the added mass contribution to make it act in the correct direction.
- If no
<namespace>is given to theThrusterplugin, the namespace now defaults to the model name, instead of an empty string.
-
The ParticleEmitter system is deprecated. Please use the ParticleEmitter2 system.
-
Marker example has been moved to Gazebo GUI.
-
Some GUI plugins have been moved to Gazebo GUI. Gazebo Sim users don't need to change their configuration files, the plugins will be loaded the same way.
- Grid Config
- Tape Measure
-
dynamic_pose/infotopic is removed fromLogRecordandLogPlaybacksince pose information is being logged in thechanged_statetopic. -
The internal management of entities and components in the
EntityComponentManagerhas been updated to improve runtime performance. As a result, several methods have been deprecated, and a few types have changed.- Deprecated:
- All
EntityComponentManagermethods that useComponentKeyas an input parameter. - The
EntityComponentManager::Firstmethod. - The
ComponentIdandComponentKeytypes are now deprecated. A combination ofEntityandComponentTypeIdshould be used instead. - The
components::StorageDescriptorBaseandcomponents::StorageDescriptor<ComponentTypeT>classes. - Methods in
components::Factorythat have deprecated input parameter types and/or deprecated return types.- The version of
components::Factory::Registerwhich has aStorageDescriptorBase *input parameter. components::Factory::NewStorage
- The version of
- The
ComponentStorageBaseandComponentStorage<ComponentTypeT>classes.
- All
- Modified:
EntityComponentManager::CreateComponentnow returns a pointer to the created component instead of aComponentKey.ComponentKeyhas been modified to be astd::pair<ComponentTypeId, Entity>(it used to be astd::pair<ComponentTypeId, ComponentId>) since theComponentIdtype is now deprecated.ComponentKeyhas also been deprecated, so usage of this type is discouraged (see the Deprecated section above for more information about how to replace usage ofComponentKey).
- Deprecated:
-
The
GzScene3DGUI plugin is being deprecated in favor ofMinimalScene. In order to get the same functionality asGzScene3D, users need to add the following plugins:MinimalScene: base rendering functionalityGzSceneManager: adds / removes / moves entities in the sceneEntityContextMenuPlugin: right-click menuInteractiveViewControl: orbit controlsCameraTracking: Move to, follow, set camera poseMarkerManager: Enables the use of markersSelectEntities: Select entities clicking on the sceneSpawn: Functionality to spawn entities into the scene via GUIVisualizationCapabilities: View collisions, inertial, CoM, joints, etc.
SDF code for all these can be found in:
gz-sim/examples/worlds/minimal_scene.sdf
Lines 29 to 128 in ff1c82b
Moreover, legacy mode needs to be turned off for the following plugins for them to work with
MinimalScene(set<legacy>false</legacy>):TransformControl: Translate and rotateViewAndle: Move camera to preset angles
-
The
gui.configandserver.configfiles are now located in a versioned folder inside$HOME/.gz/sim, i.e.$HOME/.gz/sim/6/gui.config. -
The
Component::Clonemethod has been markedconstto reflect that it should not mutate internal component state. Component implementations that overrode theClonemethod must also be markedconst.
- If no
<namespace>is given to theThrusterplugin, the namespace now defaults to the model name, instead of an empty string.
-
Use
clicomponent ofgz-utils1. -
gz::sim::RenderUtil::SelectedEntities()now returns aconst std::vector<Entity> &instead of forcing a copy. The calling code should create a copy if it needs to modify the vector in some way. -
Default generated topic name for thermal cameras now includes the
/imagesuffix. Thecamera_infotopic has also been fixed to include the sensor name in the generated topic string. The naming scheme should be consistent with a normal camera sensor. Topic changes:/<prefix>/<sensor_name>->/<prefix>/<sensor_name>/image/<prefix>/camera_info->/<prefix>/<sensor_name>/camera_info
-
Various
GuiEvents were deprecated in favor of their Gazebo GUI equivalents.- Deprecated
gz::sim::gui::SnapIntervals - Replacement
gz::gui::SnapIntervals - Deprecated
gz::sim::gui::Render - Replacement
gz::gui::Render - Deprecated
gz::sim::gui::SpawnPreviewModel - Replacement
gz::gui::SpawnFromDescription - Deprecated
gz::sim::gui::SnapPreviewPath - Replacement
gz::gui::SnapFromPath
- Deprecated
-
The
<direction>tag of spot lights was previously not parsed by the scene, so all spot lights shone in the direction corresponding to the default0 0 -1. Since 5.x, the<direction>tag is correctly processed.
- Gazebo Sim 4.0.0 enabled double sided material by default but this
caused shadow artifacts to appear on some meshes. Double sided material is
now disabled and made an opt-in feature. Users can configure this property
in SDF by setting the
<visual><material><double_sided>SDF element.
-
The
RenderUtil::SetEnabledSensorscallback in gazebo rendering has a new required function argument for the Entity of the sensor.- Removed
public: void SetEnableSensors(bool, std::function< std::string(const sdf::Sensor &, const std::string &)>) - Replacement
public: void SetEnableSensors(bool, std::function< std::string(const sim::Entity &, const sdf::Sensor &, const std::string &)>)
- Removed
-
Log playback using
<path>SDF parameter is removed. Use --playback command line argument instead. -
rendering::SceneManager- Deprecated:
Entity EntityFromNode(const rendering::NodePtr &_node) const; - Replacement:
Entity entity = std::get<int>(visual->UserData("gazebo-entity"));
- Deprecated:
- Some sensors will only have the
SensorTopiccomponent after the 1st iteration.
- Use gz-rendering3, gz-sensors3 and gz-gui3.
-
Changed component data types:
Altimeternow usessdf::SensorJointVelocitynow usesstd::vector<double>
-
Deprecated components:
JointVelocity2: useJointVelocity's vector instead.
-
The
--distributedcommand line argument has been deprecated. Use--network-roleinstead. -
The
-f/--filecommand line argument has been deprecated. The SDF file can now be loaded without a flag. -
The
gz-simcommand line tool is deprecated. The new tool isgz sim, which has all the same options, except for--distributedand--file/-f, which have been removed. -
The
entity_namefield in the messages published by the imu system is updated to report its scoped name. -
Log files generated from Gazebo Sim 1.X are no longer compatible with Gazebo Sim 2+ for playback. BitBucket pull request #257 added an SDF message to the start of log files.
-
Log playback using
<path>SDF parameter is deprecated. Use--playbackcommand line argument instead.
-
All headers in
gazebo/networkare no longer installed. -
The ignition-gazebo1-gui library has been changed to a
guicomponent of ignition-gazebo. To use the gui component downstream, update the find package call in cmake to request for the component, e.g.gz_find_package(ignition-gazebo1 REQUIRED COMPONENTS gui), and link to thelibgz-sim1::guitarget instead oflibgz-sim1-gui