コード例 #1
0
    def orientation_mat_symmetric_with_rot_plane(self, theta_a, rot_z_theta,
                                                 inv_rot_z_theta, i):
        # Point 'a' orientation euler angle = theta_a
        # euler to rot matrix for transform
        v_r_a = r_tool.euler2mat(theta_a)
        # transform to the O cordinate from S cordinate
        v_r_a_hat = np.matmul(v_r_a, inv_rot_z_theta)

        # Rot matrix to euler for sym
        v_r_a_hat = r_tool.mat2euler(v_r_a_hat)

        # Sym on transformed S's xoz plane (y axis)
        v_r_a_hat[0 - i] = -v_r_a_hat[0 - i]
        v_r_a_hat[2] = -v_r_a_hat[2]

        # euler to rot matrix for transform
        v_r_a_hat = r_tool.euler2mat(v_r_a_hat)
        s_v_r_a = np.matmul(v_r_a_hat, rot_z_theta)

        # Rot matrix to euler for return
        s_v_r_a = r_tool.mat2euler(s_v_r_a)

        #another method --- by ray
        z_theta = r_tool.mat2euler(rot_z_theta)
        inv_z_theta = -z_theta
        theta_a = theta_a - z_theta

        theta_a[0 - i] = -theta_a[0 - i]
        theta_a[2] = -theta_a[2]

        theta_a = theta_a - inv_z_theta

        return s_v_r_a.copy()
コード例 #2
0
    def orientation_mat_symmetric_with_rot_plane(self, theta_a, rot_z_theta,
                                                 inv_rot_z_theta, i):
        '''
        Imagine an object that stands on the left side, but always touches and moves with the plane of symmetry. The plane
        rotates from 0 to 90 degrees. The orientation of this object is the identity. Now think of the reflection. 
        At z=0, they are parallel, but as theta grows, the reflected object must yaw about +z-axis. When theta is 90, we effectively yaw not 90 degress but 180.
        '''

        # Point 'a' orientation euler angle = theta_a
        # euler to rot matrix for transform
        v_r_a = r_tool.euler2mat(theta_a)
        # transform to the O cordinate from S cordinate
        v_r_a_hat = np.matmul(v_r_a, inv_rot_z_theta)

        # Rot matrix to euler for sym
        v_r_a_hat = r_tool.mat2euler(v_r_a_hat)

        # Sym on transformed S's xoz plane (y axis)
        v_r_a_hat[0 - i] = -v_r_a_hat[0 - i]
        v_r_a_hat[2] = -v_r_a_hat[2]

        # euler to rot matrix for transform
        v_r_a_hat = r_tool.euler2mat(v_r_a_hat)
        s_v_r_a = np.matmul(v_r_a_hat, rot_z_theta)

        # Rot matrix to euler for return
        s_v_r_a = r_tool.mat2euler(s_v_r_a)

        return s_v_r_a.copy()
コード例 #3
0
ファイル: fetch_env.py プロジェクト: jiapei100/gym
    def _get_obs(self):
        # positions
        grip_pos = self.sim.data.get_site_xpos('robot0:grip')
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        grip_velp = self.sim.data.get_site_xvelp('robot0:grip') * dt
        robot_qpos, robot_qvel = utils.robot_get_obs(self.sim)
        if self.has_object:
            object_pos = self.sim.data.get_site_xpos('object0')
            # rotations
            object_rot = rotations.mat2euler(self.sim.data.get_site_xmat('object0'))
            # velocities
            object_velp = self.sim.data.get_site_xvelp('object0') * dt
            object_velr = self.sim.data.get_site_xvelr('object0') * dt
            # gripper state
            object_rel_pos = object_pos - grip_pos
            object_velp -= grip_velp
        else:
            object_pos = object_rot = object_velp = object_velr = object_rel_pos = np.zeros(0)
        gripper_state = robot_qpos[-2:]
        gripper_vel = robot_qvel[-2:] * dt  # change to a scalar if the gripper is made symmetric

        if not self.has_object:
            achieved_goal = grip_pos.copy()
        else:
            achieved_goal = np.squeeze(object_pos.copy())
        obs = np.concatenate([
            grip_pos, object_pos.ravel(), object_rel_pos.ravel(), gripper_state, object_rot.ravel(),
            object_velp.ravel(), object_velr.ravel(), grip_velp, gripper_vel,
        ])

        return {
            'observation': obs.copy(),
            'achieved_goal': achieved_goal.copy(),
            'desired_goal': self.goal.copy(),
        }
コード例 #4
0
ファイル: ur5_env.py プロジェクト: HitLyn/gym
    def _get_obs(self):
        # positions
        pusher_pos = self.sim.data.get_site_xpos('pusher')
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        pusher_velp = self.sim.data.get_site_xvelp('pusher') * dt
        robot_qpos, robot_qvel = utils.ur5_get_obs(self.sim)

        object_pos = self.sim.data.get_site_xpos('object0')
        # rotations
        object_rot = rotations.mat2euler(self.sim.data.get_site_xmat('object0'))
        # velocities
        object_velp = self.sim.data.get_site_xvelp('object0') * dt
        object_velr = self.sim.data.get_site_xvelr('object0') * dt
        # pusher state
        object_rel_pos = object_pos - pusher_pos
        object_velp -= pusher_velp

        # achieved_goal = np.squeeze(object_pos.copy())
        achieved_goal = np.concatenate([object_pos.ravel(), object_rot.ravel()])
        obs = np.concatenate([
            pusher_pos, object_pos.ravel(), object_rot.ravel(),
        ])

        return {
            'observation': obs.copy(),
            'achieved_goal': achieved_goal.copy(),
            'desired_goal': self.goal.copy(),
        }
