def create_space_box_md(): md = bindings.SpaceMetadata() md.setType(bindings.SpaceType_Box) max_float = float(np.finfo(np.float32).max) md.setLowLimit([-2.5, -max_float, -24, -max_float]) md.setHighLimit([2.5, max_float, 24, max_float]) return md
def _plugin_metadata(self) -> bindings.PluginMetadata: md = bindings.PluginMetadata() # Configure ignition environment md.setEnvironmentName("CartPole") md.setLibraryName("CartPolePlugin") md.setClassName("gympp::plugins::CartPole") md.setWorldFileName("DefaultEmptyWorld.world") md.setModelFileName("CartPole/CartPole.sdf") md.setAgentRate(1000) real_time_factor = 1E9 max_physics_step_size = 0.001 md.setPhysicsData( bindings.PhysicsData(real_time_factor, max_physics_step_size)) # Configure the action space action_space_md = bindings.SpaceMetadata() action_space_md.setType(bindings.SpaceType_Discrete) action_space_md.setDimensions([2]) # Configure the observation space observation_space_md = bindings.SpaceMetadata() observation_space_md.setType(bindings.SpaceType_Box) max_float = float(np.finfo(np.float32).max) observation_space_md.setLowLimit([-2.5, -max_float, -24, -max_float]) observation_space_md.setHighLimit([2.5, max_float, 24, max_float]) # Store the spaces information md.setActionSpaceMetadata(action_space_md) md.setObservationSpaceMetadata(observation_space_md) # Return the metadata assert md.isValid(), "The plugin metadata object is not valid" return md
def create_space_discrete_md(): md = bindings.SpaceMetadata() md.setType(bindings.SpaceType_Discrete) md.setDimensions([2]) return md
def test_gymfactory(): # Get the factory factory = bindings.GymFactory.Instance() # Register a plugin with empty metadata md = bindings.PluginMetadata() assert not factory.registerPlugin(md), "The empty plugin metadata should not be valid" # Get a not registered environment env = factory.make("foo") assert not env, "The environment should not be valid" # Check that the CartPole plugin exists assert "IGN_GAZEBO_SYSTEM_PLUGIN_PATH" in os.environ, \ "Variable IGN_GAZEBO_SYSTEM_PLUGIN_PATH not set in the environment" directories = os.environ['IGN_GAZEBO_SYSTEM_PLUGIN_PATH'].split(os.pathsep) found = False for directory in directories: matching_plugins = list(Path(directory).glob("*CartPole*")) found = found or (len(matching_plugins) is not 0) assert found, "Failed to find CartPole plugin" # Create the metadata md = bindings.PluginMetadata() md.setEnvironmentName("CartPole") md.setLibraryName("CartPolePlugin") md.setClassName("gympp::plugins::CartPole") md.setWorldFileName("DefaultEmptyWorld.world") md.setModelFileName("CartPole/CartPole.urdf") md.setAgentRate(1000) md.setPhysicsData(bindings.PhysicsData(1.0, 0.001)) action_space_md = bindings.SpaceMetadata() action_space_md.setType(bindings.SpaceType_Discrete) action_space_md.setDimensions([2]) observation_space_md = bindings.SpaceMetadata() observation_space_md.setType(bindings.SpaceType_Box) max_float = float(np.finfo(np.float32).max) observation_space_md.setLowLimit([-2.5, -max_float, -24, -max_float]) observation_space_md.setHighLimit([2.5, max_float, 24, max_float]) md.setActionSpaceMetadata(action_space_md) md.setObservationSpaceMetadata(observation_space_md) assert md.isValid(), "Metadata for CartPole environment is not valid" # Register the metadata assert factory.registerPlugin(md), "Failed to register the plugin metadata in the " \ "factory" # Get the environment env = factory.make("CartPole") assert env, "Failed to create CartPoleIgnition environment from the factory" # Get the gazebo wrapper gazebo = bindings.envToGazeboWrapper(env) assert gazebo, "Failed to get gazebo wrapper" # Get the ignition environment ign_env = bindings.envToIgnEnv(env) assert ign_env, "Failed to get the ignition environment" # Set verbosity bindings.GazeboWrapper.setVerbosity(4) # Use the environment env.reset() action = env.action_space.sample() state_opt = env.step(action) assert state_opt.has_value() state = state_opt.value() assert list(state.observation.getBuffer_d()) observation = list(state.observation.getBuffer_d()) assert len(observation) == 4 # Try to register another environment assert factory.registerPlugin(md), "Failed to re-register the plugin metadata in " \ "the factory" # Try to get another environment env2 = factory.make("CartPole") assert env2, "Failed to create CartPoleIgnition environment from the factory" assert env != env2, "Environment created from the factory are the same" env2.reset() env2.step(action)