def _rand_walls(self): wall_bids = {name: self.model.body_name2id(name) for name in ['wall_'+dir for dir in 'nesw']} window_gid = self.model.geom_name2id('west_window') #floor_gid = self.model.geom_name2id('floor') WA_X = Range(-0.2, 0.2) WA_Y = Range(-0.2, 0.2) WA_Z = Range(-0.1, 0.1) WA_R3D = Range3D(WA_X, WA_Y, WA_Z) WI_X = Range(-0.1, 0.1) WI_Y = Range(0, 0) WI_Z = Range(-0.5, 0.5) WI_R3D = Range3D(WI_X, WI_Y, WI_Z) R = Range(0,0) P = Range(-10,10) Y = Range(0,0) RPY_R = Range3D(R,P,Y) #self.model.geom_quat[floor_gid] = jitter_quat(self.START_GEOM_QUAT[floor_gid], 0.01) #self.model.geom_pos[floor_gid] = self.START_GEOM_POS[floor_gid] + [0,0,sample(-0.1,0.1) self.model.geom_quat[window_gid] = sample_quat(RPY_R) #self.model.geom_quat[window_gid] = jitter_quat(self.START_GEOM_QUAT[window_gid], 0.01) self.model.geom_pos[window_gid] = self.START_GEOM_POS[window_gid] + sample_xyz(WI_R3D) for name in wall_bids: gid = wall_bids[name] self.model.body_quat[gid] = jitter_quat(self.START_BODY_QUAT[gid], 0.01) self.model.body_pos[gid] = self.START_BODY_POS[gid] + sample_xyz(WA_R3D)
def _rand_distract(self): PREFIX = 'distract' geom_names = [ name for name in self.model.geom_names if name.startswith(PREFIX) ] # Size range SX = Range(0.01, 0.5) SY = Range(0.01, 0.9) SZ = Range(0.01, 0.5) S3D = Range3D(SX, SY, SZ) # Back range B_PX = Range(-0.5, 2) B_PY = Range(-1.5, 2) B_PZ = Range(0, 3) B_P3D = Range3D(B_PX, B_PY, B_PZ) # Front range F_PX = Range(-2, -0.5) F_PY = Range(-2, 1) F_PZ = Range(0, 0.5) F_P3D = Range3D(F_PX, F_PY, F_PZ) for name in geom_names: gid = self.model.geom_name2id(name) range = B_P3D if np.random.binomial(1, 0.5) else F_P3D self.model.geom_pos[gid] = sample_xyz(range) self.model.geom_quat[gid] = random_quat() self.model.geom_size[gid] = sample_xyz(S3D, mode='logspace') self.model.geom_type[gid] = sample_geom_type() self.model.geom_rgba[gid][-1] = np.random.binomial(1, 0.5)
def _rand_object(self): obj_gid = self.model.geom_name2id('object') table_gid = self.model.geom_name2id('object_table') table_bid = self.model.body_name2id('object_table') xval = self.model.geom_size[table_gid][0] #- self.model.geom_size[obj_gid][0] yval = self.model.geom_size[table_gid][1] #- self.model.geom_size[obj_gid][1] O_X = Range(-xval, xval) O_Y = Range(-yval, yval) O_Z = Range(0, 0) O_R3D = Range3D(O_X, O_Y, O_Z) self.model.geom_pos[obj_gid] = self.START_GEOM_POS[obj_gid] + sample_xyz(O_R3D)
def _rand_object(self): obj_gid = self.sim.model.geom_name2id('object') obj_bid = self.sim.model.geom_name2id('object') table_gid = self.model.geom_name2id('object_table') table_bid = self.model.body_name2id('object_table') obj_pose = self.start_obj_pose.copy() xval = self.model.geom_size[table_gid][ 0] #- self.model.geom_size[obj_gid][0] yval = self.model.geom_size[table_gid][ 1] #- self.model.geom_size[obj_gid][1] O_X = Range(-xval, xval) O_Y = Range(-yval, yval) O_Z = Range(0, 0) O_R3D = Range3D(O_X, O_Y, O_Z) newpos = obj_pose[:3] + sample_xyz(O_R3D) newquat = jitter_quat(obj_pose[3:], 0.1) obj_pose[:3] = newpos obj_pose[3:] = newquat self.sim.data.set_joint_qpos('object:joint', obj_pose)
def _rand_camera(self): """Randomize pos, orientation, and fov of camera FOVY: Kinect2 is 53.8 ASUS is 45 https://www.asus.com/us/3D-Sensor/Xtion_PRO_LIVE/specifications/ http://smeenk.com/kinect-field-of-view-comparison/ """ # Params # FOVY_R = Range(40, 50) X = Range(-2, -1) Y = Range(-0.1, 2) Z = Range(1.5, 2.1) C_R3D = Range3D(X, Y, Z) cam_pos = np.array(sample_xyz(C_R3D)) #L_R3D = rto3d([-0.1, 0.1]) # C_R3D = Range3D([-0.07,0.07], [-0.07,0.07], [-0.07,0.07]) ANG3 = Range3D([-3, 3], [-3, 3], [-3, 3]) # Look approximately at the robot, but then randomize the orientation around that # cam_pos = np.array([-1.75, 0, 1.62]) target_id = self.model.body_name2id(FLAGS.look_at) cam_off = 0 #sample_xyz(L_R3D) target_off = 0 #sample_xyz(L_R3D) quat = look_at(cam_pos + cam_off, self.sim.data.body_xpos[target_id] + target_off) quat = jitter_angle(quat, ANG3) #quat = jitter_quat(quat, 0.01) # cam_pos = np.array(sample_xyz(C_R3D)) self.cam_modder.set_quat('camera1', quat) self.cam_modder.set_pos('camera1', cam_pos) self.cam_modder.set_fovy('camera1', 60)
def _next_camera(self): """Randomize pos, orientation, and fov of camera real camera pos is -1.75, 0, 1.62 FOVY: Kinect2 is 53.8 ASUS is 45 https://www.asus.com/us/3D-Sensor/Xtion_PRO_LIVE/specifications/ http://smeenk.com/kinect-field-of-view-comparison/ """ # Params FOVY_R = Range(40, 50) #X = Range(-3, -1) #Y = Range(-1, 3) #Z = Range(1, 2) #C_R3D = Range3D(X, Y, Z) #cam_pos = sample_xyz(C_R3D) #L_R3D = rto3d([-0.1, 0.1]) C_R3D = Range3D([-0.07, 0.07], [-0.07, 0.07], [-0.07, 0.07]) ANG3 = Range3D([-3, 3], [-3, 3], [-3, 3]) # Look approximately at the robot, but then randomize the orientation around that # linearly interpolate to the next camera every K steps K = 5 goal_cam_pos = self._cam_choices[(self._cam_step // K) + 1] offset = goal_cam_pos - self._curr_cam_pos offset *= (self._cam_step % K) / K self._curr_cam_pos += offset cam_pos = self._curr_cam_pos self._cam_step += 1 # cam_pos = cam_choices[np.random.choice(len(cam_choices))] # cam_pos = get_real_cam_pos(FLAGS.real_data_path) target_id = self.model.body_name2id(FLAGS.look_at) cam_off = 0 #sample_xyz(L_R3D) target_off = 0 #sample_xyz(L_R3D) quat = look_at(cam_pos + cam_off, self.sim.data.body_xpos[target_id] + target_off) quat = jitter_angle(quat, ANG3) #quat = jitter_quat(quat, 0.01) cam_pos += sample_xyz(C_R3D) self.cam_modder.set_quat('camera1', quat) self.cam_modder.set_pos('camera1', cam_pos) self.cam_modder.set_fovy('camera1', 60) # hard code to wide fovy
def _rand_lights(self): """Randomize pos, direction, and lights""" # light stuff #X = Range(-1.5, 1.5) #Y = Range(-1.2, 1.2) #Z = Range(0, 2.8) X = Range(-1.5, -0.5) Y = Range(-0.6, 0.6) Z = Range(1.0, 1.5) LIGHT_R3D = Range3D(X, Y, Z) LIGHT_UNIF = Range3D(Range(0, 1), Range(0, 1), Range(0, 1)) # TODO: also try not altering the light dirs and just keeping them at like -1, or [0, -0.15, -1.0] for i, name in enumerate(self.model.light_names): lid = self.model.light_name2id(name) # random sample 80% of any given light being on if lid != 0: self.light_modder.set_active(name, sample([0, 1]) < 0.8) self.light_modder.set_dir(name, sample_light_dir()) self.light_modder.set_pos(name, sample_xyz(LIGHT_R3D)) #self.light_modder.set_dir(name, sample_xyz(rto3d([-1,1]))) #self.light_modder.set_specular(name, sample_xyz(LIGHT_UNIF)) #self.light_modder.set_diffuse(name, sample_xyz(LIGHT_UNIF)) #self.light_modder.set_ambient(name, sample_xyz(LIGHT_UNIF)) spec = np.array([sample(Range(0.5, 1))] * 3) diffuse = np.array([sample(Range(0.5, 1))] * 3) ambient = np.array([sample(Range(0.5, 1))] * 3) self.light_modder.set_specular(name, spec) self.light_modder.set_diffuse(name, diffuse) self.light_modder.set_ambient(name, ambient) #self.model.light_directional[lid] = sample([0,1]) < 0.2 self.model.light_castshadow[lid] = sample([0, 1]) < 0.5