コード例 #5
0
    def _get_obs(self):
        rot_mat = self.sim.data.get_body_xmat('gripper_dummy_heg')
        ft = self.sim.data.sensordata.copy()

        if self.start_flag:
            ft = numpy.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
        self.start_flag = False

        x_pos = self.sim.data.get_body_xpos("gripper_dummy_heg")
        x_mat = self.sim.data.get_body_xmat("gripper_dummy_heg")
        rpy = normalize_rad(rotations.mat2euler(x_mat))

        obs = numpy.concatenate([
            rot_mat.dot(x_pos-self.goal[:3]),
            rot_mat.dot(normalize_rad(rpy-self.goal[3:])), 
            ft.copy()
        ])
        if self.save_data:
            self.fts.append([ft[0], ft[1], ft[2], ft[3], ft[4], ft[5],])
            self.obs.append(obs)
            self.fxs.append(ft[0])
            self.fys.append(ft[1])
            self.fzs.append(ft[2])
            self.poses.append(numpy.concatenate(
                [x_pos-self.goal[:3],
                normalize_rad(rpy-self.goal[3:])]))
        self.last_obs = obs
        return obs
コード例 #6
0
 def get_target_rot(self, pad=True) -> np.ndarray:
     """
     Get target rotation in euler angles for all objects.
     """
     return self._get_target_obs(
         lambda n: rotations.mat2euler(self.mj_sim.data.get_body_xmat(n)),
         pad=pad)
コード例 #7
0
ファイル: fetch_env.py プロジェクト: yuqingd/sim2real2sim
    def _get_obs(self):
        # positions
        grip_pos = self.sim.data.get_site_xpos('robot0:grip')
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        grip_velp = self.sim.data.get_site_xvelp('robot0:grip') * dt
        robot_qpos, robot_qvel = utils.robot_get_obs(self.sim)
        if self.has_object:
            object_pos = self.sim.data.get_site_xpos('object0')
            # rotations
            object_rot = rotations.mat2euler(self.sim.data.get_site_xmat('object0'))
            # velocities
            object_velp = self.sim.data.get_site_xvelp('object0') * dt
            object_velr = self.sim.data.get_site_xvelr('object0') * dt
            # gripper state
            object_rel_pos = object_pos - grip_pos
            object_velp -= grip_velp
        else:
            object_pos = object_rot = object_velp = object_velr = object_rel_pos = np.zeros(0)
        gripper_state = robot_qpos[-2:]
        gripper_vel = robot_qvel[-2:] * dt  # change to a scalar if the gripper is made symmetric

        if not self.has_object:
            achieved_goal = grip_pos.copy()
        else:
            achieved_goal = np.squeeze(object_pos.copy())
        obs = np.concatenate([
            grip_pos, object_pos.ravel(), object_rel_pos.ravel(), gripper_state, object_rot.ravel(),
            object_velp.ravel(), object_velr.ravel(), grip_velp, gripper_vel,
        ])
        obs_noobj = np.concatenate([
            grip_pos, gripper_state, grip_velp, gripper_vel, self.goal.copy()
        ])
        success = np.array(self._is_success(achieved_goal, self.goal))
        state = np.concatenate([obs.copy(), self.goal.copy()])
        real_world = 1.0 if self.real_world else 0.0
        if self.use_vision:
            img_size = 64
            img = self.sim.render(width=img_size, height=img_size, camera_name="external_camera_0")[::-1]
            state = {
                "state": obs_noobj,
                "pixels": img,
                'observation': state,
                'grip_pos': grip_pos.copy(),
                'obj_pos': object_pos.copy(),
                'achieved_goal': achieved_goal.copy(),
                'desired_goal': self.goal.copy(),
                'success': success,
                'real_world': np.array(real_world),
            }
        else:
            state = {
                "state" : state,
                'observation': state,
                'achieved_goal': achieved_goal.copy(),
                'desired_goal': self.goal.copy(),
                'success': success,
                'real_world': np.array(real_world),
            }

        return state
コード例 #8
0
ファイル: fetch_generate_env.py プロジェクト: HitLyn/gym
    def _get_obs(self):
        # positions
        grip_pos = self.sim.data.get_site_xpos('robot0:grip')
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        grip_velp = self.sim.data.get_site_xvelp('robot0:grip') * dt
        robot_qpos, robot_qvel = utils.robot_get_obs(self.sim)
        if self.has_object:
            object_pos = self.sim.data.get_site_xpos('object0')
            # rotations
            object_rot = rotations.mat2euler(
                self.sim.data.get_site_xmat('object0'))
            # velocities
            object_velp = self.sim.data.get_site_xvelp('object0') * dt
            object_velr = self.sim.data.get_site_xvelr('object0') * dt
            # gripper state
            object_rel_pos = object_pos - grip_pos
            object_velp -= grip_velp
        else:
            object_pos = object_rot = object_velp = object_velr = object_rel_pos = np.zeros(
                0)

        if not self.has_object:
            achieved_goal = grip_pos.copy()
        else:
            achieved_goal = self.sim.data.get_joint_qpos('object0:joint')

        obs = grip_pos

        return {
            'observation': obs.copy(),
            'achieved_goal': achieved_goal.copy(),
            'desired_goal': self.goal.copy(),
        }
コード例 #9
0
    def _get_obs(self):
        # positions
        rot_mat = self.sim.data.get_body_xmat('gripper_dummy_heg')
        ft = self.sim.data.sensordata.copy()
        if self.ft_noise:
            ft += numpy.random.randn(6, ) * self.ft_std
        if self.ft_drift:
            ft += self.ft_drift_val
        ft[1] -= 0.350 * 9.81  # nulling in initial position
        x_pos = self.sim.data.get_body_xpos("gripper_dummy_heg")
        x_pos += numpy.random.uniform(-self.pos_std[:3], self.pos_std[:3])
        x_pos += self.pos_drift_val[:3]

        #x_quat = self.sim.data.get_body_xquat("gripper_dummy_heg")
        x_mat = self.sim.data.get_body_xmat("gripper_dummy_heg")
        rpy = normalize_rad(
            rotations.mat2euler(x_mat) +
            numpy.random.uniform(-self.pos_std[3:], self.pos_std[3:]) +
            self.pos_drift_val[3:])

        obs = np.concatenate([
            rot_mat.dot(x_pos - self.goal[:3]),
            rot_mat.dot(normalize_rad(rpy - self.goal[3:])),
            ft.copy()
        ])

        self.last_obs = obs
        return obs
