diff --git a/.github/ci/packages.apt b/.github/ci/packages.apt
index d834a78a77e..4a15aa2ddf6 100644
--- a/.github/ci/packages.apt
+++ b/.github/ci/packages.apt
@@ -3,22 +3,22 @@ libfreeimage-dev
libglew-dev
libignition-cmake2-dev
libignition-common4-dev
-libignition-gui5-dev
-libignition-fuel-tools6-dev
+libignition-gui6-dev
+libignition-fuel-tools7-dev
libignition-math6-eigen3-dev
-libignition-msgs7-dev
-libignition-physics4-dev
+libignition-msgs8-dev
+libignition-physics5-dev
libignition-plugin-dev
-libignition-rendering5-dev
-libignition-sensors5-dev
+libignition-rendering6-dev
+libignition-sensors6-dev
libignition-tools-dev
-libignition-transport10-dev
+libignition-transport11-dev
libignition-utils1-cli-dev
libogre-1.9-dev
libogre-2.1-dev
libprotobuf-dev
libprotoc-dev
-libsdformat11-dev
+libsdformat12-dev
libtinyxml2-dev
libxi-dev
libxmu-dev
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a0b0d3df539..94162ecd4ab 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
#============================================================================
# Initialize the project
#============================================================================
-project(ignition-gazebo5 VERSION 5.1.0)
+project(ignition-gazebo6 VERSION 6.2.0)
#============================================================================
# Find ignition-cmake
@@ -34,18 +34,24 @@ else()
set (EXTRA_TEST_LIB_DEPS)
endif()
+include(test/find_dri.cmake)
+FindDRI()
+
#============================================================================
# Search for project-specific dependencies
#============================================================================
+# Setting this policy enables using the protobuf_MODULE_COMPATIBLE
+# set command in CMake versions older than 13.13
+set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
# This option is needed to use the PROTOBUF_GENERATE_CPP
# in case protobuf is found with the CMake config files
# It needs to be set before any find_package(...) call
# as protobuf could be find transitively by any dependency
set(protobuf_MODULE_COMPATIBLE TRUE)
-ign_find_package(sdformat11 REQUIRED VERSION 11.2.1)
-set(SDF_VER ${sdformat11_VERSION_MAJOR})
+ign_find_package(sdformat12 REQUIRED)
+set(SDF_VER ${sdformat12_VERSION_MAJOR})
#--------------------------------------
# Find ignition-plugin
@@ -54,18 +60,18 @@ set(IGN_PLUGIN_VER ${ignition-plugin1_VERSION_MAJOR})
#--------------------------------------
# Find ignition-transport
-ign_find_package(ignition-transport10 REQUIRED COMPONENTS log)
-set(IGN_TRANSPORT_VER ${ignition-transport10_VERSION_MAJOR})
+ign_find_package(ignition-transport11 REQUIRED COMPONENTS log)
+set(IGN_TRANSPORT_VER ${ignition-transport11_VERSION_MAJOR})
#--------------------------------------
# Find ignition-msgs
-ign_find_package(ignition-msgs7 REQUIRED VERSION 7.1)
-set(IGN_MSGS_VER ${ignition-msgs7_VERSION_MAJOR})
+ign_find_package(ignition-msgs8 REQUIRED)
+set(IGN_MSGS_VER ${ignition-msgs8_VERSION_MAJOR})
#--------------------------------------
# Find ignition-common
# Always use the profiler component to get the headers, regardless of status.
-ign_find_package(ignition-common4 VERSION 4.2
+ign_find_package(ignition-common4 VERSION 4.4
COMPONENTS
profiler
events
@@ -76,13 +82,13 @@ set(IGN_COMMON_VER ${ignition-common4_VERSION_MAJOR})
#--------------------------------------
# Find ignition-fuel_tools
-ign_find_package(ignition-fuel_tools6 REQUIRED)
-set(IGN_FUEL_TOOLS_VER ${ignition-fuel_tools6_VERSION_MAJOR})
+ign_find_package(ignition-fuel_tools7 REQUIRED)
+set(IGN_FUEL_TOOLS_VER ${ignition-fuel_tools7_VERSION_MAJOR})
#--------------------------------------
# Find ignition-gui
-ign_find_package(ignition-gui5 REQUIRED VERSION 5.2)
-set(IGN_GUI_VER ${ignition-gui5_VERSION_MAJOR})
+ign_find_package(ignition-gui6 REQUIRED VERSION 6.1)
+set(IGN_GUI_VER ${ignition-gui6_VERSION_MAJOR})
ign_find_package (Qt5
COMPONENTS
Core
@@ -93,40 +99,50 @@ ign_find_package (Qt5
#--------------------------------------
# Find ignition-physics
-ign_find_package(ignition-physics4
+ign_find_package(ignition-physics5 VERSION 5.1
COMPONENTS
heightmap
mesh
sdf
REQUIRED
)
-set(IGN_PHYSICS_VER ${ignition-physics4_VERSION_MAJOR})
+set(IGN_PHYSICS_VER ${ignition-physics5_VERSION_MAJOR})
#--------------------------------------
# Find ignition-sensors
-ign_find_package(ignition-sensors5 REQUIRED
+ign_find_package(ignition-sensors6 REQUIRED
+ # component order is important
COMPONENTS
- rendering
+ # non-rendering
air_pressure
altimeter
- camera
- gpu_lidar
imu
+ force_torque
logical_camera
magnetometer
+
+ # rendering
+ rendering
+ lidar
+ gpu_lidar
+
+ # cameras
+ camera
+ segmentation_camera
depth_camera
+ rgbd_camera
thermal_camera
)
-set(IGN_SENSORS_VER ${ignition-sensors5_VERSION_MAJOR})
+set(IGN_SENSORS_VER ${ignition-sensors6_VERSION_MAJOR})
#--------------------------------------
# Find ignition-rendering
-ign_find_package(ignition-rendering5 REQUIRED VERSION 5.1)
-set(IGN_RENDERING_VER ${ignition-rendering5_VERSION_MAJOR})
+ign_find_package(ignition-rendering6 REQUIRED)
+set(IGN_RENDERING_VER ${ignition-rendering6_VERSION_MAJOR})
#--------------------------------------
# Find ignition-math
-ign_find_package(ignition-math6 REQUIRED COMPONENTS eigen3 VERSION 6.8)
+ign_find_package(ignition-math6 REQUIRED COMPONENTS eigen3 VERSION 6.9)
set(IGN_MATH_VER ${ignition-math6_VERSION_MAJOR})
#--------------------------------------
@@ -148,7 +164,7 @@ ign_find_package(IgnProtobuf
REQUIRED
COMPONENTS all
PRETTY Protobuf)
-set(Protobuf_IMPORT_DIRS ${ignition-msgs7_INCLUDE_DIRS})
+set(Protobuf_IMPORT_DIRS ${ignition-msgs8_INCLUDE_DIRS})
# Plugin install dirs
set(IGNITION_GAZEBO_PLUGIN_INSTALL_DIR
diff --git a/Changelog.md b/Changelog.md
index 185e3abcf13..b4a2011901b 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,6 +1,619 @@
+## Ignition Gazebo 6.x
+
+### Ignition Gazebo 6.X.X (202X-XX-XX)
+
+### Ignition Gazebo 6.2.0 (2021-11-16)
+
+1. Configurable joint state publisher's topic
+ * [Pull request #1076](https://github.com/ignitionrobotics/ign-gazebo/pull/1076)
+
+1. Thruster plugin: add tests and velocity control
+ * [Pull request #1190](https://github.com/ignitionrobotics/ign-gazebo/pull/1190)
+
+1. Prevent creation of spurious `` elements when saving worlds
+ * [Pull request #1192](https://github.com/ignitionrobotics/ign-gazebo/pull/1192)
+
+1. Add `sdfString` to `ServerConfig`'s copy constructor.
+ * [Pull request #1185](https://github.com/ignitionrobotics/ign-gazebo/pull/1185)
+
+1. Added support for tracked vehicles
+ * [Pull request #869](https://github.com/ignitionrobotics/ign-gazebo/pull/869)
+
+1. Add components to dynamically set joint limits
+ * [Pull request #847](https://github.com/ignitionrobotics/ign-gazebo/pull/847)
+
+1. Remove bounding box when entities are removed
+ * [Pull request #1053](https://github.com/ignitionrobotics/ign-gazebo/pull/1053)
+ * [Pull request #1213](https://github.com/ignitionrobotics/ign-gazebo/pull/1213)
+
+1. Fix updating component from state
+ * [Pull request #1181](https://github.com/ignitionrobotics/ign-gazebo/pull/1181)
+
+1. Extend odom publisher to allow 3D
+ * [Pull request #1180](https://github.com/ignitionrobotics/ign-gazebo/pull/1180)
+
+1. Support copy/paste
+ * [Pull request #1013](https://github.com/ignitionrobotics/ign-gazebo/pull/1013)
+
+1. Tweaks install instructions
+ * [Pull request #1078](https://github.com/ignitionrobotics/ign-gazebo/pull/1078)
+
+1. Publish 10 world stats msgs/sec instead of 5
+ * [Pull request #1163](https://github.com/ignitionrobotics/ign-gazebo/pull/1163)
+
+1. Add functionality to add entities via the entity tree
+ * [Pull request #1101](https://github.com/ignitionrobotics/ign-gazebo/pull/1101)
+
+1. Get updated GUI ECM info when a user presses 'play'
+ * [Pull request #1109](https://github.com/ignitionrobotics/ign-gazebo/pull/1109)
+
+1. Create expanding type header to reduce code duplication
+ * [Pull request #1169](https://github.com/ignitionrobotics/ign-gazebo/pull/1169)
+
+1. `minimal_scene.sdf` example: add `camera_clip` params
+ * [Pull request #1166](https://github.com/ignitionrobotics/ign-gazebo/pull/1166)
+
+1. Sensor systems work if loaded after sensors
+ * [Pull request #1104](https://github.com/ignitionrobotics/ign-gazebo/pull/1104)
+
+1. Support printing sensors using `ign model`
+ * [Pull request #1157](https://github.com/ignitionrobotics/ign-gazebo/pull/1157)
+
+1. Set camera clipping plane distances from the GUI
+ * [Pull request #1162](https://github.com/ignitionrobotics/ign-gazebo/pull/1162)
+
+1. Fix generation of systems library symlinks in build directory
+ * [Pull request #1160](https://github.com/ignitionrobotics/ign-gazebo/pull/1160)
+
+1. Add a default value for `isHeadlessRendering`.
+ * [Pull request #1151](https://github.com/ignitionrobotics/ign-gazebo/pull/1151)
+
+1. Component inspector
+
+ 1. Edit material colors
+ * [Pull request #1123](https://github.com/ignitionrobotics/ign-gazebo/pull/1123)
+ * [Pull request #1186](https://github.com/ignitionrobotics/ign-gazebo/pull/1186)
+
+ 1. Fix integers and floats
+ * [Pull request #1143](https://github.com/ignitionrobotics/ign-gazebo/pull/1143)
+
+ 1. Prevent a segfault when updating
+ * [Pull request #1167](https://github.com/ignitionrobotics/ign-gazebo/pull/1167)
+
+ 1. Use `uint64_t` for Entity IDs
+ * [Pull request #1144](https://github.com/ignitionrobotics/ign-gazebo/pull/1144)
+
+1. Support setting the background color for sensors
+ * [Pull request #1147](https://github.com/ignitionrobotics/ign-gazebo/pull/1147)
+
+1. Select top level entity not visual
+ * [Pull request #1150](https://github.com/ignitionrobotics/ign-gazebo/pull/1150)
+
+1. Update create entity offset on GUI side
+ * [Pull request #1145](https://github.com/ignitionrobotics/ign-gazebo/pull/1145)
+
+1. Update Select Entities GUI plugin to use Entity type
+ * [Pull request #1146](https://github.com/ignitionrobotics/ign-gazebo/pull/1146)
+
+1. Notify other GUI plugins of added/removed entities via GUI events
+ * [Pull request #1138](https://github.com/ignitionrobotics/ign-gazebo/pull/1138)
+ * [Pull request #1213](https://github.com/ignitionrobotics/ign-gazebo/pull/1213)
+
+### Ignition Gazebo 6.1.0 (2021-10-25)
+
+1. Updates to camera video record from subt
+ * [Pull request #1117](https://github.com/ignitionrobotics/ign-gazebo/pull/1117)
+
+1. Use the actor tension parameter
+ * [Pull request #1091](https://github.com/ignitionrobotics/ign-gazebo/pull/1091)
+
+1. Better protect this->dataPtr->initialized with renderMutex.
+ * [Pull request #1119](https://github.com/ignitionrobotics/ign-gazebo/pull/1119)
+
+1. Use QTimer to update plugins in the Qt thread
+ * [Pull request #1095](https://github.com/ignitionrobotics/ign-gazebo/pull/1095)
+
+1. Adjust pose decimals based on element width
+ * [Pull request #1089](https://github.com/ignitionrobotics/ign-gazebo/pull/1089)
+
+1. JointPositionController: Improve misleading error message
+ * [Pull request #1098](https://github.com/ignitionrobotics/ign-gazebo/pull/1098)
+
+1. Fixed IMU system plugin
+ * [Pull request #1043](https://github.com/ignitionrobotics/ign-gazebo/pull/1043)
+
+1. Prevent crash and print error
+ * [Pull request #1099](https://github.com/ignitionrobotics/ign-gazebo/pull/1099)
+
+1. Create GUI config folder before copying config
+ * [Pull request #1092](https://github.com/ignitionrobotics/ign-gazebo/pull/1092)
+
+1. Add support for configuring point size in Visualize Lidar GUI plugin
+ * [Pull request #1021](https://github.com/ignitionrobotics/ign-gazebo/pull/1021)
+
+1. Set a cloned joint's parent/child link names to the cloned parent/child link names
+ * [Pull request #1075](https://github.com/ignitionrobotics/ign-gazebo/pull/1075)
+
+1. Performance: use std::unordered_map where possible in SceneManager
+ * [Pull request #1083](https://github.com/ignitionrobotics/ign-gazebo/pull/1083)
+
+1. Fix transform controls
+ * [Pull request #1081](https://github.com/ignitionrobotics/ign-gazebo/pull/1081)
+
+1. Fix View Angle's home button
+ * [Pull request #1082](https://github.com/ignitionrobotics/ign-gazebo/pull/1082)
+
+1. Fix light control standalone example
+ * [Pull request #1077](https://github.com/ignitionrobotics/ign-gazebo/pull/1077)
+
+1. Parse new param for enabling / disabling IMU orientation output
+ * [Pull request #899](https://github.com/ignitionrobotics/ign-gazebo/pull/899)
+
+### Ignition Gazebo 6.0.0 (2021-10-01)
+
+1. Deprecated GzScene3D in favor of MinimalScene
+ * [Pull request #1065](https://github.com/ignitionrobotics/ign-gazebo/pull/1065)
+ * [Pull request #1051](https://github.com/ignitionrobotics/ign-gazebo/pull/1051)
+ * [Pull request #1014](https://github.com/ignitionrobotics/ign-gazebo/pull/1014)
+ * [Pull request #1034](https://github.com/ignitionrobotics/ign-gazebo/pull/1034)
+ * [Pull request #900](https://github.com/ignitionrobotics/ign-gazebo/pull/900)
+ * [Pull request #988](https://github.com/ignitionrobotics/ign-gazebo/pull/988)
+ * [Pull request #1016](https://github.com/ignitionrobotics/ign-gazebo/pull/1016)
+ * [Pull request #983](https://github.com/ignitionrobotics/ign-gazebo/pull/983)
+ * [Pull request #854](https://github.com/ignitionrobotics/ign-gazebo/pull/854)
+ * [Pull request #813](https://github.com/ignitionrobotics/ign-gazebo/pull/813)
+ * [Pull request #905](https://github.com/ignitionrobotics/ign-gazebo/pull/905)
+
+1. Fix GuiRunner initial state and entity spawn timing issue
+ * [Pull request #1073](https://github.com/ignitionrobotics/ign-gazebo/pull/1073)
+
+1. Buoyancy plugin upgrade
+ * [Pull request #818](https://github.com/ignitionrobotics/ign-gazebo/pull/818)
+ * [Pull request #1067](https://github.com/ignitionrobotics/ign-gazebo/pull/1067)
+ * [Pull request #1064](https://github.com/ignitionrobotics/ign-gazebo/pull/1064)
+
+1. Fix non desired window opening alongside ignition GUI
+ * [Pull request #1063](https://github.com/ignitionrobotics/ign-gazebo/pull/1063)
+
+1. Documentation
+ * [Pull request #1074](https://github.com/ignitionrobotics/ign-gazebo/pull/1074)
+ * [Pull request #996](https://github.com/ignitionrobotics/ign-gazebo/pull/996)
+
+1. Update to latest SDFormat changes
+ * [Pull request #1069](https://github.com/ignitionrobotics/ign-gazebo/pull/1069)
+ * [Pull request #1023](https://github.com/ignitionrobotics/ign-gazebo/pull/1023)
+
+1. Suppress missing canonical link error messages for static models
+ * [Pull request #1068](https://github.com/ignitionrobotics/ign-gazebo/pull/1068)
+
+1. Heightmap fixes
+ * [Pull request #1055](https://github.com/ignitionrobotics/ign-gazebo/pull/1055)
+ * [Pull request #1054](https://github.com/ignitionrobotics/ign-gazebo/pull/1054)
+
+1. Place config files in a versioned directory
+ * [Pull request #1050](https://github.com/ignitionrobotics/ign-gazebo/pull/1050)
+ * [Pull request #1070](https://github.com/ignitionrobotics/ign-gazebo/pull/1070)
+
+1. Fix GUI crash when accessing bad rendering UserData
+ * [Pull request #1052](https://github.com/ignitionrobotics/ign-gazebo/pull/1052)
+
+1. Fix performance issue with contact data and AABB updates
+ * [Pull request #1048](https://github.com/ignitionrobotics/ign-gazebo/pull/1048)
+
+1. Enable new policy to fix protobuf compilation errors
+ * [Pull request #1046](https://github.com/ignitionrobotics/ign-gazebo/pull/1046)
+
+1. Support locked entities, and headless video recording using sim time
+ * [Pull request #862](https://github.com/ignitionrobotics/ign-gazebo/pull/862)
+
+1. Label Component & System, segmentation camera support
+ * [Pull request #853](https://github.com/ignitionrobotics/ign-gazebo/pull/853)
+ * [Pull request #1047](https://github.com/ignitionrobotics/ign-gazebo/pull/1047)
+
+1. Joint Force-Torque Systems Plugin
+ * [Pull request #977](https://github.com/ignitionrobotics/ign-gazebo/pull/977)
+
+1. Add support for cloning entities
+ * [Pull request #959](https://github.com/ignitionrobotics/ign-gazebo/pull/959)
+
+1. 🌐 Spherical coordinates
+ * [Pull request #1008](https://github.com/ignitionrobotics/ign-gazebo/pull/1008)
+
+1. Populate JointConstraintWrench from physics
+ * [Pull request #989](https://github.com/ignitionrobotics/ign-gazebo/pull/989)
+
+1. Buoyancy engine
+ * [Pull request #1009](https://github.com/ignitionrobotics/ign-gazebo/pull/1009)
+
+1. Infrastructure
+ * [Pull request #1033](https://github.com/ignitionrobotics/ign-gazebo/pull/1033)
+ * [Pull request #1029](https://github.com/ignitionrobotics/ign-gazebo/pull/1029)
+ * [Pull request #991](https://github.com/ignitionrobotics/ign-gazebo/pull/991)
+ * [Pull request #809](https://github.com/ignitionrobotics/ign-gazebo/pull/809)
+
+1. Update on resize instead of pre-render / render
+ * [Pull request #1028](https://github.com/ignitionrobotics/ign-gazebo/pull/1028)
+
+1. Add a flag to force headless rendering mode
+ * [Pull request #701](https://github.com/ignitionrobotics/ign-gazebo/pull/701)
+
+1. Remove unused ignition gui header
+ * [Pull request #1026](https://github.com/ignitionrobotics/ign-gazebo/pull/1026)
+
+1. Adds velocity control to JointPositionController.
+ * [Pull request #1003](https://github.com/ignitionrobotics/ign-gazebo/pull/1003)
+
+1. Collada world exporter now exporting lights
+ * [Pull request #912](https://github.com/ignitionrobotics/ign-gazebo/pull/912)
+
+1. Workaround for setting visual cast shadows without material
+ * [Pull request #1015](https://github.com/ignitionrobotics/ign-gazebo/pull/1015)
+
+1. Fix selection buffer crash on resize
+ * [Pull request #969](https://github.com/ignitionrobotics/ign-gazebo/pull/969)
+
+1. Remove extra xml version line in pendulum_links example world
+ * [Pull request #1002](https://github.com/ignitionrobotics/ign-gazebo/pull/1002)
+
+1. Enable sensor metrics on example worlds
+ * [Pull request #982](https://github.com/ignitionrobotics/ign-gazebo/pull/982)
+
+1. Add ESC to unselect entities in select entities plugin
+ * [Pull request #995](https://github.com/ignitionrobotics/ign-gazebo/pull/995)
+
+1. Visualize joints
+ * [Pull request #961](https://github.com/ignitionrobotics/ign-gazebo/pull/961)
+
+1. Deprecate particle emitter, and use scatter ratio in new particle mes…
+ * [Pull request #986](https://github.com/ignitionrobotics/ign-gazebo/pull/986)
+
+1. Removed unused variable in Shapes plugin
+ * [Pull request #984](https://github.com/ignitionrobotics/ign-gazebo/pull/984)
+
+1. Use root.Model()
+ * [Pull request #980](https://github.com/ignitionrobotics/ign-gazebo/pull/980)
+
+1. Add ModelSDF serializer
+ * [Pull request #851](https://github.com/ignitionrobotics/ign-gazebo/pull/851)
+
+1. Entity tree: prevent creation of repeated entity items
+ * [Pull request #974](https://github.com/ignitionrobotics/ign-gazebo/pull/974)
+
+1. Use statically-typed views for better performance
+ * [Pull request #856](https://github.com/ignitionrobotics/ign-gazebo/pull/856)
+ * [Pull request #1001](https://github.com/ignitionrobotics/ign-gazebo/pull/1001)
+
+1. Upgrade ign-sensors and support custom sensors
+ * [Pull request #617](https://github.com/ignitionrobotics/ign-gazebo/pull/617)
+
+1. Fix entity creation console msg
+ * [Pull request #972](https://github.com/ignitionrobotics/ign-gazebo/pull/972)
+
+1. Fix crash in the follow_actor example
+ * [Pull request #958](https://github.com/ignitionrobotics/ign-gazebo/pull/958)
+
+1. Removed pose topic from log system
+ * [Pull request #839](https://github.com/ignitionrobotics/ign-gazebo/pull/839)
+
+1. Be more specific when looking for physics plugins
+ * [Pull request #965](https://github.com/ignitionrobotics/ign-gazebo/pull/965)
+
+1. Complaint if Joint doesn't exists before adding joint controller
+ * [Pull request #786](https://github.com/ignitionrobotics/ign-gazebo/pull/786)
+
+1. [DiffDrive] add enable/disable
+ * [Pull request #772](https://github.com/ignitionrobotics/ign-gazebo/pull/772)
+
+1. Fix component inspector shutdown crash
+ * [Pull request #724](https://github.com/ignitionrobotics/ign-gazebo/pull/724)
+
+1. Setting the intiial velocity for a model or joint
+ * [Pull request #693](https://github.com/ignitionrobotics/ign-gazebo/pull/693)
+
+1. Examples and tutorial on using rendering API from plugins
+ * [Pull request #596](https://github.com/ignitionrobotics/ign-gazebo/pull/596)
+
+1. Add missing IGNITION_GAZEBO_VISIBLE macros
+ * [Pull request #563](https://github.com/ignitionrobotics/ign-gazebo/pull/563)
+
+1. Fix visibility macro names when used by a different component (Windows)
+ * [Pull request #564](https://github.com/ignitionrobotics/ign-gazebo/pull/564)
+
+1. No install apt recommends and clear cache
+ * [Pull request #423](https://github.com/ignitionrobotics/ign-gazebo/pull/423)
+
+1. Support adding systems that don't come from a plugin
+ * [Pull request #936](https://github.com/ignitionrobotics/ign-gazebo/pull/936)
+
+1. Fix tests that use multiple root level models or lights
+ * [Pull request #931](https://github.com/ignitionrobotics/ign-gazebo/pull/931)
+
+1. Make Gazebo aware of SetCameraPassCountPerGpuFlush
+ * [Pull request #921](https://github.com/ignitionrobotics/ign-gazebo/pull/921)
+
+1. Visualize center of mass
+ * [Pull request #903](https://github.com/ignitionrobotics/ign-gazebo/pull/903)
+
+1. Transparent mode
+ * [Pull request #878](https://github.com/ignitionrobotics/ign-gazebo/pull/878)
+
+1. Visualize inertia
+ * [Pull request #861](https://github.com/ignitionrobotics/ign-gazebo/pull/861)
+
+1. Remove deprecations: tock 🕑
+ * [Pull request #875](https://github.com/ignitionrobotics/ign-gazebo/pull/875)
+
+1. Removed and moved tape measure and grid config to ign-gui
+ * [Pull request #870](https://github.com/ignitionrobotics/ign-gazebo/pull/870)
+
+1. Update wireframe visualization to support nested models
+ * [Pull request #832](https://github.com/ignitionrobotics/ign-gazebo/pull/832)
+
+1. Multi-LRAUV Swimming Race Example
+ * [Pull request #841](https://github.com/ignitionrobotics/ign-gazebo/pull/841)
+
+1. Add view control gui plugin and support orthographic view
+ * [Pull request #815](https://github.com/ignitionrobotics/ign-gazebo/pull/815)
+
+1. Wireframe mode
+ * [Pull request #816](https://github.com/ignitionrobotics/ign-gazebo/pull/816)
+
+1. Explain why detail::View symbols are visible
+ * [Pull request #788](https://github.com/ignitionrobotics/ign-gazebo/pull/788)
+
+1. Bump dependencies in fortress
+ * [Pull request #764](https://github.com/ignitionrobotics/ign-gazebo/pull/764)
+
## Ignition Gazebo 5.x
-### Ignition Gazebo 5.X.X (20XX-XX-XX)
+### Ignition Gazebo 5.X.X (202X-XX-XX)
+
+### Ignition Gazebo 5.3.0 (2021-11-12)
+
+1. Prevent creation of spurious elements when saving worlds
+ * [Pull request #1192](https://github.com/ignitionrobotics/ign-gazebo/pull/1192)
+
+1. Added support for tracked vehicles
+ * [Pull request #869](https://github.com/ignitionrobotics/ign-gazebo/pull/869)
+
+1. Add components to dynamically set joint limits
+ * [Pull request #847](https://github.com/ignitionrobotics/ign-gazebo/pull/847)
+
+1. Fix updating component from state
+ * [Pull request #1181](https://github.com/ignitionrobotics/ign-gazebo/pull/1181)
+
+1. Extend odom publisher to allow 3D
+ * [Pull request #1180](https://github.com/ignitionrobotics/ign-gazebo/pull/1180)
+
+1. Fix updating a component's data via SerializedState msg
+ * [Pull request #1131](https://github.com/ignitionrobotics/ign-gazebo/pull/1131)
+
+1. Sensor systems work if loaded after sensors
+ * [Pull request #1104](https://github.com/ignitionrobotics/ign-gazebo/pull/1104)
+
+1. Fix generation of systems library symlinks in build directory
+ * [Pull request #1160](https://github.com/ignitionrobotics/ign-gazebo/pull/1160)
+
+1. Edit material colors in component inspector
+ * [Pull request #1123](https://github.com/ignitionrobotics/ign-gazebo/pull/1123)
+
+1. Support setting the background color for sensors
+ * [Pull request #1147](https://github.com/ignitionrobotics/ign-gazebo/pull/1147)
+
+1. Use `uint64_t` for ComponentInspector Entity IDs
+ * [Pull request #1144](https://github.com/ignitionrobotics/ign-gazebo/pull/1144)
+
+1. Fix integers and floats on component inspector
+ * [Pull request #1143](https://github.com/ignitionrobotics/ign-gazebo/pull/1143)
+
+### Ignition Gazebo 5.2.0 (2021-10-22)
+
+1. Fix performance level test flakiness
+ * [Pull request #1129](https://github.com/ignitionrobotics/ign-gazebo/pull/1129)
+
+1. Updates to camera video record from subt
+ * [Pull request #1117](https://github.com/ignitionrobotics/ign-gazebo/pull/1117)
+
+1. Better protect this->dataPtr->initialized with renderMutex.
+ * [Pull request #1119](https://github.com/ignitionrobotics/ign-gazebo/pull/1119)
+
+1. Use QTimer to update plugins in the Qt thread
+ * [Pull request #1095](https://github.com/ignitionrobotics/ign-gazebo/pull/1095)
+
+1. Adjust pose decimals based on element width
+ * [Pull request #1089](https://github.com/ignitionrobotics/ign-gazebo/pull/1089)
+
+1. JointPositionController: Improve misleading error message
+ * [Pull request #1098](https://github.com/ignitionrobotics/ign-gazebo/pull/1098)
+
+1. Fixed IMU system plugin
+ * [Pull request #1043](https://github.com/ignitionrobotics/ign-gazebo/pull/1043)
+
+1. Cache top level and static to speed up physics system (Backport #656)
+ * [Pull request #993](https://github.com/ignitionrobotics/ign-gazebo/pull/993)
+
+1. Prevent crash and print error
+ * [Pull request #1099](https://github.com/ignitionrobotics/ign-gazebo/pull/1099)
+
+1. Performance: use std::unordered_map where possible in SceneManager
+ * [Pull request #1083](https://github.com/ignitionrobotics/ign-gazebo/pull/1083)
+
+1. Fix light control standalone example
+ * [Pull request #1077](https://github.com/ignitionrobotics/ign-gazebo/pull/1077)
+
+1. Parse new param for enabling / disabling IMU orientation output
+ * [Pull request #899](https://github.com/ignitionrobotics/ign-gazebo/pull/899)
+
+1. Enable new policy to fix protobuf compilation errors
+ * [Pull request #1059](https://github.com/ignitionrobotics/ign-gazebo/pull/1059)
+
+1. Fix performance issue with contact data and AABB updates
+ * [Pull request #1048](https://github.com/ignitionrobotics/ign-gazebo/pull/1048)
+
+1. Support locked entities, and headless video recording using sim time
+ * [Pull request #862](https://github.com/ignitionrobotics/ign-gazebo/pull/862)
+
+1. Update ign-gazebo4 changelog
+ * [Pull request #1031](https://github.com/ignitionrobotics/ign-gazebo/pull/1031)
+
+1. bump version and update changelog
+ * [Pull request #1029](https://github.com/ignitionrobotics/ign-gazebo/pull/1029)
+
+1. Remove unused ignition gui header
+ * [Pull request #1026](https://github.com/ignitionrobotics/ign-gazebo/pull/1026)
+
+1. Collada world exporter now exporting lights
+ * [Pull request #912](https://github.com/ignitionrobotics/ign-gazebo/pull/912)
+
+1. Fixed GUI's ComponentInspector light parameter
+ * [Pull request #1018](https://github.com/ignitionrobotics/ign-gazebo/pull/1018)
+
+1. Workaround for setting visual cast shadows without material
+ * [Pull request #1015](https://github.com/ignitionrobotics/ign-gazebo/pull/1015)
+
+1. Fix selection buffer crash on resize
+ * [Pull request #969](https://github.com/ignitionrobotics/ign-gazebo/pull/969)
+
+1. Update DART deps to local
+ * [Pull request #1005](https://github.com/ignitionrobotics/ign-gazebo/pull/1005)
+
+1. Remove extra xml version line in pendulum_links example world
+ * [Pull request #1002](https://github.com/ignitionrobotics/ign-gazebo/pull/1002)
+
+1. Enable sensor metrics on example worlds
+ * [Pull request #982](https://github.com/ignitionrobotics/ign-gazebo/pull/982)
+
+1. Make thermal sensor test more robust
+ * [Pull request #994](https://github.com/ignitionrobotics/ign-gazebo/pull/994)
+
+1. Improved doxygen
+ * [Pull request #996](https://github.com/ignitionrobotics/ign-gazebo/pull/996)
+
+1. Remove bitbucket-pipelines.yml
+ * [Pull request #991](https://github.com/ignitionrobotics/ign-gazebo/pull/991)
+
+1. Removed unused variable in Shapes plugin
+ * [Pull request #984](https://github.com/ignitionrobotics/ign-gazebo/pull/984)
+
+1. Entity tree: prevent creation of repeated entity items
+ * [Pull request #974](https://github.com/ignitionrobotics/ign-gazebo/pull/974)
+
+1. Updates when forward-porting to v4
+ * [Pull request #973](https://github.com/ignitionrobotics/ign-gazebo/pull/973)
+
+1. Don't use $HOME on most tests (InternalFixture)
+ * [Pull request #971](https://github.com/ignitionrobotics/ign-gazebo/pull/971)
+
+1. Fix entity creation console msg
+ * [Pull request #972](https://github.com/ignitionrobotics/ign-gazebo/pull/972)
+
+1. Fix crash in the follow_actor example
+ * [Pull request #958](https://github.com/ignitionrobotics/ign-gazebo/pull/958)
+
+1. Be more specific when looking for physics plugins
+ * [Pull request #965](https://github.com/ignitionrobotics/ign-gazebo/pull/965)
+
+1. Drag and drop meshes into scene
+ * [Pull request #939](https://github.com/ignitionrobotics/ign-gazebo/pull/939)
+
+1. Allow referencing links in nested models in LiftDrag
+ * [Pull request #955](https://github.com/ignitionrobotics/ign-gazebo/pull/955)
+
+1. Complaint if Joint doesn't exists before adding joint controller
+ * [Pull request #786](https://github.com/ignitionrobotics/ign-gazebo/pull/786)
+
+1. Set protobuf_MODULE_COMPATIBLE before any find_package call
+ * [Pull request #957](https://github.com/ignitionrobotics/ign-gazebo/pull/957)
+
+1. DiffDrive add enable/disable
+ * [Pull request #772](https://github.com/ignitionrobotics/ign-gazebo/pull/772)
+
+1. Fix component inspector shutdown crash
+ * [Pull request #724](https://github.com/ignitionrobotics/ign-gazebo/pull/724)
+
+1. Add UserCommands Plugin.
+ * [Pull request #719](https://github.com/ignitionrobotics/ign-gazebo/pull/719)
+
+1. Expose a test fixture helper class
+ * [Pull request #926](https://github.com/ignitionrobotics/ign-gazebo/pull/926)
+
+1. Fix logic to disable server default plugins loading
+ * [Pull request #953](https://github.com/ignitionrobotics/ign-gazebo/pull/953)
+
+1. Porting Dome to Edifice: Windows, deprecations
+ * [Pull request #948](https://github.com/ignitionrobotics/ign-gazebo/pull/948)
+
+1. removed unneeded plugin update
+ * [Pull request #944](https://github.com/ignitionrobotics/ign-gazebo/pull/944)
+
+1. Functions to enable velocity and acceleration checks on Link
+ * [Pull request #935](https://github.com/ignitionrobotics/ign-gazebo/pull/935)
+
+1. Support adding systems that don't come from a plugin
+ * [Pull request #936](https://github.com/ignitionrobotics/ign-gazebo/pull/936)
+
+1. 3D plot GUI plugin
+ * [Pull request #917](https://github.com/ignitionrobotics/ign-gazebo/pull/917)
+
+1. 4 to 5
+ * [Pull request #938](https://github.com/ignitionrobotics/ign-gazebo/pull/938)
+
+1. Fix joint controller without joint vel data
+ * [Pull request #937](https://github.com/ignitionrobotics/ign-gazebo/pull/937)
+
+1. 3 to 4
+ * [Pull request #933](https://github.com/ignitionrobotics/ign-gazebo/pull/933)
+
+1. Model info CLI `ign model`
+ * [Pull request #893](https://github.com/ignitionrobotics/ign-gazebo/pull/893)
+
+1. Support Bullet on Edifice
+ * [Pull request #919](https://github.com/ignitionrobotics/ign-gazebo/pull/919)
+
+1. Don't create components for entities that don't exist
+ * [Pull request #927](https://github.com/ignitionrobotics/ign-gazebo/pull/927)
+
+1. Fix blender sdf export script and remove .material file from collada light export test
+ * [Pull request #923](https://github.com/ignitionrobotics/ign-gazebo/pull/923)
+
+1. Heightmap physics (with DART)
+ * [Pull request #661](https://github.com/ignitionrobotics/ign-gazebo/pull/661)
+
+1. Adds Mesh Tutorial
+ * [Pull request #915](https://github.com/ignitionrobotics/ign-gazebo/pull/915)
+
+1. 4 to 5
+ * [Pull request #918](https://github.com/ignitionrobotics/ign-gazebo/pull/918)
+
+1. Fix updating GUI plugin on load
+ * [Pull request #904](https://github.com/ignitionrobotics/ign-gazebo/pull/904)
+
+1. 3 to 4
+ * [Pull request #916](https://github.com/ignitionrobotics/ign-gazebo/pull/916)
+
+1. Physics system: update link poses if the canonical link pose has been updated
+ * [Pull request #876](https://github.com/ignitionrobotics/ign-gazebo/pull/876)
+
+1. Add blender sdf export tutorial
+ * [Pull request #895](https://github.com/ignitionrobotics/ign-gazebo/pull/895)
+
+1. Banana for Scale
+ * [Pull request #734](https://github.com/ignitionrobotics/ign-gazebo/pull/734)
+
+1. Fix textures not exporting after loading a world that uses obj models
+ * [Pull request #874](https://github.com/ignitionrobotics/ign-gazebo/pull/874)
+
+1. Fix documentation for the Sensor component
+ * [Pull request #898](https://github.com/ignitionrobotics/ign-gazebo/pull/898)
+
+1. Make depth camera tests more robust
+ * [Pull request #897](https://github.com/ignitionrobotics/ign-gazebo/pull/897)
+
+1. Use UINT64_MAX for kComponentTpyeIDInvalid instead of relying on underflow
+ * [Pull request #889](https://github.com/ignitionrobotics/ign-gazebo/pull/889)
+
+1. Fix mouse view control target position
+ * [Pull request #879](https://github.com/ignitionrobotics/ign-gazebo/pull/879)
### Ignition Gazebo 5.1.0 (2021-06-29)
@@ -326,12 +939,47 @@
## Ignition Gazebo 4.x
-### Ignition Gazebo 4.11.x (2021-09-23)
+### Ignition Gazebo 4.12.0 (2021-10-22)
+
+1. Fix performance issue with contact data and AABB updates.
+ * [Pull Request 1048](https://github.com/ignitionrobotics/ign-gazebo/pull/1048)
+
+1. Enable new CMake policy to fix protobuf compilation
+ * [Pull Request 1059](https://github.com/ignitionrobotics/ign-gazebo/pull/1059)
+
+1. Parse new param for enabling / disabling IMU orientation output.
+ * [Pull Request 899](https://github.com/ignitionrobotics/ign-gazebo/pull/899)
+
+1. Fix light control standalone example.
+ * [Pull Request 1077](https://github.com/ignitionrobotics/ign-gazebo/pull/1077)
+
+1. Performance: use std::unordered_map where possible in SceneManager.
+ * [Pull Request 1083](https://github.com/ignitionrobotics/ign-gazebo/pull/1083)
+
+1. Prevent crash when using workflow PBR material.
+ * [Pull Request 1099](https://github.com/ignitionrobotics/ign-gazebo/pull/1099)
+
+1. JointPositionController: Improve misleading error message.
+ * [Pull Request 1098](https://github.com/ignitionrobotics/ign-gazebo/pull/1098)
+
+1. Adjust pose decimals based on element width.
+ * [Pull Request 1089](https://github.com/ignitionrobotics/ign-gazebo/pull/1089)
+
+1. Better protect this->dataPtr->initialized with renderMutex.
+ * [Pull Request 1119](https://github.com/ignitionrobotics/ign-gazebo/pull/1089)
+
+1. Updates to camera video record from subt.
+ * [Pull Request 1117](https://github.com/ignitionrobotics/ign-gazebo/pull/1117)
+
+1. Fix performance level test flakiness.
+ * [Pull Request 1129](https://github.com/ignitionrobotics/ign-gazebo/pull/1129)
+
+### Ignition Gazebo 4.11.0 (2021-09-23)
1. Support locked entities, and headless video recording using sim time.
* [Pull Request 862](https://github.com/ignitionrobotics/ign-gazebo/pull/862)
-### Ignition Gazebo 4.10.x (2021-09-15)
+### Ignition Gazebo 4.10.0 (2021-09-15)
1. Fixed GUI's ComponentInspector light parameter
* [Pull Request 1018](https://github.com/ignitionrobotics/ign-gazebo/pull/1018)
@@ -815,8 +1463,78 @@
## Ignition Gazebo 3.x
-### Ignition Gazebo 3.X.X (202X-XX-XX)
+### Ignition Gazebo 3.X.X (20XX-XX-XX)
+
+### Ignition Gazebo 3.12.0 (2021-11-11)
+
+1. Prevent creation of spurious `` elements when saving worlds
+ * [Pull request #1192](https://github.com/ignitionrobotics/ign-gazebo/pull/1192)
+
+1. Added support for tracked vehicles
+ * [Pull request #869](https://github.com/ignitionrobotics/ign-gazebo/pull/869)
+
+1. Add components to dynamically set joint limits
+ * [Pull request #847](https://github.com/ignitionrobotics/ign-gazebo/pull/847)
+
+1. Fix updating a component's data via SerializedState msg
+ * [Pull request #1149](https://github.com/ignitionrobotics/ign-gazebo/pull/1149)
+
+1. Sensor systems work if loaded after sensors
+ * [Pull request #1104](https://github.com/ignitionrobotics/ign-gazebo/pull/1104)
+
+1. Fix generation of systems library symlinks in build directory
+ * [Pull request #1160](https://github.com/ignitionrobotics/ign-gazebo/pull/1160)
+
+1. Backport gazebo::Util::validTopic() from ign-gazebo4.
+ * [Pull request #1153](https://github.com/ignitionrobotics/ign-gazebo/pull/1153)
+
+1. Support setting the background color for sensors
+ * [Pull request #1147](https://github.com/ignitionrobotics/ign-gazebo/pull/1147)
+
+1. Use uint64_t for ComponentInspector Entity IDs
+ * [Pull request #1144](https://github.com/ignitionrobotics/ign-gazebo/pull/1144)
+
+1. Fix integers and floats on component inspector
+ * [Pull request #1143](https://github.com/ignitionrobotics/ign-gazebo/pull/1143)
+
+### Ignition Gazebo 3.11.0 (2021-10-21)
+
+1. Updates to camera video record from subt.
+ * [Pull request #1117](https://github.com/ignitionrobotics/ign-gazebo/pull/1117)
+1. Fix performance level test flakiness.
+ * [Pull request #1129](https://github.com/ignitionrobotics/ign-gazebo/pull/1129)
+
+### Ignition Gazebo 3.10.0 (2021-10-15)
+
+1. Performance: use std::unordered_map where possible in SceneManager
+ * [Pull request #1083](https://github.com/ignitionrobotics/ign-gazebo/pull/1083)
+
+1. Enable new CMake policy to fix protobuf compilation
+ * [Pull request #1059](https://github.com/ignitionrobotics/ign-gazebo/pull/1059)
+
+1. Fix setting cast_shadows for visuals without material
+ * [Pull request #1015](https://github.com/ignitionrobotics/ign-gazebo/pull/1015)
+
+1. Remove duplicate XML tag in pendulum_links example world
+ * [Pull request #1002](https://github.com/ignitionrobotics/ign-gazebo/pull/1002)
+
+1. Enable sensor metrics on example worlds
+ * [Pull request #982](https://github.com/ignitionrobotics/ign-gazebo/pull/982)
+
+1. Improved doxygen
+ * [Pull request #996](https://github.com/ignitionrobotics/ign-gazebo/pull/996)
+
+1. JointPositionController: Improve misleading error message
+ * [Pull request #1098](https://github.com/ignitionrobotics/ign-gazebo/pull/1098)
+
+1. Adjust pose decimals based on element width
+ * [Pull request #1089](https://github.com/ignitionrobotics/ign-gazebo/pull/1089)
+
+1. Fixed IMU system plugin
+ * [Pull request #1043](https://github.com/ignitionrobotics/ign-gazebo/pull/1043)
+1. Use QTimer to update plugins in the Qt thread
+ * [Pull request #1095](https://github.com/ignitionrobotics/ign-gazebo/pull/1095)
### Ignition Gazebo 3.9.0 (2021-08-16)
diff --git a/Migration.md b/Migration.md
index cad3dd15486..4fbe67cda46 100644
--- a/Migration.md
+++ b/Migration.md
@@ -5,6 +5,79 @@ 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.
+## Ignition Gazebo 6.1 to 6.2
+
+* If no `` is given to the `Thruster` plugin, the namespace now
+ defaults to the model name, instead of an empty string.
+
+## Ignition Gazebo 5.x to 6.x
+
+* The ParticleEmitter system is deprecated. Please use the ParticleEmitter2
+system.
+
+* Marker example has been moved to Ignition GUI.
+
+* Some GUI plugins have been moved to Ignition GUI. Gazebo users don't need to
+ change their configuration files, the plugins will be loaded the same way.
+ * Grid Config
+ * Tape Measure
+
+* `dynamic_pose/info` topic is removed from `LogRecord` and `LogPlayback`
+since pose information is being logged in the `changed_state` topic.
+
+* The internal management of entities and components in the
+ `EntityComponentManager` has been updated to improve runtime performance. As a
+ result, several methods have been deprecated, and a few types have changed.
+ * **Deprecated**:
+ + All `EntityComponentManager` methods that use `ComponentKey` as an input
+ parameter.
+ + The `EntityComponentManager::First` method.
+ + The `ComponentId` and `ComponentKey` types are now deprecated. A
+ combination of `Entity` and `ComponentTypeId` should be used instead.
+ + The `components::StorageDescriptorBase` and
+ `components::StorageDescriptor` classes.
+ + Methods in `components::Factory` that have deprecated input parameter
+ types and/or deprecated return types.
+ - The version of `components::Factory::Register` which has a
+ `StorageDescriptorBase *` input parameter.
+ - `components::Factory::NewStorage`
+ + The `ComponentStorageBase` and `ComponentStorage` classes.
+ * **Modified**:
+ + `EntityComponentManager::CreateComponent` now returns a pointer to the
+ created component instead of a `ComponentKey`.
+ + `ComponentKey` has been modified to be a
+ `std::pair` (it used to be a
+ `std::pair`) since the `ComponentId` type
+ is now deprecated. `ComponentKey` has also been deprecated, so usage of
+ this type is discouraged (see the **Deprecated** section above for more
+ information about how to replace usage of `ComponentKey`).
+
+* The `GzScene3D` GUI plugin is being deprecated in favor of `MinimalScene`. In
+ order to get the same functionality as `GzScene3D`, users need to add the
+ following plugins:
+ + `MinimalScene`: base rendering functionality
+ + `GzSceneManager`: adds / removes / moves entities in the scene
+ + `EntityContextMenuPlugin`: right-click menu
+ + `InteractiveViewControl`: orbit controls
+ + `CameraTracking`: Move to, follow, set camera pose
+ + `MarkerManager`: Enables the use of markers
+ + `SelectEntities`: Select entities clicking on the scene
+ + `Spawn`: Functionality to spawn entities into the scene via GUI
+ + `VisualizationCapabilities`: View collisions, inertial, CoM, joints, etc.
+
+ Moreover, legacy mode needs to be turned off for the following plugins
+ for them to work with `MinimalScene` (set `false`):
+ + `TransformControl`: Translate and rotate
+ + `ViewAndle`: Move camera to preset angles
+
+* The `gui.config` and `server.config` files are now located in a versioned
+ folder inside `$HOME/.ignition/gazebo`, i.e. `$HOME/.ignition/gazebo/6/gui.config`.
+
+## Ignition Gazebo 5.2 to 5.3
+
+* If no `` is given to the `Thruster` plugin, the namespace now
+ defaults to the model name, instead of an empty string.
+
## Ignition Gazebo 4.x to 5.x
* Use `cli` component of `ignition-utils1`.
diff --git a/README.md b/README.md
index 090d774df9f..d5b19186a9c 100644
--- a/README.md
+++ b/README.md
@@ -9,10 +9,10 @@
Build | Status
-- | --
-Test coverage | [](https://codecov.io/gh/ignitionrobotics/ign-gazebo)
-Ubuntu Bionic | [](https://build.osrfoundation.org/job/ignition_gazebo-ci-main-bionic-amd64)
-Homebrew | [](https://build.osrfoundation.org/job/ignition_gazebo-ci-main-homebrew-amd64)
-Windows | [](https://build.osrfoundation.org/job/ign_gazebo-ci-win/)
+Test coverage | [](https://codecov.io/gh/ignitionrobotics/ign-gazebo)
+Ubuntu Bionic | [](https://build.osrfoundation.org/job/ignition_gazebo-ci-ign-gazebo6-bionic-amd64)
+Homebrew | [](https://build.osrfoundation.org/job/ignition_gazebo-ci-ign-gazebo6-homebrew-amd64)
+Windows | [](https://build.osrfoundation.org/job/ign_gazebo-ign-6-win/)
Ignition Gazebo is an open source robotics simulator. Through Ignition Gazebo, users have access to high fidelity physics, rendering, and sensor models. Additionally, users and developers have multiple points of entry to simulation including a graphical user interface, plugins, and asynchronous message passing and services.
@@ -24,14 +24,6 @@ Ignition Gazebo is derived from [Gazebo](http://gazebosim.org) and represents ov
[Install](#install)
-* [Binary Install](#binary-install)
-
-* [Source Install](#source-install)
-
- * [Prerequisites](#prerequisites)
-
- * [Building from Source](#building-from-source)
-
[Usage](#usage)
[Documentation](#documentation)
@@ -86,120 +78,7 @@ introspection and control.
# Install
-We recommend following the [Binary Install](#binary-install) instructions to get up and running as quickly and painlessly as possible.
-
-The [Source Install](#source-install) instructions should be used if you need the very latest software improvements, you need to modify the code, or you plan to make a contribution.
-
-## Binary Install
-
-The binary install method will use pre-built packages which are typically
-available through a package management utility such as [Apt](https://wiki.debian.org/Apt).
-This approach eliminates the need to download and compile source code, and dependencies
-are handled for you. The downside of a binary install is that you won't be able to modify
-the code. See [Source Install](#source-install) for information on
-installing Ignition Gazebo from source.
-
-**Ubuntu Bionic**
-
-1. Configure package repositories.
-
- ```
- sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
- ```
-
- ```
- sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-prerelease `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-prerelease.list'
- ```
-
- ```
- wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
- ```
-
- ```
- sudo apt-get update
- ```
-
-2. Install Ignition Gazebo
-
- ```
- sudo apt-get install libignition-gazebo<#>-dev
- ```
-
- Where `<#>` is the desired version number, like 3 or 4.
-
-## Source Install
-
-Install from source if you're interested in changing the source code or need a
-feature which hasn't been released yet.
-
-### Prerequisites
-
-Ignition Gazebo has a fairly large set of dependencies. Refer to the following sections
-for dependency installation instructions for each supported operating system.
-
-**[Ubuntu Bionic](http://releases.ubuntu.com/18.04/)**
-
-1. Enable the Ignition software repositories:
-
- ```
- sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
- ```
-
- ```
- sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-prerelease `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-prerelease.list'
- ```
-
- ```
- wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
- ```
-
- ```
- sudo apt-get update
- ```
-
-2. Install package dependencies:
-
- ```
- git clone https://github.com/ignitionrobotics/ign-gazebo -b main
- ```
-
- ```
- export SYSTEM_VERSION=bionic
- sudo apt -y install \
- $(sort -u $(find . -iname 'packages-'$SYSTEM_VERSION'.apt' -o -iname 'packages.apt') | tr '\n' ' ')
- ```
-
-### Building from source
-
-1. Install [prerequisites](#prerequisites)
-
-2. Configure gcc8
-
- * Ubuntu
-
- ```
- sudo apt-get install g++-8
- ```
-
- ```
- sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 --slave /usr/bin/g++ g++ /usr/bin/g++-8 --slave /usr/bin/gcov gcov /usr/bin/gcov-8
- ```
-
-3. Clone the repository if you haven't already.
-
- ```
- git clone https://github.com/ignitionrobotics/ign-gazebo -b main
- ```
-
-4. Configure and build.
-
- ```
- cd ign-gazebo
- mkdir build
- cd build
- cmake ../
- make
- ```
+See the [installation tutorial](https://ignitionrobotics.org/api/gazebo/6.1/install.html).
# Usage
@@ -235,70 +114,22 @@ line is using symbolic links to each library's YAML file.
```
mkdir ~/.ignition/tools/configs -p
cd ~/.ignition/tools/configs/
-ln -s /usr/local/share/ignition/fuel6.yaml .
-ln -s /usr/local/share/ignition/transport10.yaml .
-ln -s /usr/local/share/ignition/transportlog10.yaml .
+ln -s /usr/local/share/ignition/fuel7.yaml .
+ln -s /usr/local/share/ignition/transport11.yaml .
+ln -s /usr/local/share/ignition/transportlog11.yaml .
...
export IGN_CONFIG_PATH=$HOME/.ignition/tools/configs
```
This issue is tracked [here](https://github.com/ignitionrobotics/ign-tools/issues/8).
-# Documentation
-
-API documentation and tutorials can be accessed at [https://ignitionrobotics.org/libs/gazebo](https://ignitionrobotics.org/libs/gazebo)
-
-You can also generate the documentation from a clone of this repository by following these steps.
+# Documentation
-1. You will need [Doxygen](http://www.doxygen.org/). On Ubuntu Doxygen can be installed using
-
- ```
- sudo apt-get install doxygen
- ```
-
-2. Clone the repository
-
- ```
- git clone https://github.com/ignitionrobotics/ign-gazebo
- ```
-
-3. Configure and build the documentation.
-
- ```
- cd ign-gazebo
- mkdir build
- cd build
- cmake ../
- make doc
- ```
-
-4. View the documentation by running the following command from the `build` directory.
-
- ```
- firefox doxygen/html/index.html
- ```
+See the [installation tutorial](https://ignitionrobotics.org/api/gazebo/6.0/install.html).
# Testing
-Follow these steps to run tests and static code analysis in your clone of this repository.
-
-1. Follow the [source install instructions](#source-install).
-
-2. Run tests.
-
- ```
- make test
- ```
-
-3. Static code checker.
-
- ```
- sudo apt-get update && sudo apt-get -y install cppcheck
- ```
-
- ```
- make codecheck
- ```
+See the [installation tutorial](https://ignitionrobotics.org/api/gazebo/6.0/install.html).
See the [Writing Tests section of the contributor guide](https://github.com/ignitionrobotics/ign-gazebo/blob/main/CONTRIBUTING.md#writing-tests) for help creating or modifying tests.
diff --git a/docker/Dockerfile.nightly b/docker/Dockerfile.nightly
index b862b29d0f1..a22b5d708b7 100644
--- a/docker/Dockerfile.nightly
+++ b/docker/Dockerfile.nightly
@@ -13,17 +13,17 @@ RUN apt-get update \
&& apt-get install -y \
libignition-cmake2-dev \
libignition-common4-dev \
- libignition-fuel-tools6-dev \
+ libignition-fuel-tools7-dev \
libignition-math6-eigen3-dev \
libignition-plugin-dev \
- libignition-physics4-dev \
- libignition-rendering5-dev \
+ libignition-physics5-dev \
+ libignition-rendering6-dev \
libignition-tools-dev \
- libignition-transport10-dev \
- libignition-gui5-dev \
- libignition-msgs7-dev \
- libignition-sensors5-dev \
- libsdformat11-dev
+ libignition-transport11-dev \
+ libignition-gui6-dev \
+ libignition-msgs8-dev \
+ libignition-sensors6-dev \
+ libsdformat12-dev
COPY . ign-gazebo
RUN cd ign-gazebo \
diff --git a/examples/plugin/command_actor/CMakeLists.txt b/examples/plugin/command_actor/CMakeLists.txt
index ccc5c9cfc54..9d52f5539d5 100644
--- a/examples/plugin/command_actor/CMakeLists.txt
+++ b/examples/plugin/command_actor/CMakeLists.txt
@@ -7,9 +7,9 @@ project(CommandActor)
find_package(ignition-plugin1 REQUIRED COMPONENTS register)
set(IGN_PLUGIN_VER ${ignition-plugin1_VERSION_MAJOR})
-find_package(ignition-gazebo5 REQUIRED)
+find_package(ignition-gazebo6 REQUIRED)
add_library(CommandActor SHARED CommandActor.cc)
set_property(TARGET CommandActor PROPERTY CXX_STANDARD 17)
target_link_libraries(CommandActor
PRIVATE ignition-plugin${IGN_PLUGIN_VER}::ignition-plugin${IGN_PLUGIN_VER}
- PRIVATE ignition-gazebo5::ignition-gazebo5)
+ PRIVATE ignition-gazebo6::ignition-gazebo6)
diff --git a/examples/plugin/command_actor/command_actor.sdf b/examples/plugin/command_actor/command_actor.sdf
index 390a8e86a0b..e091290e95d 100644
--- a/examples/plugin/command_actor/command_actor.sdf
+++ b/examples/plugin/command_actor/command_actor.sdf
@@ -10,74 +10,6 @@
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/actors/control
- /world/actors/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/actors/stats
-
-
-
-
-
true
0 0 10 0 0 0
diff --git a/examples/plugin/custom_component/CMakeLists.txt b/examples/plugin/custom_component/CMakeLists.txt
index 72eeec354f3..391bc7c897b 100644
--- a/examples/plugin/custom_component/CMakeLists.txt
+++ b/examples/plugin/custom_component/CMakeLists.txt
@@ -7,11 +7,11 @@ project(CustomComponentPlugin)
find_package(ignition-plugin1 REQUIRED COMPONENTS register)
set(IGN_PLUGIN_VER ${ignition-plugin1_VERSION_MAJOR})
-find_package(ignition-gazebo5 REQUIRED)
+find_package(ignition-gazebo6 REQUIRED)
add_library(CustomComponentPlugin SHARED
CustomComponentPlugin.cc
)
set_property(TARGET CustomComponentPlugin PROPERTY CXX_STANDARD 17)
target_link_libraries(CustomComponentPlugin
PRIVATE ignition-plugin${IGN_PLUGIN_VER}::ignition-plugin${IGN_PLUGIN_VER}
- PRIVATE ignition-gazebo5::ignition-gazebo5)
+ PRIVATE ignition-gazebo6::ignition-gazebo6)
diff --git a/examples/plugin/custom_sensor_system/CMakeLists.txt b/examples/plugin/custom_sensor_system/CMakeLists.txt
new file mode 100644
index 00000000000..78fa46f9410
--- /dev/null
+++ b/examples/plugin/custom_sensor_system/CMakeLists.txt
@@ -0,0 +1,36 @@
+cmake_minimum_required(VERSION 3.11.0 FATAL_ERROR)
+
+find_package(ignition-cmake2 REQUIRED)
+
+project(OdometerSystem)
+
+ign_find_package(ignition-plugin1 REQUIRED COMPONENTS register)
+set(IGN_PLUGIN_VER ${ignition-plugin1_VERSION_MAJOR})
+
+ign_find_package(ignition-gazebo6 REQUIRED)
+set(IGN_GAZEBO_VER ${ignition-gazebo6_VERSION_MAJOR})
+
+find_package(ignition-sensors6 REQUIRED)
+set(IGN_SENSORS_VER ${ignition-sensors6_VERSION_MAJOR})
+
+# Fetch the custom sensor example from ign-sensors
+# Users won't commonly use this to fetch their sensors. The sensor may be part
+# of the system's CMake project, or installed from another project, etc...
+include(FetchContent)
+FetchContent_Declare(
+ sensors_clone
+ GIT_REPOSITORY https://github.com/ignitionrobotics/ign-sensors
+ GIT_TAG ign-sensors6
+)
+FetchContent_Populate(sensors_clone)
+add_subdirectory(${sensors_clone_SOURCE_DIR}/examples/custom_sensor ${sensors_clone_BINARY_DIR})
+
+add_library(${PROJECT_NAME} SHARED ${PROJECT_NAME}.cc)
+target_link_libraries(${PROJECT_NAME}
+ PRIVATE ignition-plugin${IGN_PLUGIN_VER}::ignition-plugin${IGN_PLUGIN_VER}
+ PRIVATE ignition-gazebo${IGN_GAZEBO_VER}::ignition-gazebo${IGN_GAZEBO_VER}
+ PRIVATE ignition-sensors${IGN_SENSORS_VER}::ignition-sensors${IGN_SENSORS_VER}
+ PRIVATE odometer
+)
+target_include_directories(${PROJECT_NAME}
+ PUBLIC ${sensors_clone_SOURCE_DIR}/examples/custom_sensor)
diff --git a/examples/plugin/custom_sensor_system/OdometerSystem.cc b/examples/plugin/custom_sensor_system/OdometerSystem.cc
new file mode 100644
index 00000000000..3da7b2b3353
--- /dev/null
+++ b/examples/plugin/custom_sensor_system/OdometerSystem.cc
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include
+
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "Odometer.hh"
+#include "OdometerSystem.hh"
+
+using namespace custom;
+
+//////////////////////////////////////////////////
+void OdometerSystem::PreUpdate(const ignition::gazebo::UpdateInfo &,
+ ignition::gazebo::EntityComponentManager &_ecm)
+{
+ _ecm.EachNew(
+ [&](const ignition::gazebo::Entity &_entity,
+ const ignition::gazebo::components::CustomSensor *_custom,
+ const ignition::gazebo::components::ParentEntity *_parent)->bool
+ {
+ // Get sensor's scoped name without the world
+ auto sensorScopedName = ignition::gazebo::removeParentScope(
+ ignition::gazebo::scopedName(_entity, _ecm, "::", false), "::");
+ sdf::Sensor data = _custom->Data();
+ data.SetName(sensorScopedName);
+
+ // Default to scoped name as topic
+ if (data.Topic().empty())
+ {
+ std::string topic = scopedName(_entity, _ecm) + "/odometer";
+ data.SetTopic(topic);
+ }
+
+ ignition::sensors::SensorFactory sensorFactory;
+ auto sensor = sensorFactory.CreateSensor(data);
+ if (nullptr == sensor)
+ {
+ ignerr << "Failed to create odometer [" << sensorScopedName << "]"
+ << std::endl;
+ return false;
+ }
+
+ // Set sensor parent
+ auto parentName = _ecm.Component(
+ _parent->Data())->Data();
+ sensor->SetParent(parentName);
+
+ // Set topic on Gazebo
+ _ecm.CreateComponent(_entity,
+ ignition::gazebo::components::SensorTopic(sensor->Topic()));
+
+ // Keep track of this sensor
+ this->entitySensorMap.insert(std::make_pair(_entity,
+ std::move(sensor)));
+
+ return true;
+ });
+}
+
+//////////////////////////////////////////////////
+void OdometerSystem::PostUpdate(const ignition::gazebo::UpdateInfo &_info,
+ const ignition::gazebo::EntityComponentManager &_ecm)
+{
+ // Only update and publish if not paused.
+ if (!_info.paused)
+ {
+ for (auto &[entity, sensor] : this->entitySensorMap)
+ {
+ sensor->NewPosition(ignition::gazebo::worldPose(entity, _ecm).Pos());
+ sensor->Update(_info.simTime);
+ }
+ }
+
+ this->RemoveSensorEntities(_ecm);
+}
+
+//////////////////////////////////////////////////
+void OdometerSystem::RemoveSensorEntities(
+ const ignition::gazebo::EntityComponentManager &_ecm)
+{
+ _ecm.EachRemoved(
+ [&](const ignition::gazebo::Entity &_entity,
+ const ignition::gazebo::components::CustomSensor *)->bool
+ {
+ if (this->entitySensorMap.erase(_entity) == 0)
+ {
+ ignerr << "Internal error, missing odometer for entity ["
+ << _entity << "]" << std::endl;
+ }
+ return true;
+ });
+}
+
+IGNITION_ADD_PLUGIN(OdometerSystem, ignition::gazebo::System,
+ OdometerSystem::ISystemPreUpdate,
+ OdometerSystem::ISystemPostUpdate
+)
+
+IGNITION_ADD_PLUGIN_ALIAS(OdometerSystem, "custom::OdometerSystem")
diff --git a/examples/plugin/custom_sensor_system/OdometerSystem.hh b/examples/plugin/custom_sensor_system/OdometerSystem.hh
new file mode 100644
index 00000000000..63bdcec04b8
--- /dev/null
+++ b/examples/plugin/custom_sensor_system/OdometerSystem.hh
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+*/
+#ifndef ODOMETERSYSTEM_HH_
+#define ODOMETERSYSTEM_HH_
+
+#include
+#include
+#include
+
+namespace custom
+{
+ /// \brief Example showing how to tie a custom sensor, in this case an
+ /// odometer, into simulation
+ class OdometerSystem:
+ public ignition::gazebo::System,
+ public ignition::gazebo::ISystemPreUpdate,
+ public ignition::gazebo::ISystemPostUpdate
+ {
+ // Documentation inherited.
+ // During PreUpdate, check for new sensors that were inserted
+ // into simulation and create more components as needed.
+ public: void PreUpdate(const ignition::gazebo::UpdateInfo &_info,
+ ignition::gazebo::EntityComponentManager &_ecm) final;
+
+ // Documentation inherited.
+ // During PostUpdate, update the known sensors and publish their data.
+ // Also remove sensors that have been deleted.
+ public: void PostUpdate(const ignition::gazebo::UpdateInfo &_info,
+ const ignition::gazebo::EntityComponentManager &_ecm) final;
+
+ /// \brief Remove custom sensors if their entities have been removed from
+ /// simulation.
+ /// \param[in] _ecm Immutable reference to ECM.
+ private: void RemoveSensorEntities(
+ const ignition::gazebo::EntityComponentManager &_ecm);
+
+ /// \brief A map of custom entities to their sensors
+ private: std::unordered_map> entitySensorMap;
+ };
+}
+#endif
diff --git a/examples/plugin/custom_sensor_system/README.md b/examples/plugin/custom_sensor_system/README.md
new file mode 100644
index 00000000000..7145c7b91c5
--- /dev/null
+++ b/examples/plugin/custom_sensor_system/README.md
@@ -0,0 +1,45 @@
+# Custom sensor system
+
+This example shows how to use a custom sensor with Ignition Gazebo.
+
+It uses the odometer created on this example:
+[ign-sensors/examples/custom_sensor](https://github.com/ignitionrobotics/ign-sensors/tree/main/examples/custom_sensor).
+
+## Build
+
+From the root of the `ign-gazebo` repository, do the following to build the example:
+
+~~~
+cd examples/plugins/custom_sensor_system
+mkdir build
+cd build
+cmake ..
+make
+~~~
+
+This will generate the `OdometerSystem` library under `build`.
+
+## Run
+
+The plugin must be attached to an entity to be loaded. This is demonstrated in
+the `odometer.sdf` file that's going to be loaded.
+
+Before starting Gazebo, we must make sure it can find the plugin by doing:
+
+~~~
+cd examples/plugins/custom_sensor_system
+export IGN_GAZEBO_SYSTEM_PLUGIN_PATH=`pwd`/build
+~~~
+
+Then load the example world:
+
+ ign gazebo -r odometer.sdf
+
+You should see a box slowly moving in a straight line.
+
+Listen to the odometer data with:
+
+```
+ign topic -e -t /world/odometer_world/model/model_with_sensor/link/link/sensor/an_odometer/odometer
+```
+
diff --git a/examples/plugin/custom_sensor_system/odometer.sdf b/examples/plugin/custom_sensor_system/odometer.sdf
new file mode 100644
index 00000000000..f9c7817b296
--- /dev/null
+++ b/examples/plugin/custom_sensor_system/odometer.sdf
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ 0 0 10 0 0 0
+ 0.8 0.8 0.8 1
+ 0.2 0.2 0.2 1
+
+ 1000
+ 0.9
+ 0.01
+ 0.001
+
+ -0.5 0.1 -0.9
+
+
+
+ true
+
+
+
+
+ 0 0 1
+ 100 100
+
+
+
+
+
+
+ 0 0 1
+ 100 100
+
+
+
+ 0.8 0.8 0.8 1
+ 0.8 0.8 0.8 1
+ 0.8 0.8 0.8 1
+
+
+
+
+
+
+ 0 0 0.05 0 0 0
+
+
+ 0.1
+
+ 0.000166667
+ 0.000166667
+ 0.000166667
+
+
+
+
+
+ 0.1 0.1 0.1
+
+
+
+
+
+
+ 0.1 0.1 0.1
+
+
+
+
+
+ 1
+ 30
+ true
+
+
+ 0.00001
+ 0.00001
+
+
+
+
+
+
+
+ 0.2 0 0
+
+
+
+
+
diff --git a/examples/plugin/gui_system_plugin/CMakeLists.txt b/examples/plugin/gui_system_plugin/CMakeLists.txt
index 1d2a11bb2ae..8c80ddd6fa9 100644
--- a/examples/plugin/gui_system_plugin/CMakeLists.txt
+++ b/examples/plugin/gui_system_plugin/CMakeLists.txt
@@ -8,7 +8,7 @@ project(GuiSystemPlugin)
set(CMAKE_AUTOMOC ON)
-find_package(ignition-gazebo5 REQUIRED COMPONENTS gui)
+find_package(ignition-gazebo6 REQUIRED COMPONENTS gui)
QT5_ADD_RESOURCES(resources_RCC ${PROJECT_NAME}.qrc)
@@ -17,5 +17,5 @@ add_library(${PROJECT_NAME} SHARED
${resources_RCC}
)
target_link_libraries(${PROJECT_NAME}
- PRIVATE ignition-gazebo5::gui
+ PRIVATE ignition-gazebo6::gui
)
diff --git a/examples/plugin/hello_world/CMakeLists.txt b/examples/plugin/hello_world/CMakeLists.txt
index 6d6213c2c7e..eec9865537e 100644
--- a/examples/plugin/hello_world/CMakeLists.txt
+++ b/examples/plugin/hello_world/CMakeLists.txt
@@ -7,8 +7,8 @@ project(Hello_world)
ign_find_package(ignition-plugin1 REQUIRED COMPONENTS register)
set(IGN_PLUGIN_VER ${ignition-plugin1_VERSION_MAJOR})
-ign_find_package(ignition-gazebo5 REQUIRED)
-set(IGN_GAZEBO_VER ${ignition-gazebo5_VERSION_MAJOR})
+ign_find_package(ignition-gazebo6 REQUIRED)
+set(IGN_GAZEBO_VER ${ignition-gazebo6_VERSION_MAJOR})
add_library(HelloWorld SHARED HelloWorld)
set_property(TARGET HelloWorld PROPERTY CXX_STANDARD 17)
diff --git a/examples/plugin/rendering_plugins/CMakeLists.txt b/examples/plugin/rendering_plugins/CMakeLists.txt
index 73a9a9c12f2..46de43ab5a0 100644
--- a/examples/plugin/rendering_plugins/CMakeLists.txt
+++ b/examples/plugin/rendering_plugins/CMakeLists.txt
@@ -7,14 +7,14 @@ endif()
project(RenderingPlugins)
# Common to both plugins
-find_package(ignition-rendering5 REQUIRED)
+find_package(ignition-rendering6 REQUIRED)
# GUI plugin
set(GUI_PLUGIN RenderingGuiPlugin)
set(CMAKE_AUTOMOC ON)
-find_package(ignition-gui5 REQUIRED)
+find_package(ignition-gui6 REQUIRED)
QT5_ADD_RESOURCES(resources_RCC ${GUI_PLUGIN}.qrc)
@@ -24,21 +24,21 @@ add_library(${GUI_PLUGIN} SHARED
)
target_link_libraries(${GUI_PLUGIN}
PRIVATE
- ignition-gui5::ignition-gui5
- ignition-rendering5::ignition-rendering5
+ ignition-gui6::ignition-gui6
+ ignition-rendering6::ignition-rendering6
)
# Server plugin
set(SERVER_PLUGIN RenderingServerPlugin)
find_package(ignition-plugin1 REQUIRED COMPONENTS register)
-find_package(ignition-gazebo5 REQUIRED)
+find_package(ignition-gazebo6 REQUIRED)
add_library(${SERVER_PLUGIN} SHARED ${SERVER_PLUGIN}.cc)
set_property(TARGET ${SERVER_PLUGIN} PROPERTY CXX_STANDARD 17)
target_link_libraries(${SERVER_PLUGIN}
PRIVATE
ignition-plugin1::ignition-plugin1
- ignition-gazebo5::ignition-gazebo5
- ignition-rendering5::ignition-rendering5
+ ignition-gazebo6::ignition-gazebo6
+ ignition-rendering6::ignition-rendering6
)
diff --git a/examples/plugin/rendering_plugins/rendering_plugins.sdf b/examples/plugin/rendering_plugins/rendering_plugins.sdf
index 8fbb572bda1..68f77eb736a 100644
--- a/examples/plugin/rendering_plugins/rendering_plugins.sdf
+++ b/examples/plugin/rendering_plugins/rendering_plugins.sdf
@@ -17,7 +17,7 @@
-
+
3D View
false
@@ -31,6 +31,47 @@
-6 0 6 0 0.5 0
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
@@ -51,6 +92,7 @@
true
true
true
+ true
diff --git a/examples/plugin/system_plugin/CMakeLists.txt b/examples/plugin/system_plugin/CMakeLists.txt
index 6fcc9de2622..bc30c2d7efc 100644
--- a/examples/plugin/system_plugin/CMakeLists.txt
+++ b/examples/plugin/system_plugin/CMakeLists.txt
@@ -7,9 +7,9 @@ project(SampleSystem)
find_package(ignition-plugin1 REQUIRED COMPONENTS register)
set(IGN_PLUGIN_VER ${ignition-plugin1_VERSION_MAJOR})
-find_package(ignition-gazebo5 REQUIRED)
+find_package(ignition-gazebo6 REQUIRED)
add_library(SampleSystem SHARED SampleSystem.cc SampleSystem2.cc)
set_property(TARGET SampleSystem PROPERTY CXX_STANDARD 17)
target_link_libraries(SampleSystem
PRIVATE ignition-plugin${IGN_PLUGIN_VER}::ignition-plugin${IGN_PLUGIN_VER}
- PRIVATE ignition-gazebo5::ignition-gazebo5)
+ PRIVATE ignition-gazebo6::ignition-gazebo6)
diff --git a/examples/scripts/distributed/primary.sdf b/examples/scripts/distributed/primary.sdf
index 62961b30086..20644d3006e 100644
--- a/examples/scripts/distributed/primary.sdf
+++ b/examples/scripts/distributed/primary.sdf
@@ -6,75 +6,6 @@
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/default/control
- /world/default/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/default/stats
-
-
-
-
-
0.8 0.8 0.8 1.0
0.34 0.39 0.43 1.0
diff --git a/examples/scripts/distributed/primary.sh b/examples/scripts/distributed/primary.sh
index 3bcd6d9060b..d4c138ac6b9 100755
--- a/examples/scripts/distributed/primary.sh
+++ b/examples/scripts/distributed/primary.sh
@@ -4,12 +4,3 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
ign gazebo -v 4 -z 100000000 --network-role primary --network-secondaries 3 $DIR/primary.sdf
-# Ignition Gazebo 1.x.x and 2.x.x support using environment variables to
-# configure distributed simulation. This capability is deprecated in
-# version 2.x.x, and removed in verion 3.x.x of Inition Gazebo. Please use the
-# --network-role and --network-secondaries command line options instead.
-
-# export IGN_GAZEBO_NETWORK_ROLE="PRIMARY"
-# export IGN_GAZEBO_NETWORK_SECONDARIES=3
-# ign-gazebo -v 4 --distributed -f $DIR/primary.sdf
-
diff --git a/examples/scripts/distributed/secondary.sh b/examples/scripts/distributed/secondary.sh
index cb60cf7c617..c3b1587981c 100755
--- a/examples/scripts/distributed/secondary.sh
+++ b/examples/scripts/distributed/secondary.sh
@@ -4,10 +4,3 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
ign gazebo -s -v 4 -z 100000000 --network-role secondary $DIR/secondary.sdf
-# Ignition Gazebo 1.x.x and 2.x.x support using environment variables to
-# configure distributed simulation. This capability is deprecated in
-# version 2.x.x, and removed in verion 3.x.x of Inition Gazebo. Please use the
-# --network-role and --network-secondaries command line options instead.
-
-# export IGN_GAZEBO_NETWORK_ROLE="SECONDARY"
-# ign-gazebo -v 4 --distributed -f $DIR/secondary.sdf
diff --git a/examples/scripts/distributed/standalone.sdf b/examples/scripts/distributed/standalone.sdf
index 1b952379003..6bdac8c0c49 100644
--- a/examples/scripts/distributed/standalone.sdf
+++ b/examples/scripts/distributed/standalone.sdf
@@ -10,75 +10,6 @@
name="ignition::gazebo::systems::Physics">
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/default/control
- /world/default/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/default/stats
-
-
-
-
-
0.8 0.8 0.8 1.0
0.34 0.39 0.43 1.0
diff --git a/examples/scripts/distributed_levels/distributed_levels.sdf.erb b/examples/scripts/distributed_levels/distributed_levels.sdf.erb
index 1b0b16e663d..b3f03c56edc 100644
--- a/examples/scripts/distributed_levels/distributed_levels.sdf.erb
+++ b/examples/scripts/distributed_levels/distributed_levels.sdf.erb
@@ -113,75 +113,6 @@
filename="ignition-gazebo-scene-broadcaster-system"
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/default/control
- /world/default/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/default/stats
-
-
-
-
<% end %>
diff --git a/examples/scripts/distributed_levels/primary.sdf b/examples/scripts/distributed_levels/primary.sdf
index 9e79e592aff..b9074299cfe 100644
--- a/examples/scripts/distributed_levels/primary.sdf
+++ b/examples/scripts/distributed_levels/primary.sdf
@@ -10,84 +10,11 @@
-
-
-
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/default/control
- /world/default/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/default/stats
-
-
-
-
-
-
0.8 0.8 0.8 1.0
0.34 0.39 0.43 1.0
diff --git a/examples/scripts/distributed_levels/primary.sh b/examples/scripts/distributed_levels/primary.sh
index 0b0d231981e..e402340b408 100755
--- a/examples/scripts/distributed_levels/primary.sh
+++ b/examples/scripts/distributed_levels/primary.sh
@@ -5,13 +5,3 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
# --levels is implied by --network-role
ign gazebo -v 4 -z 100000000 --network-role primary --network-secondaries 2 $DIR/primary.sdf
-# Ignition Gazebo 1.x.x and 2.x.x support using environment variables to
-# configure distributed simulation. This capability is deprecated in
-# version 2.x.x, and removed in verion 3.x.x of Inition Gazebo. Please use the
-# --network-role and --network-secondaries command line options instead.
-
-# export IGN_GAZEBO_NETWORK_ROLE="PRIMARY"
-# export IGN_GAZEBO_NETWORK_SECONDARIES=3
-# ign-gazebo -v 4 --distributed -f $DIR/primary.sdf
-
-
diff --git a/examples/scripts/distributed_levels/secondary.sh b/examples/scripts/distributed_levels/secondary.sh
index f1ba79cf3ee..fb98c7a19f8 100755
--- a/examples/scripts/distributed_levels/secondary.sh
+++ b/examples/scripts/distributed_levels/secondary.sh
@@ -5,10 +5,3 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
# --levels is implied by --network-role
ign gazebo -s -v 4 -z 100000000 --network-role secondary $DIR/secondary.sdf
-# Ignition Gazebo 1.x.x and 2.x.x support using environment variables to
-# configure distributed simulation. This capability is deprecated in
-# version 2.x.x, and removed in verion 3.x.x of Inition Gazebo. Please use the
-# --network-role and --network-secondaries command line options instead.
-
-# export IGN_GAZEBO_NETWORK_ROLE="SECONDARY"
-# ign-gazebo -v 4 --distributed -f $DIR/secondary.sdf
diff --git a/examples/scripts/distributed_levels/standalone.sdf b/examples/scripts/distributed_levels/standalone.sdf
index b481243aba5..8b996ee96ca 100644
--- a/examples/scripts/distributed_levels/standalone.sdf
+++ b/examples/scripts/distributed_levels/standalone.sdf
@@ -23,75 +23,6 @@
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/default/control
- /world/default/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/default/stats
-
-
-
-
-
0.8 0.8 0.8 1.0
diff --git a/examples/scripts/log_video_recorder/README.md b/examples/scripts/log_video_recorder/README.md
index aa679d2f7da..3dc25c22d6f 100644
--- a/examples/scripts/log_video_recorder/README.md
+++ b/examples/scripts/log_video_recorder/README.md
@@ -34,14 +34,8 @@ timestamped directory where the `record_one_run.bash` is in.
## Changing camera follow behavior
-The camera follow behavior can be configured by setting the ``
-parameters in the GzScene3d GUI plugin in `log_video_recorder.sdf`, i.e.
-
-
- 0.01
- true
- -1.0 0 2.5
-
+> This feature hasn't been ported to Fortress yet, see
+> https://github.com/ignitionrobotics/ign-gui/issues/298
## Troubleshooting
diff --git a/examples/scripts/log_video_recorder/log_video_recorder.sdf b/examples/scripts/log_video_recorder/log_video_recorder.sdf
index 9734ebfc857..e333935ddf5 100644
--- a/examples/scripts/log_video_recorder/log_video_recorder.sdf
+++ b/examples/scripts/log_video_recorder/log_video_recorder.sdf
@@ -34,7 +34,7 @@
-
+
3D View
false
@@ -45,6 +45,24 @@
0.4 0.4 0.4
0.8 0.8 0.8
-6 0 6 0 0.5 0
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
0.01
true
@@ -70,6 +88,7 @@
true
/world/default/control
/world/default/stats
+ true
@@ -91,6 +110,28 @@
true
/world/default/stats
+
+
+
+ false
+ 0
+ 0
+ 50
+ 50
+ floating
+ false
+ #777777
+
+
+
+ true
+ true
+ 4000000
+
+
+
+ false
+
diff --git a/examples/standalone/custom_server/CMakeLists.txt b/examples/standalone/custom_server/CMakeLists.txt
index f0fc2311943..bc4a2c0cf1d 100644
--- a/examples/standalone/custom_server/CMakeLists.txt
+++ b/examples/standalone/custom_server/CMakeLists.txt
@@ -1,8 +1,8 @@
cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
- find_package(ignition-gazebo5 REQUIRED)
- set(IGN_GAZEBO_VER ${ignition-gazebo5_VERSION_MAJOR})
+ find_package(ignition-gazebo6 REQUIRED)
+ set(IGN_GAZEBO_VER ${ignition-gazebo6_VERSION_MAJOR})
add_executable(custom_server custom_server.cc)
target_link_libraries(custom_server
diff --git a/examples/standalone/each_performance/CMakeLists.txt b/examples/standalone/each_performance/CMakeLists.txt
index a8458e65522..98bc2b1b184 100644
--- a/examples/standalone/each_performance/CMakeLists.txt
+++ b/examples/standalone/each_performance/CMakeLists.txt
@@ -1,8 +1,8 @@
cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
-find_package(ignition-gazebo5 QUIET REQUIRED)
+find_package(ignition-gazebo6 QUIET REQUIRED)
add_executable(each each.cc)
target_link_libraries(each
- ignition-gazebo5::core)
+ ignition-gazebo6::core)
diff --git a/examples/standalone/entity_creation/CMakeLists.txt b/examples/standalone/entity_creation/CMakeLists.txt
index e82d5965c88..ceb933a2005 100644
--- a/examples/standalone/entity_creation/CMakeLists.txt
+++ b/examples/standalone/entity_creation/CMakeLists.txt
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
-find_package(ignition-transport10 QUIET REQUIRED OPTIONAL_COMPONENTS log)
-set(IGN_TRANSPORT_VER ${ignition-transport10_VERSION_MAJOR})
+find_package(ignition-transport11 QUIET REQUIRED OPTIONAL_COMPONENTS log)
+set(IGN_TRANSPORT_VER ${ignition-transport11_VERSION_MAJOR})
add_executable(entity_creation entity_creation.cc)
target_link_libraries(entity_creation
diff --git a/examples/standalone/external_ecm/CMakeLists.txt b/examples/standalone/external_ecm/CMakeLists.txt
index 3f4c747cf75..f03b7c51d54 100644
--- a/examples/standalone/external_ecm/CMakeLists.txt
+++ b/examples/standalone/external_ecm/CMakeLists.txt
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
-find_package(ignition-gazebo5 REQUIRED)
+find_package(ignition-gazebo6 REQUIRED)
add_executable(external_ecm external_ecm.cc)
target_link_libraries(external_ecm
- ignition-gazebo5::core)
+ ignition-gazebo6::core)
diff --git a/examples/standalone/gtest_setup/CMakeLists.txt b/examples/standalone/gtest_setup/CMakeLists.txt
index eb161340ebc..7fe6ac29027 100644
--- a/examples/standalone/gtest_setup/CMakeLists.txt
+++ b/examples/standalone/gtest_setup/CMakeLists.txt
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.11.0 FATAL_ERROR)
project(GTestSetup)
# Find Gazebo
-set(IGN_GAZEBO_VER 5)
+set(IGN_GAZEBO_VER 6)
find_package(ignition-gazebo${IGN_GAZEBO_VER} REQUIRED)
# Fetch and configure GTest
diff --git a/examples/standalone/joy_to_twist/CMakeLists.txt b/examples/standalone/joy_to_twist/CMakeLists.txt
index dbda6c5867b..3f63c7255ce 100644
--- a/examples/standalone/joy_to_twist/CMakeLists.txt
+++ b/examples/standalone/joy_to_twist/CMakeLists.txt
@@ -1,10 +1,10 @@
cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
-find_package(ignition-transport10 QUIET REQUIRED OPTIONAL_COMPONENTS log)
-set(IGN_TRANSPORT_VER ${ignition-transport10_VERSION_MAJOR})
+find_package(ignition-transport11 QUIET REQUIRED OPTIONAL_COMPONENTS log)
+set(IGN_TRANSPORT_VER ${ignition-transport11_VERSION_MAJOR})
-find_package(sdformat11 REQUIRED)
-set(SDF_VER ${sdformat11_VERSION_MAJOR})
+find_package(sdformat12 REQUIRED)
+set(SDF_VER ${sdformat12_VERSION_MAJOR})
add_executable(joy_to_twist joy_to_twist.cc)
target_link_libraries(joy_to_twist
diff --git a/examples/standalone/joystick/CMakeLists.txt b/examples/standalone/joystick/CMakeLists.txt
index 57d0dfc49c7..cea3c614afe 100644
--- a/examples/standalone/joystick/CMakeLists.txt
+++ b/examples/standalone/joystick/CMakeLists.txt
@@ -2,11 +2,11 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
# joystick currently works only on linux
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
- find_package(ignition-transport10 QUIET REQUIRED OPTIONAL_COMPONENTS log)
- set(IGN_TRANSPORT_VER ${ignition-transport10_VERSION_MAJOR})
+ find_package(ignition-transport11 QUIET REQUIRED OPTIONAL_COMPONENTS log)
+ set(IGN_TRANSPORT_VER ${ignition-transport11_VERSION_MAJOR})
- find_package(sdformat11 REQUIRED)
- set(SDF_VER ${sdformat11_VERSION_MAJOR})
+ find_package(sdformat12 REQUIRED)
+ set(SDF_VER ${sdformat12_VERSION_MAJOR})
add_executable(joystick joystick.cc)
target_link_libraries(joystick
diff --git a/examples/standalone/keyboard/CMakeLists.txt b/examples/standalone/keyboard/CMakeLists.txt
index b58d56794e3..2f7128cfbf9 100644
--- a/examples/standalone/keyboard/CMakeLists.txt
+++ b/examples/standalone/keyboard/CMakeLists.txt
@@ -1,14 +1,14 @@
cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
- find_package(ignition-transport10 QUIET REQUIRED OPTIONAL_COMPONENTS log)
- set(IGN_TRANSPORT_VER ${ignition-transport10_VERSION_MAJOR})
+ find_package(ignition-transport11 QUIET REQUIRED OPTIONAL_COMPONENTS log)
+ set(IGN_TRANSPORT_VER ${ignition-transport11_VERSION_MAJOR})
- find_package(sdformat11 REQUIRED)
- set(SDF_VER ${sdformat11_VERSION_MAJOR})
+ find_package(sdformat12 REQUIRED)
+ set(SDF_VER ${sdformat12_VERSION_MAJOR})
- find_package(ignition-msgs7 REQUIRED)
- set(IGN_MSGS_VER ${ignition-msgs7_VERSION_MAJOR})
+ find_package(ignition-msgs8 REQUIRED)
+ set(IGN_MSGS_VER ${ignition-msgs8_VERSION_MAJOR})
find_package(ignition-common4 REQUIRED)
set(IGN_COMMON_VER ${ignition-common4_VERSION_MAJOR})
diff --git a/examples/standalone/light_control/CMakeLists.txt b/examples/standalone/light_control/CMakeLists.txt
index cad2d0d7ac9..ce5f63be0a1 100644
--- a/examples/standalone/light_control/CMakeLists.txt
+++ b/examples/standalone/light_control/CMakeLists.txt
@@ -1,10 +1,10 @@
cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
-find_package(ignition-transport10 QUIET REQUIRED OPTIONAL_COMPONENTS log)
-set(IGN_TRANSPORT_VER ${ignition-transport10_VERSION_MAJOR})
+find_package(ignition-transport11 QUIET REQUIRED OPTIONAL_COMPONENTS log)
+set(IGN_TRANSPORT_VER ${ignition-transport11_VERSION_MAJOR})
-find_package(ignition-gazebo5 REQUIRED)
-set(IGN_GAZEBO_VER ${ignition-gazebo5_VERSION_MAJOR})
+find_package(ignition-gazebo6 REQUIRED)
+set(IGN_GAZEBO_VER ${ignition-gazebo6_VERSION_MAJOR})
add_executable(light_control light_control.cc)
target_link_libraries(light_control
diff --git a/examples/standalone/light_control/light_control.cc b/examples/standalone/light_control/light_control.cc
index 4f499787c2b..8b5cf4118a2 100644
--- a/examples/standalone/light_control/light_control.cc
+++ b/examples/standalone/light_control/light_control.cc
@@ -137,7 +137,7 @@ int main(int argc, char **argv)
m = std::sqrt(r*r + b*b + g*g);
}
r /= m;
- b /= m;
+ g /= m;
b /= m;
//! [random numbers]
diff --git a/examples/standalone/marker/CMakeLists.txt b/examples/standalone/marker/CMakeLists.txt
deleted file mode 100644
index ee4be1fdd63..00000000000
--- a/examples/standalone/marker/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
-
-if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
- find_package(ignition-transport10 QUIET REQUIRED OPTIONAL_COMPONENTS log)
- set(IGN_TRANSPORT_VER ${ignition-transport10_VERSION_MAJOR})
-
- find_package(ignition-common4 REQUIRED)
- set(IGN_COMMON_VER ${ignition-common4_VERSION_MAJOR})
-
- find_package(ignition-msgs7 REQUIRED)
- set(IGN_MSGS_VER ${ignition-msgs7_VERSION_MAJOR})
-
- add_executable(marker marker.cc)
- target_link_libraries(marker
- ignition-transport${IGN_TRANSPORT_VER}::core
- ignition-msgs${IGN_MSGS_VER}
- ignition-common${IGN_COMMON_VER}::ignition-common${IGN_COMMON_VER}
- )
-endif()
diff --git a/examples/standalone/marker/README.md b/examples/standalone/marker/README.md
deleted file mode 100644
index 10da135f301..00000000000
--- a/examples/standalone/marker/README.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Ignition Visualization Marker Example
-
-This example demonstrates how to create, modify, and delete visualization
-markers in Ignition Gazebo.
-
-## Build Instructions
-
-From this directory:
-
- mkdir build
- cd build
- cmake ..
- make
-
-## Execute Instructions
-
-Launch ign gazebo unpaused then from the build directory above:
-
- ./marker
-
-The terminal will output messages indicating visualization changes that
-will occur in Ignition Gazebo's render window.
diff --git a/examples/standalone/marker/marker.cc b/examples/standalone/marker/marker.cc
deleted file mode 100644
index ec57227e837..00000000000
--- a/examples/standalone/marker/marker.cc
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Copyright (C) 2019 Open Source Robotics Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
-*/
-
-#include
-#include
-#include
-
-#include
-
-/////////////////////////////////////////////////
-int main(int _argc, char **_argv)
-{
- ignition::transport::Node node;
-
- // Create the marker message
- ignition::msgs::Marker markerMsg;
- ignition::msgs::Material matMsg;
- markerMsg.set_ns("default");
- markerMsg.set_id(0);
- markerMsg.set_action(ignition::msgs::Marker::ADD_MODIFY);
- markerMsg.set_type(ignition::msgs::Marker::SPHERE);
- markerMsg.set_visibility(ignition::msgs::Marker::GUI);
-
- // Set color to Blue
- markerMsg.mutable_material()->mutable_ambient()->set_r(0);
- markerMsg.mutable_material()->mutable_ambient()->set_g(0);
- markerMsg.mutable_material()->mutable_ambient()->set_b(1);
- markerMsg.mutable_material()->mutable_ambient()->set_a(1);
- markerMsg.mutable_material()->mutable_diffuse()->set_r(0);
- markerMsg.mutable_material()->mutable_diffuse()->set_g(0);
- markerMsg.mutable_material()->mutable_diffuse()->set_b(1);
- markerMsg.mutable_material()->mutable_diffuse()->set_a(1);
- markerMsg.mutable_lifetime()->set_sec(2);
- markerMsg.mutable_lifetime()->set_nsec(0);
- ignition::msgs::Set(markerMsg.mutable_scale(),
- ignition::math::Vector3d(1.0, 1.0, 1.0));
-
- // The rest of this function adds different shapes and/or modifies shapes.
- // Read the terminal statements to figure out what each node.Request
- // call accomplishes.
- std::cout << "Spawning a blue sphere with lifetime 2s\n";
- std::this_thread::sleep_for(std::chrono::seconds(4));
- ignition::msgs::Set(markerMsg.mutable_pose(),
- ignition::math::Pose3d(2, 2, 0, 0, 0, 0));
- node.Request("/marker", markerMsg);
- std::cout << "Sleeping for 2 seconds\n";
- std::this_thread::sleep_for(std::chrono::seconds(2));
-
- std::cout << "Spawning a black sphere at the origin with no lifetime\n";
- std::this_thread::sleep_for(std::chrono::seconds(4));
- markerMsg.set_id(1);
- ignition::msgs::Set(markerMsg.mutable_pose(),
- ignition::math::Pose3d::Zero);
- markerMsg.mutable_material()->mutable_ambient()->set_b(0);
- markerMsg.mutable_material()->mutable_diffuse()->set_b(0);
- markerMsg.mutable_lifetime()->set_sec(0);
- node.Request("/marker", markerMsg);
-
- std::cout << "Moving the black sphere to x=0, y=1, z=1\n";
- std::this_thread::sleep_for(std::chrono::seconds(4));
- ignition::msgs::Set(markerMsg.mutable_pose(),
- ignition::math::Pose3d(0, 1, 1, 0, 0, 0));
- node.Request("/marker", markerMsg);
-
- std::cout << "Shrinking the black sphere\n";
- std::this_thread::sleep_for(std::chrono::seconds(4));
- ignition::msgs::Set(markerMsg.mutable_scale(),
- ignition::math::Vector3d(0.2, 0.2, 0.2));
- node.Request("/marker", markerMsg);
-
- std::cout << "Changing the black sphere to red\n";
- markerMsg.mutable_material()->mutable_ambient()->set_r(1);
- markerMsg.mutable_material()->mutable_ambient()->set_g(0);
- markerMsg.mutable_material()->mutable_ambient()->set_b(0);
- markerMsg.mutable_material()->mutable_diffuse()->set_r(1);
- markerMsg.mutable_material()->mutable_diffuse()->set_g(0);
- markerMsg.mutable_material()->mutable_diffuse()->set_b(0);
- std::this_thread::sleep_for(std::chrono::seconds(4));
- node.Request("/marker", markerMsg);
-
- std::cout << "Adding a green ellipsoid\n";
- markerMsg.mutable_material()->mutable_ambient()->set_r(0);
- markerMsg.mutable_material()->mutable_ambient()->set_g(1);
- markerMsg.mutable_material()->mutable_ambient()->set_b(0);
- markerMsg.mutable_material()->mutable_diffuse()->set_r(0);
- markerMsg.mutable_material()->mutable_diffuse()->set_g(1);
- markerMsg.mutable_material()->mutable_diffuse()->set_b(0);
- std::this_thread::sleep_for(std::chrono::seconds(4));
- markerMsg.set_id(2);
- markerMsg.set_action(ignition::msgs::Marker::ADD_MODIFY);
- markerMsg.set_type(ignition::msgs::Marker::SPHERE);
- ignition::msgs::Set(markerMsg.mutable_scale(),
- ignition::math::Vector3d(0.5, 1.0, 1.5));
- ignition::msgs::Set(markerMsg.mutable_pose(),
- ignition::math::Pose3d(2, 0, .5, 0, 0, 0));
- node.Request("/marker", markerMsg);
-
- std::cout << "Changing the green ellipsoid to a cylinder\n";
- std::this_thread::sleep_for(std::chrono::seconds(4));
- markerMsg.set_type(ignition::msgs::Marker::CYLINDER);
- ignition::msgs::Set(markerMsg.mutable_scale(),
- ignition::math::Vector3d(0.5, 0.5, 1.5));
- node.Request("/marker", markerMsg);
-
- std::cout << "Connecting the sphere and cylinder with a line\n";
- std::this_thread::sleep_for(std::chrono::seconds(4));
- markerMsg.set_id(3);
- ignition::msgs::Set(markerMsg.mutable_pose(),
- ignition::math::Pose3d(0, 0, 0, 0, 0, 0));
- markerMsg.set_action(ignition::msgs::Marker::ADD_MODIFY);
- markerMsg.set_type(ignition::msgs::Marker::LINE_LIST);
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(0.0, 1.0, 1.0));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(2, 0, 0.5));
- node.Request("/marker", markerMsg);
-
- std::cout << "Adding a square around the origin\n";
- std::this_thread::sleep_for(std::chrono::seconds(4));
- markerMsg.set_id(4);
- markerMsg.set_action(ignition::msgs::Marker::ADD_MODIFY);
- markerMsg.set_type(ignition::msgs::Marker::LINE_STRIP);
- ignition::msgs::Set(markerMsg.mutable_point(0),
- ignition::math::Vector3d(0.5, 0.5, 0.05));
- ignition::msgs::Set(markerMsg.mutable_point(1),
- ignition::math::Vector3d(0.5, -0.5, 0.05));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(-0.5, -0.5, 0.05));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(-0.5, 0.5, 0.05));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(0.5, 0.5, 0.05));
- node.Request("/marker", markerMsg);
-
- std::cout << "Adding 100 points inside the square\n";
- std::this_thread::sleep_for(std::chrono::seconds(4));
- markerMsg.set_id(5);
- markerMsg.set_action(ignition::msgs::Marker::ADD_MODIFY);
- markerMsg.set_type(ignition::msgs::Marker::POINTS);
- markerMsg.clear_point();
- for (int i = 0; i < 100; ++i)
- {
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(
- ignition::math::Rand::DblUniform(-0.49, 0.49),
- ignition::math::Rand::DblUniform(-0.49, 0.49),
- 0.05));
- }
- node.Request("/marker", markerMsg);
-
- std::cout << "Adding a semi-circular triangle fan\n";
- std::this_thread::sleep_for(std::chrono::seconds(4));
- markerMsg.set_id(6);
- markerMsg.set_action(ignition::msgs::Marker::ADD_MODIFY);
- markerMsg.set_type(ignition::msgs::Marker::TRIANGLE_FAN);
- markerMsg.clear_point();
- ignition::msgs::Set(markerMsg.mutable_pose(),
- ignition::math::Pose3d(0, 1.5, 0, 0, 0, 0));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(0, 0, 0.05));
- double radius = 2;
- for (double t = 0; t <= M_PI; t+= 0.01)
- {
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(radius * cos(t), radius * sin(t), 0.05));
- }
- node.Request("/marker", markerMsg);
-
- std::cout << "Adding two triangles using a triangle list\n";
- std::this_thread::sleep_for(std::chrono::seconds(4));
- markerMsg.set_id(7);
- markerMsg.set_action(ignition::msgs::Marker::ADD_MODIFY);
- markerMsg.set_type(ignition::msgs::Marker::TRIANGLE_LIST);
- markerMsg.clear_point();
- ignition::msgs::Set(markerMsg.mutable_pose(),
- ignition::math::Pose3d(0, -1.5, 0, 0, 0, 0));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(0, 0, 0.05));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(1, 0, 0.05));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(1, 1, 0.05));
-
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(1, 1, 0.05));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(2, 1, 0.05));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(2, 2, 0.05));
-
- node.Request("/marker", markerMsg);
-
- std::cout << "Adding a rectangular triangle strip\n";
- std::this_thread::sleep_for(std::chrono::seconds(4));
- markerMsg.set_id(8);
- markerMsg.set_action(ignition::msgs::Marker::ADD_MODIFY);
- markerMsg.set_type(ignition::msgs::Marker::TRIANGLE_STRIP);
- markerMsg.clear_point();
- ignition::msgs::Set(markerMsg.mutable_pose(),
- ignition::math::Pose3d(-2, -2, 0, 0, 0, 0));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(0, 0, 0.05));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(1, 0, 0.05));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(0, 1, 0.05));
-
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(1, 1, 0.05));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(0, 2, 0.05));
- ignition::msgs::Set(markerMsg.add_point(),
- ignition::math::Vector3d(1, 2, 0.05));
-
- node.Request("/marker", markerMsg);
- std::cout << "Adding multiple markers via /marker_array\n";
- std::this_thread::sleep_for(std::chrono::seconds(4));
-
- ignition::msgs::Marker_V markerMsgs;
- ignition::msgs::Boolean res;
- bool result;
- unsigned int timeout = 5000;
-
- // Create first blue sphere marker
- auto markerMsg1 = markerMsgs.add_marker();
- markerMsg1->set_ns("default");
- markerMsg1->set_id(0);
- markerMsg1->set_action(ignition::msgs::Marker::ADD_MODIFY);
- markerMsg1->set_type(ignition::msgs::Marker::SPHERE);
- markerMsg1->set_visibility(ignition::msgs::Marker::GUI);
-
- // Set color to Blue
- markerMsg1->mutable_material()->mutable_ambient()->set_r(0);
- markerMsg1->mutable_material()->mutable_ambient()->set_g(0);
- markerMsg1->mutable_material()->mutable_ambient()->set_b(1);
- markerMsg1->mutable_material()->mutable_ambient()->set_a(1);
- markerMsg1->mutable_material()->mutable_diffuse()->set_r(0);
- markerMsg1->mutable_material()->mutable_diffuse()->set_g(0);
- markerMsg1->mutable_material()->mutable_diffuse()->set_b(1);
- markerMsg1->mutable_material()->mutable_diffuse()->set_a(1);
- ignition::msgs::Set(markerMsg1->mutable_scale(),
- ignition::math::Vector3d(1.0, 1.0, 1.0));
- ignition::msgs::Set(markerMsg1->mutable_pose(),
- ignition::math::Pose3d(3, 3, 0, 0, 0, 0));
-
- // Create second red box marker
- auto markerMsg2 = markerMsgs.add_marker();
- markerMsg2->set_ns("default");
- markerMsg2->set_id(0);
- markerMsg2->set_action(ignition::msgs::Marker::ADD_MODIFY);
- markerMsg2->set_type(ignition::msgs::Marker::BOX);
- markerMsg2->set_visibility(ignition::msgs::Marker::GUI);
-
- // Set color to Red
- markerMsg2->mutable_material()->mutable_ambient()->set_r(1);
- markerMsg2->mutable_material()->mutable_ambient()->set_g(0);
- markerMsg2->mutable_material()->mutable_ambient()->set_b(0);
- markerMsg2->mutable_material()->mutable_ambient()->set_a(1);
- markerMsg2->mutable_material()->mutable_diffuse()->set_r(1);
- markerMsg2->mutable_material()->mutable_diffuse()->set_g(0);
- markerMsg2->mutable_material()->mutable_diffuse()->set_b(0);
- markerMsg2->mutable_material()->mutable_diffuse()->set_a(1);
- markerMsg2->mutable_lifetime()->set_sec(2);
- markerMsg2->mutable_lifetime()->set_nsec(0);
- ignition::msgs::Set(markerMsg2->mutable_scale(),
- ignition::math::Vector3d(1.0, 1.0, 1.0));
- ignition::msgs::Set(markerMsg2->mutable_pose(),
- ignition::math::Pose3d(3, 3, 2, 0, 0, 0));
-
- // Create green capsule marker
- auto markerMsg3 = markerMsgs.add_marker();
- markerMsg3->set_ns("default");
- markerMsg3->set_id(0);
- markerMsg3->set_action(ignition::msgs::Marker::ADD_MODIFY);
- markerMsg3->set_type(ignition::msgs::Marker::CAPSULE);
- markerMsg3->set_visibility(ignition::msgs::Marker::GUI);
-
- // Set color to Green
- markerMsg3->mutable_material()->mutable_ambient()->set_r(0);
- markerMsg3->mutable_material()->mutable_ambient()->set_g(1);
- markerMsg3->mutable_material()->mutable_ambient()->set_b(0);
- markerMsg3->mutable_material()->mutable_ambient()->set_a(1);
- markerMsg3->mutable_material()->mutable_diffuse()->set_r(0);
- markerMsg3->mutable_material()->mutable_diffuse()->set_g(1);
- markerMsg3->mutable_material()->mutable_diffuse()->set_b(0);
- markerMsg3->mutable_material()->mutable_diffuse()->set_a(1);
- markerMsg3->mutable_lifetime()->set_sec(2);
- markerMsg3->mutable_lifetime()->set_nsec(0);
- ignition::msgs::Set(markerMsg3->mutable_scale(),
- ignition::math::Vector3d(1.0, 1.0, 1.0));
- ignition::msgs::Set(markerMsg3->mutable_pose(),
- ignition::math::Pose3d(3, 3, 4, 0, 0, 0));
-
- // Publish the three created markers above simultaneously
- node.Request("/marker_array", markerMsgs, timeout, res, result);
-
- std::cout << "Deleting all the markers\n";
- std::this_thread::sleep_for(std::chrono::seconds(4));
- markerMsg.set_action(ignition::msgs::Marker::DELETE_ALL);
- node.Request("/marker", markerMsg);
-}
diff --git a/examples/standalone/multi_lrauv_race/CMakeLists.txt b/examples/standalone/multi_lrauv_race/CMakeLists.txt
new file mode 100644
index 00000000000..5de19f32127
--- /dev/null
+++ b/examples/standalone/multi_lrauv_race/CMakeLists.txt
@@ -0,0 +1,12 @@
+cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
+
+find_package(ignition-transport11 QUIET REQUIRED OPTIONAL_COMPONENTS log)
+set(IGN_TRANSPORT_VER ${ignition-transport11_VERSION_MAJOR})
+
+find_package(ignition-gazebo6 REQUIRED)
+set(IGN_GAZEBO_VER ${ignition-gazebo6_VERSION_MAJOR})
+
+add_executable(multi_lrauv_race multi_lrauv_race.cc)
+target_link_libraries(multi_lrauv_race
+ ignition-transport${IGN_TRANSPORT_VER}::core
+ ignition-gazebo${IGN_GAZEBO_VER}::ignition-gazebo${IGN_GAZEBO_VER})
diff --git a/examples/standalone/multi_lrauv_race/README.md b/examples/standalone/multi_lrauv_race/README.md
new file mode 100644
index 00000000000..d9a2e2ee2b9
--- /dev/null
+++ b/examples/standalone/multi_lrauv_race/README.md
@@ -0,0 +1,25 @@
+# Multi-LRAUV Swimming Race Example
+
+This example shows the usage of the Thruster plugin and rudder joint control on
+multiple autonomous underwater vehicles (AUV) with buoyancy, lift drag, and
+hydrodynamics plugins. The multiple vehicles are differentiated by namespaces.
+
+## Build Instructions
+
+From this directory, run the following to compile:
+
+ mkdir build
+ cd build
+ cmake ..
+ make
+
+## Execute Instructions
+
+From the `build` directory, run Ignition and the example controller:
+
+ ign gazebo -r ../../../worlds/multi_lrauv_race.sdf
+ ./multi_lrauv_race
+
+The example controller will output pseudorandom propeller and rudder commands
+to move the vehicles forward. The low speed is by design to model the actual
+vehicle velocity.
diff --git a/examples/standalone/multi_lrauv_race/multi_lrauv_race.cc b/examples/standalone/multi_lrauv_race/multi_lrauv_race.cc
new file mode 100644
index 00000000000..a180748fd1b
--- /dev/null
+++ b/examples/standalone/multi_lrauv_race/multi_lrauv_race.cc
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+/*
+ * In each iteration, for each vehicle, generate a random fin angle and thrust
+ * within reasonable limits, and send the command to the vehicle.
+ *
+ * Usage:
+ * $ multi_lrauv_race
+ */
+
+#include
+#include
+
+#include
+#include
+
+// Fin joint limits from tethys model.sdf
+double random_angle_within_limits(double min=-0.261799, double max=0.261799)
+{
+ return min + static_cast(rand()) /
+ (static_cast(RAND_MAX / (max - min)));
+}
+
+// Nominal speed is thruster 300 rpm ~ 31.4 radians per second ~ 6.14 Newtons
+double random_thrust_within_limits(double min=-6.14, double max=6.14)
+{
+ return min + static_cast(rand()) /
+ (static_cast(RAND_MAX / (max - min)));
+}
+
+int main(int argc, char** argv)
+{
+ // Initialize random seed
+ srand(time(NULL));
+
+ std::vector ns;
+ ns.push_back("tethys");
+ ns.push_back("triton");
+ ns.push_back("daphne");
+
+ ignition::transport::Node node;
+
+ std::vector rudderTopics;
+ rudderTopics.resize(ns.size(), "");
+ std::vector rudderPubs;
+ rudderPubs.resize(ns.size());
+
+ std::vector propellerTopics;
+ propellerTopics.resize(ns.size(), "");
+ std::vector propellerPubs;
+ propellerPubs.resize(ns.size());
+
+ // Set up topic names and publishers
+ for (int i = 0; i < ns.size(); i++)
+ {
+ rudderTopics[i] = ignition::transport::TopicUtils::AsValidTopic(
+ "/model/" + ns[i] + "/joint/vertical_fins_joint/0/cmd_pos");
+ rudderPubs[i] = node.Advertise(rudderTopics[i]);
+
+ propellerTopics[i] = ignition::transport::TopicUtils::AsValidTopic(
+ "/model/" + ns[i] + "/joint/propeller_joint/cmd_pos");
+ propellerPubs[i] = node.Advertise(
+ propellerTopics[i]);
+ }
+
+ std::vector rudderCmds;
+ rudderCmds.resize(ns.size(), 0.0);
+ std::vector propellerCmds;
+ propellerCmds.resize(ns.size(), 0.0);
+
+ float artificial_speedup = 1;
+
+ while (true)
+ {
+ for (int i = 0; i < ns.size(); i++)
+ {
+ rudderCmds[i] = random_angle_within_limits(-0.01, 0.01);
+ ignition::msgs::Double rudderMsg;
+ rudderMsg.set_data(rudderCmds[i]);
+ rudderPubs[i].Publish(rudderMsg);
+
+ propellerCmds[i] = random_thrust_within_limits(
+ -6.14 * artificial_speedup, 0);
+ ignition::msgs::Double propellerMsg;
+ propellerMsg.set_data(propellerCmds[i]);
+ propellerPubs[i].Publish(propellerMsg);
+
+ std::cout << "Commanding " << ns[i] << " rudder angle " << rudderCmds[i]
+ << " rad, thrust " << propellerCmds[i] << " Newtons" << std::endl;
+ }
+
+ std::this_thread::sleep_for(std::chrono::milliseconds(200));
+ }
+}
diff --git a/examples/standalone/scene_requester/CMakeLists.txt b/examples/standalone/scene_requester/CMakeLists.txt
index 4264cf811b8..ad388ffd853 100644
--- a/examples/standalone/scene_requester/CMakeLists.txt
+++ b/examples/standalone/scene_requester/CMakeLists.txt
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
-find_package(ignition-transport10 QUIET REQUIRED OPTIONAL_COMPONENTS log)
-set(IGN_TRANSPORT_VER ${ignition-transport10_VERSION_MAJOR})
+find_package(ignition-transport11 QUIET REQUIRED OPTIONAL_COMPONENTS log)
+set(IGN_TRANSPORT_VER ${ignition-transport11_VERSION_MAJOR})
add_executable(scene_requester scene_requester.cc)
target_link_libraries(scene_requester
diff --git a/examples/worlds/3k_shapes.sdf b/examples/worlds/3k_shapes.sdf
index e0f014f1a17..171a9cbe923 100644
--- a/examples/worlds/3k_shapes.sdf
+++ b/examples/worlds/3k_shapes.sdf
@@ -26,89 +26,6 @@
0.8 0.8 0.8
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 1.0 1.0 1.0
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/shapes/control
- /world/shapes/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/shapes/stats
-
-
-
-
-
-
- false
- docked
-
-
-
-
-
-
-
-
-
-
-
true
0 0 10 0 0 0
diff --git a/examples/worlds/actor.sdf b/examples/worlds/actor.sdf
index 346c511b26e..fc6af99daa8 100644
--- a/examples/worlds/actor.sdf
+++ b/examples/worlds/actor.sdf
@@ -22,89 +22,6 @@
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/actors/control
- /world/actors/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/actors/stats
-
-
-
-
-
-
- docked
-
-
-
-
-
-
- false
- docked
-
-
-
-
-
true
0 0 10 0 0 0
@@ -248,5 +165,59 @@
+
+
+ https://fuel.ignitionrobotics.org/1.0/Mingfei/models/actor/tip/files/meshes/walk.dae
+ 1.0
+
+
+ https://fuel.ignitionrobotics.org/1.0/Mingfei/models/actor/tip/files/meshes/walk.dae
+ true
+
+
+
+
diff --git a/examples/worlds/actor_crowd.sdf b/examples/worlds/actor_crowd.sdf
index 545e475a1dc..b53d19e91a4 100644
--- a/examples/worlds/actor_crowd.sdf
+++ b/examples/worlds/actor_crowd.sdf
@@ -17,82 +17,6 @@
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/actors/control
- /world/actors/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/actors/stats
-
-
-
-
-
-
- false
- docked
-
-
-
-
-
true
0 0 10 0 0 0
diff --git a/examples/worlds/actors_population.sdf.erb b/examples/worlds/actors_population.sdf.erb
index 98bc2a2ad08..c885588bdef 100644
--- a/examples/worlds/actors_population.sdf.erb
+++ b/examples/worlds/actors_population.sdf.erb
@@ -21,82 +21,6 @@
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/actors/control
- /world/actors/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/actors/stats
-
-
-
-
-
-
- false
- docked
-
-
-
-
-
true
0 0 10 0 0 0
diff --git a/examples/worlds/auv_controls.sdf b/examples/worlds/auv_controls.sdf
index e82596c1520..224ed03ef53 100644
--- a/examples/worlds/auv_controls.sdf
+++ b/examples/worlds/auv_controls.sdf
@@ -1,4 +1,30 @@
+
@@ -23,11 +49,6 @@
filename="ignition-gazebo-scene-broadcaster-system"
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
@@ -143,4 +164,4 @@
-
\ No newline at end of file
+
diff --git a/examples/worlds/buoyancy.sdf b/examples/worlds/buoyancy.sdf
index 66823419ed8..7ba29ec521e 100644
--- a/examples/worlds/buoyancy.sdf
+++ b/examples/worlds/buoyancy.sdf
@@ -44,74 +44,6 @@
1000
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/buoyancy/control
- /world/buoyancy/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/buoyancy/stats
-
-
-
-
true
0 0 10 0 0 0
@@ -641,4 +573,3 @@
-
diff --git a/examples/worlds/buoyancy_engine.sdf b/examples/worlds/buoyancy_engine.sdf
new file mode 100644
index 00000000000..145e955cab7
--- /dev/null
+++ b/examples/worlds/buoyancy_engine.sdf
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+ 0.0 1.0 1.0
+ 0.0 0.7 0.8
+
+
+
+ 0.001
+ 1.0
+
+
+
+
+
+
+
+
+
+
+
+ 1000
+
+
+
+ true
+ 0 0 10 0 0 0
+ 1 1 1 1
+ 0.5 0.5 0.5 1
+
+ 1000
+ 0.9
+ 0.01
+ 0.001
+
+ -0.5 0.1 -0.9
+
+
+
+ 0 0 0 0 0 0
+
+
+ 1000
+
+ 133.3333
+ 133.3333
+ 133.3333
+
+
+
+
+
+ 1 1 1
+
+
+
+
+
+
+ 1 1 1
+
+
+
+
+
+ body
+ buoyant_box
+ 0.0
+ 0.002
+ 0.002
+ 0.003
+ 0.0003
+
+
+
+
+
diff --git a/examples/worlds/camera_sensor.sdf b/examples/worlds/camera_sensor.sdf
index b79e76b81bf..8e8c0907286 100644
--- a/examples/worlds/camera_sensor.sdf
+++ b/examples/worlds/camera_sensor.sdf
@@ -35,20 +35,56 @@
-
+
3D View
false
docked
- ogre
+ ogre2
scene
- 1.0 1.0 1.0
+ 0.4 0.4 0.4
0.8 0.8 0.8
-6 0 6 0 0.5 0
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
@@ -69,6 +105,7 @@
true
true
true
+ true
@@ -100,6 +137,20 @@
docked
+
+
+
+
+ docked
+
+
+
+
+
+
+ docked
+
+
diff --git a/examples/worlds/conveyor.sdf b/examples/worlds/conveyor.sdf
new file mode 100644
index 00000000000..4769da875b0
--- /dev/null
+++ b/examples/worlds/conveyor.sdf
@@ -0,0 +1,349 @@
+
+
+
+
+
+ 0.004
+ 1.0
+
+
+
+
+
+
+
+
+
+ 1.0 1.0 1.0
+ 0.8 0.8 0.8
+
+
+
+ true
+ 0 0 10 0 0 0
+ 0.8 0.8 0.8 1
+ 0.8 0.8 0.8 1
+
+ 1000
+ 0.9
+ 0.01
+ 0.001
+
+ -0.5 0.1 -0.9
+
+
+
+
+ 1
+
+ 0 0 0 0 0 0
+
+ 6.06
+
+ 0.002731
+ 0
+ 0
+ 0.032554
+ 1.5e-05
+ 0.031391
+
+
+
+ 0 0 0 0 0 0
+
+
+ 5 0.2 0.1
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+ 2.5 0 0 -1.570796327 0 0
+
+
+ 0.2
+ 0.05
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+ -2.5 0 0 -1.570796327 0 0
+
+
+ 0.2
+ 0.05
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+ 0 0 0 0 0 0
+
+
+ 5 0.2 0.1
+
+
+
+
+ 2.5 0 0 -1.570796327 0 0
+
+
+ 0.2
+ 0.05
+
+
+
+
+ -2.5 0 0 -1.570796327 0 0
+
+
+ 0.2
+ 0.05
+
+
+
+ 1
+ 0
+
+
+
+ base_link
+
+
+
+
+
+
+ 87
+
+
+
+
+
+
+
+ 88
+
+
+
+
+
+
+
+ 83
+
+
+
+
+
+
+ 0 0 1 0 0 0
+
+
+ 1.06
+
+ 0.01
+ 0
+ 0
+ 0.01
+ 0
+ 0.01
+
+
+
+ 0 0 0 0 0 0
+
+
+ 0.1 0.1 0.1
+
+
+
+ 1 1 1 1
+
+
+
+
+
+ 0.1 0.1 0.1
+
+
+ 0 0 0 0 0 0
+
+
+
+
+
+
+
+
+ 3D View
+ false
+ docked
+
+
+ ogre2
+ scene
+ 0.4 0.4 0.4
+ 0.8 0.8 0.8
+ -6 0 6 0 0.5 0
+
+
+
+
+
+ World control
+ false
+ false
+ 72
+ 121
+ 1
+
+ floating
+
+
+
+
+
+
+ true
+ true
+ true
+
+
+
+
+
+
+ World stats
+ false
+ false
+ 110
+ 290
+ 1
+
+ floating
+
+
+
+
+
+
+ true
+ true
+ true
+ true
+
+
+
+
+
+ Transform control
+
+
+
+
+ false
+ 230
+ 50
+ floating
+ false
+ #666666
+
+
+
+
+
+
+
+
+
+
+ false
+ 200
+ 50
+ floating
+ false
+ #666666
+
+
+
+
+
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+
+ Visualize Contacts
+
+
+
+
+ false
+ 230
+ 50
+ floating
+ false
+ #ffffff
+
+
+
+
+
diff --git a/examples/worlds/depth_camera_sensor.sdf b/examples/worlds/depth_camera_sensor.sdf
index ce693fe1b0a..80ce0abf932 100644
--- a/examples/worlds/depth_camera_sensor.sdf
+++ b/examples/worlds/depth_camera_sensor.sdf
@@ -25,7 +25,7 @@
-
+
3D View
false
@@ -39,50 +39,41 @@
-6 0 6 0 0.5 0
-
-
+
+
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
+ floating
+ 5
+ 5
+ false
-
- true
- true
- true
-
-
-
-
+
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
-
- true
- true
- true
- true
diff --git a/examples/worlds/follow_actor.sdf b/examples/worlds/follow_actor.sdf
index 468e3e68950..7570ae127d9 100644
--- a/examples/worlds/follow_actor.sdf
+++ b/examples/worlds/follow_actor.sdf
@@ -23,97 +23,6 @@
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/actors/control
- /world/actors/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/actors/stats
-
-
-
-
-
-
- 0
- 0
- 263
- 50
- floating
- false
- #03a9f4
-
-
-
-
-
-
- false
- docked
-
-
-
-
-
-
-
true
0 0 10 0 0 0
diff --git a/examples/worlds/fuel_textured_mesh.sdf b/examples/worlds/fuel_textured_mesh.sdf
index 7c2a39f95ad..2f42cf76081 100644
--- a/examples/worlds/fuel_textured_mesh.sdf
+++ b/examples/worlds/fuel_textured_mesh.sdf
@@ -37,7 +37,7 @@
-
+
3D View
false
@@ -46,11 +46,48 @@
ogre2
scene
- 1.0 1.0 1.0
+ 0.4 0.4 0.4
0.8 0.8 0.8
-6 0 6 0 0.5 0
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
@@ -71,6 +108,7 @@
true
true
true
+ true
@@ -95,7 +133,6 @@
true
true
true
-
@@ -103,7 +140,6 @@
docked
-
diff --git a/examples/worlds/graded_buoyancy.sdf b/examples/worlds/graded_buoyancy.sdf
new file mode 100644
index 00000000000..7b5b8936c71
--- /dev/null
+++ b/examples/worlds/graded_buoyancy.sdf
@@ -0,0 +1,287 @@
+
+
+
+
+
+
+ 0.001
+ 1.0
+
+
+
+
+
+
+
+
+
+ 1000
+
+ 0
+ 1
+
+
+
+
+ lighter_than_water::ball::body
+
+
+ lighter_than_water::box
+
+
+ balloon_lighter_than_air
+ box_neutral_buoyancy
+ box_negative_buoyancy
+
+
+
+ true
+ 0 0 10 0 0 0
+ 1 1 1 1
+ 0.5 0.5 0.5 1
+
+ 1000
+ 0.9
+ 0.01
+ 0.001
+
+ -0.5 0.1 -0.9
+
+
+
+ true
+
+
+
+
+ 100 100
+ 0 0 1
+
+
+
+ 0 0 1 0.5
+ 0 0 1 0.5
+ 0 0 1 0.5
+
+
+
+
+
+
+ 0 0 0 0 0 0
+
+
+
+ 0 0 0 0 0 0
+
+ 25
+
+ 86.28907821859966
+ 0
+ 0
+ 86.28907821859966
+ 0
+ 5.026548245743671
+
+
+
+
+
+
+ 0.2
+
+
+
+
+
+
+ 0.2
+
+
+
+
+
+
+
+
+ 3 5 0 0.3 0.2 0.1
+
+
+ 200
+
+ 33.33
+ 0
+ 0
+ 33.33
+ 0
+ 33.33
+
+
+
+
+
+
+ 1 1 1
+
+
+
+
+
+
+ 1 1 1
+
+
+
+
+
+
+
+
+
+ 0 -5 -5 0 0 0
+
+ 0 0 0 0 0 0
+
+ 0.1
+
+ 86.28907821859966
+ 0
+ 0
+ 86.28907821859966
+ 0
+ 5.026548245743671
+
+
+
+
+
+
+ 0.2
+
+
+
+
+
+
+ 0.2
+
+
+
+
+
+
+
+
+ 0 5 -3 0 0 0
+
+
+ 1000
+ 0 0 0.1 0 0 0
+
+ 86.28907821859966
+ 0
+ 0
+ 86.28907821859966
+ 0
+ 5.026548245743671
+
+
+
+
+
+
+ 1 1 1
+
+
+
+
+
+
+ 1 1 1
+
+
+
+
+
+
+
+
+ 0 -8 0 0 0 0
+
+
+ 1050
+ 0 0 0.1 0 0 0
+
+ 86.28907821859966
+ 0
+ 0
+ 86.28907821859966
+ 0
+ 5.026548245743671
+
+
+
+
+
+
+ 1 1 1
+
+
+
+
+
+
+ 1 1 1
+
+
+
+
+
+
+
+
+ 4 -6 0 0 0 0
+
+
+ 1050
+ 0 0 0.1 0 0 0
+
+ 86.28907821859966
+ 0
+ 0
+ 86.28907821859966
+ 0
+ 5.026548245743671
+
+
+
+
+
+
+ 1 1 1
+
+
+
+
+
+
+ 1 1 1
+
+
+
+
+
+
+
diff --git a/examples/worlds/grid.sdf b/examples/worlds/grid.sdf
index b7755445730..affe9141786 100644
--- a/examples/worlds/grid.sdf
+++ b/examples/worlds/grid.sdf
@@ -28,20 +28,38 @@
-
+
3D View
false
docked
- ogre
+ ogre2
scene
0.4 0.4 0.4
0.8 0.8 0.8
-6 0 6 0 0.5 0
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
@@ -62,6 +80,7 @@
true
true
true
+ true
@@ -86,7 +105,6 @@
true
true
true
-
@@ -95,11 +113,6 @@
Grid Config
-
-
-
-
-
diff --git a/examples/worlds/heightmap.sdf b/examples/worlds/heightmap.sdf
index 6c2de6cb05c..c73203683fa 100644
--- a/examples/worlds/heightmap.sdf
+++ b/examples/worlds/heightmap.sdf
@@ -13,128 +13,6 @@
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -80 40 60 0.0 0.4 -0.45
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
-
-
-
-
-
- Transform control
- false
- 0
- 0
- 250
- 50
- floating
- false
- #666666
-
-
-
-
-
-
- false
- 250
- 0
- 150
- 50
- floating
- false
- #666666
-
-
-
-
-
-
- false
- 400
- 0
- 150
- 50
- floating
- false
- #666666
-
-
-
-
-
-
- false
- docked
-
-
-
-
-
-
- false
- docked
-
-
-
-
-
true
0 0 10 0 0 0
diff --git a/examples/worlds/import_mesh.sdf b/examples/worlds/import_mesh.sdf
index 1309625e2d9..685bace5d09 100644
--- a/examples/worlds/import_mesh.sdf
+++ b/examples/worlds/import_mesh.sdf
@@ -29,72 +29,6 @@
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 1.0 1.0 1.0
- 0.8 0.8 0.8
- -2 0 2 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/fuel/control
- /world/fuel/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/fuel/stats
-
-
-
true
0 0 10 0 0 0
diff --git a/examples/worlds/joint_controller.sdf b/examples/worlds/joint_controller.sdf
index 86e54350a73..b3838229b78 100644
--- a/examples/worlds/joint_controller.sdf
+++ b/examples/worlds/joint_controller.sdf
@@ -25,44 +25,6 @@
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- 1 0 0.1 0 0.05 3.14
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
- true
- true
- true
-
-
-
true
0 0 10 0 0 0
diff --git a/examples/worlds/joint_position_controller.sdf b/examples/worlds/joint_position_controller.sdf
index b2bd1045097..d1c09e43d46 100644
--- a/examples/worlds/joint_position_controller.sdf
+++ b/examples/worlds/joint_position_controller.sdf
@@ -19,46 +19,6 @@
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- 1 0 0.1 0 0.05 3.14
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
-
-
-
true
0 0 10 0 0 0
diff --git a/examples/worlds/joint_trajectory_controller.sdf b/examples/worlds/joint_trajectory_controller.sdf
index 556eb8ad526..6d5155129e3 100644
--- a/examples/worlds/joint_trajectory_controller.sdf
+++ b/examples/worlds/joint_trajectory_controller.sdf
@@ -154,64 +154,6 @@
false
-
-
-
-
-
-
-
- 3D View
- false
- docked
-
- ogre
- scene
- 1 0 0 0 0 3.1416
-
-
-
-
-
- World control
- false
- false
- 50
- 100
- 1
- floating
-
-
-
-
-
- true
- true
- true
-
-
-
-
-
- World stats
- false
- false
- 250
- 110
- 1
- floating
-
-
-
-
-
- true
- true
- true
- true
-
-
-
diff --git a/examples/worlds/lightmap.sdf b/examples/worlds/lightmap.sdf
index 8686531441f..51cd2ab8829 100644
--- a/examples/worlds/lightmap.sdf
+++ b/examples/worlds/lightmap.sdf
@@ -18,71 +18,6 @@ There are no dynamic lights or shadows in the scene.
false
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 1.0 1.0 1.0
- 0.8 0.8 0.8
- -5.5 -2 0.5 0 0.0 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
-
-
-
-
true
Indoor Lightmap
diff --git a/examples/worlds/minimal_scene.sdf b/examples/worlds/minimal_scene.sdf
new file mode 100644
index 00000000000..90f85eac6d2
--- /dev/null
+++ b/examples/worlds/minimal_scene.sdf
@@ -0,0 +1,513 @@
+
+
+
+
+
+
+
+
+
+
+ 3D View
+ false
+ docked
+
+
+ ogre2
+ scene
+ 0.4 0.4 0.4
+ 0.8 0.8 0.8
+ -6 0 6 0 0.5 0
+
+ 0.25
+ 25000
+
+
+
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+
+
+ World control
+ false
+ false
+ 72
+ 121
+ 1
+
+ floating
+
+
+
+
+
+
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ World stats
+ false
+ false
+ 110
+ 290
+ 1
+
+ floating
+
+
+
+
+
+
+ true
+ true
+ true
+ true
+
+
+
+
+
+ false
+ 0
+ 0
+ 250
+ 50
+ floating
+ false
+ #666666
+
+
+
+
+
+
+ false
+ 250
+ 0
+ 150
+ 50
+ floating
+ false
+ #666666
+
+
+
+
+
+
+ false
+ 0
+ 50
+ 250
+ 50
+ floating
+ false
+ #777777
+
+
+
+ false
+
+
+
+
+
+ false
+ 250
+ 50
+ 50
+ 50
+ floating
+ false
+ #777777
+
+
+
+
+
+
+ false
+ 300
+ 50
+ 50
+ 50
+ floating
+ false
+ #777777
+
+
+
+ true
+ true
+ 4000000
+
+
+
+ false
+
+
+
+
+
+ docked_collapsed
+
+
+
+
+
+
+ docked_collapsed
+
+
+
+
+
+
+ docked_collapsed
+
+
+
+ false
+
+
+
+
+
+ true
+ 0 0 10 0 0 0
+ 0.8 0.8 0.8 1
+ 0.2 0.2 0.2 1
+
+ 1000
+ 0.9
+ 0.01
+ 0.001
+
+ -0.5 0.1 -0.9
+
+
+
+ true
+
+
+
+
+ 0 0 1
+ 100 100
+
+
+
+
+
+
+ 0 0 1
+ 100 100
+
+
+
+ 0.8 0.8 0.8 1
+ 0.8 0.8 0.8 1
+ 0.8 0.8 0.8 1
+
+
+
+
+
+
+ 0 0 0.5 0 0 0
+
+
+
+ 0.16666
+ 0
+ 0
+ 0.16666
+ 0
+ 0.16666
+
+ 1.0
+
+
+
+
+ 1 1 1
+
+
+
+
+
+
+
+ 1 1 1
+
+
+
+ 1 0 0 1
+ 1 0 0 1
+ 1 0 0 1
+
+
+
+
+
+
+ 0 -1.5 0.5 0 0 0
+
+
+
+ 0.1458
+ 0
+ 0
+ 0.1458
+ 0
+ 0.125
+
+ 1.0
+
+
+
+
+ 0.5
+ 1.0
+
+
+
+
+
+
+
+ 0.5
+ 1.0
+
+
+
+ 0 1 0 1
+ 0 1 0 1
+ 0 1 0 1
+
+
+
+
+
+
+ 0 1.5 0.5 0 0 0
+
+
+
+ 0.1
+ 0
+ 0
+ 0.1
+ 0
+ 0.1
+
+ 1.0
+
+
+
+
+ 0.5
+
+
+
+
+
+
+
+ 0.5
+
+
+
+ 0 0 1 1
+ 0 0 1 1
+ 0 0 1 1
+
+
+
+
+
+
+ 0 -3.0 0.5 0 0 0
+
+
+
+ 0.074154
+ 0
+ 0
+ 0.074154
+ 0
+ 0.018769
+
+ 1.0
+
+
+
+
+ 0.2
+ 0.6
+
+
+
+
+
+
+ 0.2
+ 0.6
+
+
+
+ 1 1 0 1
+ 1 1 0 1
+ 1 1 0 1
+
+
+
+
+
+
+ 0 3.0 0.5 0 0 0
+
+
+
+ 0.068
+ 0
+ 0
+ 0.058
+ 0
+ 0.026
+
+ 1.0
+
+
+
+
+ 0.2 0.3 0.5
+
+
+
+
+
+
+ 0.2 0.3 0.5
+
+
+
+ 1 0 1 1
+ 1 0 1 1
+ 1 0 1 1
+
+
+
+
+
+
diff --git a/examples/worlds/multi_lrauv_race.sdf b/examples/worlds/multi_lrauv_race.sdf
new file mode 100644
index 00000000000..717bf861802
--- /dev/null
+++ b/examples/worlds/multi_lrauv_race.sdf
@@ -0,0 +1,365 @@
+
+
+
+
+
+
+
+
+ 0.0 1.0 1.0
+ 0.0 0.7 0.8
+
+
+
+ 0.001
+ 1.0
+
+
+
+
+
+
+
+
+
+
+
+ 1000
+
+
+
+
+
+
+
+ true
+ 0 0 10 0 0 0
+ 1 1 1 1
+ 0.5 0.5 0.5 1
+
+ 1000
+ 0.9
+ 0.01
+ 0.001
+
+ -0.5 0.1 -0.9
+
+
+
+
+ -5 0 0 0 0 0
+ https://fuel.ignitionrobotics.org/1.0/mabel/models/Turquoise turbidity generator
+
+
+
+ 0 0 1 0 0 1.57
+ https://fuel.ignitionrobotics.org/1.0/accurrent/models/MBARI Tethys LRAUV
+
+
+
+ horizontal_fins_joint
+ 0.1
+
+
+
+ vertical_fins_joint
+ 0.1
+
+
+
+ tethys
+ propeller_joint
+ 0.004422
+ 1000
+ 0.2
+
+
+
+
+
+
+ 1000
+ 4.13
+ -1.1
+ 0.2
+ 0.03
+ 0.17
+ 0
+ 0.0244
+ 0 1 0
+ 1 0 0
+ vertical_fins
+ 0 0 0
+
+
+
+
+ 1000
+ 4.13
+ -1.1
+ 0.2
+ 0.03
+ 0.17
+ 0
+ 0.0244
+ 0 0 1
+ 1 0 0
+ horizontal_fins
+ 0 0 0
+
+
+
+ base_link
+ -4.876161
+ -126.324739
+ -126.324739
+ 0
+ -33.46
+ -33.46
+ -6.2282
+ 0
+ -601.27
+ 0
+ -601.27
+ 0
+ -0.1916
+ 0
+ -632.698957
+ 0
+ -632.698957
+ 0
+
+
+
+
+
+ 5 0 1 0 0 1.57
+ https://fuel.ignitionrobotics.org/1.0/accurrent/models/MBARI Tethys LRAUV
+ triton
+
+
+
+ horizontal_fins_joint
+ 0.1
+
+
+
+ vertical_fins_joint
+ 0.1
+
+
+
+ triton
+ propeller_joint
+ 0.004422
+ 1000
+ 0.2
+
+
+
+
+
+
+ 1000
+ 4.13
+ -1.1
+ 0.2
+ 0.03
+ 0.17
+ 0
+ 0.0244
+ 0 1 0
+ 1 0 0
+ vertical_fins
+ 0 0 0
+
+
+
+
+ 1000
+ 4.13
+ -1.1
+ 0.2
+ 0.03
+ 0.17
+ 0
+ 0.0244
+ 0 0 1
+ 1 0 0
+ horizontal_fins
+ 0 0 0
+
+
+
+ base_link
+ -4.876161
+ -126.324739
+ -126.324739
+ 0
+ -33.46
+ -33.46
+ -6.2282
+ 0
+ -601.27
+ 0
+ -601.27
+ 0
+ -0.1916
+ 0
+ -632.698957
+ 0
+ -632.698957
+ 0
+
+
+
+
+
+ -5 0 1 0 0 1.57
+ https://fuel.ignitionrobotics.org/1.0/accurrent/models/MBARI Tethys LRAUV
+ daphne
+
+
+
+ horizontal_fins_joint
+ 0.1
+
+
+
+ vertical_fins_joint
+ 0.1
+
+
+
+ daphne
+ propeller_joint
+ 0.004422
+ 1000
+ 0.2
+
+
+
+
+
+
+ 1000
+ 4.13
+ -1.1
+ 0.2
+ 0.03
+ 0.17
+ 0
+ 0.0244
+ 0 1 0
+ 1 0 0
+ vertical_fins
+ 0 0 0
+
+
+
+
+ 1000
+ 4.13
+ -1.1
+ 0.2
+ 0.03
+ 0.17
+ 0
+ 0.0244
+ 0 0 1
+ 1 0 0
+ horizontal_fins
+ 0 0 0
+
+
+
+ base_link
+ -4.876161
+ -126.324739
+ -126.324739
+ 0
+ -33.46
+ -33.46
+ -6.2282
+ 0
+ -601.27
+ 0
+ -601.27
+ 0
+ -0.1916
+ 0
+ -632.698957
+ 0
+ -632.698957
+ 0
+
+
+
+
+
+
+ 0 0 -1 0 0 3.1415926
+ https://fuel.ignitionrobotics.org/1.0/mabel/models/ABCSign_5m
+ start_line
+
+
+ 0 -25 -1 0 0 3.1415926
+ https://fuel.ignitionrobotics.org/1.0/mabel/models/ABCSign_5m
+ finish_line
+
+
+
+
diff --git a/examples/worlds/multicopter_velocity_control.sdf b/examples/worlds/multicopter_velocity_control.sdf
index 57e5bed01fc..effbeeafff7 100644
--- a/examples/worlds/multicopter_velocity_control.sdf
+++ b/examples/worlds/multicopter_velocity_control.sdf
@@ -12,6 +12,10 @@ You can use the velocity controller and command linear velocity and yaw angular
ign topic -t "/X3/gazebo/command/twist" -m ignition.msgs.Twist -p " "
+ Listen to odometry:
+
+ ign topic -e -t "/model/x3/odometry"
+
Send commands to the hexacopter to go straight up:
@@ -20,6 +24,11 @@ You can use the velocity controller and command linear velocity and yaw angular
To hover
ign topic -t "/X4/gazebo/command/twist" -m ignition.msgs.Twist -p " "
+
+ Listen to odometry:
+
+ ign topic -e -t "/model/X4/odometry"
+
-->
@@ -210,6 +219,11 @@ You can use the velocity controller and command linear velocity and yaw angular
+
+ 3
+
0 3 1 0 0 0
@@ -400,6 +414,11 @@ You can use the velocity controller and command linear velocity and yaw angular
+
+ 3
+
diff --git a/examples/worlds/optical_tactile_sensor_plugin.sdf b/examples/worlds/optical_tactile_sensor_plugin.sdf
index 08a900120fd..06262adb008 100644
--- a/examples/worlds/optical_tactile_sensor_plugin.sdf
+++ b/examples/worlds/optical_tactile_sensor_plugin.sdf
@@ -40,7 +40,7 @@
-
+
3D View
false
@@ -51,10 +51,45 @@
scene
0.4 0.4 0.4
0.8 0.8 0.8
- 0.35 0.23 0.94 0 0.05 -2.53
-
+ -6 0 6 0 0.5 0
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
@@ -75,10 +110,7 @@
true
true
true
- /world/optical_tactile_plugin/control
- /world/optical_tactile_plugin/stats
- /world/depth_camera_sensor/control
- /world/depth_camera_sensor/stats
+ true
@@ -103,39 +135,37 @@
true
true
true
- /world/optical_tactile_plugin/stats
- /world/depth_camera_sensor/stats
-
+
+
- docked
+ docked_collapsed
+
+
+
+
+
+
+ docked_collapsed
-
-
+
- 0
- 0
- 263
- 50
+ false
+ 5
+ 5
floating
false
- #03a9f4
-
-
+
- false
- docked
+ docked
-
-
-
true
diff --git a/examples/worlds/plane_propeller_demo.sdf b/examples/worlds/plane_propeller_demo.sdf
index 6de0ef7e92b..d7f104cbf02 100644
--- a/examples/worlds/plane_propeller_demo.sdf
+++ b/examples/worlds/plane_propeller_demo.sdf
@@ -24,69 +24,6 @@
filename="ignition-gazebo-scene-broadcaster-system"
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- 20 0 3 0 0.0 3.14
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
-
-
true
diff --git a/examples/worlds/plot_3d.sdf b/examples/worlds/plot_3d.sdf
index afa33866c31..ed66fbf3a6c 100644
--- a/examples/worlds/plot_3d.sdf
+++ b/examples/worlds/plot_3d.sdf
@@ -14,7 +14,7 @@
-
+
3D View
false
@@ -28,6 +28,42 @@
5 -1.5 3 0 0.37 2.8
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
@@ -48,6 +84,8 @@
true
true
true
+ true
+
@@ -73,6 +111,16 @@
true
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
diff --git a/examples/worlds/segmentation_camera.sdf b/examples/worlds/segmentation_camera.sdf
new file mode 100644
index 00000000000..30d515cb4c0
--- /dev/null
+++ b/examples/worlds/segmentation_camera.sdf
@@ -0,0 +1,422 @@
+
+
+
+
+
+
+
+
+
+
+
+ ogre2
+
+
+
+
+
+
+
+ 3D View
+ false
+ docked
+
+
+ ogre2
+ scene
+ 0.4 0.4 0.4
+ 0.8 0.8 0.8
+ -6 0 6 0 0.5 0
+
+
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+
+ World control
+ false
+ false
+ 72
+ 121
+ 1
+
+ floating
+
+
+
+
+
+
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ World stats
+ false
+ false
+ 110
+ 290
+ 1
+
+ floating
+
+
+
+
+
+
+ true
+ true
+ true
+ true
+
+
+
+
+
+ docked_collapsed
+
+
+
+
+
+
+ docked_collapsed
+
+
+
+
+
+
+
+ semantic/colored_map
+
+
+
+
+ panoptic/colored_map
+
+
+
+
+ semantic/labels_map
+
+
+
+
+ true
+ 0 0 10 0 0 0
+ 0.8 0.8 0.8 1
+ 0.2 0.2 0.2 1
+
+ 1000
+ 0.9
+ 0.01
+ 0.001
+
+ -0.5 0.1 -0.9
+
+
+
+ true
+
+
+
+
+ 0 0 1
+ 100 100
+
+
+
+
+
+
+ 0 0 1
+ 100 100
+
+
+
+ 0.8 0.8 0.8 1
+ 0.8 0.8 0.8 1
+ 0.8 0.8 0.8 1
+
+
+
+
+
+
+
+ Car1
+ -2 -2 0 0 0 0
+
+ https://fuel.ignitionrobotics.org/1.0/OpenRobotics/models/Hatchback blue
+
+
+
+
+
+
+
+ Car2
+ -3 -5 0 0 0 0
+
+ https://fuel.ignitionrobotics.org/1.0/OpenRobotics/models/Pickup
+
+
+
+
+
+
+
+ Car3
+ -4 3 0 0 0 -1.57
+
+ https://fuel.ignitionrobotics.org/1.0/OpenRobotics/models/SUV
+
+
+
+
+
+
+
+
+ tree1
+ -2 5 0 0 0 0
+
+ https://fuel.ignitionrobotics.org/1.0/OpenRobotics/models/Pine Tree
+
+
+
+
+
+
+
+ tree2
+ -7 2 0 0 0 0
+
+ https://fuel.ignitionrobotics.org/1.0/OpenRobotics/models/Pine Tree
+
+
+
+
+
+
+
+ tree3
+ -7 -4 0 0 0 0
+
+ https://fuel.ignitionrobotics.org/1.0/OpenRobotics/models/Pine Tree
+
+
+
+
+
+
+
+
+ home
+ -15 0 0 0 0 1.57
+
+ https://fuel.ignitionrobotics.org/1.0/OpenRobotics/models/Collapsed House
+
+
+
+
+
+ cone1
+ 0 1 0 0 0 1.570796
+
+ https://fuel.ignitionrobotics.org/1.0/OpenRobotics/models/Construction Cone
+
+
+
+
+
+
+
+ cone2
+ 0 4 0 0 0 1.570796
+
+ https://fuel.ignitionrobotics.org/1.0/OpenRobotics/models/Construction Cone
+
+
+
+
+
+
+
+ cone3
+ 2 -2 0 0 0.0 1.57
+
+ https://fuel.ignitionrobotics.org/1.0/OpenRobotics/models/Construction Cone
+
+
+
+
+
+
+
+
+ 6 0 2.0 0 0.0 3.14
+
+ 0 0 0 0 0 0
+
+ 0.5
+
+ 0.000166667
+ 0.000166667
+ 0.000166667
+
+
+
+
+
+ 0.1 0.1 0.1
+
+
+
+
+
+
+ 0.1 0.1 0.1
+
+
+
+
+
+ panoptic
+
+ instance
+ 1.57
+
+ 800
+ 600
+
+
+ 0.1
+ 100
+
+
+
+
+ 1
+ 30
+ true
+
+
+
+
+
+
+ 6 0 2.0 0 0.0 3.14
+
+ 0 0 0 0 0 0
+
+ 0.5
+
+ 0.000166667
+ 0.000166667
+ 0.000166667
+
+
+
+
+
+ 0.1 0.1 0.1
+
+
+
+
+
+
+ 0.1 0.1 0.1
+
+
+
+
+ semantic
+
+ semantic
+ 1.57
+
+ 800
+ 600
+
+
+ 0.1
+ 100
+
+
+
+
+ 1
+ 30
+ true
+
+
+
+
+
+
diff --git a/examples/worlds/sensors.sdf b/examples/worlds/sensors.sdf
index eefd6a8ee8c..b07bd89925e 100644
--- a/examples/worlds/sensors.sdf
+++ b/examples/worlds/sensors.sdf
@@ -35,6 +35,10 @@
filename="ignition-gazebo-magnetometer-system"
name="ignition::gazebo::systems::Magnetometer">
+
+
@@ -186,5 +190,71 @@
+
+
+ true
+
+
+
+ 0 0 2.0 0 0 0
+
+
+ 0.100000
+ 0.000000
+ 0.000000
+ 0.100000
+ 0.000000
+ 0.100000
+
+ 10.000000
+
+
+
+
+ 0.100000
+
+
+
+
+ 0 0 -0.75 0 0 0
+
+
+ 0.0100000
+ 1.5
+
+
+
+
+
+
+ 0.100000
+
+
+
+
+
+ world
+ base_plate
+
+
+ base_plate
+ link_1
+ 0 0 -1.5 0 0 0
+
+
+ -1.57079
+ 1.57079
+
+
+ 0.000000
+ 0.000000
+
+ 1.000000 0.000000 0.000000
+
+
+ 10
+
+
+
diff --git a/examples/worlds/sensors_demo.sdf b/examples/worlds/sensors_demo.sdf
index 9e0d2414e33..31374a1a3e8 100644
--- a/examples/worlds/sensors_demo.sdf
+++ b/examples/worlds/sensors_demo.sdf
@@ -26,10 +26,11 @@
name="ignition::gazebo::systems::SceneBroadcaster">
+
-
+
3D View
false
@@ -43,6 +44,42 @@
-6 0 6 0 0.5 0
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
@@ -63,6 +100,7 @@
true
true
true
+ true
@@ -89,7 +127,18 @@
true
+
+
+
+ docked
+
+
+
+
+
+ docked
+
diff --git a/examples/worlds/shapes_population.sdf.erb b/examples/worlds/shapes_population.sdf.erb
index b65cc9c3ce2..91b52529c41 100644
--- a/examples/worlds/shapes_population.sdf.erb
+++ b/examples/worlds/shapes_population.sdf.erb
@@ -26,89 +26,6 @@
0.8 0.8 0.8
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 1.0 1.0 1.0
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/shapes/control
- /world/shapes/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/shapes/stats
-
-
-
-
-
-
- false
- docked
-
-
-
-
-
-
-
-
-
-
-
true
0 0 10 0 0 0
diff --git a/examples/worlds/sky.sdf b/examples/worlds/sky.sdf
index d555a0a0b45..be14b395c5a 100644
--- a/examples/worlds/sky.sdf
+++ b/examples/worlds/sky.sdf
@@ -10,9 +10,10 @@ Currently only supported using ogre2 rendering engine plugin.
-
+
+
-
+
3D View
false
@@ -23,11 +24,46 @@ Currently only supported using ogre2 rendering engine plugin.
scene
0.4 0.4 0.4
0.8 0.8 0.8
-
- 6 0 1.0 0 0.0 3.14
+ -6 0 6 0 0.5 0
-
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
World control
@@ -47,10 +83,11 @@ Currently only supported using ogre2 rendering engine plugin.
true
true
true
+ true
-
+
World stats
@@ -71,20 +108,28 @@ Currently only supported using ogre2 rendering engine plugin.
true
true
true
-
- RGB camera
- 350
- 315
+ docked
- camera
-
+
+
+
+ docked
+
+
+
+
+
+ docked
+
+
+
0.001
@@ -302,4 +347,3 @@ Currently only supported using ogre2 rendering engine plugin.
-
diff --git a/examples/worlds/spherical_coordinates.sdf b/examples/worlds/spherical_coordinates.sdf
new file mode 100644
index 00000000000..b8195168fb4
--- /dev/null
+++ b/examples/worlds/spherical_coordinates.sdf
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EARTH_WGS84
+ ENU
+ -22.9
+ -43.2
+ 0
+ 0
+
+
+
+
diff --git a/examples/worlds/thermal_camera.sdf b/examples/worlds/thermal_camera.sdf
index e21215537a2..cb37b616190 100644
--- a/examples/worlds/thermal_camera.sdf
+++ b/examples/worlds/thermal_camera.sdf
@@ -31,7 +31,7 @@
-
+
3D View
false
@@ -45,6 +45,42 @@
-6 0 6 0 0.5 0
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
@@ -65,8 +101,7 @@
true
true
true
- /world/thermal_camera/control
- /world/thermal_camera/stats
+ true
@@ -91,7 +126,20 @@
true
true
true
- /world/thermal_camera/stats
+
+
+
+
+
+ docked
+
+
+
+
+
+
+ docked
+
diff --git a/examples/worlds/tracked_vehicle_simple.sdf b/examples/worlds/tracked_vehicle_simple.sdf
new file mode 100644
index 00000000000..cf9cd29acc1
--- /dev/null
+++ b/examples/worlds/tracked_vehicle_simple.sdf
@@ -0,0 +1,1822 @@
+
+
+
+
+ 0.004
+ 1.0
+
+
+
+
+
+ 1 1 1 1
+ 0.8 0.8 0.8 1
+ 1
+
+
+ 1
+ 0 0 10 0 0 0
+ 0.8 0.8 0.8 1
+ 0.8 0.8 0.8 1
+
+ 1000
+ 0.9
+ 0.01
+ 0.001
+
+ -0.5 0.1 -0.9
+
+
+ 1
+
+
+
+
+ 0 0 1
+ 100 100
+
+
+
+
+
+
+ 0 0 1
+ 100 100
+
+
+
+ 0.8 0.8 0.8 1
+ 0.8 0.8 0.8 1
+ 0.8 0.8 0.8 1
+
+
+
+
+
+ 3 0 0.1 0 0 0
+
+ 0 0 0 0 0 0
+
+ -0.122 0 0.118 1.5708 0 0
+ 13.14
+
+ 0.10019
+ 0
+ 0
+ 0.345043
+ 0
+ 0.302044
+
+
+
+ -0.122 0 0.118 0 0 0
+
+
+ 0.50017 0.24093 0.139
+
+
+
+
+ -0.122 0 0.118 0 0 0
+
+
+ 0.50017 0.24093 0.139
+
+
+
+ 0
+ 1
+ 0
+
+
+ 0 0.1985 0 0 0 0
+
+ 0 0 0.0141 0 0 0
+ 6.06
+
+ 0.002731
+ 0
+ 0
+ 0.032554
+ 1.5e-05
+ 0.031391
+
+
+
+ 0 0 0.01855 1.5708 0 1.5708
+
+
+ 0.09728 0.18094 0.5
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+ 0.25 0 0.01855 1.5708 0 0
+
+
+ 0.09728
+ 0.09047
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+ -0.25 0 0.01855 1.5708 0 0
+
+
+ 0.09728
+ 0.09047
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+ 0 0 0.01855 1.5708 0 1.5708
+
+
+ 0.09728 0.18094 0.5
+
+
+
+
+ 0.25 0 0.01855 1.5708 0 0
+
+
+ 0.09728
+ 0.09047
+
+
+
+
+ -0.25 0 0.01855 1.5708 0 0
+
+
+ 0.09728
+ 0.09047
+
+
+
+ 1
+ 0
+
+
+ left_track
+ base_link
+
+
+ 0 -0.1985 0 0 0 0
+
+ 0 0 0.0141 0 0 0
+ 6.06
+
+ 0.002731
+ 0
+ 0
+ 0.032554
+ 1.5e-05
+ 0.031391
+
+
+
+ 0 0 0.01855 1.5708 0 1.5708
+
+
+ 0.09728 0.18094 0.5
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+ 0.25 0 0.01855 1.5708 0 0
+
+
+ 0.09728
+ 0.09047
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+ -0.25 0 0.01855 1.5708 0 0
+
+
+ 0.09728
+ 0.09047
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+ 0 0 0.01855 1.5708 0 1.5708
+
+
+ 0.09728 0.18094 0.5
+
+
+
+
+ 0.25 0 0.01855 1.5708 0 0
+
+
+ 0.09728
+ 0.09047
+
+
+
+
+ -0.25 0 0.01855 1.5708 0 0
+
+
+ 0.09728
+ 0.09047
+
+
+
+ 1
+ 0
+
+
+ right_track
+ base_link
+
+
+ 0.25 0.272 0.0195 0 -0.5 0
+
+ 0.08 0 0 0 0 0
+ 0.75
+
+ 0.0017491
+ 2.8512e-07
+ 0.0018277
+ 0.012277
+ -3.6288e-07
+ 0.010941
+
+
+
+ 0 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.089
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ 0.33 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.029
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ 0.165 0 0.0325 0 0.184162 0
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ 0.165 0 -0.0325 0 -0.184162 0
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ 0.166 0 0.004 0 -0.02 0
+
+
+ 0.2 0.04981 0.07
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ 0 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.089
+
+
+
+
+ 0.33 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.029
+
+
+
+
+ 0.165 0 0.0325 0 0.184162 0
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+ 0.165 0 -0.0325 0 -0.184162 0
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+ 0.166 0 0.004 0 -0.02 0
+
+
+ 0.2 0.04981 0.07
+
+
+
+ 1
+
+ 1
+ 0
+
+
+ front_left_flipper
+ left_track
+
+ 0 1 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+
+
+ 1
+ 1
+
+ 0
+ 0.2
+
+
+
+
+
+ -0.25 0.272 0.0195 3.14159 -0.5 3.14159
+
+ 0.08 0 0 0 0 0
+ 0.75
+
+ 0.0017491
+ 2.8512e-07
+ 0.0018277
+ 0.012277
+ -3.6288e-07
+ 0.010941
+
+
+
+ 0 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.089
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ 0.33 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.029
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ 0.165 0 0.0325 0 0.184162 0
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ 0.165 0 -0.0325 0 -0.184162 0
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ 0.166 0 0.004 0 -0.02 0
+
+
+ 0.2 0.04981 0.07
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ 0 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.089
+
+
+
+
+ 0.33 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.029
+
+
+
+
+ 0.165 0 0.0325 0 0.184162 0
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+ 0.165 0 -0.0325 0 -0.184162 0
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+ 0.166 0 0.004 0 -0.02 0
+
+
+ 0.2 0.04981 0.07
+
+
+
+ 1
+
+ 1
+ 0
+
+
+ rear_left_flipper
+ left_track
+
+ 0 1 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+
+
+ 1
+ 1
+
+ 0
+ 0.2
+
+
+
+
+
+ 0.25 -0.272 0.0195 3.14159 0.5 3.14159
+
+ -0.08 0 0 0 0 0
+ 0.75
+
+ 0.0017491
+ 2.8512e-07
+ 0.0018277
+ 0.012277
+ -3.6288e-07
+ 0.010941
+
+
+
+ 0 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.089
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ -0.33 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.029
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ -0.165 0 0.0325 0 0.184162 -3.14159
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ -0.165 0 -0.0325 0 -0.184162 -3.14159
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ -0.166 0 0.004 0 -0.02 -3.14159
+
+
+ 0.2 0.04981 0.07
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ 0 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.089
+
+
+
+
+ -0.33 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.029
+
+
+
+
+ -0.165 0 0.0325 0 0.184162 -3.14159
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+ -0.165 0 -0.0325 0 -0.184162 -3.14159
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+ -0.166 0 0.004 0 -0.02 -3.14159
+
+
+ 0.2 0.04981 0.07
+
+
+
+ 1
+
+ 1
+ 0
+
+
+ front_right_flipper
+ right_track
+
+ 0 1 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+
+
+ 1
+ 1
+
+ 0
+ 0.2
+
+
+
+
+
+ -0.25 -0.272 0.0195 0 0.5 0
+
+ -0.08 0 0 0 0 0
+ 0.75
+
+ 0.0017491
+ 2.8512e-07
+ 0.0018277
+ 0.012277
+ -3.6288e-07
+ 0.010941
+
+
+
+ 0 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.089
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ -0.33 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.029
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ -0.165 0 0.0325 0 0.184162 -3.14159
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ -0.165 0 -0.0325 0 -0.184162 -3.14159
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ -0.166 0 0.004 0 -0.02 -3.14159
+
+
+ 0.2 0.04981 0.07
+
+
+
+
+
+ 0.7
+ 150
+ 0 1 0
+
+
+
+
+
+
+ 20
+
+
+ 0 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.089
+
+
+
+
+ -0.33 0 0 1.5708 0 0
+
+
+ 0.04981
+ 0.029
+
+
+
+
+ -0.165 0 0.0325 0 0.184162 -3.14159
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+ -0.165 0 -0.0325 0 -0.184162 -3.14159
+
+
+ 0.33 0.04981 0.055
+
+
+
+
+ -0.166 0 0.004 0 -0.02 -3.14159
+
+
+ 0.2 0.04981 0.07
+
+
+
+ 1
+
+ 1
+ 0
+
+
+ rear_right_flipper
+ right_track
+
+ 0 1 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+
+
+ 1
+ 1
+
+ 0
+ 0.2
+
+
+
+
+
+
+ left_track
+ front_left_flipper
+ rear_left_flipper
+ right_track
+ front_right_flipper
+ rear_right_flipper
+ 0.4
+ 0.18094
+ 0.5
+
+
+
+ left_track
+ -1.0
+ 1.0
+
+
+
+ right_track
+ -1.0
+ 1.0
+
+
+ front_left_flipper
+ -1.0
+ 1.0
+
+
+ rear_left_flipper
+ -1.0
+ 1.0
+
+
+ front_right_flipper
+ -1.0
+ 1.0
+
+
+ rear_right_flipper
+ -1.0
+ 1.0
+
+
+
+
+
+ 87
+
+
+
+
+
+
+
+ 88
+
+
+
+
+
+
+
+ 83
+
+
+
+
+
+
+
+ 65
+
+
+
+
+
+
+
+ 68
+
+
+
+
+
+
+
+ 81
+
+
+
+
+
+
+
+ 69
+
+
+
+
+
+
+
+ 90
+
+
+
+
+
+
+
+ 67
+
+
+
+
+
+ 7 0 0 0 0 1.5708
+
+
+ 0 1.6625 0.0375 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 1.6625 0.0375 0 0 0
+
+
+ 0 1.4875 0.1125 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 1.4875 0.1125 0 0 0
+
+
+ 0 1.3125 0.1875 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 1.3125 0.1875 0 0 0
+
+
+ 0 1.1375 0.2625 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 1.1375 0.2625 0 0 0
+
+
+ 0 0.9625 0.3375 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 0.9625 0.3375 0 0 0
+
+
+ 0 0.7875 0.4125 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 0.7875 0.4125 0 0 0
+
+
+ 0 0.6125 0.4875 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 0.6125 0.4875 0 0 0
+
+
+ 0 0.4375 0.5625 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 0.4375 0.5625 0 0 0
+
+
+ 0 0.2625 0.6375 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 0.2625 0.6375 0 0 0
+
+
+ 0 0.0875 0.7125 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 0.0875 0.7125 0 0 0
+
+
+ 0 -0.0875 0.7875 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 -0.0875 0.7875 0 0 0
+
+
+ 0 -0.2625 0.8625 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 -0.2625 0.8625 0 0 0
+
+
+ 0 -0.4375 0.9375 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 -0.4375 0.9375 0 0 0
+
+
+ 0 -0.6125 1.0125 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 -0.6125 1.0125 0 0 0
+
+
+ 0 -0.7875 1.0875 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 -0.7875 1.0875 0 0 0
+
+
+ 0 -0.9625 1.1625 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 -0.9625 1.1625 0 0 0
+
+
+ 0 -1.1375 1.2375 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 -1.1375 1.2375 0 0 0
+
+
+ 0 -1.3125 1.3125 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 -1.3125 1.3125 0 0 0
+
+
+ 0 -1.4875 1.3875 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 -1.4875 1.3875 0 0 0
+
+
+ 0 -1.6625 1.4625 0 0 0
+
+
+ 1 0.175 0.075
+
+
+
+ 1 1 1 1
+
+
+ 0
+
+
+
+
+
+ 1 0.175 0.075
+
+
+ 0 -1.6625 1.4625 0 0 0
+
+
+ 1
+
+
+ 1
+ 0 0 -0.06 0 0 1.5708
+
+
+ 0 0 0 0 1.5708 0
+
+
+ 0.15
+ 0.8
+
+
+
+
+
+ 1
+
+
+
+
+
+ 0 0 0 0 1.5708 0
+
+
+ 0.15
+ 0.8
+
+
+
+
+
+
+ 1
+ 2 2 0.028 1.7821 0 1.5708
+
+
+ 0 0 0 0 0 0
+
+
+ 0.85 0.15 0.5
+
+
+
+
+
+ 1
+
+
+
+
+
+ 0 0 0 0 0 0
+
+
+ 0.85 0.15 0.5
+
+
+
+
+
+
+ pallet
+ 2 -2 0.1 0 0 0
+ https://fuel.ignitionrobotics.org/1.0/openrobotics/models/Euro pallet
+
+
+
+
+
+ 3D View
+ 0
+ docked
+
+ ogre2
+ scene
+ 0.4 0.4 0.4
+ 0.8 0.8 0.8
+ -6 0 6 0 0.5 0
+
+
+
+ World control
+ 0
+ 0
+ 72
+ 121
+ 1
+ floating
+
+
+
+
+
+ 1
+ 1
+ 1
+
+
+
+ World stats
+ 0
+ 0
+ 110
+ 290
+ 1
+ floating
+
+
+
+
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ Transform control
+
+
+
+
+ 0
+ 230
+ 50
+ floating
+ 0
+ #666666
+
+
+
+
+
+
+
+
+ 0
+ 200
+ 50
+ floating
+ 0
+ #666666
+
+
+
+
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+ 0 0 -9.8
+ 6e-06 2.3e-05 -4.2e-05
+
+
+
\ No newline at end of file
diff --git a/examples/worlds/triggered_publisher.sdf b/examples/worlds/triggered_publisher.sdf
index bb48095a064..303f78becab 100644
--- a/examples/worlds/triggered_publisher.sdf
+++ b/examples/worlds/triggered_publisher.sdf
@@ -39,72 +39,6 @@ start falling.
name="ignition::gazebo::systems::Altimeter">
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- 3 -9 9 0 0.6 1.3
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
-
-
-
-
-
true
0 0 10 0 0 0
diff --git a/examples/worlds/trisphere_cycle_wheel_slip.sdf b/examples/worlds/trisphere_cycle_wheel_slip.sdf
index 77383613157..84ddecc6ff3 100644
--- a/examples/worlds/trisphere_cycle_wheel_slip.sdf
+++ b/examples/worlds/trisphere_cycle_wheel_slip.sdf
@@ -27,74 +27,6 @@
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/wheel_slip/control
- /world/wheel_slip/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/wheel_slip/stats
-
-
-
-
true
diff --git a/examples/worlds/tunnel.sdf b/examples/worlds/tunnel.sdf
index 796d77fd7ba..583b3136412 100644
--- a/examples/worlds/tunnel.sdf
+++ b/examples/worlds/tunnel.sdf
@@ -24,7 +24,7 @@
-
+
3D View
false
@@ -38,6 +38,77 @@
-6 0 6 0 0.5 0
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+
+ Transform control
+
+
+
+
+ false
+ 230
+ 50
+ floating
+ false
+ #666666
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+ false
+ 200
+ 50
+ floating
+ false
+ #666666
+
+
@@ -58,6 +129,7 @@
true
true
true
+ true
@@ -84,20 +156,6 @@
true
-
-
-
- docked_collapsed
-
-
-
-
-
-
- docked_collapsed
-
-
-
Vehicle camera
@@ -107,39 +165,19 @@
false
-
-
+
+
- Transform control
-
-
-
-
- false
- 230
- 50
- floating
- false
- #666666
+ docked_collapsed
-
-
+
+
-
-
-
-
- false
- 200
- 50
- floating
- false
- #666666
+ docked_collapsed
-
@@ -155,6 +193,7 @@
+
diff --git a/examples/worlds/velocity_control.sdf b/examples/worlds/velocity_control.sdf
index 71c30486f92..1150268c3e3 100644
--- a/examples/worlds/velocity_control.sdf
+++ b/examples/worlds/velocity_control.sdf
@@ -29,75 +29,6 @@
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -6 0 6 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- /world/velocity_control/control
- /world/velocity_control/stats
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
- /world/velocity_control/stats
-
-
-
-
-
true
0 0 10 0 0 0
diff --git a/examples/worlds/video_record_dbl_pendulum.sdf b/examples/worlds/video_record_dbl_pendulum.sdf
index ddbe423ff36..5f0775c0467 100644
--- a/examples/worlds/video_record_dbl_pendulum.sdf
+++ b/examples/worlds/video_record_dbl_pendulum.sdf
@@ -31,7 +31,7 @@
-
+
3D View
false
@@ -45,6 +45,121 @@
-6 0 6 0 0.5 0
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+
+ false
+ 0
+ 0
+ 250
+ 50
+ floating
+ false
+ #666666
+
+
+
+
+
+
+ false
+ 250
+ 0
+ 150
+ 50
+ floating
+ false
+ #666666
+
+
+
+
+
+
+ false
+ 0
+ 50
+ 250
+ 50
+ floating
+ false
+ #777777
+
+
+
+ false
+
+
+
+
+ false
+ 250
+ 50
+ 50
+ 50
+ floating
+ false
+ #777777
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
@@ -65,6 +180,7 @@
true
true
true
+ true
@@ -89,13 +205,30 @@
true
true
true
-
-
-
+
+
+ false
+ 300
+ 50
+ 50
+ 50
+ floating
+ false
+ #777777
+
+
+ true
+ true
+ 4000000
+
+
+
+ false
+
diff --git a/examples/worlds/visibility.sdf b/examples/worlds/visibility.sdf
index 01b2ca0048f..31bec366b30 100644
--- a/examples/worlds/visibility.sdf
+++ b/examples/worlds/visibility.sdf
@@ -42,7 +42,7 @@
-
+
3D View
false
@@ -51,12 +51,47 @@
ogre2
scene
- 1.0 1.0 1.0
+ 0.4 0.4 0.4
0.8 0.8 0.8
-6 0 6 0 0.5 0
- 0x05
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
@@ -77,8 +112,7 @@
true
true
true
- /world/shapes/control
- /world/shapes/stats
+ true
@@ -103,8 +137,6 @@
true
true
true
- /world/shapes/stats
-
@@ -126,6 +158,19 @@
false
+
+
+
+ docked
+
+
+
+
+
+
+ docked
+
+
diff --git a/examples/worlds/visualize_contacts.sdf b/examples/worlds/visualize_contacts.sdf
index 5db0ca25d2f..f39994dcedd 100644
--- a/examples/worlds/visualize_contacts.sdf
+++ b/examples/worlds/visualize_contacts.sdf
@@ -1,7 +1,7 @@
-
+
3D View
false
docked
- ogre
+ ogre2
scene
0.4 0.4 0.4
0.8 0.8 0.8
-6 0 6 0 0.5 0
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
@@ -65,8 +102,7 @@ Contacts will be visualized as blue spheres and green cylinders.
true
true
true
- /world/visualize_contacts/control
- /world/visualize_contacts/stats
+ true
@@ -91,21 +127,16 @@ Contacts will be visualized as blue spheres and green cylinders.
true
true
true
- /world/visualize_contacts/stats
-
-
-
-
- 0
- 0
- 263
- 50
- floating
- false
- #03a9f4
-
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
diff --git a/examples/worlds/visualize_lidar.sdf b/examples/worlds/visualize_lidar.sdf
index 311aa688c6e..d38fe690ce7 100644
--- a/examples/worlds/visualize_lidar.sdf
+++ b/examples/worlds/visualize_lidar.sdf
@@ -26,7 +26,7 @@
-
+
3D View
false
@@ -40,6 +40,42 @@
-6 0 6 0 0.5 0
+
+
+
+ floating
+ 5
+ 5
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
+
+
+ false
+ 5
+ 5
+ floating
+ false
+
+
@@ -60,8 +96,7 @@
true
true
true
- /world/visualize_lidar_world/control
- /world/visualize_lidar_world/stats
+ true
@@ -86,11 +121,22 @@
true
true
true
- /world/visualize_lidar_world/stats
+
+
+
+
+
+
+ docked
+
+
+
+
+
- docked
+ docked
diff --git a/examples/worlds/wind.sdf b/examples/worlds/wind.sdf
index d5d58b73b78..34cfceffa53 100644
--- a/examples/worlds/wind.sdf
+++ b/examples/worlds/wind.sdf
@@ -22,72 +22,6 @@ Example:
name="ignition::gazebo::systems::SceneBroadcaster">
-
-
-
-
-
- 3D View
- false
- docked
-
-
- ogre2
- scene
- 0.4 0.4 0.4
- 0.8 0.8 0.8
- -1 0 1 0 0.5 0
-
-
-
-
-
- World control
- false
- false
- 72
- 121
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
-
-
-
-
-
-
- World stats
- false
- false
- 110
- 290
- 1
-
- floating
-
-
-
-
-
-
- true
- true
- true
- true
-
-
-
-
-
true
0 0 10 0 0 0
diff --git a/include/ignition/gazebo/EntityComponentManager.hh b/include/ignition/gazebo/EntityComponentManager.hh
index 089df6dd93d..a98c2b854b1 100644
--- a/include/ignition/gazebo/EntityComponentManager.hh
+++ b/include/ignition/gazebo/EntityComponentManager.hh
@@ -28,6 +28,7 @@
#include
#include
#include
+#include
#include
#include
@@ -74,6 +75,41 @@ namespace ignition
/// \return An id for the Entity, or kNullEntity on failure.
public: Entity CreateEntity();
+ /// \brief Clone an entity and its components. If the entity has any child
+ /// entities, they will also be cloned.
+ /// When cloning entities, the following rules apply:
+ /// 1. The name component of a cloned entity will consist of a unique
+ /// name, since all entities should have a unique name.
+ /// 2. Cloned entities that have a canonical link will have their
+ /// canonical link set to the cloned canonical link, not the original
+ /// canonical link.
+ /// 3. Child entities that are cloned will have their parent set to the
+ /// cloned parent entity.
+ /// 4. Cloned joints with parent/child links will have their parent and
+ /// child links set to the cloned parent/child links.
+ /// 5. Aside from the changes listed above, all other cloned components
+ /// remain unchanged.
+ /// Currently, cloning detachable joints is not supported.
+ /// \param[in] _entity The entity to clone.
+ /// \param[in] _parent The parent of the cloned entity. Set this to
+ /// kNullEntity if the cloned entity should not have a parent.
+ /// \param[in] _name The name that should be given to the cloned entity.
+ /// Set this to an empty string if the cloned entity name should be
+ /// auto-generated to something unique.
+ /// \param[in] _allowRename True if _name can be modified to be a unique
+ /// name if it isn't already a unique name. False if _name cannot be
+ /// modified to be a unique name. If _allowRename is set to False, and
+ /// _name is not unique, _entity will not be cloned. If _name is an
+ /// empty string, _allowRename is ignored since the cloned entity will
+ /// have an auto-generated unique name.
+ /// \return The cloned entity, which will have a unique name. kNullEntity
+ /// is returned if cloning failed. Failure could occur if _entity does not
+ /// exist, or if a unique name could not be generated for the entity to be
+ /// cloned.
+ /// \sa Clone
+ public: Entity Clone(Entity _entity, Entity _parent,
+ const std::string &_name, bool _allowRename);
+
/// \brief Get the number of entities on the server.
/// \return Entity count.
public: size_t EntityCount() const;
@@ -160,7 +196,7 @@ namespace ignition
/// \param[in] _entity The entity to check.
/// \param[in] _key The component to check.
/// \return True if the component key belongs to the entity.
- public: bool EntityHasComponent(const Entity _entity,
+ public: bool IGN_DEPRECATED(6) EntityHasComponent(const Entity _entity,
const ComponentKey &_key) const;
/// \brief Check whether an entity has a specific component type.
@@ -183,7 +219,7 @@ namespace ignition
/// \param[in] _key A key that uniquely identifies a component.
/// \return True if the entity and component existed and the component was
/// removed.
- public: bool RemoveComponent(
+ public: bool IGN_DEPRECATED(6) RemoveComponent(
const Entity _entity, const ComponentKey &_key);
/// \brief Remove a component from an entity based on a type id.
@@ -211,9 +247,12 @@ namespace ignition
/// \param[in] _entity The entity that will be associated with
/// the component.
/// \param[in] _data Data used to construct the component.
- /// \return Key that uniquely identifies the component.
+ /// \return A pointer to the component that was created. nullptr is
+ /// returned if the component was not able to be created. If _entity
+ /// does not exist, nullptr will be returned.
public: template
- ComponentKey CreateComponent(const Entity _entity,
+ ComponentTypeT *CreateComponent(
+ const Entity _entity,
const ComponentTypeT &_data);
/// \brief Get a component assigned to an entity based on a
@@ -237,14 +276,16 @@ namespace ignition
/// \return The component associated with the key, or nullptr if the
/// component could not be found.
public: template
- const ComponentTypeT *Component(const ComponentKey &_key) const;
+ const ComponentTypeT IGN_DEPRECATED(6) * Component(
+ const ComponentKey &_key) const;
/// \brief Get a mutable component based on a key.
/// \param[in] _key A key that uniquely identifies a component.
/// \return The component associated with the key, or nullptr if the
/// component could not be found.
public: template
- ComponentTypeT *Component(const ComponentKey &_key);
+ ComponentTypeT IGN_DEPRECATED(6) * Component(
+ const ComponentKey &_key);
/// \brief Get a mutable component assigned to an entity based on a
/// component type. If the component doesn't exist, create it and
@@ -253,7 +294,7 @@ namespace ignition
/// \param[in] _default The value that should be used to construct
/// the component in case the component doesn't exist.
/// \return The component of the specified type assigned to the specified
- /// entity.
+ /// entity. If _entity does not exist, nullptr is returned.
public: template
ComponentTypeT *ComponentDefault(Entity _entity,
const typename ComponentTypeT::Type &_default =
@@ -292,20 +333,20 @@ namespace ignition
Entity _entity) const;
/// \brief The first component instance of the specified type.
- /// \return First component instance of the specified type, or nullptr
- /// if the type does not exist.
+ /// This function is now deprecated, and will always return nullptr.
+ /// \return nullptr.
public: template
- const ComponentTypeT *First() const;
+ const ComponentTypeT IGN_DEPRECATED(6) * First() const;
/// \brief The first component instance of the specified type.
- /// \return First component instance of the specified type, or nullptr
- /// if the type does not exist.
+ /// This function is now deprecated, and will always return nullptr.
+ /// \return nullptr.
public: template
- ComponentTypeT *First();
+ ComponentTypeT IGN_DEPRECATED(6) * First();
/// \brief Get an entity which matches the value of all the given
/// components. For example, the following will return the entity which
- /// has an name component equal to "name" and has a model component:
+ /// has a name component equal to "name" and has a model component:
///
/// auto entity = EntityByComponents(components::Name("name"),
/// components::Model());
@@ -357,6 +398,21 @@ namespace ignition
private: template
struct identity; // NOLINT
+ /// \brief Helper function for cloning an entity and its children (this
+ /// includes cloning components attached to these entities). This method
+ /// should never be called directly - it is called internally from the
+ /// public Clone method.
+ /// \param[in] _entity The entity to clone.
+ /// \param[in] _parent The parent of the cloned entity.
+ /// \param[in] _name The name that should be given to the cloned entity.
+ /// \param[in] _allowRename True if _name can be modified to be a unique
+ /// name if it isn't already a unique name. False if _name cannot be
+ /// modified to be a unique name.
+ /// \return The cloned entity. kNullEntity is returned if cloning failed.
+ /// \sa Clone
+ private: Entity CloneImpl(Entity _entity, Entity _parent,
+ const std::string &_name, bool _allowRename);
+
/// \brief A version of Each() that doesn't use a cache. The cached
/// version, Each(), is preferred.
/// Get all entities which contain given component types, as well
@@ -554,7 +610,7 @@ namespace ignition
/// and components.
/// \details The header of the message will not be populated, it is the
/// responsibility of the caller to timestamp it before use.
- /// \param[in] _state serialized state
+ /// \param[out] _state The serialized state message to populate.
/// \param[in] _entities Entities to be serialized. Leave empty to get
/// all entities.
/// \param[in] _types Type ID of components to be serialized. Leave empty
@@ -643,24 +699,14 @@ namespace ignition
/// \return True if the Entity has been marked to be removed.
private: bool IsMarkedForRemoval(const Entity _entity) const;
- /// \brief Delete an existing Entity.
- /// \param[in] _entity The entity to remove.
- /// \returns True if the Entity existed and was deleted.
- private: bool RemoveEntity(const Entity _entity);
-
- /// \brief The first component instance of the specified type.
- /// \return First component instance of the specified type, or nullptr
- /// if the type does not exist.
- private: components::BaseComponent *First(
- const ComponentTypeId _componentTypeId);
-
/// \brief Implementation of CreateComponent.
/// \param[in] _entity The entity that will be associated with
/// the component.
/// \param[in] _componentTypeId Id of the component type.
/// \param[in] _data Data used to construct the component.
- /// \return Key that uniquely identifies the component.
- private: ComponentKey CreateComponentImplementation(
+ /// \return True if the component's data needs to be set externally; false
+ /// otherwise.
+ private: bool CreateComponentImplementation(
const Entity _entity,
const ComponentTypeId _componentTypeId,
const components::BaseComponent *_data);
@@ -683,79 +729,31 @@ namespace ignition
const Entity _entity,
const ComponentTypeId _type);
- /// \brief Get a component based on a key.
- /// \param[in] _key A key that uniquely identifies a component.
- /// \return The component associated with the key, or nullptr if the
- /// component could not be found.
- private: const components::BaseComponent *ComponentImplementation(
- const ComponentKey &_key) const;
-
- /// \brief Get a mutable component based on a key.
- /// \param[in] _key A key that uniquely identifies a component.
- /// \return The component associated with the key, or nullptr if the
- /// component could not be found.
- private: components::BaseComponent *ComponentImplementation(
- const ComponentKey &_key);
-
- /// \brief End of the AddComponentToView recursion. This function is
- /// called when Rest is empty.
- /// \param[in, out] _view The FirstComponent will be added to the
- /// _view.
- /// \param[in] _entity The entity.
- private: template::type = 0>
- void AddComponentsToView(detail::View &_view,
- const Entity _entity) const;
-
- /// \brief Recursively add components to a view. This function is
- /// called when Rest is NOT empty.
- /// \param[in, out] _view The FirstComponent will be added to the
- /// _view.
- /// \param[in] _entity The entity.
- private: template::type = 0>
- void AddComponentsToView(detail::View &_view,
- const Entity _entity) const;
-
/// \brief Find a View that matches the set of ComponentTypeIds. If
/// a match is not found, then a new view is created.
/// \tparam ComponentTypeTs All the component types that define a view.
- /// \return A reference to the view.
+ /// \return A pointer to the view.
private: template
- detail::View &FindView() const;
+ detail::View *FindView() const;
/// \brief Find a view based on the provided component type ids.
/// \param[in] _types The component type ids that serve as a key into
/// a map of views.
- /// \param[out] _iter Iterator to the found element in the view map.
- /// Check the return value to see if this iterator is valid.
- /// \return True if the view was found, false otherwise.
- private: bool FindView(const std::set &_types,
- std::map::iterator &_iter) const; // NOLINT
+ /// \return A pair containing a the view itself and a mutex that can be
+ /// used for locking the view while entities are being added to it.
+ /// If a view defined by _types does not exist, the pair will contain
+ /// nullptrs.
+ private: std::pair FindView(
+ const std::vector &_types) const;
/// \brief Add a new view to the set of stored views.
- /// \param[in] _types The set of component type ids that is the key
+ /// \param[in] _types The set of component type ids that act as the key
/// for the view.
/// \param[in] _view The view to add.
- /// \return An iterator to the view.
- private: std::map::iterator
- AddView(const std::set &_types,
- detail::View &&_view) const;
-
- /// \brief Update views that contain the provided entity.
- /// \param[in] _entity The entity.
- private: void UpdateViews(const Entity _entity);
-
- /// \brief Get a component ID based on an entity and the component's type.
- /// \param[in] _entity The entity.
- /// \param[in] _type Component type ID.
- private: ComponentId EntityComponentIdFromType(
- const Entity _entity, const ComponentTypeId _type) const;
+ /// \return A pointer to the view.
+ private: detail::BaseView *AddView(
+ const detail::ComponentTypeKey &_types,
+ std::unique_ptr _view) const;
/// \brief Add an entity and its components to a serialized state message.
/// \param[out] _msg The state message.
@@ -783,6 +781,22 @@ namespace ignition
const std::unordered_set &_types = {},
bool _full = false) const;
+ /// \brief Set whether views should be locked when entities are being
+ /// added to them. This can be used to prevent race conditions in
+ /// system PostUpdates, since these are run in parallel (entities are
+ /// added to views when the view is used, so if two systems try to access
+ /// the same view in PostUpdate, we run the risk of multiple threads
+ /// reading/writing from the same data).
+ /// \param[in] _lock Whether the views should lock while entities are
+ /// being added to them (true) or not (false).
+ private: void LockAddingEntitiesToViews(bool _lock);
+
+ /// \brief Get whether views should be locked when entities are being
+ /// added to them.
+ /// \return True if views should be locked during entitiy addition, false
+ /// otherwise.
+ private: bool LockAddingEntitiesToViews() const;
+
// Make runners friends so that they can manage entity creation and
// removal. This should be safe since runners are internal
// to Gazebo.
@@ -793,10 +807,6 @@ namespace ignition
// states. Like the runners, the managers are internal.
friend class NetworkManagerPrimary;
friend class NetworkManagerSecondary;
-
- // Make View a friend so that it can access components.
- // This should be safe since View is internal to Gazebo.
- friend class detail::View;
};
}
}
diff --git a/include/ignition/gazebo/Primitives.hh b/include/ignition/gazebo/Primitives.hh
new file mode 100644
index 00000000000..eff9a97b837
--- /dev/null
+++ b/include/ignition/gazebo/Primitives.hh
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef IGNITION_GAZEBO_PRIMITIVES_HH_
+#define IGNITION_GAZEBO_PRIMITIVES_HH_
+
+#include
+#include
+
+#include
+
+namespace ignition
+{
+ namespace gazebo
+ {
+ // Inline bracket to help doxygen filtering.
+ inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+
+ /// \brief Enumeration of available primitive shape types
+ enum class IGNITION_GAZEBO_VISIBLE PrimitiveShape
+ {
+ kBox,
+ kCapsule,
+ kCylinder,
+ kEllipsoid,
+ kSphere,
+ };
+
+ /// \brief Enumeration of available primitive light types
+ enum class IGNITION_GAZEBO_VISIBLE PrimitiveLight
+ {
+ kDirectional,
+ kPoint,
+ kSpot,
+ };
+
+ /// \brief Return an SDF string of one of the available primitive
+ /// shape types
+ /// \param[in] _type Type of shape to retrieve
+ /// \return String containing SDF description of primitive shape
+ /// Empty string if the _type is not supported.
+ std::string IGNITION_GAZEBO_VISIBLE
+ getPrimitiveShape(const PrimitiveShape &_type);
+
+ /// \brief Return an SDF string of one of the available primitive
+ /// light types
+ /// \param[in] _type Type of light to retrieve
+ /// \return String containing SDF description of primitive light
+ /// Empty string if the _type is not supported.
+ std::string IGNITION_GAZEBO_VISIBLE
+ getPrimitiveLight(const PrimitiveLight &_type);
+
+ /// \brief Return an SDF string of one of the available primitive shape or
+ /// light types.
+ /// \param[in] _typeName Type name of the of shape or light to retrieve.
+ /// Must be one of: box, sphere, cylinder, capsule, ellipsoid, directional,
+ /// point, or spot.
+ /// \return String containing SDF description of primitive shape or light.
+ /// Empty string if the _typeName is invalid.
+ std::string IGNITION_GAZEBO_VISIBLE
+ getPrimitive(const std::string &_typeName);
+ }
+ } // namespace gazebo
+} // namespace ignition
+
+
+#endif // IGNITION_GAZEBO_PRIMITIVES_HH_
+
+
diff --git a/include/ignition/gazebo/ServerConfig.hh b/include/ignition/gazebo/ServerConfig.hh
index 438c716c486..a975cc7bc4f 100644
--- a/include/ignition/gazebo/ServerConfig.hh
+++ b/include/ignition/gazebo/ServerConfig.hh
@@ -244,16 +244,6 @@ namespace ignition
/// \param[in] _recordPath Path to place recorded states
public: void SetLogRecordPath(const std::string &_recordPath);
- /// \brief Get whether to ignore the path specified in SDF.
- /// \return Whether to ignore the path specified in SDF
- public: bool IGN_DEPRECATED(4) LogIgnoreSdfPath() const;
-
- /// \brief Set whether to ignore the path specified in SDF. Path in SDF
- /// should be ignored if a record path is specified on the command line,
- /// for example.
- /// \param[in] _ignore Whether to ignore the path specified in SDF
- public: void IGN_DEPRECATED(4) SetLogIgnoreSdfPath(bool _ignore);
-
/// \brief Add a topic to record.
/// \param[in] _topic Topic name, which can include wildcards.
public: void AddLogRecordTopic(const std::string &_topic);
@@ -335,6 +325,14 @@ namespace ignition
/// \return File containing render engine library.
public: const std::string &RenderEngineGui() const;
+ /// \brief Set the headless mode
+ /// \param[in] _headless Set to true to enable headless mode.
+ public: void SetHeadlessRendering(const bool _headless);
+
+ /// \brief Get the headless mode
+ /// \return True if headless mode is enable, false otherwise.
+ public: bool HeadlessRendering() const;
+
/// \brief Set the render engine server plugin library.
/// \param[in] _renderEngineServer File containing render engine library.
public: void SetRenderEngineServer(
diff --git a/include/ignition/gazebo/Types.hh b/include/ignition/gazebo/Types.hh
index 84026a0c9e2..67dbe2ea3bd 100644
--- a/include/ignition/gazebo/Types.hh
+++ b/include/ignition/gazebo/Types.hh
@@ -22,6 +22,8 @@
#include
#include
+#include "ignition/gazebo/Entity.hh"
+
namespace ignition
{
namespace gazebo
@@ -78,6 +80,8 @@ namespace ignition
/// \brief A unique identifier for a component instance. The uniqueness
/// of a ComponentId is scoped to the component's type.
/// \sa ComponentKey.
+ /// \deprecated Deprecated on version 6, removed on version 7. Use
+ /// ComponentTypeId + Entity instead.
using ComponentId = int;
/// \brief A unique identifier for a component type. A component type
@@ -87,7 +91,10 @@ namespace ignition
/// \brief A key that uniquely identifies, at the global scope, a component
/// instance
- using ComponentKey = std::pair;
+ /// \note On version 6, the 2nd element was changed to the entity ID.
+ /// \deprecated Deprecated on version 6, removed on version 7. Use
+ /// ComponentTypeId + Entity instead.
+ using ComponentKey = std::pair;
/// \brief typedef for query callbacks
using EntityQueryCallback = std::function IGNITION_GAZEBO_VISIBLE sphericalCoordinates(
+ Entity _entity, const EntityComponentManager &_ecm);
+
/// \brief Environment variable holding resource paths.
const std::string kResourcePathEnv{"IGN_GAZEBO_RESOURCE_PATH"};
@@ -251,7 +260,6 @@ namespace ignition
/// \brief Environment variable holding paths to custom rendering engine
/// plugins.
const std::string kRenderPluginPathEnv{"IGN_GAZEBO_RENDER_ENGINE_PATH"};
-
}
}
}
diff --git a/include/ignition/gazebo/World.hh b/include/ignition/gazebo/World.hh
index 55d98ea54bd..9e6d8ccfb02 100644
--- a/include/ignition/gazebo/World.hh
+++ b/include/ignition/gazebo/World.hh
@@ -24,6 +24,7 @@
#include
#include
+#include
#include "ignition/gazebo/config.hh"
#include "ignition/gazebo/EntityComponentManager.hh"
@@ -116,11 +117,24 @@ namespace ignition
/// \brief Get atmosphere information.
/// \param[in] _ecm Entity-component manager.
- /// \return Magnetic field vector or nullopt if the entity does not
+ /// \return Atmosphere or nullopt if the entity does not
/// have a components::Atmosphere component.
public: std::optional Atmosphere(
const EntityComponentManager &_ecm) const;
+ /// \brief Get spherical coordinates for the world origin.
+ /// \param[in] _ecm Entity-component manager.
+ /// \return Spherical coordinates or nullopt if the entity does not
+ /// have a components::SphericalCoordinates component.
+ public: std::optional SphericalCoordinates(
+ const EntityComponentManager &_ecm) const;
+
+ /// \brief Set spherical coordinates for the world origin.
+ /// \param[in] _ecm Entity-component manager.
+ /// \param[in] _sphericalCoordinates New spherical coordinates.
+ public: void SetSphericalCoordinates(EntityComponentManager &_ecm,
+ const math::SphericalCoordinates &_sphericalCoordinates);
+
/// \brief Get the ID of a light entity which is an immediate child of
/// this world.
/// \param[in] _ecm Entity-component manager.
diff --git a/include/ignition/gazebo/components/Collision.hh b/include/ignition/gazebo/components/Collision.hh
index 9c57c90c4c7..f35f0e95d96 100644
--- a/include/ignition/gazebo/components/Collision.hh
+++ b/include/ignition/gazebo/components/Collision.hh
@@ -51,6 +51,15 @@ namespace components
serializers::CollisionElementSerializer>;
IGN_GAZEBO_REGISTER_COMPONENT("ign_gazebo_components.CollisionElement",
CollisionElement)
+
+ /// \brief A component used to enable customization of contact surface for a
+ /// collision. The customization itself is done in callback of event
+ /// CollectContactSurfaceProperties from PhysicsEvents.
+ using EnableContactSurfaceCustomization =
+ Component;
+ IGN_GAZEBO_REGISTER_COMPONENT(
+ "ign_gazebo_components.EnableContactSurfaceCustomization",
+ EnableContactSurfaceCustomization)
}
}
}
diff --git a/include/ignition/gazebo/components/Component.hh b/include/ignition/gazebo/components/Component.hh
index bbee6d34c51..59eee24fb6c 100644
--- a/include/ignition/gazebo/components/Component.hh
+++ b/include/ignition/gazebo/components/Component.hh
@@ -279,6 +279,10 @@ namespace components
/// Factory registration and is guaranteed to be the same across compilers
/// and runs.
public: virtual ComponentTypeId TypeId() const = 0;
+
+ /// \brief Clone the component.
+ /// \return A pointer to the component.
+ public: virtual std::unique_ptr Clone() = 0;
};
/// \brief A component type that wraps any data type. The intention is for
@@ -342,6 +346,9 @@ namespace components
/// \return True if different.
public: bool operator!=(const Component &_component) const;
+ // Documentation inherited
+ public: std::unique_ptr Clone() override;
+
// Documentation inherited
public: ComponentTypeId TypeId() const override;
@@ -408,6 +415,9 @@ namespace components
public: bool operator!=(const Component &_component) const;
+ // Documentation inherited
+ public: std::unique_ptr Clone() override;
+
// Documentation inherited
public: ComponentTypeId TypeId() const override;
@@ -490,6 +500,16 @@ namespace components
Serializer::Deserialize(_in, this->Data());
}
+ //////////////////////////////////////////////////
+ template
+ std::unique_ptr
+ Component::Clone()
+ {
+ Component clonedComp(this->Data());
+ return std::make_unique>(
+ clonedComp);
+ }
+
//////////////////////////////////////////////////
template
ComponentTypeId Component::TypeId() const
@@ -513,6 +533,14 @@ namespace components
return false;
}
+ //////////////////////////////////////////////////
+ template
+ std::unique_ptr
+ Component::Clone()
+ {
+ return std::make_unique>();
+ }
+
//////////////////////////////////////////////////
template
ComponentTypeId Component::TypeId() const
diff --git a/include/ignition/gazebo/components/CustomSensor.hh b/include/ignition/gazebo/components/CustomSensor.hh
new file mode 100644
index 00000000000..98712492416
--- /dev/null
+++ b/include/ignition/gazebo/components/CustomSensor.hh
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+*/
+#ifndef IGNITION_GAZEBO_COMPONENTS_CUSTOMSENSOR_HH_
+#define IGNITION_GAZEBO_COMPONENTS_CUSTOMSENSOR_HH_
+
+#include
+#include
+#include
+#include
+#include
+
+namespace ignition
+{
+namespace gazebo
+{
+// Inline bracket to help doxygen filtering.
+inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+namespace components
+{
+ /// \brief A component type that contains a custom sensor's information.
+ /// A custom sensor is any sensor that's not officially supported through
+ /// the SDF spec.
+ using CustomSensor = Component;
+ IGN_GAZEBO_REGISTER_COMPONENT("ign_gazebo_components.CustomSensor",
+ CustomSensor)
+}
+}
+}
+}
+#endif
diff --git a/include/ignition/gazebo/components/Factory.hh b/include/ignition/gazebo/components/Factory.hh
index 0b7a17184de..5e280a906c1 100644
--- a/include/ignition/gazebo/components/Factory.hh
+++ b/include/ignition/gazebo/components/Factory.hh
@@ -49,6 +49,12 @@ namespace components
/// \brief Create an instance of a Component.
/// \return Pointer to a component.
public: virtual std::unique_ptr Create() const = 0;
+
+ /// \brief Create an instance of a Component, populated with specific data.
+ /// \param[in] _data The data to populate the component with.
+ /// \return Pointer to a component.
+ public: virtual std::unique_ptr Create(
+ const components::BaseComponent *_data) const = 0;
};
/// \brief A class for an object responsible for creating components.
@@ -57,17 +63,27 @@ namespace components
class ComponentDescriptor
: public ComponentDescriptorBase
{
- /// \brief Create an instance of a ComponentTypeT Component.
- /// \return Pointer to a component.
+ /// \brief Documentation inherited
public: std::unique_ptr Create() const override
{
return std::make_unique();
}
+
+ /// \brief Documentation inherited
+ public: virtual std::unique_ptr Create(
+ const components::BaseComponent *_data) const override
+ {
+ ComponentTypeT comp(*static_cast(_data));
+ return std::make_unique(comp);
+ }
};
/// \brief A base class for an object responsible for creating storages.
class StorageDescriptorBase
{
+ /// \brief Constructor
+ public: IGN_DEPRECATED(6) StorageDescriptorBase() = default;
+
/// \brief Destructor
public: virtual ~StorageDescriptorBase() = default;
@@ -82,6 +98,9 @@ namespace components
class StorageDescriptor
: public StorageDescriptorBase
{
+ /// \brief Constructor
+ public: IGN_DEPRECATED(6) StorageDescriptor() = default;
+
/// \brief Create an instance of a storage that holds ComponentTypeT
/// components.
/// \return Pointer to a component.
@@ -100,12 +119,25 @@ namespace components
/// \param[in] _type Type of component to register.
/// \param[in] _compDesc Object to manage the creation of ComponentTypeT
/// objects.
- /// \param[in] _storageDesc Object to manage the creation of storages for
- /// objects of type ComponentTypeT.
+ /// \param[in] _storageDesc Ignored.
/// \tparam ComponentTypeT Type of component to register.
+ /// \deprecated See function that doesn't accept a storage
public: template
- void Register(const std::string &_type, ComponentDescriptorBase *_compDesc,
- StorageDescriptorBase *_storageDesc)
+ void IGN_DEPRECATED(6) Register(const std::string &_type,
+ ComponentDescriptorBase *_compDesc,
+ StorageDescriptorBase * /*_storageDesc*/)
+ {
+ this->Register(_type, _compDesc);
+ }
+
+ /// \brief Register a component so that the factory can create instances
+ /// of the component based on an ID.
+ /// \param[in] _type Type of component to register.
+ /// \param[in] _compDesc Object to manage the creation of ComponentTypeT
+ /// objects.
+ /// \tparam ComponentTypeT Type of component to register.
+ public: template
+ void Register(const std::string &_type, ComponentDescriptorBase *_compDesc)
{
// Every time a plugin which uses a component type is loaded, it attempts
// to register it again, so we skip it.
@@ -153,13 +185,12 @@ namespace components
// Keep track of all types
this->compsById[ComponentTypeT::typeId] = _compDesc;
- this->storagesById[ComponentTypeT::typeId] = _storageDesc;
namesById[ComponentTypeT::typeId] = ComponentTypeT::typeName;
runtimeNamesById[ComponentTypeT::typeId] = runtimeName;
}
/// \brief Unregister a component so that the factory can't create instances
- /// of the component or its storage anymore.
+ /// of the component anymore.
/// \tparam ComponentTypeT Type of component to unregister.
public: template
void Unregister()
@@ -170,7 +201,7 @@ namespace components
}
/// \brief Unregister a component so that the factory can't create instances
- /// of the component or its storage anymore.
+ /// of the component anymore.
/// \details This function will not reset the `typeId` static variable
/// within the component type itself. Prefer using the templated
/// `Unregister` function when possible.
@@ -192,15 +223,6 @@ namespace components
}
}
- {
- auto it = this->storagesById.find(_typeId);
- if (it != this->storagesById.end())
- {
- delete it->second;
- this->storagesById.erase(it);
- }
- }
-
{
auto it = namesById.find(_typeId);
if (it != namesById.end())
@@ -245,19 +267,45 @@ namespace components
return comp;
}
+ /// \brief Create a new instance of a component, initialized with particular
+ /// data.
+ /// \param[in] _type Component id to create.
+ /// \param[in] _data The data to populate the component instance with.
+ /// \return Pointer to a component. Null if the component
+ /// type could not be handled.
+ public: std::unique_ptr New(
+ const ComponentTypeId &_type, const components::BaseComponent *_data)
+ {
+ std::unique_ptr comp;
+
+ if (nullptr == _data)
+ {
+ ignerr << "Requested to create a new component instance with null "
+ << "data." << std::endl;
+ }
+ else if (_type != _data->TypeId())
+ {
+ ignerr << "The typeID of _type [" << _type << "] does not match the "
+ << "typeID of _data [" << _data->TypeId() << "]." << std::endl;
+ }
+ else
+ {
+ auto it = this->compsById.find(_type);
+ if (it != this->compsById.end() && nullptr != it->second)
+ comp = it->second->Create(_data);
+ }
+
+ return comp;
+ }
+
/// \brief Create a new instance of a component storage.
/// \param[in] _typeId Type of component which the storage will hold.
- /// \return Pointer to a storage. Null if the component type could not be
- /// handled.
- public: std::unique_ptr NewStorage(
- const ComponentTypeId &_typeId)
+ /// \return Always returns nullptr.
+ /// \deprecated Storages aren't necessary anymore.
+ public: std::unique_ptr IGN_DEPRECATED(6) NewStorage(
+ const ComponentTypeId & /*_typeId*/)
{
- std::unique_ptr storage;
- auto it = this->storagesById.find(_typeId);
- if (it != this->storagesById.end() && nullptr != it->second)
- storage = it->second->Create();
-
- return storage;
+ return nullptr;
}
/// \brief Get all the registered component types by ID.
@@ -305,10 +353,6 @@ namespace components
/// we just keep a pointer, which will dangle until the program is shutdown.
private: std::map compsById;
- /// \brief A list of registered storages where the key is its component's
- /// type id.
- private: std::map storagesById;
-
/// \brief A list of IDs and their equivalent names.
public: std::map namesById;
@@ -335,9 +379,8 @@ namespace components
return; \
using namespace ignition;\
using Desc = gazebo::components::ComponentDescriptor<_classname>; \
- using StorageDesc = gazebo::components::StorageDescriptor<_classname>; \
gazebo::components::Factory::Instance()->Register<_classname>(\
- _compType, new Desc(), new StorageDesc());\
+ _compType, new Desc());\
} \
}; \
static IgnGazeboComponents##_classname\
diff --git a/include/ignition/gazebo/components/ForceTorque.hh b/include/ignition/gazebo/components/ForceTorque.hh
new file mode 100644
index 00000000000..12da2780774
--- /dev/null
+++ b/include/ignition/gazebo/components/ForceTorque.hh
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+*/
+#ifndef IGNITION_GAZEBO_COMPONENTS_FORCETORQUE_HH_
+#define IGNITION_GAZEBO_COMPONENTS_FORCETORQUE_HH_
+
+#include
+
+#include
+#include
+
+#include
+#include
+#include
+
+namespace ignition
+{
+namespace gazebo
+{
+// Inline bracket to help doxygen filtering.
+inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+namespace components
+{
+ /// \brief A component type that contains an FT sensor,
+ /// sdf::ForceTorque, information.
+ using ForceTorque = Component;
+ IGN_GAZEBO_REGISTER_COMPONENT("ign_gazebo_components.ForceTorque",
+ ForceTorque)
+}
+}
+}
+}
+#endif
diff --git a/include/ignition/gazebo/components/JointEffortLimitsCmd.hh b/include/ignition/gazebo/components/JointEffortLimitsCmd.hh
new file mode 100644
index 00000000000..b8b9217974b
--- /dev/null
+++ b/include/ignition/gazebo/components/JointEffortLimitsCmd.hh
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#ifndef IGNITION_GAZEBO_COMPONENTS_JOINTEFFORTLIMITSCMD_HH_
+#define IGNITION_GAZEBO_COMPONENTS_JOINTEFFORTLIMITSCMD_HH_
+
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+
+namespace ignition
+{
+namespace gazebo
+{
+// Inline bracket to help doxygen filtering.
+inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+
+namespace components
+{
+
+/// \brief Command for setting effort limits of a joint. Data are a vector
+/// with a Vector2 for each DOF. The X() component of the Vector2 specifies
+/// the minimum effort limit, the Y() component stands for maximum limit.
+/// Set to +-infinity to disable the limits.
+/// \note It is expected that the physics plugin reads this component and
+/// sets the limit to the dynamics engine. After setting it, the data of this
+/// component will be cleared (i.e. the vector will have length zero).
+using JointEffortLimitsCmd = Component<
+ std::vector,
+ class JointEffortLimitsCmdTag,
+ serializers::VectorSerializer
+>;
+
+IGN_GAZEBO_REGISTER_COMPONENT(
+ "ign_gazebo_components.JointEffortLimitsCmd", JointEffortLimitsCmd)
+}
+
+}
+}
+}
+
+#endif
diff --git a/include/ignition/gazebo/components/JointPositionLimitsCmd.hh b/include/ignition/gazebo/components/JointPositionLimitsCmd.hh
new file mode 100644
index 00000000000..775937fbff5
--- /dev/null
+++ b/include/ignition/gazebo/components/JointPositionLimitsCmd.hh
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#ifndef IGNITION_GAZEBO_COMPONENTS_JOINTPOSITIONLIMITSCMD_HH_
+#define IGNITION_GAZEBO_COMPONENTS_JOINTPOSITIONLIMITSCMD_HH_
+
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+
+namespace ignition
+{
+namespace gazebo
+{
+// Inline bracket to help doxygen filtering.
+inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+
+namespace components
+{
+/// \brief Command for setting position limits of a joint. Data are a vector
+/// with a Vector2 for each DOF. The X() component of the Vector2 specifies
+/// the minimum positional limit, the Y() component stands for maximum limit.
+/// Set to +-infinity to disable the limits.
+/// \note It is expected that the physics plugin reads this component and
+/// sets the limit to the dynamics engine. After setting it, the data of this
+/// component will be cleared (i.e. the vector will have length zero).
+using JointPositionLimitsCmd = Component<
+ std::vector,
+ class JointPositionLimitsCmdTag,
+ serializers::VectorSerializer
+>;
+
+IGN_GAZEBO_REGISTER_COMPONENT(
+ "ign_gazebo_components.JointPositionLimitsCmd", JointPositionLimitsCmd)
+}
+}
+}
+}
+
+#endif
diff --git a/include/ignition/gazebo/components/JointTransmittedWrench.hh b/include/ignition/gazebo/components/JointTransmittedWrench.hh
new file mode 100644
index 00000000000..10cef6a294f
--- /dev/null
+++ b/include/ignition/gazebo/components/JointTransmittedWrench.hh
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#ifndef IGNITION_GAZEBO_COMPONENTS_JOINTTRANSMITTEDWRENCH_HH_
+#define IGNITION_GAZEBO_COMPONENTS_JOINTTRANSMITTEDWRENCH_HH_
+
+#include
+
+#include
+#include
+#include
+#include
+
+namespace ignition
+{
+namespace gazebo
+{
+// Inline bracket to help doxygen filtering.
+inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+
+namespace components
+{
+/// \brief Joint Transmitted wrench in SI units (Nm for torque, N for force).
+/// The wrench is expressed in the Joint frame and the force component is
+/// applied at the joint origin.
+/// \note The term Wrench is used here to mean a pair of 3D vectors representing
+/// torque and force quantities expessed in a given frame and where the force is
+/// applied at the origin of the frame. This is different from the Wrench used
+/// in screw theory.
+/// \note The value of force_offset in msgs::Wrench is ignored for this
+/// component. The force is assumed to be applied at the origin of the joint
+/// frame.
+using JointTransmittedWrench =
+ Component;
+IGN_GAZEBO_REGISTER_COMPONENT("ign_gazebo_components.JointTransmittedWrench",
+ JointTransmittedWrench)
+} // namespace components
+}
+}
+}
+
+#endif
diff --git a/include/ignition/gazebo/components/JointVelocityLimitsCmd.hh b/include/ignition/gazebo/components/JointVelocityLimitsCmd.hh
new file mode 100644
index 00000000000..e85905095f4
--- /dev/null
+++ b/include/ignition/gazebo/components/JointVelocityLimitsCmd.hh
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#ifndef IGNITION_GAZEBO_COMPONENTS_JOINTVELOCITYLIMITSCMD_HH_
+#define IGNITION_GAZEBO_COMPONENTS_JOINTVELOCITYLIMITSCMD_HH_
+
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+
+namespace ignition
+{
+namespace gazebo
+{
+// Inline bracket to help doxygen filtering.
+inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+
+namespace components
+{
+/// \brief Command for setting velocity limits of a joint. Data are a vector
+/// with a Vector2 for each DOF. The X() component of the Vector2 specifies
+/// the minimum velocity limit, the Y() component stands for maximum limit.
+/// Set to +-infinity to disable the limits.
+/// \note It is expected that the physics plugin reads this component and
+/// sets the limit to the dynamics engine. After setting it, the data of this
+/// component will be cleared (i.e. the vector will have length zero).
+using JointVelocityLimitsCmd = Component<
+ std::vector,
+ class JointVelocityLimitsCmdTag,
+ serializers::VectorSerializer
+>;
+
+IGN_GAZEBO_REGISTER_COMPONENT(
+ "ign_gazebo_components.JointVelocityLimitsCmd", JointVelocityLimitsCmd)
+}
+}
+}
+}
+
+#endif
diff --git a/include/ignition/gazebo/components/Model.hh b/include/ignition/gazebo/components/Model.hh
index 7fdc7014ce4..5ba0420d942 100644
--- a/include/ignition/gazebo/components/Model.hh
+++ b/include/ignition/gazebo/components/Model.hh
@@ -17,7 +17,10 @@
#ifndef IGNITION_GAZEBO_COMPONENTS_MODEL_HH_
#define IGNITION_GAZEBO_COMPONENTS_MODEL_HH_
+#include
+
#include
+#include
#include
#include
@@ -29,6 +32,54 @@ namespace gazebo
{
// Inline bracket to help doxygen filtering.
inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+namespace serializers
+{
+ class SdfModelSerializer
+ {
+ /// \brief Serialization for `sdf::Model`.
+ /// \param[in] _out Output stream.
+ /// \param[in] _time Model to stream
+ /// \return The stream.
+ public: static std::ostream &Serialize(std::ostream &_out,
+ const sdf::Model &_model)
+ {
+ sdf::ElementPtr modelElem = _model.Element();
+ if (!modelElem)
+ {
+ ignerr << "Unable to serialize sdf::Model" << std::endl;
+ return _out;
+ }
+
+ _out << ""
+ << ""
+ << modelElem->ToString("")
+ << "";
+ return _out;
+ }
+
+ /// \brief Deserialization for `sdf::Model`.
+ /// \param[in] _in Input stream.
+ /// \param[out] _model Model to populate
+ /// \return The stream.
+ public: static std::istream &Deserialize(std::istream &_in,
+ sdf::Model &_model)
+ {
+ sdf::Root root;
+ std::string sdf(std::istreambuf_iterator(_in), {});
+
+ sdf::Errors errors = root.LoadSdfString(sdf);
+ if (!root.Model())
+ {
+ ignerr << "Unable to unserialize sdf::Model" << std::endl;
+ return _in;
+ }
+
+ _model = *root.Model();
+ return _in;
+ }
+ };
+}
+
namespace components
{
/// \brief A component that identifies an entity as being a model.
@@ -36,7 +87,9 @@ namespace components
IGN_GAZEBO_REGISTER_COMPONENT("ign_gazebo_components.Model", Model)
/// \brief A component that holds the model's SDF DOM
- using ModelSdf = Component;
+ using ModelSdf = Component;
IGN_GAZEBO_REGISTER_COMPONENT("ign_gazebo_components.ModelSdf", ModelSdf)
}
}
diff --git a/include/ignition/gazebo/components/RenderEngineServerHeadless.hh b/include/ignition/gazebo/components/RenderEngineServerHeadless.hh
new file mode 100644
index 00000000000..9746e4b0aa2
--- /dev/null
+++ b/include/ignition/gazebo/components/RenderEngineServerHeadless.hh
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+*/
+#ifndef IGNITION_GAZEBO_COMPONENTS_RENDERENGINESERVERHEADLESS_HH_
+#define IGNITION_GAZEBO_COMPONENTS_RENDERENGINESERVERHEADLESS_HH_
+
+#include
+#include
+#include
+#include
+#include
+
+namespace ignition
+{
+namespace gazebo
+{
+// Inline bracket to help doxygen filtering.
+inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+namespace components
+{
+ /// \brief Holds the headless mode.
+ using RenderEngineServerHeadless = Component;
+ IGN_GAZEBO_REGISTER_COMPONENT(
+ "ign_gazebo_components.RenderEngineServerHeadless",
+ RenderEngineServerHeadless)
+}
+}
+}
+}
+
+#endif
diff --git a/include/ignition/gazebo/components/SegmentationCamera.hh b/include/ignition/gazebo/components/SegmentationCamera.hh
new file mode 100644
index 00000000000..c476fc8ba82
--- /dev/null
+++ b/include/ignition/gazebo/components/SegmentationCamera.hh
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+*/
+#ifndef IGNITION_GAZEBO_COMPONENTS_SEGMENTATIONCAMERA_HH_
+#define IGNITION_GAZEBO_COMPONENTS_SEGMENTATIONCAMERA_HH_
+
+#include
+
+#include
+#include
+#include
+#include
+
+namespace ignition
+{
+namespace gazebo
+{
+// Inline bracket to help doxygen filtering.
+inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+namespace components
+{
+ /// \brief A component type that contains a Segmentation camera sensor,
+ /// sdf::Camera, information.
+ using SegmentationCamera = Component;
+ IGN_GAZEBO_REGISTER_COMPONENT("ign_gazebo_components.SegmentationCamera",
+ SegmentationCamera)
+}
+}
+}
+}
+#endif
diff --git a/include/ignition/gazebo/components/SemanticLabel.hh b/include/ignition/gazebo/components/SemanticLabel.hh
new file mode 100644
index 00000000000..3139b753105
--- /dev/null
+++ b/include/ignition/gazebo/components/SemanticLabel.hh
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#ifndef IGNITION_GAZEBO_COMPONENTS_LABEL_HH_
+#define IGNITION_GAZEBO_COMPONENTS_LABEL_HH_
+
+#include "ignition/gazebo/Export.hh"
+#include "ignition/gazebo/components/Component.hh"
+#include "ignition/gazebo/components/Factory.hh"
+#include "ignition/gazebo/config.hh"
+
+namespace ignition
+{
+namespace gazebo
+{
+// Inline bracket to help doxygen filtering.
+inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+namespace components
+{
+ /// \brief A component that holds the label of an entity. One example use
+ /// case of the Label component is with Segmentation & Bounding box
+ /// sensors to generate dataset annotations.
+ using SemanticLabel = Component;
+ IGN_GAZEBO_REGISTER_COMPONENT("ign_gazebo_components.SemanticLabel",
+ SemanticLabel)
+}
+}
+}
+}
+#endif
diff --git a/include/ignition/gazebo/components/Serialization.hh b/include/ignition/gazebo/components/Serialization.hh
index 7fd3ee7765e..2916058dc2b 100644
--- a/include/ignition/gazebo/components/Serialization.hh
+++ b/include/ignition/gazebo/components/Serialization.hh
@@ -25,6 +25,7 @@
#include
#include
+#include
// This header holds serialization operators which are shared among several
// components
@@ -35,6 +36,31 @@ namespace gazebo
{
// Inline bracket to help doxygen filtering.
inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+namespace traits
+{
+ /// \brief Type trait that determines if an ignition::gazebo::convert from In
+ /// to Out is defined.
+ /// Usage:
+ /// \code
+ /// constexpr bool hasGazeboConvert =
+ /// HasGazeboConvert::value
+ /// \endcode
+ template
+ class HasGazeboConvert
+ {
+ private: template
+ static auto Test(int _test)
+ -> decltype(std::declval() =
+ ignition::gazebo::convert(std::declval()),
+ std::true_type());
+
+ private: template
+ static auto Test(...) -> std::false_type;
+
+ public: static constexpr bool value = // NOLINT
+ decltype(Test(true))::value;
+ };
+}
/// \brief A Serializer class is used to serialize and deserialize a component.
/// It is passed in as the third template parameter to components::Component.
/// Eg.
@@ -78,7 +104,16 @@ namespace serializers
public: static std::ostream &Serialize(std::ostream &_out,
const DataType &_data)
{
- auto msg = ignition::gazebo::convert(_data);
+ MsgType msg;
+ if constexpr (traits::HasGazeboConvert::value)
+ {
+ msg = ignition::gazebo::convert(_data);
+ }
+ else
+ {
+ msg = ignition::msgs::Convert(_data);
+ }
+
msg.SerializeToOstream(&_out);
return _out;
}
@@ -93,7 +128,14 @@ namespace serializers
MsgType msg;
msg.ParseFromIstream(&_in);
- _data = ignition::gazebo::convert(msg);
+ if constexpr (traits::HasGazeboConvert::value)
+ {
+ _data = ignition::gazebo::convert(msg);
+ }
+ else
+ {
+ _data = ignition::msgs::Convert(msg);
+ }
return _in;
}
};
@@ -183,6 +225,40 @@ namespace serializers
return _in;
}
};
+
+ template
+ class VectorSerializer
+ {
+ /// \brief Serialization for `std::vector` with serializable T.
+ /// \param[in] _out Output stream.
+ /// \param[in] _data The data to stream.
+ /// \return The stream.
+ public: static std::ostream &Serialize(std::ostream &_out,
+ const std::vector &_data)
+ {
+ _out << _data.size();
+ for (const auto& datum : _data)
+ _out << " " << datum;
+ return _out;
+ }
+
+ /// \brief Deserialization for `std::vector` with serializable T.
+ /// \param[in] _in Input stream.
+ /// \param[out] _data The data to populate.
+ /// \return The stream.
+ public: static std::istream &Deserialize(std::istream &_in,
+ std::vector &_data)
+ {
+ size_t size;
+ _in >> size;
+ _data.resize(size);
+ for (size_t i = 0; i < size; ++i)
+ {
+ _in >> _data[i];
+ }
+ return _in;
+ }
+ };
}
}
}
diff --git a/include/ignition/gazebo/components/SphericalCoordinates.hh b/include/ignition/gazebo/components/SphericalCoordinates.hh
new file mode 100644
index 00000000000..93ebd43fa82
--- /dev/null
+++ b/include/ignition/gazebo/components/SphericalCoordinates.hh
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+*/
+#ifndef IGNITION_GAZEBO_COMPONENTS_SPHERICALCOORDINATES_HH_
+#define IGNITION_GAZEBO_COMPONENTS_SPHERICALCOORDINATES_HH_
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace ignition
+{
+namespace gazebo
+{
+// Inline bracket to help doxygen filtering.
+inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+namespace serializers
+{
+ using SphericalCoordinatesSerializer =
+ serializers::ComponentToMsgSerializer;
+}
+
+namespace components
+{
+ /// \brief This component holds the spherical coordinates of the world origin.
+ using SphericalCoordinates =
+ Component;
+ IGN_GAZEBO_REGISTER_COMPONENT(
+ "ign_gazebo_components.SphericalCoordinates", SphericalCoordinates)
+}
+}
+}
+}
+
+#endif
diff --git a/include/ignition/gazebo/components/VisualCmd.hh b/include/ignition/gazebo/components/VisualCmd.hh
new file mode 100644
index 00000000000..794057aabb7
--- /dev/null
+++ b/include/ignition/gazebo/components/VisualCmd.hh
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#ifndef IGNITION_GAZEBO_COMPONENTS_VISUALCMD_HH_
+#define IGNITION_GAZEBO_COMPONENTS_VISUALCMD_HH_
+
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include
+
+namespace ignition
+{
+namespace gazebo
+{
+// Inline bracket to help doxygen filtering.
+inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+namespace components
+{
+ /// \brief A component type that contains commanded visual of an
+ /// entity in the world frame represented by msgs::Visual.
+ using VisualCmd = Component;
+ IGN_GAZEBO_REGISTER_COMPONENT("ign_gazebo_components.VisualCmd",
+ VisualCmd)
+}
+}
+}
+}
+#endif
diff --git a/include/ignition/gazebo/detail/BaseView.hh b/include/ignition/gazebo/detail/BaseView.hh
new file mode 100644
index 00000000000..eea67553169
--- /dev/null
+++ b/include/ignition/gazebo/detail/BaseView.hh
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2021 Open Source Robotics Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+*/
+#ifndef IGNITION_GAZEBO_DETAIL_BASEVIEW_HH_
+#define IGNITION_GAZEBO_DETAIL_BASEVIEW_HH_
+
+#include
+#include
+#include
+#include
+
+#include "ignition/gazebo/Entity.hh"
+#include "ignition/gazebo/Types.hh"
+#include "ignition/gazebo/config.hh"
+
+namespace ignition
+{
+namespace gazebo
+{
+// Inline bracket to help doxygen filtering.
+inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
+namespace detail
+{
+/// \brief A key into the map of views
+using ComponentTypeKey = std::vector;
+
+/// \brief Hash functor for ComponentTypeKey.
+/// The implementation was inspired by:
+/// * https://stackoverflow.com/a/20511429
+/// * https://stackoverflow.com/a/4948967
+/// * https://stackoverflow.com/a/35991300
+/// * https://softwareengineering.stackexchange.com/a/402543
+struct ComponentTypeHasher
+{
+ std::size_t operator()(const std::vector &_vec) const
+ {
+ auto hash = _vec.size();
+ for (const auto &i : _vec)
+ hash ^= i + 0x9e3779b9 + (hash << 6) + (hash >> 2);
+ return hash;
+ }
+};
+
+/// \brief A view is a cache to entities, and their components, that
+/// match a set of component types. A cache is used because systems will
+/// frequently, potentially every iteration, query the
+/// EntityComponentManager for sets of entities that match a set of
+/// component types. Rather than look up the entities every time, we can
+/// use a cache to improve performance.
+///
+/// Note that symbols for this class are visible because methods from this class
+/// are used in templated Ignition::Gazebo::EntityComponentManager methods.
+/// However, users should not use this class (or anything else in namespace
+/// ignition::gazebo::detail) directly.
+class IGNITION_GAZEBO_VISIBLE BaseView
+{
+ /// \brief Destructor
+ public: virtual ~BaseView() = default;
+
+ /// \brief See if an entity is a part of the view
+ /// \param[in] _entity The entity
+ /// \return true if _entity is a part of the view, false otherwise
+ public: bool HasEntity(const Entity _entity) const;
+
+ /// \brief See if an entity is marked as an entity to be added to the view
+ /// \param[in] _entity The entity
+ /// \return true if _entity is to be added to the view, false otherwise
+ public: bool IsEntityMarkedForAddition(const Entity _entity) const;
+
+ /// \brief See if the view has cached the component data for an entity
+ /// \param[in] _entity The entity
+ /// \return true if _entity has component data cached in the view, false
+ /// otherwise
+ public: virtual bool HasCachedComponentData(const Entity _entity) const = 0;
+
+ /// \brief Save an entity as one to be added to the view, if the entity isn't
+ /// already a part of the view. This entity's component data should be added
+ /// to the view the next time the view is being used.
+ /// \param[in] _entity The entity to be added
+ /// \param[in] _new Whether to add the entity to the list of new entities.
+ /// The new here is to indicate whether the entity is new to the entity
+ /// component manager. An existing entity can be added when creating a new
+ /// view or when rebuilding the view.
+ /// \return True if _entity isn't already a part of the view and was marked as
+ /// an entity to be added. False otherwise
+ /// \sa HasEntity, IsEntityMarkedForAddition
+ public: bool MarkEntityToAdd(const Entity _entity, bool _new = false);
+
+ /// \brief See if the view requires a particular component type
+ /// \param[in] _typeId The component type
+ /// \return true if the view requires components of type _typeId, false
+ /// otherwise
+ public: bool RequiresComponent(const ComponentTypeId _typeId) const;
+
+ /// \brief Update the internal data in the view because a component has been
+ /// added to an entity. It is assumed that the entity is already associated
+ /// with the view, and that the added component type is required by the view.
+ /// \param[in] _entity The entity
+ /// \param[in] _newEntity Whether to add the entity to the list of new
+ /// entities. The new here is to indicate whether the entity is new to the
+ /// entity component manager.
+ /// \param[in] _typeId The type of component that was added to _entity
+ /// \return true if the notification related to the component addition of type
+ /// _typeId occurred for _entity, false otherwise
+ /// \sa HasCachedComponentData, RequiresComponent
+ public: virtual bool NotifyComponentAddition(const Entity _entity,
+ bool _newEntity, const ComponentTypeId _typeId) = 0;
+
+ /// \brief Update the internal data in the view because a component has been
+ /// removed to an entity. It is assumed that the entity is already associated
+ /// with the view, and that the removed component type is required by the view
+ /// \param[in] _entity The entity
+ /// \param[in] _typeId The type of component that was removed from _entity
+ /// \return true if the notification related to the component removal of type
+ /// _typeId occurred for _entity, false otherwise
+ /// \sa HasCachedComponentData, RequiresComponent
+ public: virtual bool NotifyComponentRemoval(const Entity _entity,
+ const ComponentTypeId _typeId) = 0;
+
+ /// \brief Remove an entity from the view.
+ /// \param[in] _entity The entity to remove.
+ /// \return True if the entity was removed, false if the entity did not
+ /// exist in the view.
+ public: virtual bool RemoveEntity(const Entity _entity) = 0;
+
+ /// \brief Add the entity to the list of entities to be removed
+ /// \param[in] _entity The entity to add.
+ /// \return True if the entity was added to the list, false if the entity
+ /// was not associated with the view.
+ public: bool MarkEntityToRemove(const Entity _entity);
+
+ /// \brief Update the entities in the view to no longer appear as newly
+ /// created. This method should be called whenever a new simulation step is
+ /// about to take place.
+ public: void ResetNewEntityState();
+
+ /// \brief Get the set of component types that this view requires.
+ /// \return The set of component types.
+ public: const std::set &ComponentTypes() const;
+
+ /// \brief Clear all data from the view and reset it to its original, empty
+ /// state.
+ public: virtual void Reset() = 0;
+
+ /// \brief Get all of the entities in the view
+ /// \return The entities in the view
+ public: const std::set &Entities() const;
+
+ /// \brief Get all of the entities in the view that are considered "newly
+ /// created". While an entity may be new to the view, it may not be a newly
+ /// created entity (perhaps this entity has existed for some time, and just
+ /// had a component added to it that now makes this entity a part of the
+ /// view). An entity's "newness" is determined by the entity component
+ /// manager.
+ /// \return The newly created entities that are a part of the view
+ public: const std::set &NewEntities() const;
+
+ /// \brief Get all of the entities to be removed from the view
+ /// \return The entities to be removed from the view
+ public: const std::set &ToRemoveEntities() const;
+
+ /// \brief Get all of the entities that should be added to the view. This is
+ /// useful for adding entities to the view before the view is used to ensure
+ /// that the view is up-to-date. Once all entities marked "to be added" are
+ /// added to the view, the ClearToAddEntities method should be called.
+ /// \return The entities to be added to the view, with the key of the map
+ /// indicating whether an entity is a newly created entity or not.
+ /// \sa ClearToAddEntities
+ public: const std::unordered_map &ToAddEntities() const;
+
+ /// \brief Clear all of the entities that are marked as to be added to the
+ /// view. This should be called after all of the entities marked as to be
+ /// added to the view are actually added to the view.
+ /// \sa ToAddEntities
+ public: void ClearToAddEntities();
+
+ // TODO(adlarkin) make this a std::unordered_set for better performance.
+ // We need to make sure nothing else depends on the ordered preserved by
+ // std::set first
+ /// \brief All the entities that belong to this view.
+ protected: std::set entities;
+
+ // TODO(adlarkin) make this a std::unordered_set for better performance.
+ // We need to make sure nothing else depends on the ordered preserved by
+ // std::set first
+ /// \brief List of newly created entities
+ protected: std::set newEntities;
+
+ // TODO(adlarkin) make this a std::unordered_set for better performance.
+ // We need to make sure nothing else depends on the ordered preserved by
+ // std::set first
+ /// \brief List of entities about to be removed
+ protected: std::set toRemoveEntities;
+
+ /// \brief List of entities to be added to the view. The value of the map
+ /// indicates whether the entity is new to the entity component manager or not
+ protected: std::unordered_map toAddEntities;
+
+ /// \brief The component types in the view
+ protected: std::set componentTypes;
+};
+} // namespace detail
+} // namespace IGNITION_GAZEBO_VERSION_NAMESPACE
+} // namespace gazebo
+} // namespace ignition
+#endif
diff --git a/include/ignition/gazebo/detail/ComponentStorageBase.hh b/include/ignition/gazebo/detail/ComponentStorageBase.hh
index ca9e5e89603..cb4e0edcc21 100644
--- a/include/ignition/gazebo/detail/ComponentStorageBase.hh
+++ b/include/ignition/gazebo/detail/ComponentStorageBase.hh
@@ -17,12 +17,7 @@
#ifndef IGNITION_GAZEBO_DETAIL_COMPONENTSTORAGEBASE_HH_
#define IGNITION_GAZEBO_DETAIL_COMPONENTSTORAGEBASE_HH_
-#include