diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index 16e061fb..8751200f 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -23,21 +23,25 @@ jobs: steps: - uses: actions/checkout@v3 + - name: Set up Python 3.10 uses: actions/setup-python@v3 with: python-version: "3.10" + - name: Install mesa and patchelf run: | + sudo apt-get update -y -qq sudo apt-get install -y \ libgl1-mesa-dev \ - libgl1-mesa-glx \ + libgl1 \ + libglx-mesa0 \ libglew-dev \ libosmesa6-dev \ - software-properties-common - sudo apt-get install -y patchelf - sudo apt-get update -y -qq - sudo apt-get install -y xvfb x11-xserver-utils + software-properties-common \ + patchelf \ + xvfb \ + x11-xserver-utils sudo /usr/bin/Xvfb $DISPLAY -screen 0 1280x1024x24 & - name: Install ffmpeg @@ -46,6 +50,7 @@ jobs: - name: Checkout submodules run: git submodule update --init --recursive + - name: Install dependencies run: | python -m pip install --upgrade pip @@ -56,10 +61,6 @@ jobs: - name: Run MuJoCo Rendering test run: python3 -m mujoco.render_test - # - name: Test RoboHive (Fetching SimHive via git-submodules) - # run: | - # python robohive/tests/test_all.py - - name: Test RoboHive (Programmatically fetching SimHive) run: | rm -rf robohive/simhive diff --git a/.gitmodules b/.gitmodules index 4b60597e..a6d2cc96 100644 --- a/.gitmodules +++ b/.gitmodules @@ -38,4 +38,4 @@ url = https://github.com/vikashplus/robotiq_sim.git [submodule "robohive/simhive/myo_sim"] path = robohive/simhive/myo_sim - url = https://github.com/MyoHub/myo_sim.git \ No newline at end of file + url = https://github.com/MyoHub/myo_sim.git diff --git a/README.md b/README.md index aa3aae59..8c242647 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ MultiTask Suite This suite contains a collection of environments centered around dexterous manipulation. Standard [TCDM benchmarks](https://pregrasps.github.io/) are a part of this suite ## - ROBEL Suite (Coming soon) - This suite contains a collection of environments centered around real-world locomotion and manipulation. Standard [ROBEL benchmarks](http://roboticsbenchmarks.org/) are a part of this suite + This suite contains a collection of environments centered around real-world locomotion and manipulation. Standard [ROBEL benchmarks](https://sites.google.com/view/roboticsbenchmarks) are a part of this suite # Citation If you find `RoboHive` useful in your research, diff --git a/robohive/envs/arms/__init__.py b/robohive/envs/arms/__init__.py index d6a3220b..3fe5f663 100644 --- a/robohive/envs/arms/__init__.py +++ b/robohive/envs/arms/__init__.py @@ -8,11 +8,14 @@ # from gym.envs.registration import register from robohive.utils import gym; register=gym.register -from robohive.envs.env_variants import register_env_variant import os + +from robohive.envs.env_variants import register_env_variant +from robohive.utils.prompt_utils import Prompt, prompt + curr_dir = os.path.dirname(os.path.abspath(__file__)) -print("RoboHive:> Registering Arms Envs") +prompt("RoboHive:> Registering Arms Envs", Prompt.ONCE) # FRANKA REACH ======================================================================= from robohive.envs.arms.reach_base_v0 import ReachBaseV0 diff --git a/robohive/envs/arms/fetch/assets/fetch_reach_v0.config b/robohive/envs/arms/fetch/assets/fetch_reach_v0.config index d0ac1c0a..b35c8ae3 100644 --- a/robohive/envs/arms/fetch/assets/fetch_reach_v0.config +++ b/robohive/envs/arms/fetch/assets/fetch_reach_v0.config @@ -3,27 +3,27 @@ 'franka':{ 'interface': {'type': 'fetch'}, 'sensor':[ - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'shoulder_pan_jp'}, - {'range':(-1.8, 1.8), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'shoulder_lift_jp'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'upperarm_roll_jp'}, - {'range':(-3.1, 0.0), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'elbow_flex_jp'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'forearm_roll_jp'}, - {'range':(-1.7, 3.8), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'wrist_flex_jp'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'wrist_roll_jp'}, - {'range':(0.00, .04), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'r_gripper_finger_jp'}, - {'range':(0.00, .04), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'l_gripper_finger_jp'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'shoulder_pan_jp'}, + {'range':(-1.8, 1.8), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'shoulder_lift_jp'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'upperarm_roll_jp'}, + {'range':(-3.1, 0.0), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'elbow_flex_jp'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'forearm_roll_jp'}, + {'range':(-1.7, 3.8), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'wrist_flex_jp'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'wrist_roll_jp'}, + {'range':(0.00, .04), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'r_gripper_finger_jp'}, + {'range':(0.00, .04), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'l_gripper_finger_jp'}, ], 'actuator':[ - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'shoulder_pan'}, - {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'shoulder_lift'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'upperarm_roll'}, - {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'elbow_flex'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'forearm_roll'}, - {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'wrist_flex'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'wrist_roll'}, - {'pos_range':(-0.0000, 0.0400), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'r_gripper_finger'}, - {'pos_range':(-0.0000, 0.0400), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'l_gripper_finger'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'shoulder_pan'}, + {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'shoulder_lift'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'upperarm_roll'}, + {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'elbow_flex'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'forearm_roll'}, + {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'wrist_flex'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'wrist_roll'}, + {'pos_range':(-0.0000, 0.0400), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'r_gripper_finger'}, + {'pos_range':(-0.0000, 0.0400), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'l_gripper_finger'}, ] } } \ No newline at end of file diff --git a/robohive/envs/arms/franka/assets/franka_busbin_v0.config b/robohive/envs/arms/franka/assets/franka_busbin_v0.config index 859dad30..2904463b 100644 --- a/robohive/envs/arms/franka/assets/franka_busbin_v0.config +++ b/robohive/envs/arms/franka/assets/franka_busbin_v0.config @@ -3,39 +3,39 @@ 'franka':{ 'interface': {'type': 'franka', 'ip_address':'169.254.163.91'}, 'sensor':[ - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, - {'range':(-1.8, 1.8), 'noise':0.05, 'hdr_id':1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':2, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, - {'range':(-3.1, 0.0), 'noise':0.05, 'hdr_id':3, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, - {'range':(-1.7, 3.8), 'noise':0.05, 'hdr_id':5, 'scale':1, 'offset':-np.pi/2, 'name':'fr_arm_jp6'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':6, 'scale':1, 'offset':-np.pi/4, 'name':'fr_arm_jp7'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':0, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, + {'range':(-1.8, 1.8), 'noise':0.05, 'adr':1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':2, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, + {'range':(-3.1, 0.0), 'noise':0.05, 'adr':3, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, + {'range':(-1.7, 3.8), 'noise':0.05, 'adr':5, 'scale':1, 'offset':-np.pi/2, 'name':'fr_arm_jp6'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':6, 'scale':1, 'offset':-np.pi/4, 'name':'fr_arm_jp7'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv1'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv2'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv3'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv4'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv5'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv6'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv7'}, - {'range':(0.00, .04), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv1'}, - {'range':(0.00, .04), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv1'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv3'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv4'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv5'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv6'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv7'}, + {'range':(0.00, .04), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv1'}, + {'range':(0.00, .04), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv2'}, ], 'actuator':[ - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':0, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, - {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':2, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, - {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':3, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':4, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, - {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':5, 'scale':1, 'offset':np.pi/2, 'name':'panda0_joint6'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':6, 'scale':1, 'offset':np.pi/4, 'name':'panda0_joint7'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':0, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, + {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':2, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, + {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':3, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':4, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, + {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':5, 'scale':1, 'offset':np.pi/2, 'name':'panda0_joint6'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':6, 'scale':1, 'offset':np.pi/4, 'name':'panda0_joint7'}, ] }, # 'busbin':{ # 'interface': {}, # 'sensor':[ - # {'range':(-2.0, 0.0), 'noise':0.05, 'hdr_id':7, 'scale':1, 'offset':0, 'name':'???'}, + # {'range':(-2.0, 0.0), 'noise':0.05, 'adr':7, 'scale':1, 'offset':0, 'name':'???'}, # ], # 'actuator':[] # } diff --git a/robohive/envs/arms/franka/assets/franka_reach_v0.config b/robohive/envs/arms/franka/assets/franka_reach_v0.config index e61944bb..04f0819b 100644 --- a/robohive/envs/arms/franka/assets/franka_reach_v0.config +++ b/robohive/envs/arms/franka/assets/franka_reach_v0.config @@ -3,37 +3,37 @@ 'franka':{ 'interface': {'type': 'franka', 'ip_address':'172.16.0.1', 'gain_scale':0.5}, 'sensor':[ - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, - {'range':(-1.8, 1.8), 'noise':0.05, 'hdr_id':1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':2, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, - {'range':(-3.1, 0.0), 'noise':0.05, 'hdr_id':3, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, - {'range':(-1.7, 3.8), 'noise':0.05, 'hdr_id':5, 'scale':1, 'offset':-np.pi/2, 'name':'fr_arm_jp6'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':6, 'scale':1, 'offset':-np.pi/4, 'name':'fr_arm_jp7'}, - # {'range':(0.00, .04), 'noise':0.05, 'hdr_id':7, 'scale':1, 'offset':0, 'name':'fr_fin_jp1'}, - # {'range':(0.00, .04), 'noise':0.05, 'hdr_id':8, 'scale':1, 'offset':0, 'name':'fr_fin_jp2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':0, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, + {'range':(-1.8, 1.8), 'noise':0.05, 'adr':1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':2, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, + {'range':(-3.1, 0.0), 'noise':0.05, 'adr':3, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, + {'range':(-1.7, 3.8), 'noise':0.05, 'adr':5, 'scale':1, 'offset':-np.pi/2, 'name':'fr_arm_jp6'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':6, 'scale':1, 'offset':-np.pi/4, 'name':'fr_arm_jp7'}, + # {'range':(0.00, .04), 'noise':0.05, 'adr':7, 'scale':1, 'offset':0, 'name':'fr_fin_jp1'}, + # {'range':(0.00, .04), 'noise':0.05, 'adr':8, 'scale':1, 'offset':0, 'name':'fr_fin_jp2'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv1'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv2'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv3'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv4'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv5'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv6'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv7'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv1'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv2'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv1'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv2'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv3'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv4'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv5'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv6'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv7'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv1'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv2'}, ], 'actuator':[ - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'hdr_id':0, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, - {'pos_range':(-1.8326, 1.8326), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'hdr_id':1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'hdr_id':2, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, - {'pos_range':(-3.1416, 0.0000), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'hdr_id':3, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'hdr_id':4, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, - {'pos_range':(-1.6600, 2.1817), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'hdr_id':5, 'scale':1, 'offset':np.pi/2, 'name':'panda0_joint6'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'hdr_id':6, 'scale':1, 'offset':np.pi/4, 'name':'panda0_joint7'}, - # {'pos_range':(-0.0000, 0.0400), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'r_gripper_finger_joint'}, - # {'pos_range':(-0.0000, 0.0400), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'l_gripper_finger_joint'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'adr':0, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, + {'pos_range':(-1.8326, 1.8326), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'adr':1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'adr':2, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, + {'pos_range':(-3.1416, 0.0000), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'adr':3, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'adr':4, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, + {'pos_range':(-1.6600, 2.1817), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'adr':5, 'scale':1, 'offset':np.pi/2, 'name':'panda0_joint6'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'adr':6, 'scale':1, 'offset':np.pi/4, 'name':'panda0_joint7'}, + # {'pos_range':(-0.0000, 0.0400), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'r_gripper_finger_joint'}, + # {'pos_range':(-0.0000, 0.0400), 'vel_range':(-1.0*np.pi/2, 1.0*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'l_gripper_finger_joint'}, ] }, @@ -41,8 +41,8 @@ 'interface': {'type': 'realsense', 'topic':'realsense_815412070228/color/image_raw', 'data_type':'rgb240x320'}, 'sensor':[], 'cam': [ - {'range':(0, 255), 'noise':0.00, 'hdr_id':'rgb', 'scale':1, 'offset':0, 'name':'/color/image_raw'}, - # {'range':(0, 255), 'noise':0.00, 'hdr_id':'d', 'scale':1, 'offset':0, 'name':'/depth_mono/image_raw'}, + {'range':(0, 255), 'noise':0.00, 'adr':'rgb', 'scale':1, 'offset':0, 'name':'/color/image_raw'}, + # {'range':(0, 255), 'noise':0.00, 'adr':'d', 'scale':1, 'offset':0, 'name':'/depth_mono/image_raw'}, ], 'actuator':[] }, @@ -51,8 +51,8 @@ 'interface': {'type': 'realsense', 'topic':'realsense_815412070341/color/image_raw', 'data_type':'rgb'}, 'sensor':[], 'cam': [ - {'range':(0, 255), 'noise':0.00, 'hdr_id':'rgb', 'scale':1, 'offset':0, 'name':'/color/image_raw'}, - # {'range':(0, 255), 'noise':0.00, 'hdr_id':'d', 'scale':1, 'offset':0, 'name':'/depth_mono/image_raw'}, + {'range':(0, 255), 'noise':0.00, 'adr':'rgb', 'scale':1, 'offset':0, 'name':'/color/image_raw'}, + # {'range':(0, 255), 'noise':0.00, 'adr':'d', 'scale':1, 'offset':0, 'name':'/depth_mono/image_raw'}, ], 'actuator':[] }, @@ -61,8 +61,8 @@ 'interface': {'type': 'realsense', 'topic':'realsense_936322070233/color/image_raw', 'data_type':'rgb'}, 'sensor':[], 'cams': [ - {'range':(0, 255), 'noise':0.00, 'hdr_id':'rgb', 'scale':1, 'offset':0, 'name':'/color/image_raw'}, - # {'range':(0, 255), 'noise':0.00, 'hdr_id':'d', 'scale':1, 'offset':0, 'name':'/depth_mono/image_raw'}, + {'range':(0, 255), 'noise':0.00, 'adr':'rgb', 'scale':1, 'offset':0, 'name':'/color/image_raw'}, + # {'range':(0, 255), 'noise':0.00, 'adr':'d', 'scale':1, 'offset':0, 'name':'/depth_mono/image_raw'}, ], 'actuator':[] }, diff --git a/robohive/envs/arms/franka/assets/franka_ycb_v0.config b/robohive/envs/arms/franka/assets/franka_ycb_v0.config index 54b23efe..81b49b42 100644 --- a/robohive/envs/arms/franka/assets/franka_ycb_v0.config +++ b/robohive/envs/arms/franka/assets/franka_ycb_v0.config @@ -3,48 +3,48 @@ 'franka':{ 'interface': {'type': 'franka', 'ip_address':'169.254.163.91'}, 'sensor':[ - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, - {'range':(-1.8, 1.8), 'noise':0.05, 'hdr_id':1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':2, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, - {'range':(-3.1, 0.0), 'noise':0.05, 'hdr_id':3, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, - {'range':(-1.7, 3.8), 'noise':0.05, 'hdr_id':5, 'scale':1, 'offset':-np.pi/2, 'name':'fr_arm_jp6'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':6, 'scale':1, 'offset':-np.pi/4, 'name':'fr_arm_jp7'}, - {'range':(0.00, .04), 'noise':0.05, 'hdr_id':7, 'scale':1, 'offset':0, 'name':'fr_fin_jp1'}, - {'range':(0.00, .04), 'noise':0.05, 'hdr_id':8, 'scale':1, 'offset':0, 'name':'fr_fin_jp2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':0, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, + {'range':(-1.8, 1.8), 'noise':0.05, 'adr':1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':2, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, + {'range':(-3.1, 0.0), 'noise':0.05, 'adr':3, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, + {'range':(-1.7, 3.8), 'noise':0.05, 'adr':5, 'scale':1, 'offset':-np.pi/2, 'name':'fr_arm_jp6'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':6, 'scale':1, 'offset':-np.pi/4, 'name':'fr_arm_jp7'}, + {'range':(0.00, .04), 'noise':0.05, 'adr':7, 'scale':1, 'offset':0, 'name':'fr_fin_jp1'}, + {'range':(0.00, .04), 'noise':0.05, 'adr':8, 'scale':1, 'offset':0, 'name':'fr_fin_jp2'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv1'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv2'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv3'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv4'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv5'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv6'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv7'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv1'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv2'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv1'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv2'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv3'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv4'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv5'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv6'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv7'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv1'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv2'}, ], 'actuator':[ - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':0, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, - {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':2, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, - {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':3, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':4, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, - {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':5, 'scale':1, 'offset':np.pi/2, 'name':'panda0_joint6'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':6, 'scale':1, 'offset':np.pi/4, 'name':'panda0_joint7'}, - {'pos_range':(-0.0000, 0.0400), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'r_gripper_finger_joint'}, - {'pos_range':(-0.0000, 0.0400), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'l_gripper_finger_joint'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':0, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, + {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':2, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, + {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':3, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':4, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, + {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':5, 'scale':1, 'offset':np.pi/2, 'name':'panda0_joint6'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':6, 'scale':1, 'offset':np.pi/4, 'name':'panda0_joint7'}, + {'pos_range':(-0.0000, 0.0400), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'r_gripper_finger_joint'}, + {'pos_range':(-0.0000, 0.0400), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'l_gripper_finger_joint'}, ] }, 'object':{ 'interface':{}, 'sensor':[ - {'range':(-1.0, 1.0), 'noise':0.005, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'Tx'}, - {'range':(-0.5, 0.5), 'noise':0.005, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'Ty'}, - {'range':(-1.0, 1.0), 'noise':0.005, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'Tz'}, - {'range':(-3.1, 3.1), 'noise':0.005, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'Rx'}, - {'range':(-3.1, 3.1), 'noise':0.005, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'Ry'}, - {'range':(-3.1, 3.1), 'noise':0.005, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'Rz'}, + {'range':(-1.0, 1.0), 'noise':0.005, 'adr':0, 'scale':1, 'offset':0, 'name':'Tx'}, + {'range':(-0.5, 0.5), 'noise':0.005, 'adr':0, 'scale':1, 'offset':0, 'name':'Ty'}, + {'range':(-1.0, 1.0), 'noise':0.005, 'adr':0, 'scale':1, 'offset':0, 'name':'Tz'}, + {'range':(-3.1, 3.1), 'noise':0.005, 'adr':0, 'scale':1, 'offset':0, 'name':'Rx'}, + {'range':(-3.1, 3.1), 'noise':0.005, 'adr':0, 'scale':1, 'offset':0, 'name':'Ry'}, + {'range':(-3.1, 3.1), 'noise':0.005, 'adr':0, 'scale':1, 'offset':0, 'name':'Rz'}, ], 'actuator':[] } diff --git a/robohive/envs/claws/__init__.py b/robohive/envs/claws/__init__.py index ec019270..f17f850d 100644 --- a/robohive/envs/claws/__init__.py +++ b/robohive/envs/claws/__init__.py @@ -7,10 +7,13 @@ from robohive.utils import gym; register=gym.register import os + curr_dir = os.path.dirname(os.path.abspath(__file__)) from robohive.envs.env_variants import register_env_variant +from robohive.utils.prompt_utils import Prompt, prompt + +prompt("RoboHive:> Registering Claw Envs", Prompt.ONCE) -print("RoboHive:> Registering Claw Envs") # TRIFINGER REORIENT ======================================================================= from robohive.envs.claws.reorient_v0 import ReorientBaseV0 diff --git a/robohive/envs/env_base.py b/robohive/envs/env_base.py index 1072b132..cd7edd19 100644 --- a/robohive/envs/env_base.py +++ b/robohive/envs/env_base.py @@ -5,21 +5,21 @@ License :: Under 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. ================================================= """ -from robohive.utils import gym -import numpy as np import os import time as timer +from sys import platform -from robohive.envs.obs_vec_dict import ObsVecDict -from robohive.utils import tensor_utils -from robohive.robot.robot import Robot -from robohive.utils.implement_for import implement_for -from robohive.utils.prompt_utils import prompt, Prompt +import numpy as np import skvideo.io -from sys import platform -from robohive.physics.sim_scene import SimScene + import robohive.utils.import_utils as import_utils from robohive.envs.env_variants import gym_registry_specs +from robohive.envs.obs_vec_dict import ObsVecDict +from robohive.physics.sim_scene import SimScene +from robohive.robot.robot import Robot +from robohive.utils import gym, tensor_utils +from robohive.utils.implement_for import implement_for +from robohive.utils.prompt_utils import Prompt, prompt # TODO # remove rwd_mode @@ -183,7 +183,14 @@ def forward(self, x): if "rrl" in id_encoder or "resnet" in id_encoder: import_utils.torchvision_isavailable() import torchvision.transforms as T - from torchvision.models import resnet50, ResNet50_Weights, resnet34, ResNet34_Weights, resnet18, ResNet18_Weights + from torchvision.models import ( + ResNet18_Weights, + ResNet34_Weights, + ResNet50_Weights, + resnet18, + resnet34, + resnet50, + ) if "r3m" in id_encoder: import_utils.torchvision_isavailable() @@ -495,8 +502,8 @@ def get_input_seed(self): def _reset(self, reset_qpos=None, reset_qvel=None, seed=None, **kwargs): """ - Reset the environment - Default implemention provided. Override if env needs custom reset + Reset the environment (Default implemention provided). + Override if env needs custom reset. Carefully handle return type for gym/gymnasium compatibility """ qpos = self.init_qpos.copy() if reset_qpos is None else reset_qpos qvel = self.init_qvel.copy() if reset_qvel is None else reset_qvel @@ -517,6 +524,13 @@ def reset(self, reset_qpos=None, reset_qvel=None, seed=None, **kwargs): # return self.step(a) + def close(self): + """ + Clean up the environment + """ + if self.sim: + self.sim.close() + @property def dt(self): return self.sim.model.opt.timestep * self.frame_skip diff --git a/robohive/envs/fm/__init__.py b/robohive/envs/fm/__init__.py index b9d71406..32aa666f 100644 --- a/robohive/envs/fm/__init__.py +++ b/robohive/envs/fm/__init__.py @@ -1,8 +1,13 @@ from robohive.utils import gym; register=gym.register -import numpy as np import os + +import numpy as np + curr_dir = os.path.dirname(os.path.abspath(__file__)) +from robohive.utils.prompt_utils import Prompt, prompt + +prompt("RoboHive:> Registering FM Envs", Prompt.ONCE) # Reach to fixed target # register( diff --git a/robohive/envs/fm/assets/dmanus.config b/robohive/envs/fm/assets/dmanus.config index 938e47d0..a0bf3062 100644 --- a/robohive/envs/fm/assets/dmanus.config +++ b/robohive/envs/fm/assets/dmanus.config @@ -3,27 +3,27 @@ 'dmanus':{ 'interface': {'type': 'dynamixel', 'motor_type':"X", 'name':"/dev/ttyUSB0"}, 'sensor':[ - {'range':(-0.75, 0.57), 'noise':0.05, 'hdr_id':10, 'name':'TFJ1', 'scale':-1, 'offset':np.pi }, - {'range':(-0.00, 2.14), 'noise':0.05, 'hdr_id':11, 'name':'TFJ2', 'scale':-1, 'offset':3*np.pi/2 }, - {'range':(-0.00, 2.00), 'noise':0.05, 'hdr_id':12, 'name':'TFJ3', 'scale':-1, 'offset':np.pi }, - {'range':(-0.75, 0.57), 'noise':0.05, 'hdr_id':20, 'name':'IFJ1', 'scale':-1, 'offset':np.pi }, - {'range':(-0.00, 2.14), 'noise':0.05, 'hdr_id':21, 'name':'IFJ2', 'scale':-1, 'offset':3*np.pi/2 }, - {'range':(-0.00, 2.00), 'noise':0.05, 'hdr_id':22, 'name':'IFJ3', 'scale':+1, 'offset':-np.pi }, - {'range':(-0.75, 0.57), 'noise':0.05, 'hdr_id':30, 'name':'LFJ1', 'scale':-1, 'offset':np.pi }, - {'range':(-0.00, 2.14), 'noise':0.05, 'hdr_id':31, 'name':'LFJ2', 'scale':+1, 'offset':-np.pi/2 }, - {'range':(-0.00, 2.00), 'noise':0.05, 'hdr_id':32, 'name':'LFJ3', 'scale':+1, 'offset':-np.pi }, + {'range':(-0.75, 0.57), 'noise':0.05, 'adr':10, 'name':'TFJ1', 'scale':-1, 'offset':np.pi }, + {'range':(-0.00, 2.14), 'noise':0.05, 'adr':11, 'name':'TFJ2', 'scale':-1, 'offset':3*np.pi/2 }, + {'range':(-0.00, 2.00), 'noise':0.05, 'adr':12, 'name':'TFJ3', 'scale':-1, 'offset':np.pi }, + {'range':(-0.75, 0.57), 'noise':0.05, 'adr':20, 'name':'IFJ1', 'scale':-1, 'offset':np.pi }, + {'range':(-0.00, 2.14), 'noise':0.05, 'adr':21, 'name':'IFJ2', 'scale':-1, 'offset':3*np.pi/2 }, + {'range':(-0.00, 2.00), 'noise':0.05, 'adr':22, 'name':'IFJ3', 'scale':+1, 'offset':-np.pi }, + {'range':(-0.75, 0.57), 'noise':0.05, 'adr':30, 'name':'LFJ1', 'scale':-1, 'offset':np.pi }, + {'range':(-0.00, 2.14), 'noise':0.05, 'adr':31, 'name':'LFJ2', 'scale':+1, 'offset':-np.pi/2 }, + {'range':(-0.00, 2.00), 'noise':0.05, 'adr':32, 'name':'LFJ3', 'scale':+1, 'offset':-np.pi }, ], 'actuator':[ - {'pos_range':(-0.75, 0.57), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':10, 'name':'TFA1', 'mode':'Position', 'scale':-1, 'offset':np.pi }, - {'pos_range':(-0.00, 2.14), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':11, 'name':'TFA2', 'mode':'Position', 'scale':-1, 'offset':3*np.pi/2 }, - {'pos_range':(-0.00, 2.00), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':12, 'name':'TFA3', 'mode':'Position', 'scale':-1, 'offset':np.pi }, - {'pos_range':(-0.75, 0.57), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':20, 'name':'IFA1', 'mode':'Position', 'scale':-1, 'offset':np.pi }, - {'pos_range':(-0.00, 2.14), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':21, 'name':'IFA2', 'mode':'Position', 'scale':-1, 'offset':3*np.pi/2 }, - {'pos_range':(-0.00, 2.00), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':22, 'name':'IFA3', 'mode':'Position', 'scale':+1, 'offset':np.pi }, - {'pos_range':(-0.75, 0.57), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':30, 'name':'LFA1', 'mode':'Position', 'scale':-1, 'offset':np.pi }, - {'pos_range':(-0.00, 2.14), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':31, 'name':'LFA2', 'mode':'Position', 'scale':+1, 'offset':np.pi/2 }, - {'pos_range':(-0.00, 2.00), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':32, 'name':'LFA3', 'mode':'Position', 'scale':+1, 'offset':np.pi }, + {'pos_range':(-0.75, 0.57), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':10, 'name':'TFA1', 'mode':'Position', 'scale':-1, 'offset':np.pi }, + {'pos_range':(-0.00, 2.14), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':11, 'name':'TFA2', 'mode':'Position', 'scale':-1, 'offset':3*np.pi/2 }, + {'pos_range':(-0.00, 2.00), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':12, 'name':'TFA3', 'mode':'Position', 'scale':-1, 'offset':np.pi }, + {'pos_range':(-0.75, 0.57), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':20, 'name':'IFA1', 'mode':'Position', 'scale':-1, 'offset':np.pi }, + {'pos_range':(-0.00, 2.14), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':21, 'name':'IFA2', 'mode':'Position', 'scale':-1, 'offset':3*np.pi/2 }, + {'pos_range':(-0.00, 2.00), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':22, 'name':'IFA3', 'mode':'Position', 'scale':+1, 'offset':np.pi }, + {'pos_range':(-0.75, 0.57), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':30, 'name':'LFA1', 'mode':'Position', 'scale':-1, 'offset':np.pi }, + {'pos_range':(-0.00, 2.14), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':31, 'name':'LFA2', 'mode':'Position', 'scale':+1, 'offset':np.pi/2 }, + {'pos_range':(-0.00, 2.00), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':32, 'name':'LFA3', 'mode':'Position', 'scale':+1, 'offset':np.pi }, ] } } \ No newline at end of file diff --git a/robohive/envs/fm/assets/franka_dmanus.config b/robohive/envs/fm/assets/franka_dmanus.config index e43a868f..2384ee5b 100644 --- a/robohive/envs/fm/assets/franka_dmanus.config +++ b/robohive/envs/fm/assets/franka_dmanus.config @@ -5,23 +5,23 @@ 'interface': {'type': 'franka', 'ip_address':'172.16.0.1', 'gain_scale':0.2}, # 'interface': {'type': 'franka', 'ip_address':'169.254.163.91'}, 'sensor':[ - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, - {'range':(-1.8, 1.8), 'noise':0.05, 'hdr_id':1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':2, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, - {'range':(-3.1, 0.0), 'noise':0.05, 'hdr_id':3, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, - {'range':(-1.7, 3.8), 'noise':0.05, 'hdr_id':5, 'scale':1, 'offset':-np.pi/2, 'name':'fr_arm_jp6'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':6, 'scale':1, 'offset':-np.pi/4, 'name':'fr_arm_jp7'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':0, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, + {'range':(-1.8, 1.8), 'noise':0.05, 'adr':1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':2, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, + {'range':(-3.1, 0.0), 'noise':0.05, 'adr':3, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, + {'range':(-1.7, 3.8), 'noise':0.05, 'adr':5, 'scale':1, 'offset':-np.pi/2, 'name':'fr_arm_jp6'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':6, 'scale':1, 'offset':-np.pi/4, 'name':'fr_arm_jp7'}, ], 'actuator':[ - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':0, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, - {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':2, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, - {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':3, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':4, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, - {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':5, 'scale':1, 'offset':np.pi/2, 'name':'panda0_joint6'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':6, 'scale':1, 'offset':np.pi/4, 'name':'panda0_joint7'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':0, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, + {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':2, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, + {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':3, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':4, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, + {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':5, 'scale':1, 'offset':np.pi/2, 'name':'panda0_joint6'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':6, 'scale':1, 'offset':np.pi/4, 'name':'panda0_joint7'}, ] }, @@ -29,29 +29,29 @@ 'dmanus':{ 'interface': {'type': 'dynamixel', 'motor_type':"X", 'name':"/dev/ttyUSB0"}, 'sensor':[ - {'range':(-0.75, 0.57), 'noise':0.05, 'hdr_id':10, 'name':'TF_ADB_jp', 'scale':-1, 'offset':np.pi }, - {'range':(-0.00, 2.14), 'noise':0.05, 'hdr_id':11, 'name':'TF_MCP_jp', 'scale':-1, 'offset':3*np.pi/2 }, - {'range':(-0.00, 2.14), 'noise':0.05, 'hdr_id':12, 'name':'TF_PIP_jp', 'scale':-1, 'offset':np.pi }, - {'range':(-0.00, 2.00), 'noise':0.05, 'hdr_id':13, 'name':'TF_DIP_jp', 'scale':-1, 'offset':np.pi }, + {'range':(-0.75, 0.57), 'noise':0.05, 'adr':10, 'name':'TF_ADB_jp', 'scale':-1, 'offset':np.pi }, + {'range':(-0.00, 2.14), 'noise':0.05, 'adr':11, 'name':'TF_MCP_jp', 'scale':-1, 'offset':3*np.pi/2 }, + {'range':(-0.00, 2.14), 'noise':0.05, 'adr':12, 'name':'TF_PIP_jp', 'scale':-1, 'offset':np.pi }, + {'range':(-0.00, 2.00), 'noise':0.05, 'adr':13, 'name':'TF_DIP_jp', 'scale':-1, 'offset':np.pi }, - {'range':(-0.75, 0.57), 'noise':0.05, 'hdr_id':20, 'name':'FF_ADB_jp', 'scale':-1, 'offset':np.pi }, - {'range':(-0.00, 2.14), 'noise':0.05, 'hdr_id':21, 'name':'FF_MCP_jp', 'scale':-1, 'offset':3*np.pi/2 }, - {'range':(-0.00, 2.00), 'noise':0.05, 'hdr_id':22, 'name':'FF_PIP_jp', 'scale':+1, 'offset':-np.pi }, - {'range':(-0.75, 0.57), 'noise':0.05, 'hdr_id':30, 'name':'PF_ADB_jp', 'scale':-1, 'offset':np.pi }, - {'range':(-0.00, 2.14), 'noise':0.05, 'hdr_id':31, 'name':'PF_MCP_jp', 'scale':+1, 'offset':-np.pi/2 }, - {'range':(-0.00, 2.00), 'noise':0.05, 'hdr_id':32, 'name':'PF_PIP_jp', 'scale':+1, 'offset':-np.pi }, + {'range':(-0.75, 0.57), 'noise':0.05, 'adr':20, 'name':'FF_ADB_jp', 'scale':-1, 'offset':np.pi }, + {'range':(-0.00, 2.14), 'noise':0.05, 'adr':21, 'name':'FF_MCP_jp', 'scale':-1, 'offset':3*np.pi/2 }, + {'range':(-0.00, 2.00), 'noise':0.05, 'adr':22, 'name':'FF_PIP_jp', 'scale':+1, 'offset':-np.pi }, + {'range':(-0.75, 0.57), 'noise':0.05, 'adr':30, 'name':'PF_ADB_jp', 'scale':-1, 'offset':np.pi }, + {'range':(-0.00, 2.14), 'noise':0.05, 'adr':31, 'name':'PF_MCP_jp', 'scale':+1, 'offset':-np.pi/2 }, + {'range':(-0.00, 2.00), 'noise':0.05, 'adr':32, 'name':'PF_PIP_jp', 'scale':+1, 'offset':-np.pi }, ], 'actuator':[ - {'pos_range':(-0.75, 0.57), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':10, 'name':'TF_ADB', 'mode':'Position', 'scale':-1, 'offset':np.pi }, - {'pos_range':(-0.00, 2.14), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':11, 'name':'TF_MCP', 'mode':'Position', 'scale':-1, 'offset':3*np.pi/2 }, - {'pos_range':(-0.00, 2.14), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':12, 'name':'TF_PIP', 'mode':'Position', 'scale':-1, 'offset':np.pi }, - {'pos_range':(-0.00, 2.00), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':13, 'name':'TF_DIP', 'mode':'Position', 'scale':-1, 'offset':np.pi }, - {'pos_range':(-0.75, 0.57), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':20, 'name':'FF_ADB', 'mode':'Position', 'scale':-1, 'offset':np.pi }, - {'pos_range':(-0.00, 2.14), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':21, 'name':'FF_MCP', 'mode':'Position', 'scale':-1, 'offset':3*np.pi/2 }, - {'pos_range':(-0.00, 2.00), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':22, 'name':'FF_PIP', 'mode':'Position', 'scale':+1, 'offset':np.pi }, - {'pos_range':(-0.75, 0.57), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':30, 'name':'PF_ADB', 'mode':'Position', 'scale':-1, 'offset':np.pi }, - {'pos_range':(-0.00, 2.14), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':31, 'name':'PF_MCP', 'mode':'Position', 'scale':+1, 'offset':np.pi/2 }, - {'pos_range':(-0.00, 2.00), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':32, 'name':'PF_PIP', 'mode':'Position', 'scale':+1, 'offset':np.pi }, + {'pos_range':(-0.75, 0.57), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':10, 'name':'TF_ADB', 'mode':'Position', 'scale':-1, 'offset':np.pi }, + {'pos_range':(-0.00, 2.14), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':11, 'name':'TF_MCP', 'mode':'Position', 'scale':-1, 'offset':3*np.pi/2 }, + {'pos_range':(-0.00, 2.14), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':12, 'name':'TF_PIP', 'mode':'Position', 'scale':-1, 'offset':np.pi }, + {'pos_range':(-0.00, 2.00), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':13, 'name':'TF_DIP', 'mode':'Position', 'scale':-1, 'offset':np.pi }, + {'pos_range':(-0.75, 0.57), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':20, 'name':'FF_ADB', 'mode':'Position', 'scale':-1, 'offset':np.pi }, + {'pos_range':(-0.00, 2.14), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':21, 'name':'FF_MCP', 'mode':'Position', 'scale':-1, 'offset':3*np.pi/2 }, + {'pos_range':(-0.00, 2.00), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':22, 'name':'FF_PIP', 'mode':'Position', 'scale':+1, 'offset':np.pi }, + {'pos_range':(-0.75, 0.57), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':30, 'name':'PF_ADB', 'mode':'Position', 'scale':-1, 'offset':np.pi }, + {'pos_range':(-0.00, 2.14), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':31, 'name':'PF_MCP', 'mode':'Position', 'scale':+1, 'offset':np.pi/2 }, + {'pos_range':(-0.00, 2.00), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':32, 'name':'PF_PIP', 'mode':'Position', 'scale':+1, 'offset':np.pi }, ] } } \ No newline at end of file diff --git a/robohive/envs/fm/assets/franka_robotiq.config b/robohive/envs/fm/assets/franka_robotiq.config index c2dcc441..7ed26bb2 100644 --- a/robohive/envs/fm/assets/franka_robotiq.config +++ b/robohive/envs/fm/assets/franka_robotiq.config @@ -4,23 +4,23 @@ 'franka':{ 'interface': {'type': 'franka', 'ip_address':'172.16.0.1', 'gain_scale':0.5}, 'sensor':[ - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, - {'range':(-1.8, 1.8), 'noise':0.05, 'hdr_id':1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':2, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, - {'range':(-3.1, 0.0), 'noise':0.05, 'hdr_id':3, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, - {'range':(-1.7, 3.8), 'noise':0.05, 'hdr_id':5, 'scale':1, 'offset':-np.pi/2, 'name':'fr_arm_jp6'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':6, 'scale':1, 'offset':-np.pi/4, 'name':'fr_arm_jp7'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':0, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, + {'range':(-1.8, 1.8), 'noise':0.05, 'adr':1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':2, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, + {'range':(-3.1, 0.0), 'noise':0.05, 'adr':3, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, + {'range':(-1.7, 3.8), 'noise':0.05, 'adr':5, 'scale':1, 'offset':-np.pi/2, 'name':'fr_arm_jp6'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':6, 'scale':1, 'offset':-np.pi/4, 'name':'fr_arm_jp7'}, ], 'actuator':[ - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':0, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, - {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':2, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, - {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':3, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':4, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, - {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':5, 'scale':1, 'offset':np.pi/2, 'name':'panda0_joint6'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':6, 'scale':1, 'offset':np.pi/4, 'name':'panda0_joint7'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':0, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, + {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':2, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, + {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':3, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':4, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, + {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':5, 'scale':1, 'offset':np.pi/2, 'name':'panda0_joint6'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':6, 'scale':1, 'offset':np.pi/4, 'name':'panda0_joint7'}, ] }, @@ -28,10 +28,10 @@ 'robotiq':{ 'interface': {'type': 'robotiq', 'ip_address':'172.16.0.1'}, 'sensor':[ - {'range':(0, 0.834), 'noise':0.0, 'hdr_id':0, 'name':'robotiq_2f_85', 'scale':-9.81, 'offset':0.834}, + {'range':(0, 0.834), 'noise':0.0, 'adr':0, 'name':'robotiq_2f_85', 'scale':-9.81, 'offset':0.834}, ], 'actuator':[ - {'pos_range':(0, 1), 'vel_range':(-20*np.pi/4, 20*np.pi/4), 'hdr_id':0, 'name':'robotiq_2f_85', 'scale':-0.085, 'offset':0.085}, + {'pos_range':(0, 1), 'vel_range':(-20*np.pi/4, 20*np.pi/4), 'adr':0, 'name':'robotiq_2f_85', 'scale':-0.085, 'offset':0.085}, ] }, @@ -39,8 +39,8 @@ 'interface': {'type': 'realsense', 'rgb_topic':'realsense_815412070228/color/image_raw', 'd_topic':'realsense_815412070228/depth_uncolored/image_raw'}, 'sensor':[], 'cam': [ - {'range':(0, 255), 'noise':0.00, 'hdr_id':'rgb', 'scale':1, 'offset':0, 'name':'/color/image_raw'}, - {'range':(0, 255), 'noise':0.00, 'hdr_id':'d', 'scale':1, 'offset':0, 'name':'/depth_uncolored/image_raw'}, + {'range':(0, 255), 'noise':0.00, 'adr':'rgb', 'scale':1, 'offset':0, 'name':'/color/image_raw'}, + {'range':(0, 255), 'noise':0.00, 'adr':'d', 'scale':1, 'offset':0, 'name':'/depth_uncolored/image_raw'}, ], 'actuator':[] }, @@ -49,7 +49,7 @@ 'interface': {'type': 'realsense', 'rgb_topic':'realsense_815412070341/color/image_raw', 'd_topic':'realsense_815412070341/depth_uncolored/image_raw'}, 'sensor':[], 'cam': [ - {'range':(0, 255), 'noise':0.00, 'hdr_id':'rgb', 'scale':1, 'offset':0, 'name':'/color/image_raw'}, + {'range':(0, 255), 'noise':0.00, 'adr':'rgb', 'scale':1, 'offset':0, 'name':'/color/image_raw'}, ], 'actuator':[] }, @@ -58,7 +58,7 @@ 'interface': {'type': 'realsense', 'rgb_topic':'realsense_936322070233/color/image_raw', 'd_topic':'realsense_936322070233/depth_uncolored/image_raw'}, 'sensor':[], 'cam': [ - {'range':(0, 255), 'noise':0.00, 'hdr_id':'rgb', 'scale':1, 'offset':0, 'name':'/color/image_raw'}, + {'range':(0, 255), 'noise':0.00, 'adr':'rgb', 'scale':1, 'offset':0, 'name':'/color/image_raw'}, ], 'actuator':[] }, @@ -67,7 +67,7 @@ 'interface': {'type': 'realsense', 'rgb_topic':'realsense_814412070228/color/image_raw', 'd_topic':'realsense_814412070228/depth_uncolored/image_raw'}, 'sensor':[], 'cam': [ - {'range':(0, 255), 'noise':0.00, 'hdr_id':'rgb', 'scale':1, 'offset':0, 'name':'/color/image_raw'}, + {'range':(0, 255), 'noise':0.00, 'adr':'rgb', 'scale':1, 'offset':0, 'name':'/color/image_raw'}, ], 'actuator':[] }, diff --git a/robohive/envs/hands/__init__.py b/robohive/envs/hands/__init__.py index 9ffc7b7a..9c9bebb4 100644 --- a/robohive/envs/hands/__init__.py +++ b/robohive/envs/hands/__init__.py @@ -6,12 +6,14 @@ ================================================= """ from robohive.utils import gym; register=gym.register +import os from robohive.envs.env_variants import register_env_variant -import os +from robohive.utils.prompt_utils import Prompt, prompt + curr_dir = os.path.dirname(os.path.abspath(__file__)) -print("RoboHive:> Registering Hand Envs") +prompt("RoboHive:> Registering Hand Envs", Prompt.ONCE) # ================================================================================== # V1 envs: @@ -64,6 +66,7 @@ ) from robohive.envs.hands.relocate_v1 import RelocateEnvV1 + # Reach to random target using visual inputs def register_visual_envs(env_name, encoder_type): register_env_variant( @@ -102,6 +105,7 @@ def register_visual_envs(env_name, encoder_type): } ) from robohive.envs.hands.baoding_v1 import BaodingFixedEnvV1 + register( id='baoding4th-v1', entry_point='robohive.envs.hands:BaodingFixedEnvV1', diff --git a/robohive/envs/hands/baoding_v1.py b/robohive/envs/hands/baoding_v1.py index 1b7cafec..1b6d97da 100644 --- a/robohive/envs/hands/baoding_v1.py +++ b/robohive/envs/hands/baoding_v1.py @@ -264,8 +264,7 @@ def reset(self, reset_pose=None, reset_vel=None, reset_goal=None, time_period=6, self.goal = self.create_goal_trajectory(time_period=time_period) if reset_goal is None else reset_goal.copy() # reset scene - obs = super().reset(reset_qpos=reset_pose, reset_qvel=reset_vel, **kwargs) - return obs + return super().reset(reset_qpos=reset_pose, reset_qvel=reset_vel, **kwargs) def create_goal_trajectory(self, time_step=.1, time_period=6): len_of_goals = 1000 # assumes that its greator than env horizon @@ -326,5 +325,4 @@ def create_goal_trajectory(self, time_step=.1, time_period=6): class BaodingRandomEnvV1(BaodingFixedEnvV1): def reset(self, **kwargs): - obs = super().reset(time_period = self.np_random.uniform(high=5, low=7), **kwargs) - return obs + return super().reset(time_period = self.np_random.uniform(high=5, low=7), **kwargs) \ No newline at end of file diff --git a/robohive/envs/hands/door_v1.py b/robohive/envs/hands/door_v1.py index 8cd9f5e1..4e756e9f 100644 --- a/robohive/envs/hands/door_v1.py +++ b/robohive/envs/hands/door_v1.py @@ -96,17 +96,13 @@ def get_reward_dict(self, obs_dict): return rwd_dict - def reset(self, reset_qpos=None, reset_qvel=None, **kwargs): + def reset(self, **kwargs): self.sim.reset() - qp = self.init_qpos.copy() if reset_qpos is None else reset_qpos - qv = self.init_qvel.copy() if reset_qvel is None else reset_qvel - self.robot.reset(reset_pos=qp, reset_vel=qv, **kwargs) - self.sim.model.body_pos[self.door_bid,0] = self.np_random.uniform(low=-0.3, high=-0.2) self.sim.model.body_pos[self.door_bid, 1] = self.np_random.uniform(low=0.25, high=0.35) self.sim.model.body_pos[self.door_bid,2] = self.np_random.uniform(low=0.252, high=0.35) self.sim.forward() - return self.get_obs() + return super().reset(**kwargs) def get_env_state(self): diff --git a/robohive/envs/hands/hammer_v1.py b/robohive/envs/hands/hammer_v1.py index 3ef29033..cbdccb92 100644 --- a/robohive/envs/hands/hammer_v1.py +++ b/robohive/envs/hands/hammer_v1.py @@ -120,15 +120,12 @@ def get_obs_dict(self, sim): return obs_dict - def reset(self, reset_qpos=None, reset_qvel=None, **kwargs): + def reset(self, **kwargs): self.sim.reset() - qp = self.init_qpos.copy() if reset_qpos is None else reset_qpos - qv = self.init_qvel.copy() if reset_qvel is None else reset_qvel - self.robot.reset(reset_pos=qp, reset_vel=qv, **kwargs) - self.sim.model.body_pos[self.target_bid,2] = self.np_random.uniform(low=0.1, high=0.25) self.sim.forward() - return self.get_obs() + return super().reset(**kwargs) + def get_env_state(self): """ diff --git a/robohive/envs/hands/pen_v1.py b/robohive/envs/hands/pen_v1.py index 54539d34..f38c1c1d 100644 --- a/robohive/envs/hands/pen_v1.py +++ b/robohive/envs/hands/pen_v1.py @@ -108,19 +108,14 @@ def get_reward_dict(self, obs_dict): return rwd_dict - def reset(self, reset_qpos=None, reset_qvel=None, **kwargs): + def reset(self, **kwargs): self.sim.reset() - qp = self.init_qpos.copy() if reset_qpos is None else reset_qpos - qv = self.init_qvel.copy() if reset_qvel is None else reset_qvel - self.robot.reset(reset_pos=qp, reset_vel=qv, **kwargs) - desired_orien = np.zeros(3) desired_orien[0] = self.np_random.uniform(low=-1, high=1) desired_orien[1] = self.np_random.uniform(low=-1, high=1) self.sim.model.body_quat[self.target_obj_bid] = euler2quat(desired_orien) self.sim.forward() - - return self.get_obs() + return super().reset(**kwargs) def get_env_state(self): diff --git a/robohive/envs/hands/relocate_v1.py b/robohive/envs/hands/relocate_v1.py index 88e273e2..be2d8ea0 100644 --- a/robohive/envs/hands/relocate_v1.py +++ b/robohive/envs/hands/relocate_v1.py @@ -136,20 +136,16 @@ def get_obs_dict(self, sim): return obs_dict - def reset(self, reset_qpos=None, reset_qvel=None, **kwargs): + def reset(self, **kwargs): self.sim.reset() - qp = self.init_qpos.copy() if reset_qpos is None else reset_qpos - qv = self.init_qvel.copy() if reset_qvel is None else reset_qvel - self.robot.reset(reset_pos=qp, reset_vel=qv, **kwargs) - - self.sim.model.body_pos[self.obj_bid,0] = self.np_random.uniform(low=-0.15, high=0.15) self.sim.model.body_pos[self.obj_bid,1] = self.np_random.uniform(low=-0.15, high=0.3) self.sim.model.site_pos[self.target_obj_sid, 0] = self.np_random.uniform(low=-0.2, high=0.2) self.sim.model.site_pos[self.target_obj_sid,1] = self.np_random.uniform(low=-0.2, high=0.2) self.sim.model.site_pos[self.target_obj_sid,2] = self.np_random.uniform(low=0.15, high=0.35) self.sim.forward() - return self.get_obs() + return super().reset(**kwargs) + def get_env_state(self): """ diff --git a/robohive/envs/multi_task/README.md b/robohive/envs/multi_task/README.md index 4e365916..dc0ee157 100644 --- a/robohive/envs/multi_task/README.md +++ b/robohive/envs/multi_task/README.md @@ -2,7 +2,7 @@ This suite is designed to study generalization in multi-task settings. RoboHive's multi-task suite builds from `FrankaKitchen` environements originally studied in the [Relay Policy Learning](https://relay-policy-learning.github.io/) project. # Franka Kitchen -`FrankaKitchen` domain offers a challenging set of manipulation problems in an unstructured environment with many possible tasks to perform. The original set consisted of a franka robot in a kitchen domain. Overtime, Franka Kitchen has became a popular choice of environments for studying multi-task generalization. Its widespread use has led to a few different publically available variations. To help navigate these changes, we name these variations and document its evolution of across various versions below - +`FrankaKitchen` domain offers a challenging set of manipulation problems in an unstructured environment with many possible tasks to perform. The original set consisted of a franka robot in a kitchen domain. Overtime, Franka Kitchen has became a popular choice of environments for studying multi-task generalization. Its widespread use has led to a few different publically available variations. To help navigate these changes, we name these variations and document its evolution across various versions below - ## Change log/ History diff --git a/robohive/envs/multi_task/common/kitchen/franka_kitchen.config b/robohive/envs/multi_task/common/kitchen/franka_kitchen.config index bb1816a2..1fa983b7 100644 --- a/robohive/envs/multi_task/common/kitchen/franka_kitchen.config +++ b/robohive/envs/multi_task/common/kitchen/franka_kitchen.config @@ -3,38 +3,38 @@ 'franka':{ 'interface': {'type': 'franka'}, 'sensor':[ - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, - {'range':(-1.8, 1.8), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, - {'range':(-3.1, 0.0), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, - {'range':(-1.7, 3.8), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jp6'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jp7'}, - {'range':(0.00, .04), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jp1'}, - {'range':(0.00, .04), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jp2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, + {'range':(-1.8, 1.8), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, + {'range':(-3.1, 0.0), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, + {'range':(-1.7, 3.8), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jp6'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jp7'}, + {'range':(0.00, .04), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jp1'}, + {'range':(0.00, .04), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jp2'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv1'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv2'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv3'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv4'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv5'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv6'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv7'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv1'}, - # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv2'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv1'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv2'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv3'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv4'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv5'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv6'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_arm_jv7'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv1'}, + # {'range':(-2*np.pi, np.pi), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv2'}, ], 'actuator':[ # TODO: ranges here exceed the corresponding sensor ranges - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, - {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, - {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, - {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'panda0_joint6'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'panda0_joint7'}, - {'pos_range':(-0.0000, 0.0400), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'r_gripper_finger_joint'}, - {'pos_range':(-0.0000, 0.0400), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'l_gripper_finger_joint'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, + {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, + {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, + {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'panda0_joint6'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'panda0_joint7'}, + {'pos_range':(-0.0000, 0.0400), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'r_gripper_finger_joint'}, + {'pos_range':(-0.0000, 0.0400), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':-1, 'scale':1, 'offset':0, 'name':'l_gripper_finger_joint'}, ] }, @@ -42,22 +42,22 @@ 'kitchen':{ 'interface': {'type': 'tbd'}, 'sensor':[ - {'range':(-1.57, 00), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'knob1_joint'}, - {'range':(-1.57, 00), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'knob2_joint'}, - {'range':(-1.57, 00), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'knob3_joint'}, - {'range':(-1.57, 00), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'knob4_joint'}, - {'range':(-0.7, 0.0), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'lightswitch_joint'}, - {'range':(0.0, 1.57), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'slidedoor_joint'}, - {'range':(-1.57, .0), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'leftdoorhinge'}, - {'range':(0.0, 1.57), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'rightdoorhinge'}, - {'range':(-2.09, 00), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'micro0joint'}, + {'range':(-1.57, 00), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'knob1_joint'}, + {'range':(-1.57, 00), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'knob2_joint'}, + {'range':(-1.57, 00), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'knob3_joint'}, + {'range':(-1.57, 00), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'knob4_joint'}, + {'range':(-0.7, 0.0), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'lightswitch_joint'}, + {'range':(0.0, 1.57), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'slidedoor_joint'}, + {'range':(-1.57, .0), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'leftdoorhinge'}, + {'range':(0.0, 1.57), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'rightdoorhinge'}, + {'range':(-2.09, 00), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'micro0joint'}, - {'range':(-1.25, 1.75), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'kettle0:Tx'}, - {'range':(-1.50, 1.50), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'kettle0:Ty'}, - {'range':(-0.10, 2.90), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'kettle0:Tz'}, - {'range':(-3.14, 3.14), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'kettle0:Rx'}, - {'range':(-3.14, 3.14), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'kettle0:Ry'}, - {'range':(-3.14, 3.14), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'kettle0:Rz'}, + {'range':(-1.25, 1.75), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'kettle0:Tx'}, + {'range':(-1.50, 1.50), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'kettle0:Ty'}, + {'range':(-0.10, 2.90), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'kettle0:Tz'}, + {'range':(-3.14, 3.14), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'kettle0:Rx'}, + {'range':(-3.14, 3.14), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'kettle0:Ry'}, + {'range':(-3.14, 3.14), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'kettle0:Rz'}, ], 'actuator':[] diff --git a/robohive/envs/multi_task/common/microwave/franka_microwave.config b/robohive/envs/multi_task/common/microwave/franka_microwave.config index 15aeedb8..0d58447b 100644 --- a/robohive/envs/multi_task/common/microwave/franka_microwave.config +++ b/robohive/envs/multi_task/common/microwave/franka_microwave.config @@ -3,39 +3,39 @@ 'franka':{ 'interface': {'type': 'franka', 'ip_address':'169.254.163.91'}, 'sensor':[ - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, - {'range':(-1.8, 1.8), 'noise':0.05, 'hdr_id':1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':2, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, - {'range':(-3.1, 0.0), 'noise':0.05, 'hdr_id':3, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, - {'range':(-1.7, 3.8), 'noise':0.05, 'hdr_id':5, 'scale':1, 'offset':-np.pi/2, 'name':'fr_arm_jp6'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':6, 'scale':1, 'offset':-np.pi/4, 'name':'fr_arm_jp7'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':0, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, + {'range':(-1.8, 1.8), 'noise':0.05, 'adr':1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':2, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, + {'range':(-3.1, 0.0), 'noise':0.05, 'adr':3, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, + {'range':(-1.7, 3.8), 'noise':0.05, 'adr':5, 'scale':1, 'offset':-np.pi/2, 'name':'fr_arm_jp6'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':6, 'scale':1, 'offset':-np.pi/4, 'name':'fr_arm_jp7'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv1'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv2'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv3'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv4'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv5'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv6'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv7'}, - {'range':(0.00, .04), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv1'}, - {'range':(0.00, .04), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv1'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv3'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv4'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv5'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv6'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv7'}, + {'range':(0.00, .04), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv1'}, + {'range':(0.00, .04), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv2'}, ], 'actuator':[ - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':0, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, - {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':2, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, - {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':3, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':4, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, - {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':5, 'scale':1, 'offset':np.pi/2, 'name':'panda0_joint6'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':6, 'scale':1, 'offset':np.pi/4, 'name':'panda0_joint7'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':0, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, + {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':2, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, + {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':3, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':4, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, + {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':5, 'scale':1, 'offset':np.pi/2, 'name':'panda0_joint6'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':6, 'scale':1, 'offset':np.pi/4, 'name':'panda0_joint7'}, ] }, 'microwave':{ 'interface': {}, 'sensor':[ - {'range':(-2.0, 0.0), 'noise':0.05, 'hdr_id':7, 'scale':1, 'offset':0, 'name':'micro0joint'}, + {'range':(-2.0, 0.0), 'noise':0.05, 'adr':7, 'scale':1, 'offset':0, 'name':'micro0joint'}, ], 'actuator':[] } diff --git a/robohive/envs/multi_task/common/slidecabinet/franka_slidecabinet.config b/robohive/envs/multi_task/common/slidecabinet/franka_slidecabinet.config index a2869a27..d7023e1f 100644 --- a/robohive/envs/multi_task/common/slidecabinet/franka_slidecabinet.config +++ b/robohive/envs/multi_task/common/slidecabinet/franka_slidecabinet.config @@ -3,41 +3,41 @@ 'franka':{ 'interface': {'type': 'franka', 'ip_address':'169.254.163.91'}, 'sensor':[ - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, - {'range':(-1.8, 1.8), 'noise':0.05, 'hdr_id':1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':2, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, - {'range':(-3.1, 0.0), 'noise':0.05, 'hdr_id':3, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, - {'range':(-1.7, 3.8), 'noise':0.05, 'hdr_id':5, 'scale':1, 'offset':-np.pi/2, 'name':'fr_arm_jp6'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':6, 'scale':1, 'offset':-np.pi/4, 'name':'fr_arm_jp7'}, - {'range':(0.00, .04), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jp1'}, - {'range':(0.00, .04), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jp2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':0, 'scale':1, 'offset':0, 'name':'fr_arm_jp1'}, + {'range':(-1.8, 1.8), 'noise':0.05, 'adr':1, 'scale':1, 'offset':0, 'name':'fr_arm_jp2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':2, 'scale':1, 'offset':0, 'name':'fr_arm_jp3'}, + {'range':(-3.1, 0.0), 'noise':0.05, 'adr':3, 'scale':1, 'offset':0, 'name':'fr_arm_jp4'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jp5'}, + {'range':(-1.7, 3.8), 'noise':0.05, 'adr':5, 'scale':1, 'offset':-np.pi/2, 'name':'fr_arm_jp6'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':6, 'scale':1, 'offset':-np.pi/4, 'name':'fr_arm_jp7'}, + {'range':(0.00, .04), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jp1'}, + {'range':(0.00, .04), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jp2'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv1'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv2'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv3'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv4'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv5'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv6'}, - {'range':(-2.9, 2.9), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv7'}, - {'range':(0.00, .04), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv1'}, - {'range':(0.00, .04), 'noise':0.05, 'hdr_id':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv1'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv2'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv3'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv4'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv5'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv6'}, + {'range':(-2.9, 2.9), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'fr_arm_jv7'}, + {'range':(0.00, .04), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv1'}, + {'range':(0.00, .04), 'noise':0.05, 'adr':-1, 'scale':1, 'offset':0, 'name':'fr_fin_jv2'}, ], 'actuator':[ - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':0, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, - {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':2, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, - {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':3, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':4, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, - {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':5, 'scale':1, 'offset':np.pi/2, 'name':'panda0_joint6'}, - {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'hdr_id':6, 'scale':1, 'offset':np.pi/4, 'name':'panda0_joint7'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':0, 'scale':1, 'offset':0, 'name':'panda0_joint1'}, + {'pos_range':(-1.8326, 1.8326), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':1, 'scale':1, 'offset':0, 'name':'panda0_joint2'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':2, 'scale':1, 'offset':0, 'name':'panda0_joint3'}, + {'pos_range':(-3.1416, 0.0000), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':3, 'scale':1, 'offset':0, 'name':'panda0_joint4'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':4, 'scale':1, 'offset':0, 'name':'panda0_joint5'}, + {'pos_range':(-1.6600, 2.1817), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':5, 'scale':1, 'offset':np.pi/2, 'name':'panda0_joint6'}, + {'pos_range':(-2.9671, 2.9671), 'vel_range':(-4*np.pi/2, 4*np.pi/2), 'adr':6, 'scale':1, 'offset':np.pi/4, 'name':'panda0_joint7'}, ] }, 'slidecabinet':{ 'interface': {}, 'sensor':[ - {'range':(-0.0, .44), 'noise':0.05, 'hdr_id':7, 'scale':1, 'offset':0, 'name':'slidedoor_joint'}, + {'range':(-0.0, .44), 'noise':0.05, 'adr':7, 'scale':1, 'offset':0, 'name':'slidedoor_joint'}, ], 'actuator':[] } diff --git a/robohive/envs/multi_task/multi_task_base_v1.py b/robohive/envs/multi_task/multi_task_base_v1.py index a18adda4..4122593e 100644 --- a/robohive/envs/multi_task/multi_task_base_v1.py +++ b/robohive/envs/multi_task/multi_task_base_v1.py @@ -200,9 +200,9 @@ def get_reward_dict(self, obs_dict): # Optional Keys ("obj_goal", -np.sum(goal_dist, axis=-1)), ("bonus", - 1.0*np.product(goal_dist < 5 * self.obj["dof_proximity"], axis=-1) + 1.0*np.prod(goal_dist < 5 * self.obj["dof_proximity"], axis=-1) # np.product(goal_dist < 0.75 * self.obj["dof_ranges"], axis=-1) - + 1.0*np.product(goal_dist < 1.67 * self.obj["dof_proximity"], axis=-1), + + 1.0*np.prod(goal_dist < 1.67 * self.obj["dof_proximity"], axis=-1), # + np.product(goal_dist < 0.25 * self.obj["dof_ranges"], axis=-1), ), ("pose", -np.sum(np.abs(obs_dict["pose_err"]), axis=-1)), @@ -272,4 +272,4 @@ def set_obj_goal(self, obj_goal=None, interact_site=None): elif type(interact_site) is str: # overwrite using name self.interact_sid = self.sim.model.site_name2id(interact_site) elif type(interact_site) is int: # overwrite using id - self.interact_sid = interact_site \ No newline at end of file + self.interact_sid = interact_site diff --git a/robohive/envs/multi_task/substeps1/__init__.py b/robohive/envs/multi_task/substeps1/__init__.py index db479c9e..4a2c2486 100644 --- a/robohive/envs/multi_task/substeps1/__init__.py +++ b/robohive/envs/multi_task/substeps1/__init__.py @@ -7,14 +7,15 @@ import os from robohive.utils import gym; register=gym.register - +from robohive.utils.prompt_utils import Prompt, prompt CURR_DIR = os.path.dirname(os.path.abspath(__file__)) # Appliences ============================================================================ -print("RoboHive:> Registering Appliances Envs") +prompt("RoboHive:> Registering Appliances Envs", Prompt.ONCE) from robohive.envs.multi_task.common.franka_appliance_v1 import FrankaAppliance + # MICROWAVE register( id="franka_micro_open-v3", diff --git a/robohive/envs/multi_task/substeps2/__init__.py b/robohive/envs/multi_task/substeps2/__init__.py index 28c381da..e56e856f 100644 --- a/robohive/envs/multi_task/substeps2/__init__.py +++ b/robohive/envs/multi_task/substeps2/__init__.py @@ -4,8 +4,9 @@ Source :: https://github.com/vikashplus/robohive License :: Under 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. ================================================= """ +from robohive.utils.prompt_utils import Prompt, prompt -print("RoboHive:> Registering Multi-Task (2 subtasks) Envs") +prompt("RoboHive:> Registering Multi-Task (2 subtasks) Envs", Prompt.ONCE) from robohive.envs.multi_task.substeps1.franka_kitchen import register_all_env_variants # =================================================================== diff --git a/robohive/envs/multi_task/utils/parse_demos.py b/robohive/envs/multi_task/utils/parse_demos.py index 65795e3a..44f98cc1 100644 --- a/robohive/envs/multi_task/utils/parse_demos.py +++ b/robohive/envs/multi_task/utils/parse_demos.py @@ -18,12 +18,16 @@ import glob import pickle import numpy as np -from vive.source.parse_mjl import parse_mjl_logs, viz_parsed_mjl_logs -from mjrl.utils.gym_env import GymEnv + +try: + from mjrl.utils.gym_env import GymEnv +except ImportError: + GymEnv = None import robohive import time as timer # import skvideo.io from robohive.utils import gym +from robohive.utils.parse_mjl import parse_mjl_logs, viz_parsed_mjl_logs from tqdm import tqdm @@ -52,6 +56,7 @@ def viewer(env, render_buffer.append(curr_frame) if mode == 'save': + import skvideo skvideo.io.vwrite(filename, np.asarray(render_buffer)) print("\noffscreen buffer saved", filename) @@ -84,7 +89,7 @@ def render_demos(env, data, filename='demo_rendering.mp4', render=None): # playback demos and get data(physics respected) def gather_training_data(env, data, filename='demo_playback.mp4', render=None): - env = env.env + env = env.unwrapped FPS = 30 render_skip = max(1, round(1. / \ (FPS * env.sim.model.opt.timestep * env.frame_skip))) @@ -127,7 +132,7 @@ def gather_training_data(env, data, filename='demo_playback.mp4', render=None): # normalization and env stepping act = (ctrl - act_mid) / act_rng act = np.clip(act, -0.999, 0.999) - next_obs, reward, done, env_info = env.step(act) + next_obs, reward, done, *_, env_info = env.step(act) path_reward += reward # populate path diff --git a/robohive/envs/myo/base_v0.py b/robohive/envs/myo/base_v0.py index dd7ddca1..1bc837af 100644 --- a/robohive/envs/myo/base_v0.py +++ b/robohive/envs/myo/base_v0.py @@ -4,6 +4,7 @@ ================================================= """ from robohive.envs import env_base +import mujoco import numpy as np class BaseV0(env_base.MujocoEnv): @@ -88,15 +89,24 @@ def step(self, a, **kwargs): # implement abnormalities if self.muscle_condition == 'fatigue': + actuator_moment = np.zeros((self.sim.model.nu, self.sim.model.nv)) + mujoco.mju_sparse2dense( + actuator_moment, + self.sim.data.actuator_moment.reshape(-1), + self.sim.data.moment_rownnz, + self.sim.data.moment_rowadr, + self.sim.data.moment_colind.reshape(-1), + ) for mus_idx in range(self.sim.model.actuator_gainprm.shape[0]): - if self.sim.data.actuator_moment.shape[1]==1: - self.f_load[mus_idx].append(self.sim.data.actuator_moment[mus_idx].copy()) + if actuator_moment.shape[1] == 1: + self.f_load[mus_idx].append(actuator_moment[mus_idx].copy()) else: - self.f_load[mus_idx].append(self.sim.data.actuator_moment[mus_idx,1].copy()) + self.f_load[mus_idx].append(actuator_moment[mus_idx, 1].copy()) if self.MVC_rest[mus_idx] != 0: - f_int = np.sum(self.f_load[mus_idx]-np.max(self.f_load[mus_idx],0),0)/self.MVC_rest[mus_idx] + f_load = np.asarray(self.f_load[mus_idx]) + f_int = np.sum(f_load - np.max(f_load, 0), 0)/self.MVC_rest[mus_idx] f_cem = self.MVC_rest[mus_idx]*np.exp(self.k_fatigue*f_int) else: f_cem = 0 diff --git a/robohive/envs/myo/myobase/__init__.py b/robohive/envs/myo/myobase/__init__.py index eac00fdb..48c7d43d 100644 --- a/robohive/envs/myo/myobase/__init__.py +++ b/robohive/envs/myo/myobase/__init__.py @@ -4,11 +4,13 @@ ================================================= """ from robohive.utils import gym; register=gym.register +import os + +import numpy as np from robohive.envs.env_variants import register_env_variant +from robohive.utils.prompt_utils import Prompt, prompt -import os -import numpy as np # utility to register envs with all muscle conditions def register_env_with_variants(id, entry_point, max_episode_steps, kwargs): @@ -46,7 +48,7 @@ def register_env_with_variants(id, entry_point, max_episode_steps, kwargs): curr_dir = os.path.dirname(os.path.abspath(__file__)) -print("RoboHive:> Registering Myo Envs") +prompt("RoboHive:> Registering Myo Envs", Prompt.ONCE) # Finger-tip reaching ============================== register_env_with_variants(id='motorFingerReachFixed-v0', @@ -287,6 +289,7 @@ def register_env_with_variants(id, entry_point, max_episode_steps, kwargs): # Gait Torso Reaching ============================== from robohive.physics.sim_scene import SimBackend + sim_backend = SimBackend.get_sim_backend() leg_model='/../../../simhive/myo_sim/leg/myolegs.xml' diff --git a/robohive/envs/myo/myochallenge/__init__.py b/robohive/envs/myo/myochallenge/__init__.py index 26fc6f7c..44708719 100644 --- a/robohive/envs/myo/myochallenge/__init__.py +++ b/robohive/envs/myo/myochallenge/__init__.py @@ -1,8 +1,12 @@ from robohive.utils import gym; register=gym.register import os + +from robohive.utils.prompt_utils import Prompt, prompt + curr_dir = os.path.dirname(os.path.abspath(__file__)) import numpy as np +prompt("RoboHive:> Registering MyoChallenge Envs", Prompt.ONCE) # MyoChallenge 2023 envs ============================================== # MyoChallenge Manipulation P1 diff --git a/robohive/envs/myo/myodm/myodm_v0.py b/robohive/envs/myo/myodm/myodm_v0.py index abd47ea0..4c9ebeeb 100644 --- a/robohive/envs/myo/myodm/myodm_v0.py +++ b/robohive/envs/myo/myodm/myodm_v0.py @@ -285,7 +285,7 @@ def playback(self): ref_mot = self.ref.get_reference(self.time+self.motion_start_time) self.qpos_from_robot_object(self.sim.data.qpos, ref_mot.robot, ref_mot.object ) self.sim.forward() - self.sim.data.time = self.sim.data.time + 0.02#self.env.env.dt + self.sim.data.time = self.sim.data.time + 0.02#self.env.unwrapped.dt return idxs[0] < self.ref.horizon-1 diff --git a/robohive/envs/obs_vec_dict.py b/robohive/envs/obs_vec_dict.py index fb79e5e6..36a771b0 100644 --- a/robohive/envs/obs_vec_dict.py +++ b/robohive/envs/obs_vec_dict.py @@ -5,9 +5,11 @@ License :: Under 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. ================================================= """ -import numpy as np from collections import deque +import numpy as np + + class ObsVecDict(): """ Class to help with conversion between obs_dict <> obs_vector @@ -61,10 +63,29 @@ def initialize(self, obs_dict, ordered_obs_keys): t, obsvec = self.obsdict2obsvec(obs_dict, ordered_obs_keys) self.obsvec_cache_flush(t, obsvec) # populate the cache with initial obsvec values - # Squeeze out singleton dimensions + # Squeeze out the (num_traj=1, horizon=1) dims added by expand_dims. + # Squeezing all singleton dims (np.squeeze(arr)) would also collapse + # single-value obs (e.g. shape (1,)) down to 0-d scalars, which then + # fail to concatenate with other obs vectors downstream. def squeeze_dims(self, obs_dict): for key in obs_dict.keys(): - obs_dict[key] = np.squeeze(obs_dict[key]) + val = np.asarray(obs_dict[key]) + + # expand_dims() only ever adds two leading dims: (num_traj=1, horizon=1, ...). + # Some dict values (e.g. scalar entries in rwd_dict like 'done', 'solved') + # never went through expand_dims, so they may have 0 or 1 dims. Only squeeze + # axis 0 and/or axis 1 if they actually exist AND are singleton -- this way we + # never touch a real data dimension (e.g. a single-value obs of shape (1,)). + axes_to_squeeze = [] + if val.ndim > 0 and val.shape[0] == 1: + axes_to_squeeze.append(0) + if val.ndim > 1 and val.shape[1] == 1: + axes_to_squeeze.append(1) + + if axes_to_squeeze: + val = np.squeeze(val, axis=tuple(axes_to_squeeze)) + + obs_dict[key] = val return obs_dict # Exapand observation dimensions to (num_traj=1, horizon=1, obs_dim) @@ -79,7 +100,7 @@ def obsdict2obsvec(self, obs_dict, ordered_obs_keys): self.initialize(obs_dict, ordered_obs_keys) # recover vec - obsvec = np.zeros(0) + obsvec = np.zeros(0, dtype=np.float32) for key in self.ordered_obs_keys: obsvec = np.concatenate([obsvec, obs_dict[key].ravel()]) # ravel helps with images diff --git a/robohive/envs/quadrupeds/__init__.py b/robohive/envs/quadrupeds/__init__.py index d5cb8855..ed289d4c 100644 --- a/robohive/envs/quadrupeds/__init__.py +++ b/robohive/envs/quadrupeds/__init__.py @@ -1,11 +1,14 @@ from robohive.utils import gym; register=gym.register -from robohive.envs.env_variants import register_env_variant -import numpy as np import os -curr_dir = os.path.dirname(os.path.abspath(__file__)) -print("RoboHive:> Registering Quadruped Envs") +import numpy as np + +from robohive.envs.env_variants import register_env_variant +from robohive.utils.prompt_utils import Prompt, prompt + +curr_dir = os.path.dirname(os.path.abspath(__file__)) +prompt("RoboHive:> Registering Quadruped Envs", Prompt.ONCE) WALK_HORIZON = 160 @@ -35,6 +38,7 @@ # Reach to random target using proprio and visual inputs from robohive.envs.quadrupeds.walk_v0 import WalkBaseV0 + register_env_variant( variant_id='DKittyWalkRandom_v2d-v0', env_id='DKittyWalkRandom-v0', @@ -78,6 +82,7 @@ ) # Orient to random orientation using proprio and visual inputs from robohive.envs.quadrupeds.orient_v0 import OrientBaseV0 + register_env_variant( variant_id='DKittyOrientRandom_v2d-v0', env_id='DKittyOrientRandom-v0', @@ -117,6 +122,7 @@ ) # Stand-Up from random pose using proprio and visual inputs from robohive.envs.quadrupeds.orient_v0 import OrientBaseV0 + register_env_variant( variant_id='DKittyStandRandom_v2d-v0', env_id='DKittyStandRandom-v0', diff --git a/robohive/envs/quadrupeds/dkitty/dkitty_stand_v0.config b/robohive/envs/quadrupeds/dkitty/dkitty_stand_v0.config index 7e1c3b58..8dae22fd 100644 --- a/robohive/envs/quadrupeds/dkitty/dkitty_stand_v0.config +++ b/robohive/envs/quadrupeds/dkitty/dkitty_stand_v0.config @@ -3,12 +3,12 @@ 'dkitty_root':{ 'interface': {'type': 'optitrack', 'server_name': '169.254.163.86', 'client_name': '169.254.163.96','port':5000, 'packet_size':36, 'id':'1'}, 'sensor':[ - {'range':(-5.00, 5.00), 'noise':0.005, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'A:Tx'}, - {'range':(-5.00, 5.00), 'noise':0.005, 'hdr_id':1, 'scale':1, 'offset':0, 'name':'A:Ty'}, - {'range':(-2.00, 2.00), 'noise':0.005, 'hdr_id':2, 'scale':1, 'offset':-.32, 'name':'A:Tz'}, - {'range':(-3.14, 3.14), 'noise':0.05, 'hdr_id':3, 'scale':1, 'offset':0, 'name':'A:Rx'}, - {'range':(-3.14, 3.14), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'A:Ry'}, - {'range':(-3.14, 3.14), 'noise':0.05, 'hdr_id':5, 'scale':1, 'offset':0, 'name':'A:Rz'}, + {'range':(-5.00, 5.00), 'noise':0.005, 'adr':0, 'scale':1, 'offset':0, 'name':'A:Tx'}, + {'range':(-5.00, 5.00), 'noise':0.005, 'adr':1, 'scale':1, 'offset':0, 'name':'A:Ty'}, + {'range':(-2.00, 2.00), 'noise':0.005, 'adr':2, 'scale':1, 'offset':-.32, 'name':'A:Tz'}, + {'range':(-3.14, 3.14), 'noise':0.05, 'adr':3, 'scale':1, 'offset':0, 'name':'A:Rx'}, + {'range':(-3.14, 3.14), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'A:Ry'}, + {'range':(-3.14, 3.14), 'noise':0.05, 'adr':5, 'scale':1, 'offset':0, 'name':'A:Rz'}, ], 'actuator':[] }, @@ -17,47 +17,47 @@ 'dkitty':{ 'interface': {'type': 'dynamixel', 'motor_type':"X", 'name':"/dev/DKitty"}, 'sensor':[ - {'range':(-3.419, 0.279), 'noise':0.05, 'hdr_id':10, 'scale':+1, 'offset':-3*np.pi/2, 'name':'A:FRJ10_pos_sensor'}, - {'range':(-2.14 , 2.14 ), 'noise':0.05, 'hdr_id':11, 'scale':-1, 'offset':np.pi, 'name':'A:FRJ11_pos_sensor'}, - {'range':(-1.57 , 1.57 ), 'noise':0.05, 'hdr_id':12, 'scale':-1, 'offset':np.pi, 'name':'A:FRJ12_pos_sensor'}, - {'range':(-0.279, 3.419), 'noise':0.05, 'hdr_id':20, 'scale':+1, 'offset':-np.pi/2, 'name':'A:FLJ20_pos_sensor'}, - {'range':(-2.14 , 2.14 ), 'noise':0.05, 'hdr_id':21, 'scale':+1, 'offset':-np.pi, 'name':'A:FLJ21_pos_sensor'}, - {'range':(-1.57 , 1.57 ), 'noise':0.05, 'hdr_id':22, 'scale':+1, 'offset':-np.pi, 'name':'A:FLJ22_pos_sensor'}, - {'range':(-0.279, 3.419), 'noise':0.05, 'hdr_id':30, 'scale':-1, 'offset':3*np.pi/2, 'name':'A:BLJ30_pos_sensor'}, - {'range':(-2.14 , 2.14 ), 'noise':0.05, 'hdr_id':31, 'scale':+1, 'offset':-np.pi, 'name':'A:BLJ31_pos_sensor'}, - {'range':(-1.57 , 1.57 ), 'noise':0.05, 'hdr_id':32, 'scale':+1, 'offset':-np.pi, 'name':'A:BLJ32_pos_sensor'}, - {'range':(-3.419, 0.279), 'noise':0.05, 'hdr_id':40, 'scale':-1, 'offset':np.pi/2, 'name':'A:BRJ40_pos_sensor'}, - {'range':(-2.14 , 2.14 ), 'noise':0.05, 'hdr_id':41, 'scale':-1, 'offset':np.pi, 'name':'A:BRJ41_pos_sensor'}, - {'range':(-1.57 , 1.57 ), 'noise':0.05, 'hdr_id':42, 'scale':-1, 'offset':np.pi, 'name':'A:BRJ42_pos_sensor'} + {'range':(-3.419, 0.279), 'noise':0.05, 'adr':10, 'scale':+1, 'offset':-3*np.pi/2, 'name':'A:FRJ10_pos_sensor'}, + {'range':(-2.14 , 2.14 ), 'noise':0.05, 'adr':11, 'scale':-1, 'offset':np.pi, 'name':'A:FRJ11_pos_sensor'}, + {'range':(-1.57 , 1.57 ), 'noise':0.05, 'adr':12, 'scale':-1, 'offset':np.pi, 'name':'A:FRJ12_pos_sensor'}, + {'range':(-0.279, 3.419), 'noise':0.05, 'adr':20, 'scale':+1, 'offset':-np.pi/2, 'name':'A:FLJ20_pos_sensor'}, + {'range':(-2.14 , 2.14 ), 'noise':0.05, 'adr':21, 'scale':+1, 'offset':-np.pi, 'name':'A:FLJ21_pos_sensor'}, + {'range':(-1.57 , 1.57 ), 'noise':0.05, 'adr':22, 'scale':+1, 'offset':-np.pi, 'name':'A:FLJ22_pos_sensor'}, + {'range':(-0.279, 3.419), 'noise':0.05, 'adr':30, 'scale':-1, 'offset':3*np.pi/2, 'name':'A:BLJ30_pos_sensor'}, + {'range':(-2.14 , 2.14 ), 'noise':0.05, 'adr':31, 'scale':+1, 'offset':-np.pi, 'name':'A:BLJ31_pos_sensor'}, + {'range':(-1.57 , 1.57 ), 'noise':0.05, 'adr':32, 'scale':+1, 'offset':-np.pi, 'name':'A:BLJ32_pos_sensor'}, + {'range':(-3.419, 0.279), 'noise':0.05, 'adr':40, 'scale':-1, 'offset':np.pi/2, 'name':'A:BRJ40_pos_sensor'}, + {'range':(-2.14 , 2.14 ), 'noise':0.05, 'adr':41, 'scale':-1, 'offset':np.pi, 'name':'A:BRJ41_pos_sensor'}, + {'range':(-1.57 , 1.57 ), 'noise':0.05, 'adr':42, 'scale':-1, 'offset':np.pi, 'name':'A:BRJ42_pos_sensor'} ], 'actuator':[ - {'pos_range':(-1.57 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':10, 'scale':+1, 'offset':-1*(-3*np.pi/2), 'name':'A:FRJ10'}, - {'pos_range':(-2.14 , 2.14 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':11, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ11'}, - {'pos_range':(-1.57 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':12, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ12'}, - {'pos_range':(-0.279, 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':20, 'scale':+1, 'offset':-1*(-np.pi/2), 'name':'A:FLJ20'}, - {'pos_range':(-2.14 , 2.14 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':21, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ21'}, - {'pos_range':(-1.57 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':22, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ22'}, - {'pos_range':(-0.279, 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':30, 'scale':-1, 'offset':+1*(3*np.pi/2), 'name':'A:BLJ30'}, - {'pos_range':(-2.14 , 2.14 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':31, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ31'}, - {'pos_range':(-1.57 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':32, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ32'}, - {'pos_range':(-1.57 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':40, 'scale':-1, 'offset':+1*(np.pi/2), 'name':'A:BRJ40'}, - {'pos_range':(-2.14 , 2.14 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':41, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ41'}, - {'pos_range':(-1.57 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':42, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ42'} + {'pos_range':(-1.57 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':10, 'scale':+1, 'offset':-1*(-3*np.pi/2), 'name':'A:FRJ10'}, + {'pos_range':(-2.14 , 2.14 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':11, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ11'}, + {'pos_range':(-1.57 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':12, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ12'}, + {'pos_range':(-0.279, 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':20, 'scale':+1, 'offset':-1*(-np.pi/2), 'name':'A:FLJ20'}, + {'pos_range':(-2.14 , 2.14 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':21, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ21'}, + {'pos_range':(-1.57 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':22, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ22'}, + {'pos_range':(-0.279, 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':30, 'scale':-1, 'offset':+1*(3*np.pi/2), 'name':'A:BLJ30'}, + {'pos_range':(-2.14 , 2.14 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':31, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ31'}, + {'pos_range':(-1.57 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':32, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ32'}, + {'pos_range':(-1.57 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':40, 'scale':-1, 'offset':+1*(np.pi/2), 'name':'A:BRJ40'}, + {'pos_range':(-2.14 , 2.14 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':41, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ41'}, + {'pos_range':(-1.57 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':42, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ42'} ] # 'actuator':[ # restricted shoulder - # {'pos_range':(-0.279 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':10, 'scale':+1, 'offset':-1*(-3*np.pi/2), 'name':'A:FRJ10'}, - # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':11, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ11'}, - # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':12, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ12'}, - # {'pos_range':(-0.279, 0.279 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':20, 'scale':+1, 'offset':-1*(-np.pi/2), 'name':'A:FLJ20'}, - # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':21, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ21'}, - # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':22, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ22'}, - # {'pos_range':(-0.279, 0.279 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':30, 'scale':-1, 'offset':+1*(3*np.pi/2), 'name':'A:BLJ30'}, - # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':31, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ31'}, - # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':32, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ32'}, - # {'pos_range':(-0.279 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':40, 'scale':-1, 'offset':+1*(np.pi/2), 'name':'A:BRJ40'}, - # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':41, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ41'}, - # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':42, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ42'} + # {'pos_range':(-0.279 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':10, 'scale':+1, 'offset':-1*(-3*np.pi/2), 'name':'A:FRJ10'}, + # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':11, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ11'}, + # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':12, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ12'}, + # {'pos_range':(-0.279, 0.279 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':20, 'scale':+1, 'offset':-1*(-np.pi/2), 'name':'A:FLJ20'}, + # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':21, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ21'}, + # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':22, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ22'}, + # {'pos_range':(-0.279, 0.279 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':30, 'scale':-1, 'offset':+1*(3*np.pi/2), 'name':'A:BLJ30'}, + # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':31, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ31'}, + # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':32, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ32'}, + # {'pos_range':(-0.279 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':40, 'scale':-1, 'offset':+1*(np.pi/2), 'name':'A:BRJ40'}, + # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':41, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ41'}, + # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':42, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ42'} # ] } } \ No newline at end of file diff --git a/robohive/envs/quadrupeds/dkitty/dkitty_walk_v0.config b/robohive/envs/quadrupeds/dkitty/dkitty_walk_v0.config index 33dfe430..3dad488f 100644 --- a/robohive/envs/quadrupeds/dkitty/dkitty_walk_v0.config +++ b/robohive/envs/quadrupeds/dkitty/dkitty_walk_v0.config @@ -3,12 +3,12 @@ 'dkitty_root':{ 'interface': {'type': 'optitrack', 'server_name': '169.254.163.86', 'client_name': '169.254.163.96','port':5000, 'packet_size':36, 'id':'1'}, 'sensor':[ - {'range':(-5.00, 5.00), 'noise':0.005, 'hdr_id':0, 'scale':1, 'offset':0, 'name':'A:Tx'}, - {'range':(-5.00, 5.00), 'noise':0.005, 'hdr_id':1, 'scale':1, 'offset':0, 'name':'A:Ty'}, - {'range':(-2.00, 2.00), 'noise':0.005, 'hdr_id':2, 'scale':1, 'offset':-.32, 'name':'A:Tz'}, - {'range':(-3.14, 3.14), 'noise':0.05, 'hdr_id':3, 'scale':1, 'offset':0, 'name':'A:Rx'}, - {'range':(-3.14, 3.14), 'noise':0.05, 'hdr_id':4, 'scale':1, 'offset':0, 'name':'A:Ry'}, - {'range':(-3.14, 3.14), 'noise':0.05, 'hdr_id':5, 'scale':1, 'offset':0, 'name':'A:Rz'}, + {'range':(-5.00, 5.00), 'noise':0.005, 'adr':0, 'scale':1, 'offset':0, 'name':'A:Tx'}, + {'range':(-5.00, 5.00), 'noise':0.005, 'adr':1, 'scale':1, 'offset':0, 'name':'A:Ty'}, + {'range':(-2.00, 2.00), 'noise':0.005, 'adr':2, 'scale':1, 'offset':-.32, 'name':'A:Tz'}, + {'range':(-3.14, 3.14), 'noise':0.05, 'adr':3, 'scale':1, 'offset':0, 'name':'A:Rx'}, + {'range':(-3.14, 3.14), 'noise':0.05, 'adr':4, 'scale':1, 'offset':0, 'name':'A:Ry'}, + {'range':(-3.14, 3.14), 'noise':0.05, 'adr':5, 'scale':1, 'offset':0, 'name':'A:Rz'}, ], 'actuator':[] }, @@ -17,47 +17,47 @@ 'dkitty':{ 'interface': {'type': 'dynamixel', 'motor_type':"X", 'name':"/dev/DKitty"}, 'sensor':[ - {'range':(-3.419, 0.279), 'noise':0.05, 'hdr_id':10, 'scale':+1, 'offset':-3*np.pi/2, 'name':'A:FRJ10_pos_sensor'}, - {'range':(-2.14 , 2.14 ), 'noise':0.05, 'hdr_id':11, 'scale':-1, 'offset':np.pi, 'name':'A:FRJ11_pos_sensor'}, - {'range':(-1.57 , 1.57 ), 'noise':0.05, 'hdr_id':12, 'scale':-1, 'offset':np.pi, 'name':'A:FRJ12_pos_sensor'}, - {'range':(-0.279, 3.419), 'noise':0.05, 'hdr_id':20, 'scale':+1, 'offset':-np.pi/2, 'name':'A:FLJ20_pos_sensor'}, - {'range':(-2.14 , 2.14 ), 'noise':0.05, 'hdr_id':21, 'scale':+1, 'offset':-np.pi, 'name':'A:FLJ21_pos_sensor'}, - {'range':(-1.57 , 1.57 ), 'noise':0.05, 'hdr_id':22, 'scale':+1, 'offset':-np.pi, 'name':'A:FLJ22_pos_sensor'}, - {'range':(-0.279, 3.419), 'noise':0.05, 'hdr_id':30, 'scale':-1, 'offset':3*np.pi/2, 'name':'A:BLJ30_pos_sensor'}, - {'range':(-2.14 , 2.14 ), 'noise':0.05, 'hdr_id':31, 'scale':+1, 'offset':-np.pi, 'name':'A:BLJ31_pos_sensor'}, - {'range':(-1.57 , 1.57 ), 'noise':0.05, 'hdr_id':32, 'scale':+1, 'offset':-np.pi, 'name':'A:BLJ32_pos_sensor'}, - {'range':(-3.419, 0.279), 'noise':0.05, 'hdr_id':40, 'scale':-1, 'offset':np.pi/2, 'name':'A:BRJ40_pos_sensor'}, - {'range':(-2.14 , 2.14 ), 'noise':0.05, 'hdr_id':41, 'scale':-1, 'offset':np.pi, 'name':'A:BRJ41_pos_sensor'}, - {'range':(-1.57 , 1.57 ), 'noise':0.05, 'hdr_id':42, 'scale':-1, 'offset':np.pi, 'name':'A:BRJ42_pos_sensor'} + {'range':(-3.419, 0.279), 'noise':0.05, 'adr':10, 'scale':+1, 'offset':-3*np.pi/2, 'name':'A:FRJ10_pos_sensor'}, + {'range':(-2.14 , 2.14 ), 'noise':0.05, 'adr':11, 'scale':-1, 'offset':np.pi, 'name':'A:FRJ11_pos_sensor'}, + {'range':(-1.57 , 1.57 ), 'noise':0.05, 'adr':12, 'scale':-1, 'offset':np.pi, 'name':'A:FRJ12_pos_sensor'}, + {'range':(-0.279, 3.419), 'noise':0.05, 'adr':20, 'scale':+1, 'offset':-np.pi/2, 'name':'A:FLJ20_pos_sensor'}, + {'range':(-2.14 , 2.14 ), 'noise':0.05, 'adr':21, 'scale':+1, 'offset':-np.pi, 'name':'A:FLJ21_pos_sensor'}, + {'range':(-1.57 , 1.57 ), 'noise':0.05, 'adr':22, 'scale':+1, 'offset':-np.pi, 'name':'A:FLJ22_pos_sensor'}, + {'range':(-0.279, 3.419), 'noise':0.05, 'adr':30, 'scale':-1, 'offset':3*np.pi/2, 'name':'A:BLJ30_pos_sensor'}, + {'range':(-2.14 , 2.14 ), 'noise':0.05, 'adr':31, 'scale':+1, 'offset':-np.pi, 'name':'A:BLJ31_pos_sensor'}, + {'range':(-1.57 , 1.57 ), 'noise':0.05, 'adr':32, 'scale':+1, 'offset':-np.pi, 'name':'A:BLJ32_pos_sensor'}, + {'range':(-3.419, 0.279), 'noise':0.05, 'adr':40, 'scale':-1, 'offset':np.pi/2, 'name':'A:BRJ40_pos_sensor'}, + {'range':(-2.14 , 2.14 ), 'noise':0.05, 'adr':41, 'scale':-1, 'offset':np.pi, 'name':'A:BRJ41_pos_sensor'}, + {'range':(-1.57 , 1.57 ), 'noise':0.05, 'adr':42, 'scale':-1, 'offset':np.pi, 'name':'A:BRJ42_pos_sensor'} ], 'actuator':[ - {'pos_range':(-0.75 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':10, 'scale':+1, 'offset':-1*(-3*np.pi/2), 'name':'A:FRJ10'}, - {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':11, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ11'}, - {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':12, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ12'}, - {'pos_range':(-0.279, 0.75 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':20, 'scale':+1, 'offset':-1*(-np.pi/2), 'name':'A:FLJ20'}, - {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':21, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ21'}, - {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':22, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ22'}, - {'pos_range':(-0.279, 0.75 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':30, 'scale':-1, 'offset':+1*(3*np.pi/2), 'name':'A:BLJ30'}, - {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':31, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ31'}, - {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':32, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ32'}, - {'pos_range':(-0.75 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':40, 'scale':-1, 'offset':+1*(np.pi/2), 'name':'A:BRJ40'}, - {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':41, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ41'}, - {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':42, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ42'} + {'pos_range':(-0.75 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':10, 'scale':+1, 'offset':-1*(-3*np.pi/2), 'name':'A:FRJ10'}, + {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':11, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ11'}, + {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':12, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ12'}, + {'pos_range':(-0.279, 0.75 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':20, 'scale':+1, 'offset':-1*(-np.pi/2), 'name':'A:FLJ20'}, + {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':21, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ21'}, + {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':22, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ22'}, + {'pos_range':(-0.279, 0.75 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':30, 'scale':-1, 'offset':+1*(3*np.pi/2), 'name':'A:BLJ30'}, + {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':31, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ31'}, + {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':32, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ32'}, + {'pos_range':(-0.75 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':40, 'scale':-1, 'offset':+1*(np.pi/2), 'name':'A:BRJ40'}, + {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':41, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ41'}, + {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':42, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ42'} ] # 'actuator':[ # restricted shoulder - # {'pos_range':(-0.279 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':10, 'scale':+1, 'offset':-1*(-3*np.pi/2), 'name':'A:FRJ10'}, - # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':11, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ11'}, - # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':12, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ12'}, - # {'pos_range':(-0.279, 0.279 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':20, 'scale':+1, 'offset':-1*(-np.pi/2), 'name':'A:FLJ20'}, - # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':21, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ21'}, - # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':22, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ22'}, - # {'pos_range':(-0.279, 0.279 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':30, 'scale':-1, 'offset':+1*(3*np.pi/2), 'name':'A:BLJ30'}, - # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':31, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ31'}, - # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':32, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ32'}, - # {'pos_range':(-0.279 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':40, 'scale':-1, 'offset':+1*(np.pi/2), 'name':'A:BRJ40'}, - # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':41, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ41'}, - # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'hdr_id':42, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ42'} + # {'pos_range':(-0.279 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':10, 'scale':+1, 'offset':-1*(-3*np.pi/2), 'name':'A:FRJ10'}, + # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':11, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ11'}, + # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':12, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:FRJ12'}, + # {'pos_range':(-0.279, 0.279 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':20, 'scale':+1, 'offset':-1*(-np.pi/2), 'name':'A:FLJ20'}, + # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':21, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ21'}, + # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':22, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:FLJ22'}, + # {'pos_range':(-0.279, 0.279 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':30, 'scale':-1, 'offset':+1*(3*np.pi/2), 'name':'A:BLJ30'}, + # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':31, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ31'}, + # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':32, 'scale':+1, 'offset':-1*(-np.pi), 'name':'A:BLJ32'}, + # {'pos_range':(-0.279 , 0.279), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':40, 'scale':-1, 'offset':+1*(np.pi/2), 'name':'A:BRJ40'}, + # {'pos_range':(-0.00 , 1.57 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':41, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ41'}, + # {'pos_range':(-1.57 , 0.00 ), 'vel_range':(-2*np.pi/4, 2*np.pi/4), 'adr':42, 'scale':-1, 'offset':+1*(np.pi), 'name':'A:BRJ42'} # ] } } \ No newline at end of file diff --git a/robohive/envs/tcdm/__init__.py b/robohive/envs/tcdm/__init__.py index 055ac7ac..df1ec829 100644 --- a/robohive/envs/tcdm/__init__.py +++ b/robohive/envs/tcdm/__init__.py @@ -6,13 +6,16 @@ ================================================= """ from robohive.utils import gym; register=gym.register +import collections +import os import numpy as np -import os -import collections + +from robohive.utils.prompt_utils import Prompt, prompt + curr_dir = os.path.dirname(os.path.abspath(__file__)) -print("RoboHive:> Registering TCDM Envs") +prompt("RoboHive:> Registering TCDM Envs", Prompt.ONCE) # Task specification format task_spec = collections.namedtuple('task_spec', diff --git a/robohive/envs/tcdm/playback_mocap.py b/robohive/envs/tcdm/playback_mocap.py index 44ce818a..0c69f1cb 100644 --- a/robohive/envs/tcdm/playback_mocap.py +++ b/robohive/envs/tcdm/playback_mocap.py @@ -23,9 +23,9 @@ args = parser.parse_args() args.end = args.end if args.end is not None else args.start + args.length - # envMyoSuit=gym.make('MyoHandAirplanePass-v0') - envMyoSuit=gym.make(args.sim_name) - physics_myo=envMyoSuit.env.sim + # envMyoSuite=gym.make('MyoHandAirplanePass-v0') + envMyoSuite=gym.make(args.sim_name) + physics_myo=envMyoSuite.unwrapped.sim # jx_mocap coordinates # for i,b in enumerate(BODIES): #print(b,i, physics_myo.sim.named.data.xipos[b]) # print(f"