コード例 #10
0
    def _get_obs(self):
        obs = fetch_env.FetchEnv._get_obs(self)

        grip_pos = self.sim.data.get_site_xpos('robot0:grip')
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        grip_velp = self.sim.data.get_site_xvelp('robot0:grip') * dt

        hook_pos = self.sim.data.get_site_xpos('hook')
        hook_pos = self._noisify_obs(hook_pos, noise=0.025)
        # rotations
        hook_rot = rotations.mat2euler(self.sim.data.get_site_xmat('hook'))
        hook_rot = self._noisify_obs(hook_rot, noise=0.025)
        # velocities
        hook_velp = self.sim.data.get_site_xvelp('hook') * dt
        hook_velr = self.sim.data.get_site_xvelr('hook') * dt
        # gripper state
        hook_rel_pos = hook_pos - grip_pos
        hook_velp -= grip_velp

        hook_observation = np.concatenate(
            [hook_pos, hook_rot, hook_velp, hook_velr, hook_rel_pos])

        obs['observation'] = np.concatenate(
            [obs['observation'], hook_observation])
        obs['observation'][3:5] = self._noisify_obs(obs['observation'][3:5],
                                                    noise=0.025)
        obs['observation'][6:9] = obs['observation'][3:6] - obs[
            'observation'][:3]  #object_pos - grip_pos
        obs['observation'][12:15] = self._noisify_obs(obs['observation'][6:9],
                                                      noise=0.025)
        return obs
コード例 #11
0
    def _get_obs(self):
        # positions
        grip_pos = self.sim.data.get_site_xpos('robot0:grip')
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        grip_velp = self.sim.data.get_site_xvelp('robot0:grip') * dt
        robot_qpos, robot_qvel = utils.robot_get_obs(self.sim)
        if self.has_object:
            object_pos = self.sim.data.get_site_xpos('object0')
            # rotations
            object_rot = rotations.mat2euler(self.sim.data.get_site_xmat('object0'))
            # velocities
            object_velp = self.sim.data.get_site_xvelp('object0') * dt
            object_velr = self.sim.data.get_site_xvelr('object0') * dt
            # gripper state
            object_rel_pos = object_pos - grip_pos
            object_velp -= grip_velp
        else:
            object_pos = object_rot = object_velp = object_velr = object_rel_pos = np.zeros(0)
        gripper_state = robot_qpos[-2:]
        gripper_vel = robot_qvel[-2:] * dt  # change to a scalar if the gripper is made symmetric

        if not self.has_object:
            achieved_goal = grip_pos.copy()
        else:
            achieved_goal = np.squeeze(object_pos.copy())
        obs = np.concatenate([
            grip_pos, object_pos.ravel(), object_rel_pos.ravel(), gripper_state, object_rot.ravel(),
            object_velp.ravel(), object_velr.ravel(), grip_velp, gripper_vel,
        ])

        return {
            'observation': obs.copy(),
            'achieved_goal': achieved_goal.copy(),
            'desired_goal': self.goal.copy(),
        }
コード例 #12
0
    def _get_obs(self):
        # print("trying to get obs")
        ee_pos = self.sim.data.get_site_xpos('grip')
        obj_pos = self.sim.data.get_site_xpos('box')[:self.space_dim]
        target_pos = self.sim.data.get_site_xpos('target')[:self.space_dim]

        # print("targetpos", target_pos, "qpos", self.data.get_joint_qpos('target'))
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        # ee vel
        ee_velp = self.sim.data.get_site_xvelp('grip') * dt

        # gripper state
        gripper_state_l = self.data.get_joint_qpos("l_gripper_l_finger_joint")
        gripper_state_r = self.data.get_joint_qpos("l_gripper_r_finger_joint")

        # obj rel pos
        obj_rel_pos = obj_pos - ee_pos
        # obj rotation
        object_rot = rotations.mat2euler(self.sim.data.get_site_xmat('box'))
        # obj vel
        object_velp = self.sim.data.get_site_xvelp('box') * dt
        object_velr = self.sim.data.get_site_xvelr('box') * dt

        # gripper
        gripper_state = np.array([gripper_state_l, gripper_state_r])
        gripper_vel = gripper_state * dt

        # things missing obj_rel_pos, obj_rot, obj_velr
        state = np.concatenate([
            ee_pos, obj_pos, obj_rel_pos, gripper_state, object_rot,
            object_velp, object_velr, ee_velp, gripper_vel, target_pos
        ])
        return state
コード例 #13
0
    def _get_obs(self):
        # positions
        grip_pos = self.sim.data.get_site_xpos('robot0:grip')
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        grip_velp = self.sim.data.get_site_xvelp('robot0:grip') * dt

        robot_qpos, robot_qvel = utils.robot_get_obs(self.sim)

        # gripper state
        gripper_state = robot_qpos[-2:]
        gripper_vel = robot_qvel[-2:] * dt  # change to a scalar if the gripper is made symmetric

        obs_stack = grip_pos, gripper_vel, gripper_state, grip_velp,

        for obj_key in self.obs_keys or self.obj_keys:
            obj_key, *attrs = obj_key.split('@')
            obs_dict = dict(
                pos=self.sim.data.get_site_xpos(obj_key),
                rot=rotations.mat2euler(self.sim.data.get_site_xmat(obj_key)),
                rel_vel=self.sim.data.get_site_xvelp(obj_key) * dt - grip_velp,
                vel_rot=self.sim.data.get_site_xvelr(obj_key) * dt,
            )
            obs_dict['rel_pos'] = obs_dict['pos'] - grip_pos

            obs_stack += tuple([obs_dict[k] for k in attrs or obs_dict.keys()])

        achieved_goal = self.sim.data.get_site_xpos(self.goal_key)

        return {
            'observation': np.concatenate(obs_stack).copy(),
            'achieved_goal': achieved_goal.copy(),
            'desired_goal': self.goal.copy(),
        }
