From 105b00aae400799e03f14dec665257777613ef7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pe=C5=82ka?= Date: Mon, 27 Oct 2025 17:28:16 +0100 Subject: [PATCH] Add array spawn service. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michał Pełka --- msg/SimulatorFeatures.msg | 2 ++ srv/SpawnEntities.srv | 46 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 srv/SpawnEntities.srv diff --git a/msg/SimulatorFeatures.msg b/msg/SimulatorFeatures.msg index 2ea1ce3..3ca5341 100644 --- a/msg/SimulatorFeatures.msg +++ b/msg/SimulatorFeatures.msg @@ -38,6 +38,8 @@ uint8 WORLD_UNLOADING = 43 # Supports UnloadWorld interface uint8 WORLD_INFO_GETTING = 44 # Supports GetCurrentWorld interface uint8 AVAILABLE_WORLDS = 45 # Supports GetAvailableWorlds interface +uint8 SPAWNING_ARRAY = 50 # Support array spawning (SpawnEntities) + uint16[] features # A list of simulation features as specified by the list above. # A list of additional supported formats for spawning, which might be empty. Values may include diff --git a/srv/SpawnEntities.srv b/srv/SpawnEntities.srv new file mode 100644 index 0000000..f5c08de --- /dev/null +++ b/srv/SpawnEntities.srv @@ -0,0 +1,46 @@ +# Spawn entities (a robot, other object) by name or URI +# Support for this interface is indicated through the SPAWNING_ARRAY value in GetSimulationFeatures. + +string names[] # A list of names given to every entity + # If string is empty, a name field in the uri file or resource_string will be used, + # if supported and not empty (e.g. "name" field in SDFormat, URDF). + # If the name is still empty or not unique (as determined by the simulator), + # the service returns a generated name in the entity_name response field if the + # allow_renaming field is set to true. Otherwise, the service call fails and an + # error is returned. +bool allow_renaming[] # Determines whether the spawning succeeds with a non-unique name. + # If it is set to true, the user should always check entity_name response field + # and use it for any further interactions. + +Resource entity_resources[] # List of resources such as SDFormat, URDF, USD or MJCF file, a native prefab, etc. + # Valid URIs can be determined by calling GetSpawnables first. + # Check simulator format support via the spawn_formats field in GetSimulatorFeatures. + # Using resource_string is supported if GetSimulatorFeatures includes + # the SPAWNING_RESOURCE_STRING feature. + +string entity_namespaces[] # Spawn entities with theirs interfaces under those namespaces. +geometry_msgs/PoseStamped initial_poses[] # Array of initial poses for every enttiy. + # The header contains a reference frame, which defaults to global "world" frame. + # This frame must be known to the simulator, e.g. of an object spawned earlier. + # The timestamp field in the header is ignored. + +--- + +# Additional result.result_code values for this service. Check result.error_message for further details. +uint8 NAME_NOT_UNIQUE = 101 # Given name is already taken by entity and allow_renaming is false. +uint8 NAME_INVALID = 102 # Given name is invalid in the simulator (e.g. does not meet naming + # requirements such as allowed characters). This is also returned if name is + # empty and allow_renaming is false. +uint8 UNSUPPORTED_FORMAT = 103 # Format for uri or resource string is unsupported. Check supported formats + # through GetSimulatorFeatures service, in spawn_formats field. +uint8 NO_RESOURCE = 104 # Both uri and resource string are empty. +uint8 NAMESPACE_INVALID = 105 # Namespace does not meet namespace naming standards. +uint8 RESOURCE_PARSE_ERROR = 106 # Resource file or string failed to parse. +uint8 MISSING_ASSETS = 107 # At least one of resource assets (such as meshes) was not found. +uint8 UNSUPPORTED_ASSETS = 108 # At least one of resource assets (such as meshes) is not supported. +uint8 INVALID_POSE = 109 # initial_pose is invalid, such as when the quaternion is invalid or position + # exceeds simulator world bounds. + +Result results[] +string entity_names[] # List of names of spawned entities, guaranteed to be unique in the simulation. + # If allow_renaming is true, it may differ from the request name field.