mirror of
https://github.com/google-deepmind/deepmind-research.git
synced 2026-02-06 20:12:20 +08:00
83 lines
2.8 KiB
Python
83 lines
2.8 KiB
Python
# Copyright 2020 Deepmind Technologies Limited.
|
|
#
|
|
# 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.
|
|
|
|
"""Functions that build representative tasks."""
|
|
|
|
from dm_control import composer
|
|
from dm_control.composer.variation import distributions
|
|
from dm_control.locomotion.mocap import loader as mocap_loader
|
|
from dm_control.locomotion.walkers import cmu_humanoid
|
|
|
|
from catch_carry import ball_toss
|
|
from catch_carry import warehouse
|
|
|
|
|
|
def build_vision_warehouse(random_state=None):
|
|
"""Build canonical 4-pedestal, 2-prop task."""
|
|
|
|
# Build a position-controlled CMU humanoid walker.
|
|
walker = cmu_humanoid.CMUHumanoidPositionControlled(
|
|
observable_options={'egocentric_camera': dict(enabled=True)})
|
|
|
|
# Build the task.
|
|
size_distribution = distributions.Uniform(low=0.75, high=1.25)
|
|
mass_distribution = distributions.Uniform(low=2, high=7)
|
|
prop_resizer = mocap_loader.PropResizer(size_factor=size_distribution,
|
|
mass=mass_distribution)
|
|
task = warehouse.PhasedBoxCarry(
|
|
walker=walker,
|
|
num_props=2,
|
|
num_pedestals=4,
|
|
proto_modifier=prop_resizer,
|
|
negative_reward_on_failure_termination=True)
|
|
|
|
# return the environment
|
|
return composer.Environment(
|
|
time_limit=15,
|
|
task=task,
|
|
random_state=random_state,
|
|
strip_singleton_obs_buffer_dim=True,
|
|
max_reset_attempts=float('inf'))
|
|
|
|
|
|
def build_vision_toss(random_state=None):
|
|
"""Build canonical ball tossing task."""
|
|
|
|
# Build a position-controlled CMU humanoid walker.
|
|
walker = cmu_humanoid.CMUHumanoidPositionControlled(
|
|
observable_options={'egocentric_camera': dict(enabled=True)})
|
|
|
|
# Build the task.
|
|
size_distribution = distributions.Uniform(low=0.95, high=1.5)
|
|
mass_distribution = distributions.Uniform(low=2, high=4)
|
|
prop_resizer = mocap_loader.PropResizer(size_factor=size_distribution,
|
|
mass=mass_distribution)
|
|
task = ball_toss.BallToss(
|
|
walker=walker,
|
|
proto_modifier=prop_resizer,
|
|
negative_reward_on_failure_termination=True,
|
|
priority_friction=True,
|
|
bucket_offset=3.,
|
|
y_range=0.5,
|
|
toss_delay=1.5,
|
|
randomize_init=True)
|
|
|
|
# return the environment
|
|
return composer.Environment(
|
|
time_limit=6,
|
|
task=task,
|
|
random_state=random_state,
|
|
strip_singleton_obs_buffer_dim=True,
|
|
max_reset_attempts=float('inf'))
|