コード例 #14
0
    def _get_obs(self):
        # positions
        grip_pos = self.sim.data.get_site_xpos('robot0:grip')
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        grip_velp = self.sim.data.get_site_xvelp('robot0:grip') * dt
        robot_qpos, robot_qvel = utils.robot_get_obs(self.sim)
        if self.has_object:
            object_pos = self.sim.data.get_site_xpos('object0')
            # rotations
            object_rot = rotations.mat2euler(
                self.sim.data.get_site_xmat('object0'))
            # velocities
            object_velp = self.sim.data.get_site_xvelp('object0') * dt
            object_velr = self.sim.data.get_site_xvelr('object0') * dt
            # gripper state
            object_rel_pos = object_pos - grip_pos
            object_velp -= grip_velp
        else:
            object_pos = object_rot = object_velp = object_velr = object_rel_pos = np.zeros(
                0)
        gripper_state = robot_qpos[-2:]
        gripper_vel = robot_qvel[
            -2:] * dt  # change to a scalar if the gripper is made symmetric

        if not self.has_object:
            achieved_goal = grip_pos.copy()
        else:
            achieved_goal = np.squeeze(object_pos.copy())
        # obs = np.concatenate([
        #     grip_pos, object_pos.ravel(), object_rel_pos.ravel(), gripper_state, object_rot.ravel(),
        #     object_velp.ravel(), object_velr.ravel(), grip_velp, gripper_vel,
        # ])
        if self.obs_with_time:
            obs = np.concatenate([
                object_pos[:2], grip_pos[:2], object_pos[2:3], grip_pos[2:3],
                object_rel_pos.ravel(), gripper_state,
                object_rot.ravel(),
                object_velp.ravel(),
                object_velr.ravel(), grip_velp, gripper_vel,
                np.array([self.timestep / self.episode_len])
            ])
        else:
            obs = np.concatenate([
                object_pos[:2],
                grip_pos[:2],
                object_pos[2:3],
                grip_pos[2:3],
                object_rel_pos.ravel(),
                gripper_state,
                object_rot.ravel(),
                object_velp.ravel(),
                object_velr.ravel(),
                grip_velp,
                gripper_vel,
            ])

        return obs.copy()
コード例 #15
0
    def _get_obs(self):
        rot_mat = self.sim.data.get_body_xmat('gripper_dummy_heg')
        ft = self.sim.data.sensordata.copy()

        if self.start_flag:
            ft = numpy.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
        self.start_flag = False

        ft[1] -= self.gripper_mass * 9.81
        ft[:3] += numpy.random.normal(self.f_mean_si, self.f_std_si, 3)
        ft[:3] += numpy.random.uniform(-self.f_var_dr_uncor,
                                       self.f_var_dr_uncor, 3)
        ft[:3] += self.f_corr
        ft[3:] += numpy.random.normal(self.t_mean_si, self.t_std_si, 3)
        ft[3:] += numpy.random.uniform(-self.t_var_dr_uncor,
                                       self.t_var_dr_uncor, 3)
        ft[3:] += self.t_corr

        x_pos = self.sim.data.get_body_xpos("gripper_dummy_heg")
        x_pos += numpy.random.normal(self.pos_mean_si, self.pos_std_si, 3)
        x_pos += numpy.random.uniform(-self.pos_var_dr_uncor,
                                      self.pos_var_dr_uncor, 3)
        x_pos += self.pos_corr
        x_mat = self.sim.data.get_body_xmat("gripper_dummy_heg")
        #print(rotations.mat2euler(x_mat))
        rpy = normalize_rad(
            rotations.mat2euler(x_mat) +
            numpy.random.normal(self.rot_mean_si, self.rot_std_si, 3) *
            (numpy.pi / 180) + numpy.random.uniform(-self.rot_var_dr_uncor,
                                                    self.rot_var_dr_uncor, 3) *
            (numpy.pi / 180) + self.rot_corr * (numpy.pi / 180))

        obs = numpy.concatenate([
            rot_mat.dot(x_pos - self.goal[:3]),
            rot_mat.dot(normalize_rad(rpy - self.goal[3:])),
            ft.copy()
        ])
        if self.save_data:
            self.fts.append([
                ft[0],
                ft[1],
                ft[2],
                ft[3],
                ft[4],
                ft[5],
            ])
            self.obs.append(obs)
            self.fxs.append(ft[0])
            self.fys.append(ft[1])
            self.fzs.append(ft[2])
            self.poses.append(
                numpy.concatenate([
                    x_pos - self.goal[:3],
                    normalize_rad(rpy - self.goal[3:])
                ]))
        self.last_obs = obs
        return obs
コード例 #16
0
    def _get_obs(self):
        # positions
        grip_pos = self.sim.data.get_site_xpos('robot0:grip')
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        grip_velp = self.sim.data.get_site_xvelp('robot0:grip') * dt
        robot_qpos, robot_qvel = utils.robot_get_obs(self.sim)

        object_pos, object_rot, object_velp, object_velr, object_rel_pos = [], [], [], [], []

        gripper_state = robot_qpos[-2:]
        gripper_vel = robot_qvel[-2:] * dt  # change to a scalar if the gripper is made symmetric

        num_blocks = self.num_objs - 2
        obs = np.concatenate([[num_blocks], grip_pos, gripper_state, grip_velp, gripper_vel])
        block_features = None
        block_indices = list(range(num_blocks))
        # np.random.shuffle(block_indices)
        for i in block_indices:
            obj_name = 'object{}'.format(i)
            temp_pos = self.sim.data.get_site_xpos(obj_name)
            # rotations
            temp_rot = rotations.mat2euler(self.sim.data.get_site_xmat(obj_name))
            # velocities
            temp_velp = self.sim.data.get_site_xvelp(obj_name) * dt
            temp_velr = self.sim.data.get_site_xvelr(obj_name) * dt
            # gripper state
            temp_rel_pos = temp_pos - grip_pos
            temp_velp -= grip_velp

            block_obs = np.concatenate([temp_pos.ravel(), 
                temp_rel_pos.ravel(), temp_rot.ravel(),
                temp_velp.ravel(), temp_velr.ravel(), 
                one_hot_color(self.obj_colors[i+2])
                ])

            block_features = block_obs.shape[0]

            obs = np.concatenate([obs, block_obs])

        padding = np.zeros(block_features * (self.max_num_blocks - num_blocks))
        obs = np.concatenate([obs, padding])

        assert(self._check_goal())
        achieved_goal = self.achieved_goal.copy().ravel()
        max_goal_len = (self.max_num_blocks + 2) ** 2
        achieved_goal = np.append(achieved_goal, 
            np.zeros(max_goal_len - achieved_goal.shape[0]))
        desired_goal = np.append(self.goal.copy(), 
            np.zeros(max_goal_len - self.goal.shape[0]))

        return {
            'observation': obs.copy(),
            'achieved_goal': achieved_goal.copy(),
            'desired_goal': desired_goal.copy(),
        }
コード例 #17
0
ファイル: fetch_env.py プロジェクト: wangcongrobot/gym-1.14.0
    def _get_obs(self):
        # positions
        # grip_pos - Position of the gripper given in 3 positional elements and 4 rotational elements
        grip_pos = self.sim.data.get_site_xpos('robot0:grip')
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        # grip_velp - The velocity of gripper moving
        grip_velp = self.sim.data.get_site_xvelp('robot0:grip') * dt
        robot_qpos, robot_qvel = utils.robot_get_obs(self.sim)
        if self.has_object:
            # object_pos - Position of the object with respect to the world frame
            object_pos = self.sim.data.get_site_xpos('object0')
            # rotations object_rot - Yes. That is the orientation of the object with respect to world frame.
            object_rot = rotations.mat2euler(
                self.sim.data.get_site_xmat('object0'))
            # velocities object_velp - Positional velocity of the object with respect to the world frame
            object_velp = self.sim.data.get_site_xvelp('object0') * dt
            # object_velr - Rotational velocity of the object with respect to the world frame
            object_velr = self.sim.data.get_site_xvelr('object0') * dt
            # gripper state
            # object_rel_pos - Position of the object relative to the gripper
            object_rel_pos = object_pos - grip_pos
            object_velp -= grip_velp
        else:
            object_pos = object_rot = object_velp = object_velr = object_rel_pos = np.zeros(
                0)
        # gripper_state - No. It's not 0/1 signal, it is a float value and varies from 0 to 0.2
        # for fetch robot. This varied gripper state helps in grasping different sized
        # object with different strengths.
        # gripper_state - The quantity to measure the opening of gripper
        gripper_state = robot_qpos[-2:]
        # gripper_vel - The velocity of gripper opening/closing
        gripper_vel = robot_qvel[
            -2:] * dt  # change to a scalar if the gripper is made symmetric

        if not self.has_object:
            achieved_goal = grip_pos.copy()
        else:
            achieved_goal = np.squeeze(object_pos.copy())
        obs = np.concatenate([
            grip_pos,
            object_pos.ravel(),
            object_rel_pos.ravel(),
            gripper_state,
            object_rot.ravel(),
            object_velp.ravel(),
            object_velr.ravel(),
            grip_velp,
            gripper_vel,
        ])

        return {
            'observation': obs.copy(),
            'achieved_goal': achieved_goal.copy(),
            'desired_goal': self.goal.copy(),
        }
コード例 #18
0
    def _get_obs(self):
        # positions
        rot_mat = self.sim.data.get_body_xmat('gripper_dummy_heg')
        ft = self.sim.data.sensordata.copy()
        #if self.ft_noise:
        #    ft += numpy.random.randn(6,) * self.ft_std
        #if self.ft_drift:
        #    ft += self.ft_drift_val
        ft[1] -= 0.588 * 9.81  # nulling in initial position

        ft_si_noise = numpy.concatenate([
            numpy.random.normal(0.0, self.f_std_si, 3),
            numpy.random.normal(0.0, self.t_std_si, 3)
        ])

        ft_dr_uncor_noise = numpy.concatenate([
            numpy.random.uniform(-self.f_var_dr_uncor, self.f_var_dr_uncor, 3),
            +numpy.random.uniform(-self.t_var_dr_uncor, self.t_var_dr_uncor, 3)
        ])

        ft_noise = ft_si_noise + ft_dr_uncor_noise + self.ft_dr_cor_noise
        ft += ft_noise

        x_pos = self.sim.data.get_body_xpos("gripper_dummy_heg")
        pos_si_noise = numpy.random.normal(0.0, self.pos_std_si, 3)
        pos_dr_uncor_noise = numpy.random.uniform(-self.pos_var_dr_uncor,
                                                  self.pos_var_dr_uncor, 3)

        pos_noise = pos_si_noise + pos_dr_uncor_noise + self.pos_dr_cor_noise
        x_pos += pos_noise

        #x_pos += numpy.random.uniform(-self.pos_std[:3], self.pos_std[:3])
        #x_pos += self.pos_drift_val[:3]

        #x_quat = self.sim.data.get_body_xquat("gripper_dummy_heg")

        x_mat = self.sim.data.get_body_xmat("gripper_dummy_heg")

        rot_si_noise = numpy.random.normal(0.0, self.rot_std_si,
                                           3) * (numpy.pi / 180)
        rot_dr_uncor_noise = numpy.random.uniform(-self.rot_var_dr_uncor,
                                                  self.rot_var_dr_uncor,
                                                  3) * (numpy.pi / 180)
        rot_noise = rot_si_noise + rot_dr_uncor_noise + self.rot_dr_cor_noise

        rpy = normalize_rad(rotations.mat2euler(x_mat) + rot_noise)

        obs = np.concatenate([
            rot_mat.dot(x_pos - self.goal[:3]),
            rot_mat.dot(normalize_rad(rpy - self.goal[3:])),
            ft.copy()
        ])

        self.last_obs = obs
        return obs
コード例 #19
0
 def _is_success(self, achieved_goal, desired_goal):
     rot_mat = self.sim.data.get_body_xmat('gripper_dummy_heg')
     x_pos = self.sim.data.get_body_xpos("gripper_dummy_heg")
     x_mat = self.sim.data.get_body_xmat("gripper_dummy_heg")
     rpy = normalize_rad(rotations.mat2euler(x_mat))
     obs = np.concatenate([
         rot_mat.dot(x_pos-self.goal[:3]), rot_mat.dot(normalize_rad(rpy-self.goal[3:]))
     ])
     d = goal_distance(obs, desired_goal)
     self.distances.append(d)
     return (d < self.distance_threshold).astype(np.float32)
コード例 #20
0
    def _get_obs(self):
        # positions
        grip_pos = self.sim.data.get_site_xpos('robot0:grip')
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        grip_velp = self.sim.data.get_site_xvelp('robot0:grip') * dt
        robot_qpos, robot_qvel = utils.robot_get_obs(self.sim)
        if self.has_object:
            object_pos = self.sim.data.get_site_xpos('object0')
            # rotations
            object_rot = rotations.mat2euler(
                self.sim.data.get_site_xmat('object0'))
            # velocities
            object_velp = self.sim.data.get_site_xvelp('object0') * dt
            object_velr = self.sim.data.get_site_xvelr('object0') * dt
            # gripper state
            object_rel_pos = object_pos - grip_pos
            object_velp -= grip_velp
        else:
            object_pos = object_rot = object_velp = object_velr = object_rel_pos = np.zeros(
                0)
        gripper_state = robot_qpos[-2:]
        gripper_vel = robot_qvel[
            -2:] * dt  # change to a scalar if the gripper is made symmetric

        if not self.has_object:
            achieved_goal = grip_pos.copy()
        else:
            achieved_goal = np.squeeze(object_pos.copy())
        if self.observation_type == "image":
            #can parameterize kwargs for the rendering options later
            # obs = np.transpose(self.render("rgb_array", 64, 64), (2,0,1))
            # temporary send 1d, which will be reshaped by model.
            # obs = self.render("rgb_array", 64, 64).flatten()
            obs = np.transpose(self.render("rgb_array", 64, 64),
                               (2, 0, 1)).flatten()

        else:
            obs = np.concatenate([
                grip_pos,
                object_pos.ravel(),
                object_rel_pos.ravel(),
                gripper_state,
                object_rot.ravel(),
                object_velp.ravel(),
                object_velr.ravel(),
                grip_velp,
                gripper_vel,
            ])
        return {
            'observation': obs.copy(),
            'achieved_goal': achieved_goal.copy(),
            'desired_goal': self.goal.copy(),
        }
コード例 #21
0
    def _get_obs_len(self):

        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        # positions
        grip_pos = self.sim.data.get_site_xpos('robot0:grip')
        grip_velp = self.sim.data.get_site_xvelp('robot0:grip') * dt

        robot_qpos, robot_qvel = self.sim.data.qpos, self.sim.data.qvel
        object_pos, object_rot, object_velp, object_velr = ([]
                                                            for _ in range(4))
        object_rel_pos = []

        if self.n_objects > 0:
            for n_o in range(self.n_objects):
                oname = 'object{}'.format(n_o)
                this_object_pos = self.sim.data.get_site_xpos(oname)
                # rotations
                this_object_rot = rotations.mat2euler(
                    self.sim.data.get_site_xmat(oname))
                # velocities
                this_object_velp = self.sim.data.get_site_xvelp(oname) * dt
                this_object_velr = self.sim.data.get_site_xvelr(oname) * dt
                # gripper state
                this_object_rel_pos = this_object_pos - grip_pos
                this_object_velp -= grip_velp

                object_pos = np.concatenate([object_pos, this_object_pos])
                object_rot = np.concatenate([object_rot, this_object_rot])
                object_velp = np.concatenate([object_velp, this_object_velp])
                object_velr = np.concatenate([object_velr, this_object_velr])
                object_rel_pos = np.concatenate(
                    [object_rel_pos, this_object_rel_pos])
        else:
            object_pos = object_rot = object_velp = object_velr = object_rel_pos = np.array(
                np.zeros(3))

        gripper_state = robot_qpos[-2:]
        gripper_vel = robot_qvel[
            -2:] * dt  # change to a scalar if the gripper is made symmetric

        obs = np.concatenate([
            grip_pos,
            object_pos.ravel(),
            object_rel_pos.ravel(),
            gripper_state,
            object_rot.ravel(),
            object_velp.ravel(),
            object_velr.ravel(),
            grip_velp,
            gripper_vel,
        ])
        print("obs len: ", len(obs))
        return len(obs)
コード例 #22
0
    def _get_obs(self):
        obs = fetch_env.FetchEnv._get_obs(self)

        grip_pos = self.sim.data.get_site_xpos('robot0:grip')
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        grip_velp = self.sim.data.get_site_xvelp('robot0:grip') * dt

        hook_pos = self.sim.data.get_site_xpos('hook')
        # rotations
        hook_rot = rotations.mat2euler(self.sim.data.get_site_xmat('hook'))
        # velocities
        hook_velp = self.sim.data.get_site_xvelp('hook') * dt
        hook_velr = self.sim.data.get_site_xvelr('hook') * dt
        # gripper state
        hook_rel_pos = hook_pos - grip_pos
        hook_velp -= grip_velp

        hook_observation = np.concatenate(
            [hook_pos, hook_rot, hook_velp, hook_velr, hook_rel_pos])

        obs['observation'] = np.concatenate(
            [obs['observation'], hook_observation])

        hook_pos = self.sim.data.get_site_xpos('hooktwo')
        # rotations
        hook_rot = rotations.mat2euler(self.sim.data.get_site_xmat('hooktwo'))
        # velocities
        hook_velp = self.sim.data.get_site_xvelp('hooktwo') * dt
        hook_velr = self.sim.data.get_site_xvelr('hooktwo') * dt
        # gripper state
        hook_rel_pos = hook_pos - grip_pos
        hook_velp -= grip_velp

        hook_observation = np.concatenate(
            [hook_pos, hook_rot, hook_velp, hook_velr, hook_rel_pos])

        obs['observation'] = np.concatenate(
            [obs['observation'], hook_observation])

        return obs
コード例 #23
0
    def _get_obs(self):
        '''
        Gets the observation of the previous action
        
        ____________
        Returns:
            dictionary containing:
                observation
                achieved_goal
                desired_goal
        '''
        grip_pos = self.sim.data.get_site_xpos('robot0:gripper')
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        grip_velp = self.sim.data.get_site_xvelp('robot0:gripper') * dt
        robot_qpos, robot_qvel = utils.robot_get_obs(self.sim)
        if self.has_object:
            object_pos = self.sim.data.get_site_xpos('object0')
            # Rotations
            object_rot = rotations.mat2euler(
                self.sim.data.get_site_xmat('object0'))
            # Velocities
            object_velp = self.sim.data.get_site_xvelp('object0') * dt
            object_velr = self.sim.data.get_site_xvelr('object0') * dt
            # Gripper state
            object_rel_pos = object_pos - grip_pos
            object_velp -= grip_velp
        else:
            object_pos = object_rot = object_velp = object_velr = object_rel_pos = np.zeros(
                3)
        gripper_state = robot_qpos[-2:]
        # Change to a scalar if the gripper is symmetric
        gripper_vel = robot_qvel[-2:] * dt

        if not self.has_object:
            achieved_goal = np.squeeze(
                self.sim.data.get_site_xpos('robot0:gripper').copy())
        else:
            achieved_goal = np.squeeze(object_pos.copy())
        obs = np.concatenate([
            grip_pos,
            object_pos.ravel(),
            object_rel_pos.ravel(), gripper_state,
            object_rot.ravel(),
            object_velp.ravel(),
            object_velr.ravel(), grip_velp, gripper_vel
        ])

        return {
            'observation': obs.copy(),
            'achieved_goal': achieved_goal.copy(),
            'desired_goal': self.goal.copy()
        }
コード例 #24
0
ファイル: block_env.py プロジェクト: tgfred/flow_rl
    def _set_action(self, action):
        assert action.shape == (self.n_actions,)

        self.action = action

        # energy correction
        h = self.sim.data.get_site_xpos('tar')[2]
        if h < 0.8:
            self.energy_corrected = False
        # each time the target crosses the z == 0.8 line its energy gets corrected
        if not self.energy_corrected:
            if h > 0.8:
                self.sim.data.set_joint_qvel('tar:z', self.sqrt_2_g * np.sqrt(self.initial_h - h))
                self.give_reflection_reward = True
                self.energy_corrected = True

        if not self.no_movement:
            a = np.zeros([8], dtype=np.float32)
            a[0] = 0.015 * action[0]
            a[1] = 0.015 * action[1]
            euler = rotations.mat2euler(self.sim.data.get_site_xmat('robot0:grip'))
            a_4 = euler[0]
            a_5 = euler[1]

            # adjusting z position to a plane (otherwise the arm has a downwards drift)
            if self.sim.data.get_site_xpos('robot0:grip')[2] < 0.705:
                a[2] = 0.665 - self.sim.data.get_site_xpos('robot0:grip')[2]
            else:
                a[2] = 0.665 - self.sim.data.get_site_xpos('robot0:grip')[2]
            a[4] = 0.015 * action[2]
            a[5] = 0.015 * action[3]

            # Restricting rotation action:

            if a_4 > 0.3 and action[2] > 0.:
                a[4] = 0.
            if a_4 < -0.3 and action[2] < 0.:
                a[4] = 0.

            if a_5 > 0.3 and action[3] > 0.:
                a[5] = 0.
            if a_5 < -0.3 and action[3] < 0.:
                a[5] = 0.

            # Apply action to simulation.

            utils.ctrl_set_action(self.sim, a)
            utils.mocap_set_action(self.sim, a)

        else:
            pass
コード例 #25
0
    def _get_obs(self):
        # positions
        ft = self.sim.data.sensordata
        x_pos = self.sim.data.get_body_xpos("gripper_dummy_heg")
        x_quat = self.sim.data.get_body_xquat("gripper_dummy_heg")
        x_mat = self.sim.data.get_body_xmat("gripper_dummy_heg")
        rpy = normalize_rad(rotations.mat2euler(x_mat))

        obs = np.concatenate(
            [x_pos - self.goal[:3],
             normalize_rad(rpy - self.goal[3:]), ft])

        self.last_obs = obs
        return obs
コード例 #26
0
def _get_obs_gripper_at(env, position):
    gripper_target = np.array([position[0], position[1], position[2]])

    # positions
    grip_pos = env.env.env.sim.data.get_site_xpos('robot0:grip')
    dt = env.env.env.sim.nsubsteps * env.env.env.sim.model.opt.timestep
    grip_velp = env.env.env.sim.data.get_site_xvelp('robot0:grip') * dt
    robot_qpos, robot_qvel = utils.robot_get_obs(env.env.env.sim)
    if env.env.env.has_object:
        object_pos = env.env.env.sim.data.get_site_xpos('object0')
        # rotations
        object_rot = rotations.mat2euler(
            env.env.env.sim.data.get_site_xmat('object0'))
        # velocities
        object_velp = env.env.env.sim.data.get_site_xvelp('object0') * dt
        object_velr = env.env.env.sim.data.get_site_xvelr('object0') * dt
        # gripper state
        object_rel_pos = object_pos - grip_pos
        object_velp -= grip_velp
    else:
        object_pos = object_rot = object_velp = object_velr = object_rel_pos = np.zeros(
            0)
    gripper_state = robot_qpos[-2:]
    gripper_vel = robot_qvel[
        -2:] * dt  # change to a scalar if the gripper is made symmetric

    if not env.env.env.has_object:
        achieved_goal = grip_pos.copy()
    else:
        achieved_goal = np.squeeze(object_pos.copy())

    obs = np.concatenate([
        grip_pos,
        object_pos.ravel(),
        object_rel_pos.ravel(),
        gripper_state,
        object_rot.ravel(),
        object_velp.ravel(),
        object_velr.ravel(),
        grip_velp,
        gripper_vel,
    ])

    # env.env.env._get_image('obs.png')

    return {
        'observation': obs.copy(),
        'achieved_goal': achieved_goal.copy(),
        'desired_goal': env.env.env.goal.copy(),
    }
コード例 #27
0
    def _get_obs(self):
        # positions
        rot_mat = self.sim.data.get_body_xmat('gripper_dummy_heg')
        ft = self.sim.data.sensordata.copy()

        x_pos = self.sim.data.get_body_xpos("gripper_dummy_heg")
        x_mat = self.sim.data.get_body_xmat("gripper_dummy_heg")
        rpy = normalize_rad(rotations.mat2euler(x_mat))

        obs = np.concatenate([
            rot_mat.dot(x_pos-self.goal[:3]), rot_mat.dot(normalize_rad(rpy-self.goal[3:])), ft.copy()
        ])
        #self.sim_poses.append(numpy.concatenate([x_pos-self.goal[:3], normalize_rad(rpy-self.goal[3:])]))
        self.last_obs = obs
        return obs
コード例 #28
0
    def publish_observations(self):
        '''Function that computes and publishes the observations given the pose, rotation matrix and force torque data'''
        msg = CustomVector()

        x_mat = self.sim.data.get_body_xmat("gripper_dummy_heg")
        pos = self.final_pose
        rpy = normalize_rad(rotations.mat2euler(x_mat))

        msg.data = numpy.concatenate([
            x_mat.dot(pos),
            x_mat.dot(normalize_rad(rpy - self.goal[3:])),
            self.ft_values.copy()
        ])

        self.observation_publisher.publish(msg)
コード例 #29
0
    def _get_obs(self):

        # TODO: set position that has to reach target (object or on body), set to achieved goal
        # here: body_pos is the position that has to reach target
        # positions
        grip_pos = self.sim.data.get_body_xpos(self.finder_name)
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        grip_velp = self.sim.data.get_body_xvelp(self.finder_name) * dt
        # for the following to work, all joints associated with the robot have to start with "robot"
        robot_qpos, robot_qvel = utils.robot_get_obs(self.sim)

        # since object
        object_pos = self.sim.data.get_site_xpos('object0')
        # rotations
        object_rot = rotations.mat2euler(
            self.sim.data.get_site_xmat('object0'))
        # velocities
        object_velp = self.sim.data.get_site_xvelp('object0') * dt
        object_velr = self.sim.data.get_site_xvelr('object0') * dt
        # gripper state
        object_rel_pos = object_pos - grip_pos
        object_velp -= grip_velp
        gripper_state = robot_qpos[-1:]
        gripper_vel = robot_qvel[
            -1:] * dt  # changed to a scalar since the gripper is made symmetric [-3:] else
        achieved_goal = np.squeeze(object_pos.copy())
        #if not object_pos[2] == 0.: # TODO: had changes in her/rollout.py (see todo)
        #    achieved_goal = np.zeros_like(object_pos.copy())
        #    achieved_goal.fill(np.nan)

        obs = np.concatenate([
            grip_pos,
            object_pos.ravel(),
            object_rel_pos.ravel(),
            gripper_state,
            object_rot.ravel(),
            object_velp.ravel(),
            object_velr.ravel(),
            grip_velp,
            gripper_vel,
        ])

        return {
            'observation': obs.copy(),
            'achieved_goal': achieved_goal.copy(),
            'desired_goal': self.goal.copy(),
        }
コード例 #30
0
    def get_obs(self):
        gripper_pos = self.gripper_position
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        grip_velp = self.sim.data.get_site_xvelp('grip') * dt

        qpos = self.sim.data.qpos
        qvel = self.sim.data.qvel

        object_pos = self.object_position
        object_rot = rotations.mat2euler(
            self.sim.data.get_site_xmat('object0'))
        object_velp = self.sim.data.get_site_xvelp('object0') * dt
        object_velr = self.sim.data.get_site_xvelr('object0') * dt
        object_rel_pos = object_pos - gripper_pos
        object_velp -= grip_velp
        grasped = self.has_object
        obs = np.concatenate([
            gripper_pos,
            object_pos.ravel(),  # TODO remove object_pos (reveals task id)
            object_rel_pos.ravel(),
            object_rot.ravel(),
            object_velp.ravel(),
            object_velr.ravel(),
            grip_velp,
            qpos,
            qvel,
            [float(grasped), self.gripper_state],
        ])

        achieved_goal = self._achieved_goal_fn(self)
        desired_goal = self._desired_goal_fn(self)

        achieved_goal_qpos = np.concatenate((achieved_goal, [1, 0, 0, 0]))
        self.sim.data.set_joint_qpos('achieved_goal:joint', achieved_goal_qpos)
        desired_goal_qpos = np.concatenate((desired_goal, [1, 0, 0, 0]))
        self.sim.data.set_joint_qpos('desired_goal:joint', desired_goal_qpos)

        return {
            'observation': obs.copy(),
            'achieved_goal': achieved_goal,
            'desired_goal': desired_goal,
            'gripper_state': self.gripper_state,
            'gripper_pos': gripper_pos.copy(),
            'has_object': grasped,
            'object_pos': object_pos.copy(),
            'joints': self.sim.data.qpos.copy()
        }
コード例 #31
0
ファイル: pick_and_place_env.py プロジェクト: gntoni/garage
    def get_current_obs(self):
        grip_pos = self.sim.data.get_site_xpos('grip')
        dt = self.sim.nsubsteps * self.sim.model.opt.timestep
        grip_velp = self.sim.data.get_site_xvelp('grip') * dt

        qpos = self.sim.data.qpos
        qvel = self.sim.data.qvel

        object_pos = self.sim.data.get_geom_xpos('object0')
        object_rot = rotations.mat2euler(
            self.sim.data.get_geom_xmat('object0'))
        object_velp = self.sim.data.get_geom_xvelp('object0') * dt
        object_velr = self.sim.data.get_geom_xvelr('object0') * dt
        object_rel_pos = object_pos - grip_pos
        object_velp -= grip_velp

        achieved_goal = np.squeeze(object_pos.copy())
        if self._control_method == 'position_control':
            obs = np.concatenate([
                grip_pos,
                object_pos.ravel(),
                object_rel_pos.ravel(),
                object_rot.ravel(),
                object_velp.ravel(),
                object_velr.ravel(),
                grip_velp,
            ])
        elif self._control_method == 'torque_control':
            obs = np.concatenate([
                object_pos.ravel(),
                object_rel_pos.ravel(),
                object_rot.ravel(),
                object_velp.ravel(),
                object_velr.ravel(),
                qpos,
                qvel,
            ])
        else:
            raise NotImplementedError

        return {
            'observation': obs.copy(),
            'achieved_goal': achieved_goal.copy(),
            'desired_goal': self._goal,
            'gripper_pos': grip_pos,
        }